Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите создать отчет в Excel с помощью VBA

5.9K
04 февраля 2005 года
Maks555
24 / / 04.02.2005
В общем необходимо создать что то типа отчета в 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 листа все остальное сам сделаю.

И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?

Заранее всем спасибо за ответы.
405
04 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by Maks555
В общем необходимо создать что то типа отчета в 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

5.9K
04 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Dmitrii


Например, так:

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



большое спасибо! сейчас буду пытаться что-нибудь сделать!

5.9K
07 февраля 2005 года
Maks555
24 / / 04.02.2005
выдает ошибку несоответствия типов в строке
for each cursheet in workbooks("книга1").worksheets

что не так?

и еще вопрос как организовать цикл например чтобы проверка была только с 1 по 10 лист.
275
07 февраля 2005 года
pashulka
985 / / 19.09.2004
- Может быть Ваша рабочая книга имеет имя отличное от "Книга1"
- В некоторых случаях необходимо указывать "Книга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
5.9K
07 февраля 2005 года
Maks555
24 / / 04.02.2005
большое спасибо все работает! теперь буду делат различные прибамбасы
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
еще несколько вопросиков.
1)как сделать чтобы по услувию менялся цвет ячейки. Например мне нужно если число в ячейки больше 100, то ячейка бы выделялась красный цветом.
2) как сделать очистку ячеек определенного диапазона.
1.2K
10 февраля 2005 года
Штурман
147 / / 01.08.2003
по первому вопросу
Формат -> Условное форматирование
И работает без всяких кодов
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Штурман
по первому вопросу
Формат -> Условное форматирование
И работает без всяких кодов



А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.

1.2K
10 февраля 2005 года
Штурман
147 / / 01.08.2003
Цитата:
Originally posted by Maks555


А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.



Да что там объяснять то?
Блин,мужик, ты обленился в дупель.

Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101

Теперь доступно?:x

5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Штурман


Да что там объяснять то?
Блин,мужик, ты обленился в дупель.

Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101

Теперь доступно?:x



хе:)спасибо конечно! только я хотел узнать как это можно реализовать на VB.

кстати условное форматирование у меня оказалось почему то недоступным

405
10 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by Maks555


хе:)спасибо конечно! только я хотел узнать как это можно реализовать на 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.

Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ - запись макроса с помощью макрорекодера и последующий анализ полученного кода.

5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Dmitrii


Вот примеры:

'Изменение цвета в ячейке на красный
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.

Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ - запись макроса с помощью макрорекодера и последующий анализ полученного кода.



Большое спасибо за ответ. Буду старатся разобратся самостоятельно.

20K
02 февраля 2007 года
Mimino
18 / / 02.02.2007
Цитата: Штурман
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.

Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101

Теперь доступно?:x



Всё гениальное - просто. Столько книг по Excel перелопатил, а для таких случаев всегда макросы писал. Оч.полезный совет, спасибо и от меня.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог