![]() |
Модераторы: mihanik |
![]() ![]() ![]() |
|
denfeel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Привет!
Помогите ,плиз,начинающему! Нужен макрос для Excel,алгоритм примерно такой: Есть много таблиц (книг) с 01 по 50. Формат ячеек таблиц – общий, просто некоторые пустые, а некоторые содержат числовые значения.В каждой книге, начиная с 01, в листе р2, в ячейках столбца С: 16,23,30,37,97,100,103,106,118,119,135,136,141,212 ищем числовые значения. При нахождении числовых значений в С16 и С23 - суммируем их и записываем в новую, созданную таблицу с одним листом (например Выход"), в строку с номером = названию (номеру) таблицы (книги), в ячейку В. Если только одна ячейка из пары С16 и С23 имеет числовое значение, или если одна ячейка из пары = 0, то просто скопировать значение из ячейки в В табл. Выход"). [1]Затем в листе р2 исходной таблицы ищем числовые значения в ячейках G16 и G23, а также в Н16 и Н23, вычисляем для пар G и для пар H среднее арифметическое, если обе ячейки пар имеют числовое значение и одна из них не равна 0, и пишем результаты в табл. Выход",строку с номером = названию (номеру) таблицы (книги), в ячейки D и E соответственно. Если только одна ячейка из пары G или Н имеет числовое значение, или если одна ячейка из пары = 0, то ср.арифметическое не вычислять и просто скопировать значения из ячеек в D и Е соответственно. Далее, если есть числовые значения С30 и С37, то повторяем шаг[1], т.е. суммируем их и пишем в табл. Выход" , в лист 1, в строку = исходной таблицы, но в ячейку С, затем, как в шаге [1], ищем числовые значения в парах G30 и G37, а также в Н30 и Н37 - далее по аналогии с [1], только пишем в F и G соответственно. Далее, если есть числовые значения в столбце С: 97,100,103,106,118,119,135,136,141,212 - то пишем их в таблицу Выход", в лист 1, в строку = исх.табл., в ячейки K,L,M,N,O,P,Q,R,S,T (в общем, по порядку). Потом переходим к книге 02 (следующей по номеру) и всё повторяем. (Результаты пишем в строку 02 табл. Выход" и т.д.). Так проходим все таблицы, если таблицы с каким - то номером нет, то переходим к следующей после отсутствующей. Вроде всё. Если можно,с комментариями.Заранее благодарю. С уважением,Денис. З.Ы.Алгоритм,конечно,кривой,но понять можно |
|||
|
||||
likhobory |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 466 Регистрация: 17.5.2005 Где: Москва Репутация: 10 Всего: 20 |
гы, боец, и ведь не лень по форумам скакать, за эту неделю уж 10 раз бы написал
![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Проверка того, что содержимое ячейки может быть интерпретировано как число (независимо от формата) в рамках текущих установок локали, выполняется функцией IsNumeric.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
denfeel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Option Explicit
Dim i As Long, k As Long, l As Long Dim strFileName As String Dim WB As Workbook Sub Cikl() For i = 1 To 55 strFileName = CStr(i) & ".xls" If i < 10 Then strFileName = "0" & strFileName Call AlgoritmBook(strFileName, i) Next i End Sub Sub AlgoritmBook(str As String, jj As Long) str = ThisWorkbook.Path & "\" & str Set WB = Workbooks.Open(str) With WB.Worksheets("ð2") If IsNumeric(.Range("C16")) And IsNumeric(.Range("C23")) Then If Val(.Range("C16")) * Val(.Range("C23")) <> 0 Then ListWyhod.Cells(jj, 2) = Val(.Range("C16")) + Val(.Range("C23")) Else: ListWyhod.Cells(jj, 2) = .Range("C16") & .Range("C23") End If If IsNumeric(.Range("G16")) And IsNumeric(.Range("G23")) Then If Val(.Range("G16")) * Val(.Range("G23")) <> 0 Then ListWyhod.Cells(jj, 4) = (Val(.Range("G16")) + Val(.Range("G23"))) / 2 Else: ListWyhod.Cells(jj, 4) = .Range("G16") & .Range("G23") End If End If If IsNumeric(.Range("H16")) And IsNumeric(.Range("H23")) Then If Val(.Range("H16")) * Val(.Range("H23")) <> 0 Then ListWyhod.Cells(jj, 5) = (Val(.Range("H16")) + Val(.Range("H23"))) / 2 Else: ListWyhod.Cells(jj, 5) = .Range("H16") & .Range("H23") End If End If If IsNumeric(.Range("C30")) And IsNumeric(.Range("C37")) Then If Val(.Range("C30")) * Val(.Range("C37")) <> 0 Then ListWyhod.Cells(jj, 3) = Val(.Range("C30")) + Val(.Range("C37")) Else: ListWyhod.Cells(jj, 3) = .Range("C30") & .Range("C37") End If End If If IsNumeric(.Range("G30")) And IsNumeric(.Range("G37")) Then If Val(.Range("G30")) * Val(.Range("G37")) <> 0 Then ListWyhod.Cells(jj, 6) = Val(.Range("G30")) + Val(.Range("G37")) Else: ListWyhod.Cells(jj, 6) = .Range("G30") & .Range("G37") End If End If ' If IsNumeric(.Range("H30")) And IsNumeric(.Range("H37")) Then If Val(.Range("H30")) * Val(.Range("H37")) <> 0 Then ListWyhod.Cells(jj, 7) = Val(.Range("H30")) + Val(.Range("H37")) Else: ListWyhod.Cells(jj, 7) = .Range("H30") & .Range("H37") End If End If For k = 8 To 17 l = Application.WorksheetFunction.Choose(k - 7, 97, 100, 103, 106, 118, 119, 135, 136, 141, 212) If IsNumeric(.Cells(l, 3)) Then ListWyhod.Cells(jj, k) = .Cells(l, 3) End If Next End With WB.Close End Sub Вопрос: если отсутствуют какие-нибудь книги(например,после 43 сразу 50)как сделать,чтобы макрос не останавливался,а переходил к следующе,после отсутствующей,книге и продолжал цикл,а после 50 завершал? З.Ы.Вопрос может и глупый,но я только начинаю разбираться с VBA ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование, связанное с MS Office" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |