到目前为止,我有一本有两张纸的工作簿。 1张纸表示一列中的日期,而相邻列中的其他数据在此处与此无关。在工作表2中,一列中还有一个日期,然后相邻的10个相邻列也具有一堆数据。我要创建一个新表(第3页),当且仅当第1页中的日期也位于第2页中时,该表才会填充,并且将仅返回第2页中匹配日期的整个行中的数据。缺点是,有时工作表2中有多个行共享相同的日期。
例如,在工作表1中,我在B4中拥有2019年2月19日的信息。表格2中还有2/19/2019,右侧有大量数据用于当天的生产。在工作表3中,我想自动返回工作表2中的整个行。这可能吗?我很头疼:)
我尝试过使用COUNTIF和MATCH,但我似乎无法将精力集中在如何检查整个列以查找匹配日期上。
答案 0 :(得分:0)
如果我是你,我会:
在“表3”的“ B”列中,输入以下公式。...
=IF(COUNTIFS('Sheet 1'!$A:$A,$A1,'Sheet 2'!$A:$A,$A1)>0,VLOOKUP($A1,'Sheet 2'!$A:$Z,#COLUMN NUMBER#,0),"")
您需要将 #COLUMN NUMBER#替换为希望从“ Sheet 2”返回的列号。输入“ 1”(不带引号)将返回列“ A”,“ 2”将返回列“ B”,依此类推...
根据“ Sheet 3”中的要求在所有列中重复此操作。
希望有帮助!
答案 1 :(得分:0)
仅使用公式有点复杂。多米尼克提出的建议将首先解决该问题。虽然,我相信评论中提到“表2中有多个共享相同日期的行”可能会有一些问题。 我认为公式只会返回符合条件的第一行。
我看到没有VBA标记,但是我唯一能想到的答案就是一个VBA脚本来绕开这些子句。 它还需要在“ Sheet2”上有一个帮助器列,以标识已经检查了一行,我在测试电子表格中将其设置为H列(第8列)。
如果这对您有用,请在下面找到它。
Option Explicit
Sub Worksheet_activate()
Dim b, c, d, x As Integer
Dim a, ab, ac As Worksheet
'Names of the spreadsheets need to be in the speech marks.
Set a = Worksheets("Sheet1") 'Sheet to be compared.
Set ab = Worksheets("Sheet2") 'Sheet to look through and copy from.
Set ac = Worksheets("Sheet3") ' Sheet to be pasted into.
b = a.Cells(a.Rows.Count, "A").End(xlUp).Row 'Bottom date in column A of "Sheet1"
c = ab.Cells(ab.Rows.Count, "A").End(xlUp).Row 'Bottom date in column A of "Sheet2"
d = ac.Cells(ac.Rows.Count, "A").End(xlUp).Row + 1 'Next empty space in column A of "Sheet3"
e = 8 'Number value for the helper column. Set as 8 for column H.
x = 2
Do Until x > c
'Helper column placed in column H.
If ab.Cells(x, e) = "" Then
If WorksheetFunction.CountIf(a.Range("A2:A" & b), ab.Range("A" & x)) >= 1 Then
ab.Rows(x).Copy
ac.Range("A" & d).PasteSpecial xlPasteValuesAndNumberFormats
d = ac.Cells(ac.Rows.Count, "A").End(xlUp).Row + 1
End If
End If
'Text added to helper column
ab.Cells(x, e) = "Yes"
x = x + 1
Loop
Application.CutCopyMode = False
ac.Range("A" & d).Select
End Sub
以下信息需要进行修改以适应您的电子表格:
然后需要通过右键单击将数据复制到的工作表并将其粘贴到打开的窗口中,然后选择“查看代码”,将其添加到工作表中。 该代码在打开选项卡时运行,因此在某些情况下可能需要切换选项卡以对其进行更新。