помогите создать отчет в Excel с помощью VBA
Имеется книга Excel. В ней 50 страниц. На каждой страничке располагаетя таблица. Структура таблиц на каждой странице идентична. На каждом листе есть столбец "H" в который заносятся числовые данные. Алгоритм следующий. Рассмотрим таблицу в листе "1". Необходима сделать проверку столбца "H" (допустим проверка столбца "H" с 10-20 строку ). Если например в столбце "H" в строке "14"(клетка H14) найдены числовые данные то эти бы данные копировались на лист "отчет" в клетку A1(причем пустые клетки должны пропускатся). А так же чтобы из листа "1" из строки 14 копировлась клетки A14 и B14 в лист "отчет" соответственно в клетки B1 и C1. Далее например найдены числовые данные (Лист 1) в клетке H17 соответственно данные должны копироватся в Лист "отчет" H17>> A2, A17>> B2, B17>>C2. и т.д. И все это нужно проделать со всеми 50 листами.
Задача не самая трудная. Дело в том что я сам не очень знаком с синтаксисом и функциями VBA поэтому у меня это вызывает затруднения.
Хотя бы объясните на примере 1 листа все остальное сам сделаю.
И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?
Заранее всем спасибо за ответы.
В общем необходимо создать что то типа отчета в Excel с помощью VBA.
Имеется книга Excel. В ней 50 страниц. На каждой страничке располагаетя таблица. Структура таблиц на каждой странице идентична. На каждом листе есть столбец "H" в который заносятся числовые данные. Алгоритм следующий. Рассмотрим таблицу в листе "1". Необходима сделать проверку столбца "H" (допустим проверка столбца "H" с 10-20 строку ). Если например в столбце "H" в строке "14"(клетка H14) найдены числовые данные то эти бы данные копировались на лист "отчет" в клетку A1(причем пустые клетки должны пропускатся). А так же чтобы из листа "1" из строки 14 копировлась клетки A14 и B14 в лист "отчет" соответственно в клетки B1 и C1. Далее например найдены числовые данные (Лист 1) в клетке H17 соответственно данные должны копироватся в Лист "отчет" H17>> A2, A17>> B2, B17>>C2. и т.д. И все это нужно проделать со всеми 50 листами.
Задача не самая трудная. Дело в том что я сам не очень знаком с синтаксисом и функциями VBA поэтому у меня это вызывает затруднения.
Хотя бы объясните на примере 1 листа все остальное сам сделаю.
И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?
Заранее всем спасибо за ответы.
Например, так:
Sub Report()
Dim curSheet As Worksheet
Dim curRow, targetRow As Integer
targetRow = 1
'Цикл по всем листам книги
For Each curSheet In Workbooks("Книга1").Worksheets
If curSheet.Name <> "Отчет" Then
curSheet.Activate
For curRow = 1 To 10
If IsNumeric(Cells(curRow, 8 ).Value) And Cells(curRow, 8 ).Value <> Empty Then
Worksheets("Отчет").Cells(targetRow, 1 ).Value = Cells(curRow, 8 ).Value
Worksheets("Отчет").Cells(targetRow, 2 ).Value = Cells(curRow, 1 ).Value
Worksheets("Отчет").Cells(targetRow, 3 ).Value = Cells(curRow, 2 ).Value
targetRow = targetRow + 1
End If
Next curRow
End If
Next curSheet
Worksheets("Отчет").Activate
End Sub
Например, так:
Sub Report()
Dim curSheet As Worksheet
Dim curRow, targetRow As Integer
targetRow = 1
For Each curSheet In Workbooks("Книга1").Worksheets
If curSheet.Name <> "Отчет" Then
curSheet.Activate
For curRow = 1 To 10
If IsNumeric(Cells(curRow, 8 ).Value) And Cells(curRow, 8 ).Value <> Empty Then
Worksheets("Отчет").Cells(targetRow, 1 ).Value = Cells(curRow, 8 ).Value
Worksheets("Отчет").Cells(targetRow, 2 ).Value = Cells(curRow, 1 ).Value
Worksheets("Отчет").Cells(targetRow, 3 ).Value = Cells(curRow, 2 ).Value
targetRow = targetRow + 1
End If
Next curRow
End If
Next curSheet
Worksheets("Отчет").Activate
End Sub
большое спасибо! сейчас буду пытаться что-нибудь сделать!
for each cursheet in workbooks("книга1").worksheets
что не так?
и еще вопрос как организовать цикл например чтобы проверка была только с 1 по 10 лист.
- В некоторых случаях необходимо указывать "Книга1.xls"
---------------
For wsIndex = 1 To 10
wsName = Worksheets(wsIndex).Name
Next
For Each iList In Worksheets
If iList.Index > 10 Then Exit For
Next
1)как сделать чтобы по услувию менялся цвет ячейки. Например мне нужно если число в ячейки больше 100, то ячейка бы выделялась красный цветом.
2) как сделать очистку ячеек определенного диапазона.
Формат -> Условное форматирование
И работает без всяких кодов
по первому вопросу
Формат -> Условное форматирование
И работает без всяких кодов
А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.
А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
хе:)спасибо конечно! только я хотел узнать как это можно реализовать на VB.
кстати условное форматирование у меня оказалось почему то недоступным
хе:)спасибо конечно! только я хотел узнать как это можно реализовать на VB.
кстати условное форматирование у меня оказалось почему то недоступным
Вот примеры:
'Изменение цвета в ячейке на красный
If Range("a1").Value > 100 Then
Range("a1").Interior.ColorIndex = 3
End If
'Очистка диапазона ячеек
Range("a1:c10").Clear 'так
Range(Cells(1, 1), Cells(3, 10)).Clear 'или так
Вообще вариантов очистки несколько: всё (в примере выше), содержимое, оформление и т.д. Для выбора нужного смотрите описание соответствующих методов объекта Range.
Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ - запись макроса с помощью макрорекодера и последующий анализ полученного кода.
Вот примеры:
'Изменение цвета в ячейке на красный
If Range("a1").Value > 100 Then
Range("a1").Interior.ColorIndex = 3
End If
'Очистка диапазона ячеек
Range("a1:c10").Clear 'так
Range(Cells(1, 1), Cells(3, 10)).Clear 'или так
Вообще вариантов очистки несколько: всё (в примере выше), содержимое, оформление и т.д. Для выбора нужного смотрите описание соответствующих методов объекта Range.
Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ - запись макроса с помощью макрорекодера и последующий анализ полученного кода.
Большое спасибо за ответ. Буду старатся разобратся самостоятельно.
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
Всё гениальное - просто. Столько книг по Excel перелопатил, а для таких случаев всегда макросы писал. Оч.полезный совет, спасибо и от меня.