我正在尝试对所有合作伙伴提供的优惠进行比较。我制作了一本工作簿,其中所有合作伙伴的报价都添加到不同的表格中。在这里,第一列对于所有供应商都是相同的。产品细节。报价对比表即。主表应显示所有合作伙伴的报价。
例如。工作簿的所有工作表(主工作表以及其他工作表)中的列A值是相同的。专栏" B,C ... n"在主表中是空白,而所有其他表在列B中都有一些值。我需要一个宏来复制工作表1.Column B中的值并将其粘贴(在特殊情况下粘贴)在Master.Column B中。同样,来自工作表2的值。 B列将粘贴在Master.Column C中,并应对工作簿中的所有其他工作表(表3,... .... n)重复进入Master.Column(D,E..n)。
我尝试了以下代码:
Sub Summary()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Master" Then
ws.Range("C2:C10").Copy
Sheets("Master").Cells(Rows.Count, 3).End(xlUp).Offset(1).PasteSpecial xlPasteValues
End If
Next
Application.ScreenUpdating = True
End Sub
但是,此处的输出会在同一列中相互粘贴,而不是在下一个相邻列中粘贴。
在相应的相邻列中需要它。
希望我清楚地解释这个要求。请告诉我如何获得&#34; n&#34;的B列。主表中相邻列中的工作表。
如果可以在不使用上述代码的情况下完成,也可以。
答案 0 :(得分:1)
这就是我们获得INDIRECT
功能的原因。假设sheet2包含:
同样,Sheet3有4,5,6
而Sheet4有7,8,9
,那么我们可以得到所有这些值:
...使用INDIRECT
公式。将其放在B2中并向下/向下拖动
=INDIRECT(B$1&"!" & ADDRESS($A2,1))
如果您无法在设置中使用
,请随时与我们联系答案 1 :(得分:1)
尝试以下代码:
Sub Summary()
Dim ws As Worksheet
Dim EmptyCol As Long
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Master" Then
ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Copy '<-- copy all values in column B
With Sheets("Master")
EmptyCol = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
.Range(.Cells(1, EmptyCol), .Cells(1, EmptyCol)).PasteSpecial xlPasteValues
End With
End If
Next
Application.ScreenUpdating = True
End Sub