gpt4 book ai didi

excel - 使用 2 张纸,如果单元格值匹配,则从另一列中引入日期值

转载 作者:行者123 更新时间:2023-12-04 22:28:46 27 4
gpt4 key购买 nike

知道 VLOOKUP 选项,但更愿意理解下面的更正以使用 LOOP

我有 2 张数据表,我正在使用“工作文件”来运行宏。

wbTP 是目标和基础数据集。

wbEVAL 是宏将从中读取的位置。

两个工作表都有一个评估者 ID,它充当两个工作表之间的链接。

目标 : 从 wbTP 中的第 2 行开始读取 Evaluator ID,并检查 wbEVAL 中 Evaluator ID 列的每一行。如果找到,则返回在同一行的另一列中找到的 Complete_Date 字段。如果没有找到,什么也不做。如果找到并且该字段为空白,则不执行任何操作。

我下面的代码在尝试返回值的 OFFSET 行上出现故障。我对 VBA 还是比较陌生,所以我认为我的计数器没有被正确使用。任何帮助,将不胜感激。

数据集示例:

世贸组织:

CASE ID     CREATE DATE     EVALUATOR ID    COMPLETE DATE
10001 1/2/2019 999 (to be pulled in from wbEVAL)
10002 1/3/2019 998 (to be pulled in from wbEVAL)
10003 2/1/2019 922 (to be pulled in from wbEVAL)

wbEVAL
CASE NAME   CASE TYPE     EVALUATOR ID   COMPLETE DATE
ABC ENG 999 2/2/2019
BZG ENG 998 2/3/2019
BBC PNG 922 3/1/2019

代码:
    Sub CompleteDate()


Dim wbTP As Workbook
Dim wbEVAL As Workbook

Dim wsTP As Worksheet
Dim wsEVAL As Worksheet

Dim iTP As Long
Dim iEVAL As Long
Dim iMACRO As Long


Set wbTP = Workbooks("TP.csv")
Set wbEVAL = Workbooks("EvalTable.csv")

Set wsTP = wbTP.Worksheets.Item("TP")
Set wsEVAL = wbEVAL.Worksheets.Item("EvalTable")

lastrowTP = wbTP.Sheets("TP").Range("c" & Rows.Count).End(xlUp).Row
lastroweval = wbEVAL.Sheets("EvalTable").Range("A" & Rows.Count).End(xlUp).Row

iMACRO = 1


For iTP = 2 To lastrowTP
For iEVAL = 2 To lastroweval
If wsTP.Cells(iTP, 15) = wsEVAL.Cells(iEVAL, 5) Then

wsTP.Range("BB").Offset(iTP, 0) = wsEVAL.Cells(iEVAL, "E")

iMACRO = iMACRO + 1

End If
Next iEVAL
Next iTP

End Sub

最佳答案

你为什么不直接使用 VLOOKUP公式?您不需要 VBA 来执行此操作。你也可以写成 VLOOKUP如果您需要某种自动化,请使用您的工作人员 VBA 文件公式。应该比 2 个循环更容易且更快。

对于列 COMPLETE DATE在工作表中 TP只需使用

=IFNA(VLOOKUP(C:C,EvalTable!C:D,2,FALSE),"")

或使用 VBA 编写该公式(如果需要自动化):
Worksheet("TP").Range("D2:D100").Formula = "=IFNA(VLOOKUP(C:C,EvalTable!C:D,2,FALSE),"""")"

并调整您的范围 D2:D100 .
所以你最终会得到类似的东西
Option Explicit

Public Sub CompleteDate()
Dim wsTP As Worksheet
Set wsTP = ThisWorkbook.Worksheets("TP")

Dim wsEVAL As Worksheet
Set wsEVAL = ThisWorkbook.Worksheets("EvalTable")

Dim LastRowTP As Long
LastRowTP = wsTP.Cells(wsTP.Rows.Count, "C").End(xlUp).Row

wsTP.Range("D2:D" & LastRowTP).Formula = "=IFNA(VLOOKUP(C:C," & wsEVAL.Name & "!C:D,2,FALSE),"""")"
End Sub

这将通过使用 2 个循环的代码来完成。但在大量数据上,它会非常慢。使用 VLOOKUP 公式。公式是 Excel 的强项。
Option Explicit

Public Sub CompleteDate()
Dim wsTP As Worksheet
Set wsTP = ThisWorkbook.Worksheets("TP")

Dim wsEVAL As Worksheet
Set wsEVAL = ThisWorkbook.Worksheets("EvalTable")

Dim LastRowTP As Long
LastRowTP = wsTP.Cells(wsTP.Rows.Count, "C").End(xlUp).Row

Dim LastRowEval As Long
LastRowEval = wsEVAL.Cells(wsEVAL.Rows.Count, "A").End(xlUp).Row

Dim iTP As Long
Dim iEVAL As Long

For iTP = 2 To LastRowTP
For iEVAL = 2 To LastRowEval
If wsTP.Cells(iTP, "C") = wsEVAL.Cells(iEVAL, "C") Then
wsTP.Cells(iTP, "D").Value = wsEVAL.Cells(iEVAL, "D").Value
Exit For
End If
Next iEVAL
Next iTP
End Sub

关于excel - 使用 2 张纸,如果单元格值匹配,则从另一列中引入日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com