Excel – 如果文本匹配,则从所有工作表中的单元格中获取数据

我有一个工作簿,每天有一张工作表在当月。 示例我有6月份的以下表单:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 

然后我有另一张名为Master表。

在每张表格中,我在单元格A1中显示特定date的星期编号。 在第13到第19页的例子中, A1包含24(因为这是第24周)。

MasterA1是我应该从中获取数据的工作表的周数。 所以在这里我可以input例子24(它应该从所有表格中取出具体数据,其中A1 = 24)。 这可能吗?

具体来说,我想从A1栏中的每一页开始,从G3栏和下面的栏中G3数据,然后将文本复制到Master表单B11B11栏。

在我的论坛中,最简单的方法是循环每个工作表(除了“主”表),检查周数是否与主表中的周数相同,然后执行任何复制/过去的活动。

例:

 Sub Macro() Dim masterws, ws As Worksheet Dim wb As Workbook Dim curweek As String Set masterws = ThisWorkbook.Worksheets("Master") curweek = masterws.Range("A1") For Each ws In ActiveWorkbook.Sheets If ws.Name <> "Master" Then If ws.Range("A1").Value = curweek Then 'Perform your copy/past activities End If End If Next End Sub 

供你参考。 使用indirectfunction 在这里输入图像说明

你可以使用以下

 Option Explicit Sub main() Dim weekN As Long, rowTopasteFrom As Long Dim ws As Worksheet, wsMst As Worksheet Set wsMst = Worksheets("Master") weekN = wsMst.Range("A1") If weekN <= 0 And weekN >= 53 Then Exit Sub '<--| exit if week is not a valid number For Each ws In Worksheets If ws.Range("A1") = weekN Then '<--| first check if valid week number If ws.Name <> "Master" Then With GetRange(ws, ws.Range("G3")) '<--| get the current worksheet range to copy values from GetCellToPasteFrom(wsMst, 2, 11).Resize(.Rows.Count).Value = .Value '<--| paste values in "Master" End With End If End If Next ws End Sub Function GetRange(ws As Worksheet, iniRng As Range) As Range With ws Set GetRange = .Range(iniRng, .Cells(.Rows.Count, iniRng.Column).End(xlUp)) End With End Function Function GetCellToPasteFrom(ws As Worksheet, col As Long, Optional minRow As Variant) As Range Set GetCellToPasteFrom = ws.Cells(ws.Rows.Count, col).End(xlUp).Offset(1) If Not IsMissing(minRow) Then If GetCellToPasteFrom.Row < minRow Then Set GetCellToPasteFrom = ws.Cells(minRow, col) End Function 

作为便笺,我在有效的工作表名称之前加上了有效的星期号码检查,以减less这些后面的检查(即仅适用于具有适当周数的工作表)

在这种特殊情况下不是真正担心的事情,但可以考虑在更具挑战性的环境中进行思考