Как просуммировать столбец с неизвестным количеством строк?

Программирование на Visual Basic for Applications
vpm
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.11.2012 (Вт) 4:01

Как просуммировать столбец с неизвестным количеством строк?

Сообщение vpm » 06.11.2012 (Вт) 4:06

Макросом затягиваю в EXEL DBF-ку с заранее неизвестным количеством строк.
Надо в конец добавить итоговую строку, просуммировав значения в заданных столбцах.
Подскажите, плз

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.11.2012 (Вт) 7:43

И как надо помочь? Номер строки ты знаешь, его в формулу и подставь. Или ты хочешь, чтобы Excel сам нашёл?

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как просуммировать столбец с неизвестным количеством стр

Сообщение Sam777e » 06.11.2012 (Вт) 22:03

Код: Выделить всё

Sub TryTryTry() ' dlja ODNOGO Stolbca, ostal'noe sam . . .
  Dim theLatRow As Long
 
    ' Modeliruju vvod iz DBF
  Range("A1").Select
  ActiveCell.FormulaR1C1 = "111"
  Range("A2").Select
  ActiveCell.FormulaR1C1 = "222"
  Range("A3").Select
  ActiveCell.FormulaR1C1 = "12345"
 
    ' Nahozhu konec strok   ;-)
  Selection.End(xlDown).Select
  Selection.End(xlUp).Select
  theLatRow = Selection.Row
 
    ' Perehozhu na odnu Kletku nizhe
  ActiveCell.Offset(1, 0).Select
  ActiveCell = WorksheetFunction.Sum( _
    Range(Cells(1, 1), Cells(theLatRow, 1)))
End Sub
Здоровья и удачи

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.11.2012 (Ср) 7:33

Зачем так мудрить-то? Если добавление происходит в цикле, то номер строки и так известен.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как просуммировать столбец с неизвестным количеством стр

Сообщение Sam777e » 08.11.2012 (Чт) 14:07

А кто и где сказал, что
Qwertiy писал(а):добавление происходит в цикле
?

Например, если открываем CSV-файл, то и получаем заранее неизвестное количество строк.
Да и ничего такого мудрого нет. :)

С уважением
Здоровья и удачи

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.11.2012 (Чт) 19:37

Sam777e писал(а):А кто и где сказал, что
Qwertiy писал(а):добавление происходит в цикле
?
Например, если открываем CSV-файл, то и получаем заранее неизвестное количество строк.

А я не говорил "заранее", я сказал просто "известен" после добавления. И я не говорил про цикл For, он вполне может быть и While, но без цикла добавить переменное количество строк нельзя, если не извратиться с рекурсией, конечно.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как просуммировать столбец с неизвестным количеством стр

Сообщение Sam777e » 08.11.2012 (Чт) 22:10

Qwertiy писал(а):просто "известен" после добавления. И я не говорил про цикл For, он вполне может быть и While, но без цикла добавить переменное количество строк нельзя


Можно.

Я ведь пример с CSV уже привел; думаю, что и DBF-файл тоже можно ввести в лист Excel"я "одним махом", без всякого цикла . . . А рекурсия здесь уж совсем не к месту. Но даже, если в случае с DBF-файлом все не так , а имеет место цикл - то в других случаях крайне просто, имея некоторую оценку количества строк [ скажем - 25000 ] стать в ячейку A60000, а потом двинуть вверх . . .

При этом совсем необязательно действительно лишний раз дергать экран; можно и так

Код: Выделить всё
  Cells(60000,1).End(xlUp).Select


Можно отключить, а потом включить обновление Screen'а - и все это о-о-о-чень просто.

С уважением
Здоровья и удачи

vpm
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.11.2012 (Вт) 4:01

Re: Как просуммировать столбец с неизвестным количеством стр

Сообщение vpm » 08.11.2012 (Чт) 22:51

Спасибо за понимание!
Я действительно затягиваю DBF-файл "одним махом" без всякого цикла (Open).
Проблема в том что я не знаю ЗАРАНЕЕ куда встать для строки ИТОГО.

Вот совет (еще не пробовал!) с сайта http://programmersforum.ru/forumdisplay.php?f=20

Например, для 1-го столбца активного листа, начиная с 1-й строки:
Код:
Dim i As Long: i = Cells(Rows.Count, 1).End(xlUp).Row
Cells(i + 1, 1) = Application.Sum(Range([A1], Cells(i, 1)))

В результате, в столбце "A" после последней заполненной ячейкой будет вставлена сумма ячеек этого столбца.
Если же требуется суммы нужных столбцов поместить в одной строке, которая находится ниже самого "длинного" столбца, то значение переменной i следует вычислять так:
Код:
i = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как просуммировать столбец с неизвестным количеством стр

Сообщение Sam777e » 09.11.2012 (Пт) 12:45

to vpm

Верно; это все [ и мой код ] - вариации на одну тему:
метод .End(xlUp) и свойство .Row

С уважением
Здоровья и удачи


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList