我有一本工作簿,我每个月都有一张工作表。示例我有六月的以下表格:
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
中有特定日期的周数。工作表13
至19
中的示例,A1
包含24(因为在这些日期是第24周)。
在Master
中,A1
是我应该从中获取数据的工作表的周数。所以在这里我可以输入示例24(然后它应该从所有工作表中获取特定数据,其中A1
= 24)。 这可能吗?
具体来说,我希望从G3
为24的每张图表中获取A1
及以下列中的数据,并将文本复制到Master
表格列{{1并且向下。
答案 0 :(得分:2)
在我的意见中,最简单的方法是遍历每个工作表(“主”表除外),检查周数是否与主表中的周数相同,然后执行任何复制/过去的活动。 / p>
示例:
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
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用以下
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
作为附注,我在有效工作表名称之前进行了有效的周数检查以减少后面的检查(即仅适用于具有适当周数的工作表)
在这个特定情况下不是真正需要担心的事情,但在更具挑战性的环境中考虑它可能会有用