2016-06-10 13 views
0

Ich bin auf der Suche nach bestimmten Spaltenzellen eine Reihe zu einer Zeit (d. H. A2, C2, G2 dann auf A3, C3, G2) kopiert auf ein neues Blatt eingefügt. Ich habe bei Verwendung sieht:VBA Selektive Kopie?

Sheets("Sheet1").Range("A1:A10").Copy 

Aber ich brauche Daten aus bestimmten Spalten zu kopieren.

Einig Pseudo-Code:

  1. Iterate durch jede Reihe
  2. Wenn das Datum in Spalte A beschränkt auf die bedingte Anweisung, Spaltenwerte vorgegebene kopieren und auf neues Blatt kopieren.
  3. Überprüfen Sie die nächste Zeile.

Im Moment habe ich eine for-Schleife aus den Zeilen 1 bis 50. Iterieren

'Copy Titles 
    Sheet2.Range("A1, E1, J1, K1, W1:X1, Y1, AA1").Copy 
    Sheets.Add 
    ActiveSheet.Range("A1").PasteSpecial 
'Copy Data 
'If today's date is later than a date in the Column A, copy the cell over. 
? 


'Fix Column Width 
    Range("A1:H1").ColumnWidth = 20 
'Align Columns 
    Columns("A:H").HorizontalAlignment = xlCenter 

End Sub 

ich unter jeder Auswahl zu denken, ich würde die gleiche Aussage tun, sondern kopieren auf das neue Blatt statt? Vielen Dank im Voraus!

+1

Ahhh - Ich kann nicht empfehlen ** nicht ** mit '.Select' mehr. Ich schlage sehr vor, durch zu lesen, wie man '.Select' vermeidet (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) und das auf anwenden dein Makro. – BruceWayne

+0

@BruceWayne, habe gerade einige Änderungen an meinem Code vorgenommen! – rmdlp

+1

Ah okay - aber wo ist der Rest? Sie sagen, Sie haben eine Schleife, aber ich sehe keine Schleife. Und so kopieren Sie diese Werte von "Sheet2" und fügen diese Werte in ein neues Blatt ein. Es gibt ein Datum in Spalte A (where?), Das Sie überprüfen möchten, und wenn ja, kopieren Sie das auf ... das neue Blatt? – BruceWayne

Antwort

1

Sie können die Bereiche in beliebiger Reihenfolge auswählen.

Zum Beispiel könnten Sie verwenden:

Range("A1:C1,E1,G1").Select 

auszuwählen Spalten AC, E und G

1

Hier ist eine Zelle zu einem Zeitpunkt:

Sheets("Sheet2").Range("A1").Value = Sheets("Sheet1").Range("A1").Value 

Hier ist eine Zeile Zeit:

Sheets("Sheet1").Rows("1:1").Copy Destination:=Sheets("Sheet2").Rows("1:1") 
+0

Nicht ganz, was ich suche, aber ich habe die Frage aktualisiert! – rmdlp

1

Ihre Anfrage und der Code, den Sie haben, stimmen nicht wirklich überein, daher nehme ich am besten an, was Ihre Hauptidee ist. Dies wird das Problem (wahrscheinlich) nicht lösen, aber hoffentlich kann es Ihnen zeigen, wie Sie damit umgehen können.

durch die folgenden lesen, sehen, ob es ähnlich ist zu dem, was Sie suchen:

Sub move_Info() 
' This sub will look in each cell in column A, and if the cell's date is BEFORE today's date, 
' then copy the cell, to a new row in a new sheet, same column. 

Dim cel As Range, rng As Range 
Dim iDate$, tDay As Date 
Dim columnsToCheck() As Variant 
Dim dataWS As Worksheet, newWS As Worksheet 

Set dataWS = Sheets("Sheet1") ' Change this as needed. This is where your data is. 
Set newWS = Sheets.Add(after:=dataWS) 
newWS.Name = "Copied Info" 

columnsToCheck() = Array(1, 2) ' this will check Columns A and B. To add more, just add more numbers, i.e. 
'columnToCheck() = Array(1,2,3,5) 

tDay = Date 
Debug.Print "Today is " & tDay 

Dim i&, lastRow&, nextRow& 
nextRow = 1 

dataWS.Activate 

With dataWS 
    For i = LBound(columnsToCheck) To UBound(columnsToCheck) 
     lastRow = .Cells(.Rows.Count, columnsToCheck(i)).End(xlUp).Row 
     Set rng = .Range(.Cells(1, columnsToCheck(i)), .Cells(lastRow, columnsToCheck(i))) 

     For Each cel In rng 
      If cel.Value < tDay Then 
       cel.Copy 
       newWS.Range(newWS.Cells(nextRow, columnsToCheck(i)), newWS.Cells(nextRow, columnsToCheck(i))).PasteSpecial 
       nextRow = newWS.Cells(newWS.Rows.Count, columnsToCheck(i)).End(xlUp).Row + 1 
       Application.CutCopyMode = False 
      End If 
     Next cel 

     'Reset nextRow, since you're starting in a new column 
     nextRow = 1 
    Next i 
End With 

End Sub 

Sie durch sie mit F8 Schritt kann, zu beobachten, wie es in einer Zeit, eine Linie funktioniert.

+0

Vielen Dank für Ihre Antwort! Das ist sehr nah an dem, was ich brauche. Ich würde diese erste Spalte nur als Bedingung benötigen. Also hoffentlich in den folgenden Zeilen: Überprüfen Sie, ob das Datum nicht dem heutigen Datum entspricht, kopieren Sie dann Zellen in derselben Zeile auf das neue Blatt (zB AX, FX, QX, wobei X eine Ganzzahl ist). – rmdlp

+0

@rmdlp - So , müssen Sie ** nur ** Spalte A für das Datum überprüfen, wenn das Datum übereinstimmt (ist vorher zu 'HEUTE '), kopieren Sie diese ganze Zeile auf das nächste Blatt? Ich denke, dass ich einen Teil vermisse, weil Sie die Spalten F und Q referenzieren. – BruceWayne

+0

Ich muss nicht die gesamte Zeile kopieren. Nur vorbestimmte Spalten müssten kopiert werden. Für einen kleinen Einblick enthält meine Tabelle Informationen, die ich nicht benötige. Also würde ich die Daten auswählen und auswählen müssen, die ich extrahieren möchte, sobald ich herausfinde, dass das Datum die Bedingung erfüllt. – rmdlp