Все разобрался
» Excel VBA (часть 3)
Цитата:
народ, подскажите как решить такую задачу:
есть 200 листов в книге. как подсчитать количество листов с определенными условиями (условно если на листе А1=1, А2=2 - тогда листы считаются)
уважаемый asbo в соседней ветке подсказал следующий код
Код: Sub sb_SheetsQty()
Dim i% ' k%
Dim bTmp As Boolean
Dim sSht As Variant
For Each sSht In Sheets
bTmp = True ' вставить код со своими условиями проверки
i = i - bTmp
Next
Debug.Print i
End Sub
msmih, дык, если вот это "А1=1, А2=2", то
bTmp = (Cells(1, 1).Value = 1 And Cells(2, 1).Value = 2)
Лист будет считаться, если и ячейка A1 = 1, и ячейка A2 = 2
Я там добавил в ответ прикидку варианта с формулами.
bTmp = (Cells(1, 1).Value = 1 And Cells(2, 1).Value = 2)
Лист будет считаться, если и ячейка A1 = 1, и ячейка A2 = 2
Я там добавил в ответ прикидку варианта с формулами.
Цитата:
msmih, дык, если вот это "А1=1, А2=2", то
bTmp = (Cells(1, 1).Value = 1 And Cells(2, 1).Value = 2)
Лист будет считаться, если и ячейка A1 = 1, и ячейка A2 = 2
Я там добавил в ответ прикидку варианта с формулами.
что-то не так делаю... результатом выводит общее количество листов
msmih
Это моя ошибка :(
Правильное обращение к ячейке: sSht.Cells(1, 1).Value
Нет под руками Excel.
Добавлено:
bTmp = (sSht.Cells(1, 1).Value = 1 And sSht.Cells(2, 1).Value = 2)
Это моя ошибка :(
Правильное обращение к ячейке: sSht.Cells(1, 1).Value
Нет под руками Excel.
Добавлено:
bTmp = (sSht.Cells(1, 1).Value = 1 And sSht.Cells(2, 1).Value = 2)
Цитата:
bTmp = (sSht.Cells(1, 1).Value = 1 And sSht.Cells(2, 1).Value = 2)
как сказал великий Матроскин: "Заработало!!!!"
громадное спасибо за помощь!
кто подскажет куда поделся SetFocus у textBoх? Этот Excel 2010 начинает действовать мне на нервы
borMMAN, дык и в 2003 он тоже поделся :)
Это если на лист контролы бросать. А если на форму - то будет вам и белка, будет и свисток :)
Это если на лист контролы бросать. А если на форму - то будет вам и белка, будет и свисток :)
Добрый день, Коллеги.
Нужно средствами VBA удалить модуль, подключаю библиотеку - Microsoft Visual Basic for Applications Extensibility 5.3. Пишу код:
Код:
Dim vbc As VBComponent
Set vbc = ThisWorkbook.VBProject.VBComponents("Module1")
ThisWorkbook.VBProject.VBComponents.Remove vbc
Set vbc = Nothing
Нужно средствами VBA удалить модуль, подключаю библиотеку - Microsoft Visual Basic for Applications Extensibility 5.3. Пишу код:
Код:
Dim vbc As VBComponent
Set vbc = ThisWorkbook.VBProject.VBComponents("Module1")
ThisWorkbook.VBProject.VBComponents.Remove vbc
Set vbc = Nothing
Подскажите возможно ли такое сделать макросом, либо какими другими средствами:
Надо подсчитать количество ячеек в столбце по определенному условию, и сохранить эти данные в текстовый файл.
К примеру надо подсчитать количество ячеек с числом 10 в столбце 1:
1 2 3 4 5
1 10 45
2 70 12
3 10 11
4 10 10
5 20 21
На выходе хотелось бы видеть файл 1.txt с содержимым: 3
Надо подсчитать количество ячеек в столбце по определенному условию, и сохранить эти данные в текстовый файл.
К примеру надо подсчитать количество ячеек с числом 10 в столбце 1:
1 2 3 4 5
1 10 45
2 70 12
3 10 11
4 10 10
5 20 21
На выходе хотелось бы видеть файл 1.txt с содержимым: 3
Amrek, прежде всего надо разделить задачу на две части и определиться - как делать - средствами Excel или VBA.
Если Excel - подсчитать, значение нао тдельный лист, экспортировать. Подсчет в смежной теме, в хэлпах, в инете разжеван уже до блевотины.
Если VBA - циклом по ячейкам с проверкой на условие. Вывод в текстовый файл - FileSystemObject.
Если Excel - подсчитать, значение нао тдельный лист, экспортировать. Подсчет в смежной теме, в хэлпах, в инете разжеван уже до блевотины.
Если VBA - циклом по ячейкам с проверкой на условие. Вывод в текстовый файл - FileSystemObject.
Вообще это бы надо автоматически собирать информацию допустим каждый час
Amrek, вообще-то, тут не гестапо - клещами тянуть военную тайну.
К VBA клоните? Я девочка что ли, чтобы меня за тохес подталкивать к ответу на Вами же заданный вопрос? Да и ответил я по обоим вариантам.
Таймера хочеца, чтобы не грузил проц, которого в VBA нету? Дык, пишите сразу мыло, куда скинуть проект и в какие сроки уложиться. Бзв, а я ничего за это должен еще не останусь?
Что у Вас по предложенной схеме VBA не получается? А что уже сделано?
Из шапки:
Цитата:
К VBA клоните? Я девочка что ли, чтобы меня за тохес подталкивать к ответу на Вами же заданный вопрос? Да и ответил я по обоим вариантам.
Таймера хочеца, чтобы не грузил проц, которого в VBA нету? Дык, пишите сразу мыло, куда скинуть проект и в какие сроки уложиться. Бзв, а я ничего за это должен еще не останусь?
Что у Вас по предложенной схеме VBA не получается? А что уже сделано?
Из шапки:
Цитата:
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Есть вот такой запрос на добавление:
cmd.CommandText = "INSERT INTO TABL(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) VALUES ('" & arrStvor(bytString) & "','" & IIf(IsEmpty(arr(bytString, 1)) Or (arr(bytString, 1)) = 0, Null, arr(bytString, 1))"
Бьюсь с одной проблемой уже 2 день. Значит поля в базе (NUM5, NUM10...) имеют тип Double, запрет на ввод 0, и могут быть пустыми. Так вот, передаваемые данные могут содержать 0 и Empty. Для этого сделал проверку в запросе IIF. Если оно срабатывает, то должен передаваться NULL, НО!! хитрожопый Excel передает какой-то свой Null, зарезервированный тип данных, и при передаче этого запроса получаю "несоответствие типов данных условия отбора". Я недаром написал NULL и Null, так как первый вариант проходит на ура, НО часть запроса где НУЛЛ используется находится в '"& & "' (есесно что бы читались переменные), поэтому написать NULL в верхнем регистре я не могу, Excel его сразу переводит в Null. Что я только уже не подставлял - результата нет.
Я в курсе как это все организовать по-другому, но мне надо именно таким образом.
Народ выручайте что подставить шоб Access не возбухал?
cmd.CommandText = "INSERT INTO TABL(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) VALUES ('" & arrStvor(bytString) & "','" & IIf(IsEmpty(arr(bytString, 1)) Or (arr(bytString, 1)) = 0, Null, arr(bytString, 1))"
Бьюсь с одной проблемой уже 2 день. Значит поля в базе (NUM5, NUM10...) имеют тип Double, запрет на ввод 0, и могут быть пустыми. Так вот, передаваемые данные могут содержать 0 и Empty. Для этого сделал проверку в запросе IIF. Если оно срабатывает, то должен передаваться NULL, НО!! хитрожопый Excel передает какой-то свой Null, зарезервированный тип данных, и при передаче этого запроса получаю "несоответствие типов данных условия отбора". Я недаром написал NULL и Null, так как первый вариант проходит на ура, НО часть запроса где НУЛЛ используется находится в '"& & "' (есесно что бы читались переменные), поэтому написать NULL в верхнем регистре я не могу, Excel его сразу переводит в Null. Что я только уже не подставлял - результата нет.
Я в курсе как это все организовать по-другому, но мне надо именно таким образом.
Народ выручайте что подставить шоб Access не возбухал?
1. Причем здесь Excel?
2. Баланс скобок
3. NULL не видно в упор
4. Запрос - это строка, т.е. надо "Null" писать в ней буквами, а не передавать откуда-то.
5. Непонятно - где функции запроса, а где Экселя.
6. Предполагаю, что д.б. так:
cmd.CommandText = "" & _
"INSERT INTO " & _
"TABL(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) " & _
"VALUES (" & _
Chr(39) & arrStvor(bytString) & Chr(39) & ", " & _
Chr(39) & IIf(IsEmpty(arr(bytString, 1)) Or arr(bytString, 1) = 0, "Null", arr(bytString, 1)) & Chr(39) & _
")"
2. Баланс скобок
3. NULL не видно в упор
4. Запрос - это строка, т.е. надо "Null" писать в ней буквами, а не передавать откуда-то.
5. Непонятно - где функции запроса, а где Экселя.
6. Предполагаю, что д.б. так:
cmd.CommandText = "" & _
"INSERT INTO " & _
"TABL(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) " & _
"VALUES (" & _
Chr(39) & arrStvor(bytString) & Chr(39) & ", " & _
Chr(39) & IIf(IsEmpty(arr(bytString, 1)) Or arr(bytString, 1) = 0, "Null", arr(bytString, 1)) & Chr(39) & _
")"
Да нет же повторяю, что проходит только "чистый" NULL например:
cmd.CommandText = "INSERT INTO SERET(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) " & _
"VALUES ('3-1','200',Null,Null,Null,Null,Null,Null,'121')"
Никакие другие варианты не принимаются, типа "Null" или 'Null' и много других вариантов, что нарыл в нете. Насчет верхнего регистра звеняюсь, прокатывает любой, но только без скобок. Но как я писал в конструкции IFF Null опознается как зарезервированный тип, а в этом варианте (('3-1','200',Null,Null,Null,Null,Null,Null,'121')") он передается как текст, Но без скобок и Access его принимает нормально. Собственно вариантов решения пока вижу 2: 1) убрать каким то способом скобки 2) подставить переменную с типом Null "понятным" Access.
Хелп
cmd.CommandText = "INSERT INTO SERET(STVSKV, NUM5, NUM10, NUM15, NUM20, NUM25, NUM30, AVGS, DATA) " & _
"VALUES ('3-1','200',Null,Null,Null,Null,Null,Null,'121')"
Никакие другие варианты не принимаются, типа "Null" или 'Null' и много других вариантов, что нарыл в нете. Насчет верхнего регистра звеняюсь, прокатывает любой, но только без скобок. Но как я писал в конструкции IFF Null опознается как зарезервированный тип, а в этом варианте (('3-1','200',Null,Null,Null,Null,Null,Null,'121')") он передается как текст, Но без скобок и Access его принимает нормально. Собственно вариантов решения пока вижу 2: 1) убрать каким то способом скобки 2) подставить переменную с типом Null "понятным" Access.
Хелп
borMMAN, что "нет"? Оставь лирику.
Я же специально понумеровал вопросы. Тяжело по порядку ответить?
7. Покажи всю строку, как строку, которую Акс воспринимает нормально.
8. Покажи те места, которые формируются Excelем
9. Покажи ф-цию, которая эти места формирует.
Уверен, как только сделаешь - сам поймешь.
Я же специально понумеровал вопросы. Тяжело по порядку ответить?
7. Покажи всю строку, как строку, которую Акс воспринимает нормально.
8. Покажи те места, которые формируются Excelем
9. Покажи ф-цию, которая эти места формирует.
Уверен, как только сделаешь - сам поймешь.
borMMAN, суть проблемы я понял. Причину вижу. Но я не волшебник - ты не понимаешь меня :( Или я что-то не то спрашиваю... А я не умею объяснять на пальцах. Ответь, плз, попунктно на 7, 8, 9 и буквально - как написано. Я тогда смогу пальцем на предполагаемую ошибку указать. Или еще вопросы задам.
Добавлено:
И я же написал уже - Акс хочет строку - так и дай ему ее. Нафига ты ему переменную подсовываешь с неявным преобразованием?
Добавлено:
И я же написал уже - Акс хочет строку - так и дай ему ее. Нафига ты ему переменную подсовываешь с неявным преобразованием?
Решение найдено
Появилась еще одна проблемка Возникла необходимость собрать быстро коды строк по критерию отбора. Суть ниже:
Код Данные Критерий 1 Критерий 2
Код Данные Критерий 1 Критерий 2
InSe0F
критерий выбирает пользователь через автофильтр?
критерий выбирает пользователь через автофильтр?
нет зачем, можно через условие функции если такое возможно...
Мне по сути надо функцию в котрой при заданных условиях и диапазонах строк будет происходит выбор, я пробовал сделать через СУММЕСЛИМН но там сумма ж а мне надо через запятые... но логика как раз похожая
Мне по сути надо функцию в котрой при заданных условиях и диапазонах строк будет происходит выбор, я пробовал сделать через СУММЕСЛИМН но там сумма ж а мне надо через запятые... но логика как раз похожая
InSe0F
Вот пользовательская функция, пользуй.
Public Function Find(ColumnCrit As Byte, Crit As String, ColumnFind As Byte, Delimiter As String)
i = 1
Do While Cells(i, ColumnCrit) <> ""
If Cells(i, ColumnCrit) = Crit Then Find = Find & Delimiter & Cells(i, ColumnFind)
i = i + 1
Loop
Find = Replace(Find, Delimiter, "", 1, 1)
End Function
Вот пользовательская функция, пользуй.
Public Function Find(ColumnCrit As Byte, Crit As String, ColumnFind As Byte, Delimiter As String)
i = 1
Do While Cells(i, ColumnCrit) <> ""
If Cells(i, ColumnCrit) = Crit Then Find = Find & Delimiter & Cells(i, ColumnFind)
i = i + 1
Loop
Find = Replace(Find, Delimiter, "", 1, 1)
End Function
что-то не получаетяся .. или я не правильно юзаю ее
в стоблце Студенты № должно вывестись как раз то что надо
http://d.pr/VMO0
в стоблце Студенты № должно вывестись как раз то что надо
http://d.pr/VMO0
Скачать не могу, на работе.
Нажми Alt+F11, добавь модуль (insert-module), вставь код. Затем в пустой ячейке жми Вставка функции и выбери из категории Определенные пользователем функцию Find.
Укажи:
ColumnCrit- номер столбца с критериями (например 3)
Crit - критерий (Вася)
ColumnFind - номер столбца с кодами (1)
Delimiter - знак разделения (|, запятая или другое)
Нажми Alt+F11, добавь модуль (insert-module), вставь код. Затем в пустой ячейке жми Вставка функции и выбери из категории Определенные пользователем функцию Find.
Укажи:
ColumnCrit- номер столбца с критериями (например 3)
Crit - критерий (Вася)
ColumnFind - номер столбца с кодами (1)
Delimiter - знак разделения (|, запятая или другое)
так как вставить и куда я понимаю
вот с номерами столбцов было не понятно, но теперю исопльзую так
=FindAllEntry(СТОЛБЕЦ(тСтуденты[Кафедра]);[@Кафедра];СТОЛБЕЦ(тСтуденты[№]);",")
правда теперь вместо ошибки стал выдавать просто 0
вот с номерами столбцов было не понятно, но теперю исопльзую так
=FindAllEntry(СТОЛБЕЦ(тСтуденты[Кафедра]);[@Кафедра];СТОЛБЕЦ(тСтуденты[№]);",")
правда теперь вместо ошибки стал выдавать просто 0
Я делал судя по примеру выше, где таблица. "Код" это ячейка A1, соответственно и в моем примере в скобках - номера столбцов.
Цитата:
ColumnCrit- номер столбца с критериями (например 3)
Crit - критерий (Вася)
ColumnFind - номер столбца с кодами (1)
Delimiter - знак разделения (|, запятая или другое)
вот прямо так на этой таблице и сделал
в отдельной ячейке ввожу (на данном листе)
=Find(3;"Вася";1;"|")
по этой таблице - выдает "0" ((
(картинко http://d.pr/JlzG)
вообще мне надо чтобы работало по диапазонам чтобы я мог указывать на другом листе ссылки...
Цитата:
по этой таблице - выдает "0" ((
Странно, у меня все работает, посмотри в дебуге значения какие.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
Предыдущая тема: VS 2010
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.