使用多个字符串条件搜索Excel

时间:2011-06-12 21:16:20

标签: excel excel-vba vba

我想从预定义列表中搜索描述单元格中的任何单词(条件),并从相邻单元格中提取该项目的相关金额。

为了说明,这是我的设置:

   A   |   B   |   C   |     D    |    E    |   F    |

 Date  | Descr.| Amount|   Cat1   |   Cat2  |  Cat3  |

D,E,F:这些中的每一个都是项目类别。如果该行中的项目属于某个类别,我希望其数量在该同一行中填充该类别单元格。每个类别单元都有一个公式来测试它并执行操作。

我的第一个想法是使用VLookup,但我有一个查找值列表。我无法成功地做到这一点。每个类别单元格都有这样的公式 - >

=IF(SUM(COUNTIF($B10,{"*costco*","*saputo*","*t & t*"}))>0,$C10," ")

B列是指描述,搜索任何标准。如果描述中包含任何单词,则单元格将填充C列中的金额,否则左侧会有空格。

这样可以完美地工作,但是我需要标准(costco,saputo,t& t在这种情况下)是灵活的(在列表中添加或删除字符串)而不是在公式中硬编码。这是我的问题:如果我将标准替换为对另一个单元格的引用,则公式将停止工作。我对excel相对较新,不熟悉其功能的限制/约束,我怀疑这是问题。

非常感谢任何帮助,如果我需要提供更多信息,请告诉我。

ANKIT

2 个答案:

答案 0 :(得分:2)

创建名称(如命名范围,但引用的是值而不是范围。)

对于Excel 2007和2010,在“公式”选项卡上,“已定义名称”组,“名称管理器” 对于Excel 2003插入,名称,定义

创建一个新名称(让我们使用名称“KeyWords”),将其设置为“引用”值为

={"*costco*","*saputo*","*t & t*"}
然后

公式变为编辑作为数组公式输入

=IF(SUM(COUNTIF($B10,KeyWords))>0,$C10," ")

编辑列表然后变为编辑KeyWords的值是指值。这可以通过名称管理器完成,或者如果您愿意,可以通过VBA

完成

修改

样本VBA

Sub SetKeyWords()
    Dim wb As Workbook
    Dim nm As Name

    Set wb = ActiveWorkbook
    Set nm = wb.Names("KeyWords")
    nm.RefersTo = "={""NewString""}"

End Sub

答案 1 :(得分:1)

将您要搜索的字符串加载到数组中(通过将范围转换为数组,或让用户从您设计的小表单中选择字符串)

 Sub MyLookup(arrCategories() As Variant)
    Dim searchrange As Range
    Dim xCell As Range
    Dim count As Integer
    'set searchrange to the proper column
    For Each xCell In searchrange
       For Each catg In arrCategories
          If xCell = catg Then
              'Do something here
          End If
       Next catg
    Next xCell       
 End Sub

您可能需要根据案例是否重要来调整字符串数组。根据您的数据集的大小,将searchrange转换为数组可能会更好。

可能有更快的方法来查看在给定范围内是否找到某些字符串,但这是一般的想法。