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

时间:2016-06-21 07:50:28

标签: excel vba excel-vba macros

我有一本工作簿,我每个月都有一张工作表。示例我有六月的以下表格:

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中有特定日期的周数。工作表1319中的示例,A1包含24(因为在这些日期是第24周)。

Master中,A1是我应该从中获取数据的工作表的周数。所以在这里我可以输入示例24(然后它应该从所有工作表中获取特定数据,其中A1 = 24)。 这可能吗?

具体来说,我希望从G3为24的每张图表中获取A1及以下列中的数据,并将文本复制到Master表格列{{1并且向下。

3 个答案:

答案 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)

供您参考。 使用indirect功能 enter image description here

答案 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

作为附注,我在有效工作表名称之前进行了有效的周数检查以减少后面的检查(即仅适用于具有适当周数的工作表)

在这个特定情况下不是真正需要担心的事情,但在更具挑战性的环境中考虑它可能会有用