将不同工作表中的列复制到VBA中的主工作表中,并使用1个固定列

时间:2017-02-28 15:52:00

标签: excel vba excel-vba

我正在尝试对所有合作伙伴提供的优惠进行比较。我制作了一本工作簿,其中所有合作伙伴的报价都添加到不同的表格中。在这里,第一列对于所有供应商都是相同的。产品细节。报价对比表即。主表应显示所有合作伙伴的报价。

例如。工作簿的所有工作表(主工作表以及其他工作表)中的列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

但是,此处的输出会在同一列中相互粘贴,而不是在下一个相邻列中粘贴。

Output image - stacked

在相应的相邻列中需要它。

希望我清楚地解释这个要求。请告诉我如何获得&#34; n&#34;的B列。主表中相邻列中的工作表。

如果可以在不使用上述代码的情况下完成,也可以。

2 个答案:

答案 0 :(得分:1)

这就是我们获得INDIRECT功能的原因。假设sheet2包含:

enter image description here

同样,Sheet3有4,5,6而Sheet4有7,8,9,那么我们可以得到所有这些值:

enter image description here

...使用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