2016-06-21 12 views
1

Ich habe eine Arbeitsmappe, wo ich ein Blatt für jeden Tag im aktuellen Monat habe. Beispiel habe ich folgende Blätter für Juni:Excel - Holen Sie Daten von Zellen aus allen Blättern, wenn Text übereinstimmt

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 

ich ein anderes Blatt Master rief dann haben.

In jedem der Blätter habe ich in der Zelle A1 die Wochennummer für den bestimmten Tag. Beispiel in den Blättern 13 bis 19, A1 enthält 24 (da es in diesen Daten Woche 24 ist).

In Master, A1 ist die Wochennummer der Blätter, von denen ich Daten erhalten soll. Also hier kann ich Beispiel 24 eingeben (es sollte dann spezifische Daten von allen Blättern nehmen, wobei A1 = 24). Ist das möglich?

Insbesondere möchte ich aus der Spalte G3 die Daten nehmen und unten von jedem Blatt, wo A1 24 ist, und kopieren Sie den Text in die Master Blatt, Spalte B11 und ab.

+0

Mein erster Gedanke ist, dass Sie das mit der 'Indirect()' Formel in Kombination mit Index/Match tun können. Sie würden eine Tabelle benötigen, die den Wochennummern den Tagen entspricht, und dann Indirect verwenden, um das Blatt mit dem übereinstimmenden Tag zu adressieren. – Sun

Antwort

2

In meinem Fall wird es am einfachsten sein, jedes einzelne Arbeitsblatt (mit Ausnahme des Blattes "Master") zu durchlaufen, zu prüfen, ob die Wochennummer mit der Wochennummer übereinstimmt und dann alle Kopier-/Vergangenheitsaktivitäten durchzuführen.

Beispiel:

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 
0

Für Ihre Referenz. Verwenden indirect Funktion enter image description here

0

Sie folgende

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 

als Randnotiz verwenden könnte, habe ich Scheck gültig Wochennummer vor gültigen Arbeitsblatt-Name ein weniger von dieser Kontrolle zu haben (dh nur für Arbeitsblätter mit der richtigen Wochennummer)

nichts, worüber man sich in diesem speziellen Fall Sorgen machen sollte, aber könnte nützlich sein, um es für anspruchsvollere Umgebungen zu überdenken

Verwandte Themen