Не большая экскурсия по макросам в Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

есть несколько элементарных вопросов. Которые надеюсь не заставят потратить много времени. Нужен макрос в Excel что бы делал следующее.

1) Есть 2 страницы в Excel. На 2-ой страницы размещены данные. На первой только кнопка. При нажатии кнопки должна происходить выборка по столбцам. Как это сделать понятия не имею.
К примеру: на второй странице есть столбец Фамилия(я знаю его порядковый номер столбца, предположил столбец A): и при нажатии на кнопку на первой странице , в ячейку B4 на первой странице , должны вывестись количество всех Кузнецовых.

2) Есть на второй странице столбец дата_рождения, и есть на первой странице ячейка B3 с любой датой. и при нажатии той же кнопки, в ячейку на первой странице в B5 должно вывестись кол-во Кузнецовых, младше указанной даты.

3) При нажатии той же кнопки, должно в ячейку B6 вычесть из ячейки В4-B5, и данные записать в ячейку.

4) В ячейку N4 на первой странице, должен записать количество фамилий, который заканчиваются на "ОВА".

5) В ячейку С4, должно записаться кол-во людей с фамилией "Кузнецов" и именем "Сергей", с учетом что на второй старнице этого файла, есть столбей H, в котором список имен.

Огромное спасибо за ранее
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:

Код: Выделить всё

Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
Sheets("Лист1").Range("A1:С100").AutoFilter Field:=3, Criteria1:=">01.01.1979", Operator:=xlAnd
Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:

Код: Выделить всё

Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"

Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.

макрос обязателен, потому что один и тот же макрос должен много довольно делать... Фильтром тут не выкрутиться
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):

Код: Выделить всё

Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"

вот ещё бы было бы здорово, понять как определить ячейку, куда вносить полученные данные выборки. Мне кажется этот код не считает количество. он просто выводит всех кузнецовых
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:

Код: Выделить всё

Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
Sheets("Лист1").Range("A1:С100").AutoFilter Field:=3, Criteria1:=">01.01.1979", Operator:=xlAnd

Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.
а что за оператор Operator:=xlAnd ?
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:

Код: Выделить всё

Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
Sheets("Лист1").Range("A1:С100").AutoFilter Field:=3, Criteria1:=">01.01.1979", Operator:=xlAnd

Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.
кстати нужна проверка даты рождения. не с датой в текст программы. А с датой. которую я могу меня в указанной ячейке
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Код: Выделить всё

Sub ПодсчётИскомойФамилии()
    Dim f As String
    Dim n As Long
    Dim r As Long
    f = InputBox("Введите искомую фамилию")
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Sheets("Лист1").Cells(r, 1).Value = f Then n = n + 1  ' 1 - это номер столбца для поиска
    Next r
    MsgBox "Количество фамилий «" & f & "» - " & n
End Sub

Код: Выделить всё

Sub ПодсчётОкончанияФамилий()
    Dim f As String
    Dim n As Long
    Dim r As Long
    f = InputBox("Введите искомое окончание фамилии")
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Right(Sheets("Лист1").Cells(r, 1).Value, Len(f)) = f Then n = n + 1 ' 1 - это номер столбца для поиска
    Next r
    MsgBox "Количество фамилий с окончанием «" & f & "» - " & n
End Sub

Код: Выделить всё

Sub ПодсчётДат()
    Dim nDR As Long
    Dim kDR As Long
    Dim n As Long
    Dim r As Long
    nDR = Application.InputBox("Введите начальную дату для подсчёта", Type:=1)
    kDR = Application.InputBox("Введите конечную дату для подсчёта", Type:=1)
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Sheets("Лист1").Cells(r, 3).Value >= nDR And Sheets("Лист1").Cells(r, 3).Value <= kDR Then n = n + 1 ' 3 - это номер столбца для поиска
    Next r
    MsgBox "Количество найденных дат в искомом промежутке с " & Format(nDR, "dd mmmm yyyy") & "г. по " & Format(kDR, "dd mmmm yyyy") & "г. - " & n
End Sub
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):

Код: Выделить всё

Sub ПодсчётИскомойФамилии()
    Dim f As String
    Dim n As Long
    Dim r As Long
    f = InputBox("Введите искомую фамилию")
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Sheets("Лист1").Cells(r, 1).Value = f Then n = n + 1  ' 1 - это номер столбца для поиска
    Next r
    MsgBox "Количество фамилий «" & f & "» - " & n
End Sub
это будет окно выскакивать? а просто что бы при нажатии кнопочки, нельзы что бы подсчет сам шел, а мне только в нужную ячейку данные только пришли?
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Тогда, так:

Код: Выделить всё

Sub ПодсчётИскомойФамилии()
    Dim f As String
    Dim n As Long
    Dim r As Long
    f = "Кузнецов"
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Sheets("Лист1").Cells(r, 3).Value = f Then n = n + 1 ' 3 - это номер столбца для поиска
    Next r
    Sheets("Лист2").Cells(1, 1).Value = n ' укажите нужное имя листа, номер строки и столбца ячейки (Cells), куда нужно записать подсчитанные данные
End Sub
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

AlexZZZ писал(а):Тогда, так:

Код: Выделить всё

Sub ПодсчётИскомойФамилии()
    Dim f As String
    Dim n As Long
    Dim r As Long
    f = "Кузнецов"
    n = 0
    For r = 1 To 100 ' 1-начальная строка поиска, 100 - конечная
        If Sheets("Лист1").Cells(r, 3).Value = f Then n = n + 1 ' 3 - это номер столбца для поиска
    Next r
    Sheets("Лист2").Cells(1, 1).Value = n ' укажите нужное имя листа, номер строки и столбца ячейки (Cells), куда нужно записать подсчитанные данные
End Sub

уау !!! это то что нужно !!! вообще супер !!
вот осталось узнать, как считать количество фамилий, заканчивающихся на "ОВА"
Ответить