Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Отражение примитивной формулы (А1+А2+А3) в vba, Очередное суммирование ячеек
 
Доброго дня адептам экселя! В прикрепленном файлике есть макрос который суммирует ячейки по принципу "если в соседней ячейке есть условие - то плюсуем" (по сути каждая вторая ячейка. Однако, требуется чтобы в конечном файле отображалась именно примитивная формула (=А1+А3+А5).
Пробовал решить через for i=2 to "последняя" и подставлял i в номер строки "типа =А1+А(1+i)", но суммировались только первая и последняя+i ячейки. В файлике более понятно изъяснил.
з.ы. Сильно не пинайте, догадываюсь что ответ на поверхности, но сообразить не могу.
 
Код
Sub Макрос1()
Dim cl As Range, lRow&, myFormula$
lRow = Cells(Rows.Count, 1).End(xlUp).Row
For Each cl In Range("A1:A" & lRow).Cells
    If cl.Offset(, 1) = "вторая" Then
        myFormula = IIf(myFormula <> Empty, myFormula & "+" & cl.Address(0, 0), "=" & cl.Address(0, 0))
    End If
Next
If myFormula <> Empty Then Cells(lRow + 1, 1).FormulaLocal = myFormula
End Sub
Согласие есть продукт при полном непротивлении сторон.
 
Моя тоже сделаль. При большом массиве данных должно работать быстрее (или нет?). Хотя, с другой стороны, при большом количестве данных всё упрётся в ограничение количества функций внутри формулы эксель.
Код
Sub Макрос1()

Dim r As Range
Dim arr() As Variant
Dim i As Long
Dim s As String

Dim lRowStart As Long
Dim lColStart As Long

    posled = Worksheets("Лист1").Range("A1048576").End(xlUp).Row
    
    Set r = Worksheets("Лист1").Range("B1:" & Worksheets("Лист1").Range("A1048576").End(xlUp).Address)
    lRowStart = r(1, 1).Row
    lColStart = r(1, 1).Column
    arr = r.Value
    
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 2) = "вторая" Then
            If s = "" Then
                s = "=" & Worksheets("Лист1").Cells(lRowStart + i - LBound(arr, 1), lColStart).Address(False, False)
            Else
                s = s & "+" & Worksheets("Лист1").Cells(lRowStart + i - LBound(arr, 1), lColStart).Address(False, False)
            End If
        End If
    Next i
    
    Cells(posled + 1, 1).FormulaLocal = s
    
End Sub
Я не волшебник, я только учусь.
 
Спасибо, но я что-то не то делаю, первый ругается на строчку " If cl.Offset(, 1) = "вторая" Then". Второй сразу на пустую после sub
 
Никаких идей нет. Прилагаю файл с макросом.
Я не волшебник, я только учусь.
 
Работает. Копирую с форума не работает.. копирую из модуля в модуль работает... Чудеса.
Wiss огромное спасибо, думал что будет код в две строчки, а тут такое) с моим учебником я бы долго кубатурил до этого.
 
Цитата
bandazh написал: я что-то не то делаю
Да тут трудно что-то не то сделать
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, ну не знаю, копирую с сообщения - пинается. Такая хрень есть в 1С, выгружаешь в эксель - дата никак не форматируется - меняешь точку "одинэсовскую" на точку - все работает. Как говорится я куда-то нажал и все пропало)) Огромное спасибо за помощь!!
 
Какую ошибку пишет? Покажите Ваш проблемный файл
Согласие есть продукт при полном непротивлении сторон.
Страницы: 1
Читают тему (гостей: 1)
Наверх