到目前为止,我有一个包含 2 张工作表的工作簿。 1 工作表表示列中的日期,相邻列中的其他数据与此处无关。在工作表 2 中,一列中还有一个日期,然后相邻的 10 个相邻列也有一堆数据。我想创建一个新表(工作表 3),当且仅当工作表 1 中的日期也在工作表 2 中时,它将填充该表,并且仅返回工作表 2 中匹配日期的整行中的数据。 屁股的真正痛苦在于,有时在工作表 2 中有多个行共享相同的日期。
例如,在工作表 1 中,我在 B2 中有 2/19/2019。表 2 中还有 2 年 19 月 2019 日,右侧有一堆数据,用于当天的生产。在工作表 3 中,我想自动返回工作表 2 中的整行。这可能吗?我头痛:)
我尝试过使用 COUNTIF 和 MATCH,但我似乎无法弄清楚如何让它检查整个列的匹配日期。
如果我是你,我会:
- 在"工作表 1"和"工作表 2"中,确保所有日期都在"A"列中。
- 创建"工作表 3"并在"A"列中列出所有可能的日期。
在"工作表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#替换为您希望从"工作表 2"返回的列号。 输入"1"(不带引号)将返回列"A","2"将返回列"B"等...
在"工作表 3"中根据需要对任意数量的列重复此操作。
希望对您有所帮助!
仅使用公式有点复杂。多米尼克的建议将首先解决问题。虽然,我相信评论提到"工作表 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
需要编辑以下信息以适应您的电子表格:
- 更改语音标记中 3 个电子表格的名称,例如设置 a = 工作表(" 此处")
- 将 e 的值更改为帮助程序列所在的列的编号,即 =COLUMN()
然后,需要通过右键单击将数据复制到的工作表并选择"查看代码"来将其添加到工作表中,然后再粘贴到打开的窗口中。 代码在打开选项卡时运行,因此在某些情况下可能需要切换选项卡以更新它。