VBA替换索引匹配公式

Posted

技术标签:

【中文标题】VBA替换索引匹配公式【英文标题】:VBA to replace index match formula 【发布时间】:2014-02-09 11:46:03 【问题描述】:

我是 VBA 新手,并试图通过以下场景找到自己的方式:

sheet1 包含列 A(项目)B(描述)C(价格)(这是我的搜索表)

sheet2 具有完全相同的列(这是我的数据库表)

我想要做的是:当我在 sheet1 列 a 中输入项目代码时,匹配 sheet2 中的唯一值并将 B 和 C 列中的值复制粘贴到该项目的 sheet1。

我希望这只发生在 sheet1 中的活动单元格上,这可能吗?

我希望我足够清楚 亲切的问候

【问题讨论】:

【参考方案1】:

将以下代码添加到Sheet1 module

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    On Error Resume Next
    'if changed entire range ITEMS1'
    If Target.Name.Name = "ITEMS1" Then
        Dim tarRange As Range
        Set tarRange = Application.Intersect(Range("ITEMS1"), Target)
        If Not tarRange Is Nothing Then
            Dim sh2 As Worksheet
            Dim res As Range
            Dim tarRow As Range

            'change "Sheet2" to the sheet name that is true for you'
            Set sh2 = ThisWorkbook.Worksheets("Sheet2")

            For Each tarRow In tarRange.Cells

                Set res = sh2.Range("A:A").Find(What:=tarRow.Value, LookAt:=xlWhole)

                If res Is Nothing Then
                    tarRow.Offset(0, 1).Resize(1, 2).Value = "not found"
                    'MsgBox "There is no matching value on Sheet2"
                Else
                    'if we found value on sheet2, than copy range B,C'
                    tarRow.Resize(1, 3).Value = res.Resize(1, 3).Value
                End If
            Next
        End If
    End If
    Application.EnableEvents = True
End Sub

【讨论】:

嗨 Simoco,问个简单的问题,有什么办法可以从这个宏中免除两个词?我想做什么:每次宏都会在a列中找到日期或项目的单词:a不做任何事情。 我理解正确吗,如果我们在A列中输入“日期”或“项目”,那么宏应该什么都不做? 完全正确。当我们输入日期或项目时,它不应该什么都不做 将行 If Not Application.Intersect(Range("A:A"), Target) Is Nothing Then 更改为 If Not Application.Intersect(Range("A:A"), Target) Is Nothing And Target<>"item" And Target<>"date" Then 我希望这是我最后一次打扰你们,但是有没有机会可以将这段代码转换为执行以下操作:【参考方案2】:

您说您想使用 VBA 来替换使用公式,但您没有说明原因。 VBA 很棒,但我认为公式是完成这项特殊工作的方法。

分别格式化Sheet1和Sheet2和Table1和Table2中的数据,然后:

在表 1 的 B 列中,输入:

=INDEX(Table2[Description],MATCH([Item],Table2[Item],0),)

在表 1 的 C 列中,输入:

=INDEX(Table2[Price],MATCH([Item],Table2[Item],0),)

【讨论】:

以上是关于VBA替换索引匹配公式的主要内容,如果未能解决你的问题,请参考以下文章

excel vba索引匹配数组以分隔文件

将一个单元格中的字符串放入我的索引匹配 VBa 脚本的中间

在索引/匹配公式中求和

使用索引/匹配的 Excel 公式

如何为多变量索引匹配公式创建 UDF

Excel 技术篇 - 利用Match公式返回匹配的最后一个数据的索引