我确定下面的解决方案非常简单,但它让我难过......
我想在excel工作簿中执行以下操作。假设在A列中我们有一系列名称,在B列中有一系列值
A1 - Alan B1 - 1
A2 - Bob B2 - 0
A3 - Jim B3 - 1
A4 - Tom B4 - 2
然后我收到一个单独的工作簿,其中包含我需要添加到B列中的值的类似数据,但新工作簿不包含原始工作簿中的所有名称,例如。
A1 - Alan B1 - 1
A2 - Jim B2 - 2
A3 - Dave B3 - 1
A4 - Tom B4 - 1
我想更新B列中原始工作簿的值,以便它们从每个工作簿中提供B列的总和,并将第二个(新)工作簿中A列的任何新名称附加到名称范围中原始工作簿中的A列。
任何新添加到A列的名称也应显示B列的相关值。
我目前正在使用过滤器并手动更新值,名称范围很大,耗费时间,让我发疯...我确定有一个更优雅的解决方案。
帮助?
提前致谢。
答案 0 :(得分:0)
我认为最简单的方法是将新列表放在与旧列表相同的工作表上。这假设您将新列表放在D列中(参见newCol
)。
如果你想选择一个新工作簿并从中获取特定工作表,我们需要知道如何选择新工作簿(文件选择器,它是否总是在某个文件中,可以选择多个文件) ,工作表名称是什么,等等。)。
Sub AddAndAppend()
Dim ws As Worksheet
Dim i As Long, j As Long
Dim origCol As Long, newCol As Long, startRow As Long
On Error GoTo ErrorHandler
'sets to the current worksheet
Set ws = ActiveSheet
'speeds up macro for longer lists
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'assumes a header row so starts on row 2
startRow = 2
'origcol is where the names are to start, newcol is where the names are in the new list
origCol = 1
newCol = 4
'loop through all the new names
For i = startRow To ws.Cells(ws.Rows.Count, newCol).End(xlUp).Row
'if name in new list is found in old list...
If WorksheetFunction.CountIf(ws.Range(ws.Cells(startRow, origCol), ws.Cells(ws.Cells(ws.Rows.Count, origCol).End(xlUp).Row, origCol)), ws.Cells(i, newCol).Value) > 0 Then
'...find the name in the old list and combine the values
For j = startRow To ws.Cells(ws.Rows.Count, origCol).End(xlUp).Row
If ws.Cells(j, origCol).Value = ws.Cells(i, newCol).Value Then
ws.Cells(j, origCol + 1).Value = ws.Cells(j, origCol + 1).Value + ws.Cells(i, newCol + 1).Value
Exit For
End If
Next j
Else
'...otherwise, add the new name to the end of the old list
ws.Cells(ws.Cells(ws.Rows.Count, origCol).End(xlUp).Row + 1, origCol).Value = ws.Cells(i, newCol).Value
ws.Cells(ws.Cells(ws.Rows.Count, origCol).End(xlUp).Row, origCol + 1).Value = ws.Cells(i, newCol + 1).Value
End If
Next i
'turns off speeding up
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
ErrorHandler:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox Err.Number & vbCr & Err.Description
Exit Sub
End Sub