Суммировать столбцы в новом столбце рядом с выделением - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь суммировать количество столбцов вместе в новом столбце.

Мне удалось добраться до точки, где я беру A + B и помещаю значения в C. Однако фактические столбцы, которые мне нужно будет суммировать, различаются. Можно ли как-то отредактировать свой код, чтобы любые выбранные столбцы можно было суммировать в новом столбце справа от выделения?

Например. Если бы я выбрал столбцы BD, он вставил бы новый столбец в E, в котором находятся суммы столбцов B, C и D. Или, если бы я выбрал EF, он вставил бы новый столбец в G, в котором были бы расположены суммы столбцов E и F. .

Sub SumColumns()

Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row

For i = 1 To Lastrow
    Range("C" & i).Value = Range("A" & i).Value + Range("B" & i).Value
Next i

End Sub

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вот мое (довольно небрежное) решение:

Sub Test()

Dim col1 As String, col2 As String, lastrow As Long

col1 = Split(Selection.Address, "$")(1)
col2 = Split(Selection.Address, "$")(3)

lastrow = Cells(Rows.Count, col2).End(xlUp).Row

Columns(col2 & ":" & col2).Offset(0, 1).Insert Shift:=xlToRight

For i = 1 To lastrow
    Range(col2 & i).Offset(0, 1).Value = WorksheetFunction.Sum(Range(col1 & i & ":" & col2 & i))
Next i

End Sub

Я говорю, что это небрежно, потому что, если у вас выбран столбец весь , вы не будете Split соответствующим образом выводить значения столбца. Так что это зависит от того, как вы пытаетесь это сделать.

img1

0 голосов
/ 30 августа 2018

Эта процедура позволит вам выбрать любой диапазон. Он добавит столбец в конец диапазона и суммирует каждую строку в новом столбце.

Sub test()
    Call InsertSumCol(Sheet1.Range("B2:E4"))
    Call InsertSumCol(Sheet2.Range("E1:F3"))
End Sub

Private Sub InsertSumCol(ByVal oRange As Range)

    'Add Sum Column to end of Range
    oRange.Worksheet.Columns(oRange.Column + oRange.Columns.Count).Insert shift:=xlToRight

    ' Sum Each Row in Range
    Dim oRow As Range
    For Each oRow In oRange.Rows
        oRow.Cells(1, oRow.Columns.Count + 1) = WorksheetFunction.Sum(oRow)
    Next

End Sub
0 голосов
/ 30 августа 2018

Я предполагаю, что вы хотите суммировать по вертикали все ячейки в строке, начиная со столбца А.

Попробуйте это (некоторые советы и комментарии в коде):

'use this in order to avoid errors
Option Explicit

Sub SumColumns()
    'always declare variables!
    Dim LastRow As Long, i As Long, ws As Worksheet, lastCol As Long, firstCol As Long
    'if you can, avoid using ActiveSheet, Selection, etc. it's prone to errors
    Set ws = ActiveSheet
    i = 1
    Do
        firstCol = ws.Cells(i, 1).End(xlToRight).Column
        lastCol = ws.Cells(i, ws.Columns.Count).End(xlToLeft).Column
        'there isn't any filled cells in a row
        If lastCol = 1 Then Exit Do

        ws.Cells(i, lastCol + 1).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, firstCol), ws.Cells(i, lastCol)))

        i = i + 1
    Loop While True

End Sub

До и после:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...