我想从预定义列表中搜索描述单元格中的任何单词(条件),并从相邻单元格中提取该项目的相关金额。
为了说明,这是我的设置:
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
答案 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
转换为数组可能会更好。
可能有更快的方法来查看在给定范围内是否找到某些字符串,但这是一般的想法。