查找具有多个条件并保留格式

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

我有一张MASTER表,包含物品代码(第B栏),说明(第C栏),单位(第D栏),地点1号(第E栏),地点2号位(第F栏),位置3号位(第G栏),位置4_Rate (中校H),Location5_Rate(第一部分),地点6_Rate(第J栏),地点7_Rate(中校K) 我使用配置如下的OUTPUT表 位置选择(Location_1到Location_7)作为下拉菜单:A16 商品代码:第D栏(手动输入) 描述:上校F. 数量:Col。G 单位:上校H. 率:上校 金额:上校J.

每当我在OUTPUT表中输入项目代码(Col.D)时,项目的描述以及相应位置的费率应分别自动出现在Col.F和Col.I的相应单元格中。第一个物品代码以单元格D20开头。 因为,我的目标是保留OUTPUT表格中的格式,我使用VBA代码作为描述字段。我在VBA代码中成功返回单个位置的速率(Location1_Rate)。但是,我无法修改获取不同位置的速率的代码(基于单元格A16中的位置)。请仔细阅读代码并提出建议。

注意:我有多个MASTER表用于查找商品代码,因此我提到的VBA考虑了多个工作表的查找。但是,只有MASTER Sheet1需要如上所述的二维查找。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fnd As Range
Dim NotFnd As Boolean
Dim Ws As Worksheet
NotFnd = False
If Target.CountLarge > 1 Then Exit Sub
If Not Target.Column = 4 Then Exit Sub
Application.EnableEvents = False
For Each Ws In Worksheets
If Not Ws.Name = "Output" Then
Set Fnd = Ws.Columns(2).Find(Target.Value, , , xlWhole, , , False, , False)
If Not Fnd Is Nothing Then
NotFnd = True
Fnd.Offset(, 1).Copy Target.Offset(, 2)
Exit For
End If
End If
Next Ws
If Not NotFnd Then MsgBox Target.Value & "not found"
Application.EnableEvents = True
End Sub
excel vba lookup
1个回答
0
投票

要保留格式,您应该在目标上应用格式,如下所示:

With Target.Offset(, 2)
      .Font.Size = 12
      .Font.Bold = True
     whatever

不幸的是,VBA没有格式画家,所以如果您不知道格式(或者想要保持您的应用程序的灵活性),那么您需要从源单元格中复制相关设置,例如

With Target.Offset(, 2)
      .Font.Size = Fnd.Offset(0, 1).Font.Size
      .Font.Bold = Fnd.Offset(0, 1).Font.Bold
     whatever

格式化有很多属性,找到相关的好运。

编辑:尝试一下:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fnd As Range
Dim item_row As Long

If Target.CountLarge > 1 Then Exit Sub
If Not Target.Column = 4 Then Exit Sub

Set Fnd = Sheets("MASTER").Range("B:B").Find(Target.Value, , , xlWhole, , , False, , False) ' item code
If Fnd Is Nothing Then
    MsgBox "Item not found"
    Exit Sub
Else
    Fnd.Offset(, 1).Copy Target.Offset(, 2) ' desc
    item_row = Fnd.Row  ' row of item
    Set Fnd = Sheets("MASTER").Range("E1:K1").Find(Cells("A16").Value, , , xlWhole, , , False, , False) ' loc name
    If Fnd Is Nothing Then
        MsgBox "Location not found"
    Else
        Sheets("MASTER").Cells(item_row, Fnd.Column).Copy Target.Offset(0, 5)
    End If
End If
End Sub

注意:1。我会用变量替换硬编码的range和sheetname引用,以使sub更灵活2.我会开发sub来支持超过1个单元格更改,如下所示:

for each c in target
      if c.column = 4 then debug.print c.value
next c
© www.soinside.com 2019 - 2024. All rights reserved.