【问题标题】:Converting nested LOOKUP formula into VBA code将嵌套的 LOOKUP 公式转换为 VBA 代码
【发布时间】:2020-02-27 03:40:28
【问题描述】:

我有 VBA 代码,可以根据选择标准将数据从一张表复制到另一张表中。目标表是一个项目名称列表,其中包含粘贴的数据列。

现在代码将源列中的所有数据复制到目标单元格中​​。我希望代码仅粘贴与项目名称匹配的数据,并为每个项目重复向下 - 类似于 vlookup。

我是 VBA 新手,不知道如何在代码中包含 vlookup。我有一个 Excel 公式,可以检索与项目名称匹配的不同值。我尝试将公式嵌入代码中,但收到“类型不匹配”错误,并且公式被突出显示。

有没有办法让代码循环遍历每个项目名称并粘贴它们的不同值?

感谢任何帮助!

Excel 公式 =IFERROR(LOOKUP(2, 1/((COUNTIF($J$8:J8,'项目计划'!D2:D91)=0)*($I$9='项目计划'!V2:V91)),'项目计划'!D2:D91),"") Source

当前代码

Option Explicit

Sub Update_Market_Status()
'
' Update_Market_Status Macro
' Updates Status field in Executive Market Summary Report
'

Dim d As Long
Dim prev_acts As String
Dim next_acts As String
Dim ws As Object
Dim status_report As Object
Dim is_synced As Boolean
Dim sync_value As String
Dim lastRow As Long

Set ws = ThisWorkbook.Sheets("Project plan")
Set status_report = ThisWorkbook.Sheets("Status Report")
lastRow = ThisWorkbook.Sheets("Project plan").Cells(Rows.Count, "D").End(xlUp).Row + 1

On Error Resume Next

sync_value = ws.Range("U2").Value


If VBA.LCase(sync_value) = "y" Then
    is_synced = True
Else
    is_synced = False
End If

If is_synced = True Then

        For d = 2 To lastRow
            If LCase(ws.Range("N" & d).Value) = "y" Then
                If LCase(ws.Range("T" & d).Value) = "c" Then
                    If prev_acts = vbNullString Then
                        prev_acts = "'- " & ws.Range("D" & d).Value
                        Else
                        prev_acts = prev_acts & vbLf & "- " & ws.Range("D" & d).Value
                    End If
                ElseIf LCase(ws.Range("T" & d).Value) = "o" Or LCase(ws.Range("T" & d).Value) = vbNullString Then
                    If next_acts = vbNullString Then
                        next_acts = "'- " & ws.Range("D" & d).Value
                        Else
                        next_acts = next_acts & vbLf & "- " & ws.Range("D" & d).Value
                    End If
                End If

            End If
     Next d

    status_report.Range("E8").Value = prev_acts ' Previous Actions
    status_report.Range("F8").Value = next_acts ' Next Actions

End If

End Sub

【问题讨论】:

    标签: excel vba loops vlookup


    【解决方案1】:

    解决此问题的一种方法是让 VBA 脚本将您提供的查找公式插入到新工作表的单元格中,然后选择并复制这些单元格并将它们仅作为值粘贴。

    类似的方法是使用 WorksheetFunctions 对象在 VBA 中调用公式的函数,然后将结果值写入工作表中。

    这两种方法都可以避免在 VBA 代码中重新创建工作表函数。

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 2013-05-27
      • 2021-07-25
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多