Суммируйте все значения столбцов после каждого импорта - PullRequest
0 голосов
/ 07 июля 2019

Мой текущий код считывает manhours (целочисленные значения) из разных рабочих книг и экспортирует их в столбец в основном выходном листе.После каждого импорта я хочу суммировать общее количество часов, которое экспортируется на основной лист, однако я не уверен, как это сделать без суммирования всего столбца.Кроме того, после суммирования общего количества человеко-часов на каждом листе я хочу сравнить это значение со значением на листе, чтобы подтвердить, правильно ли я скопировал все строки.

Мой выходной лист выглядит так после каждого импорта:

data----------data----------hours(sheet1)    
data----------data----------hours(sheet1)    
data----------data----------hours(sheet1)    
data----------data----------hours(sheet2)    
data----------data----------hours(sheet2)

Мой текущий код выглядит так:

Option Explicit

Sub manhours()
    Dim Files As Variant
    Dim i As Long
    Dim j As Long
    Dim sh As worksheet
    Dim outputsheet As Worksheet
    Dim erow As long
    Dim manhours As Long

    Workbooks.Open Files(i)
    Set sh = Sheets("manhours")

    For j = 2 to 30   
        erow = outputsheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 'empty row
        If IsEmpty(Cells(j, 3) = False Then
            outputsheet.Cells(erow, 1).Resize(1, 2).Value = sh.Cells(j, 1).Resize(1, 2).Value 'copies the first 2 columns containing other data values
            outputsheet.Cells(erow, 3) = sh.Cells(j, 3) 'column 3 from sh contains manhours
        End If
    Next j

    manhours = Application.WorksheetFunction.Sum(outputsheet.Columns(3)) 'unsure how to sum only the values from sheet i and not the entire column
    MsgBox (manhours) ' msgbox than gives the total man hours

    manhours = sh.Range("C31") 'total manhours from sheet is in sh.Range("C31")
    'MsgBox (True/False) 'unsure how to do this

    Next i
End Sub

1 Ответ

1 голос
/ 07 июля 2019

Я не вижу необходимости использовать WorksheetFunction.Sum здесь.

Один вариант: сохранить текущую сумму, например:

manhours = 0 ' reset manhours to 0 for each new file

For j = 2 to 30
    If Not IsEmpty(sh.Cells(j, 3).Value) Then 
        ...
        outputsheet.Cells(erow, 3).Value = sh.Cells(j, 3).Value
        manhours = manhours + sh.Cells(j, 3).Value ' could add an IsNumeric check here to avoid a Type Mismatch
    End If
Next j

MsgBox manhours ' no parentheses
MsgBox manhours = sh.Range("C31").Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...