Не большая экскурсия по макросам в Excel
Модератор: Naeel Maqsudov
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
есть несколько элементарных вопросов. Которые надеюсь не заставят потратить много времени. Нужен макрос в Excel что бы делал следующее.
1) Есть 2 страницы в Excel. На 2-ой страницы размещены данные. На первой только кнопка. При нажатии кнопки должна происходить выборка по столбцам. Как это сделать понятия не имею.
К примеру: на второй странице есть столбец Фамилия(я знаю его порядковый номер столбца, предположил столбец A): и при нажатии на кнопку на первой странице , в ячейку B4 на первой странице , должны вывестись количество всех Кузнецовых.
2) Есть на второй странице столбец дата_рождения, и есть на первой странице ячейка B3 с любой датой. и при нажатии той же кнопки, в ячейку на первой странице в B5 должно вывестись кол-во Кузнецовых, младше указанной даты.
3) При нажатии той же кнопки, должно в ячейку B6 вычесть из ячейки В4-B5, и данные записать в ячейку.
4) В ячейку N4 на первой странице, должен записать количество фамилий, который заканчиваются на "ОВА".
5) В ячейку С4, должно записаться кол-во людей с фамилией "Кузнецов" и именем "Сергей", с учетом что на второй старнице этого файла, есть столбей H, в котором список имен.
Огромное спасибо за ранее
1) Есть 2 страницы в Excel. На 2-ой страницы размещены данные. На первой только кнопка. При нажатии кнопки должна происходить выборка по столбцам. Как это сделать понятия не имею.
К примеру: на второй странице есть столбец Фамилия(я знаю его порядковый номер столбца, предположил столбец A): и при нажатии на кнопку на первой странице , в ячейку B4 на первой странице , должны вывестись количество всех Кузнецовых.
2) Есть на второй странице столбец дата_рождения, и есть на первой странице ячейка B3 с любой датой. и при нажатии той же кнопки, в ячейку на первой странице в B5 должно вывестись кол-во Кузнецовых, младше указанной даты.
3) При нажатии той же кнопки, должно в ячейку B6 вычесть из ячейки В4-B5, и данные записать в ячейку.
4) В ячейку N4 на первой странице, должен записать количество фамилий, который заканчиваются на "ОВА".
5) В ячейку С4, должно записаться кол-во людей с фамилией "Кузнецов" и именем "Сергей", с учетом что на второй старнице этого файла, есть столбей H, в котором список имен.
Огромное спасибо за ранее
Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:
Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.
Код: Выделить всё
Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
Sheets("Лист1").Range("A1:С100").AutoFilter Field:=3, Criteria1:=">01.01.1979", Operator:=xlAnd
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
AlexZZZ писал(а):Самое простое, это использовать автофильтр. Тогда и макрос не потребуется. Но если нужно обязательно с макросом, тогда примерно так:
Код: Выделить всё
Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
Укажите только правильное название нужного листа, диапазона автофильтра, номера его поля (AutoFilter Field) и критерия выборки.
макрос обязателен, потому что один и тот же макрос должен много довольно делать... Фильтром тут не выкрутиться
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
AlexZZZ писал(а):Код: Выделить всё
Sheets("Лист2").Range("A1:С100").AutoFilter Field:=1, Criteria1:="Кузнецов"
вот ещё бы было бы здорово, понять как определить ячейку, куда вносить полученные данные выборки. Мне кажется этот код не считает количество. он просто выводит всех кузнецовых
-
- Сообщения: 163
- Зарегистрирован: 05 мар 2009, 11:27
а что за оператор Operator:=xlAnd ?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) и критерия выборки.
-
- Сообщения: 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) и критерия выборки.
Код: Выделить всё
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
-
- Сообщения: 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
Тогда, так:
Код: Выделить всё
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
-
- Сообщения: 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
уау !!! это то что нужно !!! вообще супер !!
вот осталось узнать, как считать количество фамилий, заканчивающихся на "ОВА"