我有两张表,我想通过 VBA 使用索引匹配组合。 由于列名称/顺序每次都会更改,因此我需要使用标题名称(第一行)来标识每一列。我在一个工作簿中有两个工作表(水果和动物)。
我编写了以下 VBA 代码来运行循环,但失败了:
For i = 2 to 20
worksheets("fruit").cells(i, D).Value = _
worksheetfunction.index(worksheets("Animal").columns(animal_id), _
worksheetfunction.match(worksheets("fruit").cells(i, fruit_id).value, _
worksheets("animal").columns(fruit_id_animal), 0))
Next i
animal_id、fruit_id、i、fruit_id_animal 都是整数列号。我什至尝试过
.range.cells
而不是列,但它仍然不起作用。显示的错误是“应用程序定义或对象定义的错误”/1004。
有人可以帮助我吗?
谢谢。
快速修复
For i = 2 to 20
worksheets("Fruit").Cells(i, "D").Value = _
Application.Index(Worksheets("Animal").Columns(animal_id), _
Applicatiion.Match(Worksheets("Fruit").Cells(i, fruit_id).value, _
Worksheets("Animal").Columns(fruit_id_animal), 0))
Next i
改进(独立)
Option Explicit
Sub VBALookupTest()
' Animal
Const Fruit_ID_Animal As Long = 1
Const Animal_ID As Long = 2
' Fruit
Const Fruit_ID As Long = 1
Const Animal_ID_Fruit As Long = 4
Const Fruit_First_Row As Long = 2
Const Fruit_Last_Row As Long = 20
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Sheets("Animal")
Dim slrg As Range: Set slrg = sws.Columns(Fruit_ID_Animal)
Dim srrg As Range: Set srrg = sws.Columns(Animal_ID)
Dim dws As Worksheet: Set dws = wb.Sheets("Fruit")
Dim dlrg As Range: Set dlrg = dws.Range(dws.Cells(Fruit_First_Row, _
Fruit_ID), dws.Cells(Fruit_Last_Row, Fruit_ID))
Dim drrg As Range: Set drrg = dlrg.EntireRow.Columns(Animal_ID_Fruit)
With Application
drrg.Value = .Index(srrg, .Match(dlrg, slrg, 0))
End With
End Sub