索引匹配循环VBA

问题描述 投票:0回答:1

我有两张表,我想通过 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。

有人可以帮助我吗?

谢谢。

excel vba
1个回答
0
投票

快速修复

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
© www.soinside.com 2019 - 2024. All rights reserved.