2016-06-10 45 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