在工作表中搜索列的值;如果找到复制前两列值和列标题

时间:2013-07-09 15:55:29

标签: excel vba filter copy-paste

我对VBA没有经验,但我被要求在工作中找到解决这个问题的方法 我有一张包含数据的表格:

名称.....更改日期 ....... 01/01/13 ...... 01/02/13 ...... .. 01/03/13

Joe ............ 02/05/13 ..................... Late

最高日期值是应付账单的日期和日期值(1/05/13)将是账单变更的日期。我需要搜索每个日期列(1 / 1-1 / 3)和单词“Late”如果找到我需要将名称和日期更改并将日期复制粘贴到另一个工作表中。在这个例子中,我将复制值:

乔........ 13年2月5日13年1月1日.........

进入另一张纸。我很感激你提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

您不需要使用VBA。使用INDEX和MATCH函数查找Late晚期的位置。

稍后您可以过滤以仅显示列1 / 1-1 / 3中较晚的行。

根据您的需要进行调整,但这是基本想法。

在“更改日期”和2013年1月1日之间插入一列,并将其命名为“截止日期”(现在为c列)。

如果是C2,请输入=IFERROR(INDEX($D$1:$F2,1,MATCH("Late",$D2:$F2,0)),"")

拖放C列

This is what it should look like

答案 1 :(得分:0)

尝试这个...这会在“C”列中搜索单词“Late”,如果它在那里它会复制整行并将其粘贴到新的工作表中,它将循环显示您拥有的所有数据并粘贴新工作表中迟到的所有行。它并不能完全满足您的需求,但却是一个很好的起点。

Dim j As Integer
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("sheet2")

For j = 2 To ws1.Range("C65536").End(xlUp).row
    If ws1.Cells(j, 2) = "late" Then ws1.Rows(j).Copy ws2.Rows(ws2.Cells(ws2.Rows.Count, 2).End(xlUp).row + 1)
Next j