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替换索引匹配公式的主要内容,如果未能解决你的问题,请参考以下文章