Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 15

Сумма отдельных столбцов

09.07.2013, 09:50. Показов 1379. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу макрос для Excel для подсчета суммы определенных ячеек в каждой строке. Вроде что-то получилось, но считает он до первой объединенной ячейки. Подскажите, пожалуйста, как сделать, чтобы такие ячейки пропускались.
Прилагаю картинку, чтобы было понятнее(синее-объединенная ячейка, красный столбец - результат, желтые - те, что используются в подсчетах). Вот код макроса:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub sum()
    Dim LastColumn As Long
    Dim LastRow As Long
    Dim S As String
    Dim FirstRow As Integer
    Dim LastUsedCol As Integer
    LastUsedCol = 20
    LastColumn = ActiveSheet.UsedRange.Columns.Count
    LastRow = ActiveSheet.UsedRange.Rows.Count - 1
    FirstRow = 1
    Do
         If IsEmpty(ActiveCell) Then FirstRow = FirstRow + 1
          Cells(FirstRow, LastColumn).Select
        Loop Until IsEmpty(ActiveCell) = 0
    For i = 20 To LastColumn Step 2
      Cells(FirstRow, i).Select
      If Not IsEmpty(ActiveCell) Then LastUsedCol = i
    Next i
    FirstRow = FirstRow + 5
    S = ""
    Cells(FirstRow, 6).Select
    For i = 20 To LastUsedCol Step 2
      S = S + "-RC[" + CStr(i - 6) + "]"
    Next i
    S = "=RC[-1]" + S
    For i = FirstRow To LastRow
      Cells(i, 6).Select
      If Not IsEmpty(ActiveCell) Then ActiveCell.FormulaR1C1 = S
    Next i
End Sub
Миниатюры
Сумма отдельных столбцов  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.07.2013, 09:50
Ответы с готовыми решениями:

Выделить несколько отдельных столбцов по условию (с помощью Union)
Помогите, пожалуйста. Требуется удалить колонки названию заголовка. таблица небольшая, где-то 1000 строк, но удаление по...

Выделение цветом отдельных столбцов в форме
Здравствуйте, подскажите как изменить отдельные столбцы в форме базы данных. Дело в том, что в основной форме имеется внедренная форма. При...

Выравнивание столбцов двух отдельных таблиц
Всем привет... столкнулся с такой проблемой... есть 2 'независимые' таблицы 1) формируется с помошью sql запроса и имеет...

4
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
09.07.2013, 11:29
В VBA я новенький, твой код понять не смог, но могу посоветовать Cells.MergeCells
Просто вставляешь в нужное место
Visual Basic
1
If Cells(****).MergeCells=True Then Next i
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
09.07.2013, 14:45
Почему-то картинка макрос (и формулу) не понимает... Может, стоит попробовать кинуть сюда лист?
0
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 15
09.07.2013, 14:46  [ТС]
Не поверишь, сам только утром впервые увидал Visual Basic. Спасибо, эта штука помогла. Вот, что в конце получилось. Копирует последние два столбца 5 раз, вычитает новые из пятого и записывает результат в шестой. Код наверняка ужасен, но оно работает, на первый раз пойдет.=)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Sub Solve()
Dim LastColumn As Long
    Dim LastRow As Long
    Dim S As String
    Dim FirstRow As Integer
    Dim LastUsedRow As Integer
    Dim K As Integer
    Dim i As Integer
    For i = 1 To 5
        K = 1
        LastColumn = ActiveSheet.UsedRange.Columns.Count - 1
        Cells(K, LastColumn).Select
        ActiveCell.Range("A1:B200").Select
        Selection.Copy
        ActiveCell.Offset(0, 2).Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
    
    Do
         If IsEmpty(ActiveCell) Then K = K + 1
          Cells(K, LastColumn).Select
        Loop Until IsEmpty(ActiveCell) = 0
        Cells(1, LastColumn).Select
          Cells(K, LastColumn + 2).Select
          ActiveCell.Range("A4:B200").Select
          Selection.ClearContents
          Cells(K, LastColumn + 2).Select
    Next i
    LastUsedCol = 20
    LastColumn = ActiveSheet.UsedRange.Columns.Count
    LastRow = ActiveSheet.UsedRange.Rows.Count - 1
    FirstRow = 1
    Cells(FirstRow, LastColumn).Select
    Do
         If IsEmpty(Cells(FirstRow, 20)) Then FirstRow = FirstRow + 1
         Cells(FirstRow, LastColumn).Select
        Loop Until IsEmpty(ActiveCell) = 0
    FirstRow = FirstRow + 5
    
    For i = FirstRow To LastRow
      If (Not IsEmpty(Cells(i, 1))) And (Cells(i, 1).MergeCells = False) Then LastUsedRow = i
    Next i
    S = ""
    For i = 20 To LastColumn Step 2
      S = S + "-RC[" + CStr(i - 6) + "]"
    Next i
    S = "=RC[-1]" + S
    For i = FirstRow To LastUsedRow
      Cells(i, 6).FormulaR1C1 = S
    Next i
    Cells(1, 1).Select
