当前位置: 代码迷 >> VBA >> 一个多重选择的 语句, 可能有函数可以实现么, 或者需要如何样编程
  详细解决方案

一个多重选择的 语句, 可能有函数可以实现么, 或者需要如何样编程

热度:9315   发布时间:2013-02-26 00:00:00.0
一个多重选择的 语句, 可能有函数可以实现么, 或者需要怎么样编程
现在有几百个产品 需要归类,基本上都有一一对应的产品编码, 可以直接用vlookup 搞定,但是问题出在有2个品牌很特殊
一个是 ms , 一个是symantec, 还必须根据描述来 决定 产品编码 ,细则见如下


A 列品牌 b 列产品归类编码
APC 528
Cisco 49
Vmware 425
Emerson 635
Redhat 528
Oracle 308
Ergotron 435
Lexmark 143
FujiXero 1
Adobe 1
McAfee 124
Autodesk 846
Seagate 308
3M 32
Logitech 43
ITI 413
Targus 53
Juniper 53
Lenten 53


ms &symantec, 还必须根据 C 列描述来 决定 产品编码 
包含下面关键字的 一个代码, 都不包含这些关键字的, 归类于 others, 也有相对应的代码,  
 
Microsoft Office, Visio, word, excel, powerpoint, PerformancePoint, OneNote, InfoPath 117
Exchange,Exchg,Outlook,Outlk 123
Project,Prjct 119
Win 7, Win Pro 7,Win Ult 7,Vista, Windows Svr,WinSvr,Windows Server, XP 132
SQL, Access, OfficeSharePoint, DynCRM 435
Hyper-V, Virtual Server, 635
Publisher,Pblshr 124 
Others 308

Symantec NETBACKUP, BACKUP EXEC, NBU, BE 425
others 846


---------------------

想请问各位一样, 只是用函数不用编程可能么,如果需要编程,如果你能提供程序最好,不能,能否帮忙提点下思路,我不会 VBA 编程


------解决方案--------------------------------------------------------
没看明白,你想要的是什么。

建议上传一个测试用的EXCEL文件,把你的的数据写在A,B,C列,然后在F列写出你期望的结果并加以说明。

可以上传到 http://www.access911.net/csdn
------解决方案--------------------------------------------------------
格式全乱了,楼主发给我吧
laoyebin@163.com
------解决方案--------------------------------------------------------
函数很难实现,VBA自定义函数可以不?
------解决方案--------------------------------------------------------
这个问题如果不修改你的原始查询表,程序实现的难度非常大。建议把B列详细列出的关键字全部拆分开,每一行只包含一个产品关键字。然后从原始表(规则说明)向查询表(要的结果)反向搜索。这样的结果可能会得到类似于VB的关键字把VBS重复统计的情况。不过针对性的设置分割标志就可以解决。

总而言之:建议修改“规则说明”表的结果以方便“要的结果”查询。类似于:

A B C
======================
Microsoft Office 117
Microsoft Visio 117
Microsoft word 117
......
Microsoft Win 7 132
......

------解决方案--------------------------------------------------------
学习啦
------解决方案--------------------------------------------------------
探讨
laoyebin,

谢谢你的建议,事实上我给it 技术人员的建议也是分开一个个做, 的确因为关键字太多了。

Oasis0535:
谢谢你, 自己本人实在对编程没什么基础,但是我肯去学, 因为时间不是很紧,我可以手动先分类,但是我还是很迫切的希望可以 实现公式自动分类。

您可以再指教一下么, 太感谢了

------解决方案--------------------------------------------------------
按照之前(参考#5楼)所说的方法处理后,在你的“要得结果”tab中,C2单元格可以输入下面的数组公式:

{=OFFSET(规则说明!$C$1,MIN(IF(IF($A2=规则说明!$A$2:$A$100, 规则说明!$B$2:B$100,"[none]")=0,ROW(规则说明!$C$2:$C$100),IF(ISERR(SEARCH(IF($A2=规则说明!$A$2:$A$100, 规则说明!$B$2:B$100,"[none]"),$B2)),65536,ROW(规则说明!$C$2:$C$100))))-1,0)}

然后将整个C列复制该数组公式。需要注意的是,公式假定你的'规则说明'tab只包含100行。如果超过100行,请修改公式中相应的$B$2:$B$100等范围。

注意:这种方法的效率不高!!!如果表格稍大,计算速度将会很慢!!!
------解决方案--------------------------------------------------------
探讨
10楼的高手,Oasis0535

很奇怪,我按照你说的改了规则说明,但是我按了 <Ctrl>+ <Shift>+ <Enter>输入的
输入数组, 却没有反映。因为不是一次做几万个数据,每天针对每个需求做的, 所以数据量不大, 只希望方便和准确, 请将您做的格式发到我邮箱 21150797@qq.com 谢谢

------解决方案--------------------------------------------------------
数组公式原本是将一组单元格成批处理。如果单元格个数不足数组那么大的情况下,只显示前n个结果。如果只有一个单元格,就只显示第一个结果。

数组公式是对每一个数组元素单独进行计算,然后分别得到结果,最后返回一个数组。基本原理跟单独的公式没什么区别,就是可以利用一些统计手段。

这个公式主要是按照1)品牌、2)产品的优先级从归类编码向产品匹配。如果品牌对了,归类编码的产品名称是空也算。匹配返回的是行号。如果查找到了,每个待查产品至少会返回一个行号。如果是类似于Microsoft下可能会返回两个。这就是要求“其他”产品分类必须在所有同品牌产品分类的最下面的原因。然后去一个最小行号,就是查找到的结果。其他不匹配的行号都被标记了65536。如果你的产品数量超过了6万就得改这个数值了。得到的行号在重新取C列的编码就可以了。SEARCH函数不区分大小写,如果找不到就返回错误。这样就直接判断这个函数是否出错就可以了。
  相关解决方案