【问题标题】:VBA Code for Excel VBA Lookup based on multiple inputs(partial)基于多个输入的 Excel VBA 查找的 VBA 代码(部分)
【发布时间】:2014-07-31 14:43:22
【问题描述】:

我的 Excel Sheet 格式与此类似

Name code1  Name Code2  Name       Number    Input1   Input2   
AB           XY        GSABPEXY1    110      BA       BC
BC           BA        GSBCPEBA1    120
CD           CA        GSCDPECA1    13
DC           DA        GSDCPEDA3    140
BC           BA        GSBCPEBA3    15

问题:

  1. 我想通过匹配 Input1 AND Input2 中的输入来获取 Name 列中的值。
  2. 我需要将这些匹配值粘贴到另一个工作表的预定义特定行和列单元格中
  3. 使用 excel 函数 countifs 我正在计算 A 列(名称代码 1)和 B 列(名称代码 2)中具有相同重复值的行数,例如在上面的 BC 和 BA 中,计数为 2。
  4. 我想将这个值(在 #3 中提到)用于循环迭代

我得到的这段代码看起来非常接近,但它缺少两件事 ABC 在 INSTR 函数中预定义并且它没有 AND 运算符 - 我不知道该怎么做。我对 VBA 很陌生,所以如果我遗漏了一些简单的东西和/或提供的信息较少,请原谅我。

代码:

Sub Hostname()
    Dim K As Long, r As Range, v As Variant
    K = 1
    Dim w1 As Worksheet, w2 As Worksheet
    Set w1 = Sheets("Sheet2")
    Set w2 = Sheets("Sheet3")
    w1.Activate
    For Each r In Intersect(Range("A:A"), ActiveSheet.UsedRange)
        v = r.Value
        If InStr(v, "ABC") > 0 Then
            r.Copy w2.Cells(K, 1)
            K = K + 1
        End If
    Next r
End Sub

【问题讨论】:

  • 您为什么不创建一个值为Input1&Input2 的第三列并对其进行查找?您根本不需要任何 vba 来进行查找。
  • 问题是 Input1 和 Input2 不足以进行 vlookup 以从 C 列中获取所有值,如上表所示。如果您注意到如果我只使用输入 BA 和 BC 并使用 Vlookup,我只会得到第一个 GSBCPEBA1 而不是第二个匹配的 GSBCPEBA3。我不确定 vlookup 是否可以做类似循环的事情。
  • 不,VLookup 不适合进行迭代。根据我对您正在尝试做的事情的理解,我已经将一些示例代码作为答案。

标签: excel vba


【解决方案1】:

好的,我想我知道你想做什么了。这个怎么样?

Sub Hostname()

    Dim codeName1 As String
    Dim codeName2 as string
    Dim count As Integer
    Dim r As Range
    Dim targetRange as Range

    Set targetSheet = ThisWorkbook.Sheets("MyTargetSheetName").Range("AddressOfFirstCellForDataInput")
    codeName1 = "BC"
    codeName2 = "BA"

    For Each r In ActiveSheet.Range("A:A")
        with r
            If .Value2 = codeName1 And .Offset(0, 1).Value2 = codeName2 Then
                targetRange.Offset(count, 0).value = .Offset(0, 2).Value2
                count = count + 1
            ElseIf Len(Trim(.Value2)) = 0 Then
                Exit For
            end if
        End With
    Next

    Call msgbox("Found " & count & "cells matching Name code 1: " & codeName1 & " Name code 2: " & codeName2)
End Sub

这将计算与名称代码 1 和名称代码 2 匹配的单元格的数量。你能调整它来做你想做的事吗?

【讨论】:

  • 对不起,我试图运行这段代码,但它没有给出任何输出。我将 For Each r In ActiveSheet.Range("A:A") -> For Each r In ActiveSheet.Range("C:C") 和 ElseIf Len(Trim(.Value2) = 0 Then -> 更改为 ElseIf Len( Trim(.Value2)) = 0 然后
  • 这个更改 ElseIf Len(Trim(.Value2) = 0 Then -> 到 ElseIf Len(Trim(.Value2)) = 0 Then 很好,我忘了那里有括号。我认为,另一个更改对于您想要的是错误的。我现在将修改代码,以便为您提供输出。再试一次,让我知道。你到底想输出什么?
  • 我正在寻找的代码匹配从 Input1 AND Input2 获取的值是否存在(或部分包含)在列 C 的任何单元格中,如果它们存在则复制这些单元格的值在另一张纸上说 sheet2 的预定单元格。匹配检查应该是迭代的,直到可以从另一列(例如 F 和单元格 F1)中获取值。希望这些信息对您有所帮助。
  • 好的,我再修改一下。
  • 现在怎么样?您显然需要修改目标工作表的名称和目标单元格的地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多