Excelmacros可以根据单元格值将选中的单元格从一行中的单元格复制到另一个单元格

我正在尝试使用Excelmacros执行以下操作。 当date被input到工作表1中的单元格时,我想从该行中取出特定的单元格,并将它们复制到工作表2上的新行。下面是一个示例。

这将是工作表1。

ABCDE proj1 mary started - fiber proj2 jack complete 2/7/2014 fiber proj3 kim started - cat6 proj2 phil complete 2/9/2014 fiber 

因此,工作表2应该看起来像这样,因为他们中的两个有date,我只想特别从A行,C和D行拿来单元格。

 ABC proj2 complete 2/7/2014 proj2 complete 2/9/2014 

用下面的代码,我发现我能够基于一个单元格中的单词值,而不仅仅是一个完整的行,而不仅仅是我想要的特定的一个,当然,我希望它根据input的date而不是单词“回复“或”回复“。 任何帮助,将不胜感激。

 Sub Foo() Dim i As Long, iMatches As Long Dim aTokens() As String: aTokens = Split("reply,response", ",") For Each cell In Sheets("sheet1").Range("D:D") If (Len(cell.Value) = 0) Then Exit For For i = 0 To UBound(aTokens) If InStr(1, cell.Value, aTokens(i), vbTextCompare) Then iMatches = (iMatches + 1) Sheets("sheet1").Rows(cell.Row).Copy Sheets("sheet2").Rows(iMatches) End If Next Next End Sub 

这可能有帮助。 它需要放在Worksheet_Change部分。

这假定您的数据在Sheet1中的列A:E中,并且您希望在inputdate后将数据复制到Sheet2

 Private Sub Worksheet_Change(ByVal Target As Range) Dim nextRow As Long If Not Intersect(Target, Range("D:D")) Is Nothing Then If VBA.IsDate(Target) Then With Worksheets("Sheet2") nextRow = IIf(VBA.IsEmpty(.Range("A1048576").End(xlUp)), 1, .Range("A1048576").End(xlUp).Row + 1) .Range("A" & nextRow) = Target.Offset(0, -3) .Range("B" & nextRow) = Target.Offset(0, -1) .Range("C" & nextRow) = Target End With End If End If End Sub