如果工作表 3 中列中的日期也在工作表 2 中的列中,如何用工作表 2 中的一行数据自动填充工作表 2?



到目前为止,我有一个包含 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()

然后,需要通过右键单击将数据复制到的工作表并选择"查看代码"来将其添加到工作表中,然后再粘贴到打开的窗口中。 代码在打开选项卡时运行,因此在某些情况下可能需要切换选项卡以更新它。