내가 도망 갈 때 다음 코드는 1004 런타임 오류를 던지고있다를 돌려줍니다. 디버거는 2 부 바로 위의 SUMIFS 함수를 강조 표시합니다.VBA SUMIFS - 작동하지 않음은, 모든 입력은 올바른 값
이 하위의 목표는 1, 3 및 5 열을 사용하여 "기본 키"로 중복 행을 찾은 다음 6 행에 대해 열로 값을 결합하는 것입니다. 7 및 10-17은 각 행에 대한 값을 기반으로합니다. 그러므로 SUMIFS.
나는 혼란 스러워요. 즉각적인 윈도우를 사용하여 SUMIFS fuction (ws.Cells (lRow, lCol))의 각 섹션에 대한 올바른 값을 반환 할 수 있습니다. 셀렉트는 올바른 셀 등을 선택합니다. 내 생각으로는 범위가 SUMIFS에 의해 올바르게 해석되지 않아 특정 범위를 사용하여 동일한 기능을 즉시 창에 띄우고 동일한 오류가 발생했습니다. 즉각적인 창 입력은 아래의 행을 참조하십시오.이 예에서 행 21:23 사이의 값을 결합하는 것이 목표임을 유의하십시오.
debug.Print application.WorksheetFunction.SumIfs(range("F21:F23"), range("A9:A30"), range("A21").Value, range("C9:C30"), range("C21").Value, range("E9:E30"), range("E21").Value)
명명 된 범위, .codname 및 변수가 원하는대로 작동한다고 가정하고 100 % 확신합니다. 즉, 나는 전에 잘못 본 적이있다.
도움을 주시면 감사하겠습니다.
Private Sub dba_combine_rows()
Const COL_TRIPS = 6
Const COL_EMP_TRIP = 7
Const COL_LN_HC = 10
Const COL_USN_PR = 17
Dim lLastRow As Long
Dim ws As Worksheet
Set ws = DBA
Dim answer As Integer
answer = MsgBox("Are you sure you want to combine rows?", vbYesNo, "Combine Rows")
If answer = vbNo Then
Exit Sub
End If
'Get the last row
Dim i As Long
For i = Range("inputRange" & ws.CodeName).Column To (Range("inputRange" & ws.CodeName).Column + Range("inputRange" & ws.CodeName).Columns.Count - 1)
If ws.Cells(ws.Rows.Count, i).End(xlUp).Row > lLastRow Then
lLastRow = ws.Cells(ws.Rows.Count, i).End(xlUp).Row
End If
Next i
''Combine, start modify
'Set aliases for columns A & B & C, used for checking duplicates
Dim rngA As Range, rngB As Range, rngC As Range
Set rngA = ws.Range("inputRange" & ws.CodeName).Columns(1)
Set rngB = ws.Range("inputRange" & ws.CodeName).Columns(3)
Set rngC = ws.Range("inputRange" & ws.CodeName).Columns(5)
Dim lRow As Long, lCol As Long, strHolderA As String, lHolderR As Long
For lRow = ws.Range("inputRange" & ws.CodeName).Row To lLastRow
'Part 1 - Check for duplicate entity-country
If Application.CountIfs(rngA, ws.Cells(lRow, rngA.Column), rngB, ws.Cells(lRow, rngB.Column), rngC, ws.Cells(lRow, rngC.Column)) > 1 Then
strHolderA = (ws.Cells(lRow, rngA.Column).Value & ws.Cells(lRow, rngB.Column).Value & ws.Cells(lRow, rngC.Column).Value)
lHolderR = lRow
For lCol = COL_TRIPS To COL_USN_PR
If lCol = COL_EMP_TRIP Then
lCol = COL_LN_HC
End If
ws.Cells(lRow, lCol).Value = Application.WorksheetFunction.SumIfs(_
ws.Range(Col_Letter(lCol) & lRow & ":" & Col_Letter(lCol) & lLastRow), rngA, ws.Cells(lRow, rngA.Column).Value, rngB, ws.Cells(lRow, rngB.Column).Value, rngC, ws.Cells(lRow, rngC.Column).Value)
Next lCol
'Part 2 - Delete similar rows, excluding 1st
Dim lRow2 As Long
For lRow2 = ws.Range("inputRange" & ws.CodeName).Row To lLastRow
If (ws.Cells(lRow2, rngA.Column).Value & ws.Cells(lRow2, rngB.Column).Value & _
ws.Cells(lRow2, rngC.Column).Value) = strHolderA And lRow2 <> lHolderR Then
Rows(lRow2 & ":" & lRow2).Select
Selection.Delete Shift:=xlUp
lRow2 = lRow2 - 1
End If
Next lRow2
End If
Next lRow
End Sub
합계 범위와 기준 범위는 동일한 사이즈이어야한다. – SJR