2016-06-10 80 views
0

我正在尋找複製某一列單元格一次一行(即A2,C2,G2,然後到A3,C3,G2)粘貼到一個新的工作表。我看使用:VBA選擇性複製?

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

但我需要將數據從某些列複製。

一些僞代碼:

  1. 迭代通過每個
  2. 如果在列A侷限的條件語句中的日期,複製預先確定的列值,並複製到新的工作表。
  3. 檢查下一行。

我現在有一個for循環從行迭代1到50

'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 

我每次選擇在想,我會做同樣的語句,但複製到新的工作表呢?先謝謝你!

+1

Ahhh - 我不能推薦**不**使用'.Select'更多。我強烈建議閱讀[如何避免使用'.Select'](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)並將其應用於你的宏。 – BruceWayne

+0

@BruceWayne,實際上對我的代碼做了一些編輯! – rmdlp

+1

啊好的 - 但剩下的呢?你說你循環,但我沒有看到一個循環。所以你從'Sheet2'複製這些值,並將這些值粘貼到一個新的表格中。 A列中有一個日期(您在哪裏?)要檢查,如果是,請將其複製到...新表中? – BruceWayne

回答

1

您可以按照您想要的任何順序選擇範圍。

例如,你可以使用:

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

選擇列AC,E和G

1

這是一次在一個小區:

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

這裏是一排一次:

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

不是我在找什麼,但我更新了問題! – rmdlp

1

你的請求和你的代碼並不匹配,所以我正在猜測你的主要想法是什麼。這不會(可能)解決問題,但希望能告訴你如何去做這件事。

通過下面的內容,看它是否類似於你在找什麼:

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 

您可以通過它與步F8 ,看它是如何工作的一行的時間。

+0

謝謝你的迴應!這與我所需要的非常接近。我只需要第一列作爲條件。所以希望沿着以下幾行: 檢查日期是否不等於今天的日期,然後將同一行中的單元格複製到新工作表(即AX,FX,QX,其中X是整數)。 – rmdlp

+0

@rmdlp - So ,你只需要檢查**日期的A列,如果日期匹配(在「TODAY」之前),將整行復制到下一張表格中?我想我錯過了一些部分,因爲你參考了列F和Q. – BruceWayne

+0

我不需要複製整行。只有預定的列需要被複制。因此,爲了一點洞察力,我的電子表格中包含了我不需要的信息。所以我需要選擇我想要提取的數據,一旦我發現日期滿足條件。 – rmdlp