Как перебрать столбец, добавляя значения из второго столбца? - PullRequest
1 голос
/ 12 июня 2019

У меня есть две колонки в таблице, скажем, a и b.Значение ячеек в a, когда макрос реализован, будет a = a + b.После того, как добавление выполнено, все значения в столбце b будут установлены в 0.

Я пытался использовать цикл for для циклического прохождения каждой ячейки в столбцах и добавления значений, но ничего не происходит.

Sub zeroAndAdd0_Click()

    For i = 2 To NumRows
        Cells(i, 4).Value = WorksheetFunction.Sum(Cells(i, 4).Value, Cells(i,5).Value)
    Next i    

End Sub

Нет сообщения об ошибке, но на самом деле ничего не происходит, когда я его проверяю.

Ответы [ 5 ]

3 голосов
/ 12 июня 2019

Убедитесь, что вы всегда пишете Option Explicit в верхней части модуля.Таким образом, он будет гарантировать, что все переменные в коде объявлены.В приведенном выше коде он не входил в цикл, потому что NumRows не был объявлен, поэтому со значением 0.Попробуйте вместо этого:

Option Explicit

Sub TestMe()

    Dim i As Long
    For i = 2 To 10
        With Worksheets(1)
            .Cells(i, 4).Value = WorksheetFunction.Sum(.Cells(i, 4).Value, .Cells(i, 5).Value)
        End With
    Next i

End Sub
1 голос
/ 12 июня 2019

Попробуйте:

Option Explicit

Sub zeroAndAdd0_Click()

    Dim NumRows As Long

    'Change Sheet name
    With ThisWorkbook.Worksheets("Sheet1")

        'NumRows take tha value of a fix number
        NumRows = 10
        'NumRows take the value of Column D last row
        NumRows = .Cells(.Rows.Count, "D").End(xlUp).Row

        .Range(.Cells(2, 4), .Cells(NumRows, 4)).Formula = "=Sum(D2,E2)"

    End With

End Sub
0 голосов
/ 12 июня 2019

Вам просто нужно определить переменную NumRows (то есть NumRows = Sheet1.Range ("D" & Rows.Count) .End (xlUp) .Row), а затем закончить преобразованием значений в столбце E в 0. Итак что-то вроде:

Sub zeroAndAdd0_Click()

    Dim NumRows, i As Long
    NumRows = Sheet1.Range("D" & Rows.Count).End(xlUp).Row

    For i = 2 To NumRows
        Cells(i, 4).Value = WorksheetFunction.Sum(Cells(i, 4).Value, Cells(i, 5).Value)
        Cells(i, 5).Value = 0
    Next i

End Sub
0 голосов
/ 12 июня 2019

Это будет работать:

Sub zeroAndAdd0_Click()

    For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row

        Cells(i, 4).Value = Cells(i, 4).Value + Cells(i, 5).Value
        Cells(i, 5).Value = 0

    Next i

End Sub

Это сделает обе работы за вас.нет необходимости использовать Worksheet Function

0 голосов
/ 12 июня 2019

Я не думаю, что NumRows заполнен, если код полностью соответствует вашему вопросу

Попробуйте

Sub zeroAndAdd0_Click()
Dim i As Long, NumRows As Long, csum As Double
Dim c As Range

With Workbooks(REF).Sheets(REF)
    NumRows = .Cells(.Rows.Count, "D").End(xlUp).Row 'last row in Col D
    'For each is faster than For i when looping through a range
    For Each c In Range("D2:D" & NumRows) 
        csum = c.Value + c.Offset(,1).Value 'Populate a variable with the sum of the two cells
        c.Value = csum 'Populate the cell in col D with the sum
        c.Offset(,1).Value = 0 'Set the other cell to 0
    Next c
End With

End Sub

Информация в закомментированном коде

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