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周)。
在Master
, A1
是我应该从中获取数据的工作表的周数。 所以在这里我可以input例子24(它应该从所有表格中取出具体数据,其中A1
= 24)。 这可能吗?
具体来说,我想从A1
栏中的每一页开始,从G3
栏和下面的栏中G3
数据,然后将文本复制到Master
表单B11
和B11
栏。
在我的论坛中,最简单的方法是循环每个工作表(除了“主”表),检查周数是否与主表中的周数相同,然后执行任何复制/过去的活动。
例:
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
供你参考。 使用indirect
function
你可以使用以下
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这些后面的检查(即仅适用于具有适当周数的工作表)
在这种特殊情况下不是真正担心的事情,但可以考虑在更具挑战性的环境中进行思考