2017-04-12 193 views
-1

我有一个包含50个选项卡(每个选项卡都被命名为国家的Excel文件,例如澳大利亚,奥地利等)。我需要创建一个汇总表,其中列出了所有国家的名称,并为每个国家添加了2个值,该值来自该国家的每个对应标签中的2个单元格(如E20,F20)从多个Excel工作表中引用单元格值的宏

以下给出的是摘要选项卡和国家选项卡。我手动将单元格转到摘要选项卡。如何使用公式/宏为50个选项卡执行此操作?

tab summary

+0

你做了什么至今?请输入密码? – shahkalpesh

+1

您可以使用'Indirect'和'Cell(“filename”)'组合的方式获得图表名称和数字。然而,我不会采用这种方式,因为“间接”是一种易失性功能。所以,我会远离那一个(尽可能多)。相反,你应该使用VBA和'ThisWorkbook.Worksheets中的每一个sht'行。但是,这个网站不提供免费编码服务。因此,我建议你先尝试一下,然后回到你自己的第一个VBA编码方向。 – Ralph

回答

1

正如拉尔夫提到你应该沿着线做一些事情:

public sub example1() 
    r=2 
    sheets("Summary").Range("A1") = "SheetName" 
    sheets("Summary").Range("B1") = "Sales" 

    sheets("Summary").Range("C1") = "Profit" 

    For each sh in thisworkbook.sheets 
     'Sheet Name 
     sheets("Summary").Range("A" & r) = sh.Name 
     'Sales 
     sheets("Summary").Range("B" & r) = sheets(sh.Name).range("A2") 
     'Profit 
     sheets("Summary").Range("C" & r) = sheets(sh.Name).range("B2") 
     'Increment Row number 
     r=r+1 
    Next sh 
END SUB 
+0

非常感谢。这工作 – GaRaGe

0

或者你可以尝试这样的事情......

Sub CreateSummary() 
Dim sws As Worksheet, ws As Worksheet 
Application.ScreenUpdating = False 

Set sws = Sheets("Summary") 
sws.UsedRange.Cells.Clear 
With sws.Range("A1:C1") 
    .Value = Array("Country", "Sales", "Profit") 
    .Font.Bold = True 
    .Font.Size = 14 
End With 
For Each ws In Worksheets 
    If Not ws Is sws Then 
     lr = sws.Cells(Rows.Count, 1).End(xlUp).Row + 1 
     ws.Range("E20:F20").Copy sws.Range("B" & lr) 
     sws.Range("A" & lr).Value = ws.Name 

    End If 
Next ws 
sws.UsedRange.Columns.AutoFit 
sws.Range("A1").CurrentRegion.Borders.Color = vbBlack 
Application.ScreenUpdating = True 
End Sub 
相关问题