End Sub
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
09.07.2013, 15:38
Я слабо представляю, что там нужно. Но если нужно просумировать какие-то столбцы, формула суммы прекрасно понимает, если ей кинуть все нужные значения сразу - сьест и еще попросит. И быстро, и экономно. Лучше, в крайнем случае нужные значения собрать в каком-то массиве (e.g. mARR), а потом просто одним движением получить сумму. Но трудно говорить "без бумаги".

Добавлено через 10 минут
Вы даже не представляете, какая у Вас там каша.
ActiveCell.Range("A1:B200").Select - Здесь ActiveCell лишнее
ActiveCell.Offset(0, 2).Range("A1").Select - ActiveCell.Offset(0, 2) - лишнее
Потом копируете диапазон и вставляете на тоже место. И так далее аж до конца. Кидайте лист, подумаем вместе.

Добавлено через 31 минуту
Попробуйте, может и рисунок на что-то способен.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub mmSS()
   Dim i&, S#
   On Error Resume Next:   S = 0
   With ActiveSheet
      For i = 13 To .Cells(Rows.Count, 1).End(xlUp).Row
         .Cells(i, 6).Value = Application.Sum(Range(.Cells(i, 5), .Cells(i, 26)). _
                                             SpecialCells(xlCellTypeConstants, xlNumbers))
         If .Cells(i, 6).Value <> vbNullString And IsNumeric(.Cells(i, 6).Value) Then
            S = S + CDbl(.Cells(i, 6).Value)
         End If
      Next 'i
   end with
   On Error GoTo 0
      MsgBox "TOTAL   AMOUNT :" & Space(3) & S
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2013, 15:38
Помогаю со студенческими работами здесь

Разбить запись в ячейке на несколько отдельных столбцов
Добрый вечер! Подскажите, как разбить Паспортные данные на столбцы Тип документа, Серия, Номер, Дата выдачи, Где выдачи. Желательно вложить...

Сумма отдельных чисел в строке
Задано случайная строка . Подсчитать сумму отдельных чисел в строке

Обработка отдельных строк (столбцов) матрицы и работа с диагона-лями
помогите решить : Ввести целочисленный двумерный массив А(NXM) , вывести его. Определить K1 – сколько в массиве элементов, кратных...

Обработка отдельных строк (столбцов) матрицы и работа с диагона-лями
вот задача: &quot;Ввести двумерный массив А(размером N*N) , вывести его. Если в массиве больше положительных элементов, то поменять максимальный...

Вывести номера тех столбцов, сумма элементов которых меньше нуля, и число таких столбцов
Добрый день! При компиляции программы количество всегда =0 . В чём может быть проблема? namespace ConsoleApplication1 { class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru