Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск числовых значений в ячейках,операции с ними, VBA Excel 
:(
    Опции темы
denfeel
Дата 22.5.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 табл.  Выход" и т.д.). Так проходим все таблицы, если таблицы с каким - то номером нет, то переходим к следующей после отсутствующей. Вроде всё.
Если можно,с комментариями.Заранее благодарю.
С уважением,Денис.
З.Ы.Алгоритм,конечно,кривой,но понять можно 
PM MAIL   Вверх
likhobory
Дата 22.5.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



гы, боец, и ведь не лень по форумам скакать, за эту неделю уж 10 раз бы написал  smile  


--------------------
PM MAIL   Вверх
Akina
Дата 22.5.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Проверка того, что содержимое ячейки может быть интерпретировано как число (независимо от формата) в рамках текущих установок локали, выполняется функцией IsNumeric. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
denfeel
Дата 23.5.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.