Excel VBA宏:从一个工作表中查找/匹配单元格到另一个工作表中的列

时间:2014-09-29 20:39:56

标签: excel vba excel-vba

好的,所以我有一张包含多张纸的工作簿。工作表名为:

输入 输出 硬件

输入和输出是与实际IP地址匹配的序列ID 输入1:192.168.0.1 输入2:192.168.0.2 ......等等。

硬件有3列。第一个包含Devices,第二列,其中包含输入序列ID和第三个输出序列ID。

烤面包机:输入1:输出3 Blender:输入2:输出2 ...等

现在,通常情况下,我会使用Vlookup(A1,输入!A:B,2)和Vlookup(A1,输出!A:B,2),但我必须将其合并到VBA宏中我们有,我不知道如何。

Sub TrackHardware()

'~~~~~~~~~~~~~~~~~~~~~
'Activating Device
'~~~~~~~~~~~~~~~~~~~~~
currentOutputRow = 2
Dim test As String


For currentRow = 2 To 32768 'The last row of your data
'For Loop to go through contents of Hardware individually

    If Not (IsEmpty(Worksheets("Hardware").Range("A" & currentRow).Value)) Then
        'To Skip the empty cells 

            HWID=Worksheets("Hardware").Range("a" & currentvalue).Value
            'HWID is the search term coming from Sheet:'Hardware'

            Desc=Worksheets("Hardware").Range("D" & currentvalue).Value
            'Desc is the Plain Text description coming from Sheet:'Hardware'



            inputrow={Match pseudocode that didn't work(HWID, "Inputs", Range:= "A:B", 2) }
            outputrow={Match pseudocode that didn't work(HWID, "Outputs", Range:= "A:B", 2) }
            'trying to find the row # of search term in Sheets 'Input' and 'Output'

            Worksheets("Inputs").Range("C" & inputrow).Value = Desc
            Worksheets("Outputs").Range("C" & outputrow).Value = Desc
             'Pastes The Device Description to Input and Output Sheets



    End If
Next currentRow
'And on to the next line in 'Hardware'

End Sub

我也想在相同的输入/输出或空白单元上考虑2个设备的错误,但我想我可以自己解决这些问题。这个查找功能确实给我带来了很多麻烦。

1 个答案:

答案 0 :(得分:0)

首先,如果您无法调用Application.Match函数,则似乎存在问题。我不确定为什么会丢失,但我知道有一些"有限"没有完整VBA功能的Office / Excel版本。我不确定你的安装情况是否如此。

现在,问你的问题......

使用Application.Match功能:

Match函数采用单行或单列范围输入。您试图传递范围"A:B",这将始终引发错误。改为改为单行/列范围。

此外,2不是第三个参数的选项,可以是-1(小于),0或False(精确)或1(大于)。我不确定这会引发错误,但无论如何你应该修复它。

inputRow = Application.Match(HWID, Worksheets("Inputs").Range("A:A"), False)

如果找不到完全匹配,则会引发错误,您可以像这样陷入错误:

inputRow = Application.Match(HWID, Worksheets("Inputs").Range("A:A"), False)
If IsError(inputRow) Then
    'Do something like:
    MsgBox HWID & " not found!", vbInformation
    Exit Sub
End If

注意如果您确实需要检查两个列,那么您可以加倍Match功能,或使用范围{{1}而不是方法。

.Find

使用Dim foundRange as Range Set foundRange = Range("A:B").Find(HWID) If Not foundRange Is Nothing Then inputRow = foundRange.Row Else MsgBox HWID & " not found!", vbInformation End If

处理错误

WorksheetFunction.Match的错误捕获应该类似于:

Application.WorksheetFunction.Match