Как суммировать столбцы без использования Loop в VBA - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь переформатировать отчет, чтобы он мог подать в мою систему, как показано ниже:

wbOutput.Sheets(1).Range("B" & O_lrow + 1 & ":B" & O_lrow + lRow).Value = wbSource.Sheets(1).Range("F1:F" & lRow).Value

Одна проблема, с которой я сталкиваюсь, это то, что столбец F должен быть суммой двух исходных столбцов, а ниже неработа:

wbOutput.Sheets(1).Range("F" & O_lrow + 1 & ":F" & O_lrow + lRow).Value = wbSource.Sheets(1).Range("N1:N" & lRow).Value + wbSource.Sheets(1).Range("O1:O" & lRow).Value

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

Есть ли простой способ добиться этого?без использования цикла?

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Вы можете попробовать это:

 wbOutput.Sheets(1).Range("F" & O_lrow + 1 & ":F" & O_lrow + lRow).Value = _ 
             wbSource.Sheets(1).Evaluate("N1:N" & lRow & " + O1:O" & lRow)
0 голосов
/ 27 мая 2019

У вас уже есть два хороших ответа, просто вы хотите добавить мои 2 цента здесь ...

Если у вас много данных, вам следует рассмотреть возможность использования массивов и один из способов сделать то, что вы пытаетесьдостичь может быть ниже, пожалуйста, смотрите комментарии для получения дополнительной информации:

Dim wsOutput As Worksheet: Set wsOutput = wbOutput.Sheets(1) 'allocate the output worksheet to a variable
Dim wsSource As Worksheet: Set wsSource = wbSource.Sheets(1) 'allocate the source worksheet to a variable

Dim arrSource As Variant
Dim arrOutput() As Variant 'Could change this to match your expected data type output
Dim R As Long, C As Long
arrSource = wsSource.Range("N1:O" & lRow) 'Get the source data into an array
ReDim arrOutput(1 To UBound(arrSource), 1 To 1) 'set the size of the output
For R = 1 To UBound(arrSource)
    For C = 1 To UBound(arrSource, 2)
        arrOutput(R, 1) = arrSource(R, 1) + arrSource(R, 2) 'make your calculations here
    Next C
Next R

wsOutput.Range("F" & O_lrow + 1 & ":F" & O_lrow + lRow) = arrOutput 'spit it back to the sheet once is done
0 голосов
/ 27 мая 2019

Это способ использования функции Application.Sum:

Option Explicit
Sub SumTest()

    Dim SumA As Range
    Dim SumB As Range

    With wbSource.Sheets(1)
        Set SumA = .Range("N1:N" & lRow)
        Set SumB = .Range("O1:O" & lRow)
    End With

    wbOutput.Sheets(1).Range("F" & O_lrow + 1 & ":F" & O_lrow + lRow) = Application.Sum(SumA, SumB)

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