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

yimanine 2010-01-28 05:24:16
现在有几百个产品 需要归类,基本上都有一一对应的产品编码, 可以直接用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 编程
...全文
197 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yimanine 2010-02-02
  • 打赏
  • 举报
回复
晕倒了, 我才发现,为什么我自己做出来的数值,只有 关键字空白的选择,ms 只有 308, symantec 只有846 苍天啊, 晕了。

就是同一个原理, 怎么回事, 我还得再检查检查,
yimanine 2010-02-02
  • 打赏
  • 举报
回复
好了,是我自己的问题,太谢谢你了, 万岁 ~~耶。

yimanine 2010-02-02
  • 打赏
  • 举报
回复
恩, 谢谢了, 您太好了,一个很奇怪的问题发生了, 在你发回给我的表格里, 直接输入公式后是0
按了<Ctrl>+ <Shift>+ <Enter> 能生成正确的数字比如 308

但是我把函数搬回到我的真正应用的表格里后,却是 一直是0, 怎么都按按了<Ctrl>+ <Shift>+ <Enter> 不出正确的数字, 难道是格式问题?

我回家才能发邮件,我再研究下看怎么回事,如果还是搞不定,可能还是要麻烦你的。不好意思。
绿洲 2010-02-02
  • 打赏
  • 举报
回复
数组公式原本是将一组单元格成批处理。如果单元格个数不足数组那么大的情况下,只显示前n个结果。如果只有一个单元格,就只显示第一个结果。

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

这个公式主要是按照1)品牌、2)产品的优先级从归类编码向产品匹配。如果品牌对了,归类编码的产品名称是空也算。匹配返回的是行号。如果查找到了,每个待查产品至少会返回一个行号。如果是类似于Microsoft下可能会返回两个。这就是要求“其他”产品分类必须在所有同品牌产品分类的最下面的原因。然后去一个最小行号,就是查找到的结果。其他不匹配的行号都被标记了65536。如果你的产品数量超过了6万就得改这个数值了。得到的行号在重新取C列的编码就可以了。SEARCH函数不区分大小写,如果找不到就返回错误。这样就直接判断这个函数是否出错就可以了。
yimanine 2010-02-02
  • 打赏
  • 举报
回复
收到非常感谢,,输入公式后再按你说的<Ctrl>+ <Shift>+ <Enter> 可以了

我第一次接触数组概念, 非常感谢。

能否稍微解释下思路,我看着还有点晕,不好意思,我比较笨啦



laoyebin 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yimanine 的回复:]
laoyebin,

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

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

您可以再指教一下么, 太感谢了
[/Quote]

给个邮箱,发给你
yimanine 2010-02-01
  • 打赏
  • 举报
回复
laoyebin,

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

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

您可以再指教一下么, 太感谢了
绿洲 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yimanine 的回复:]
10楼的高手,Oasis0535

很奇怪,我按照你说的改了规则说明,但是我按了 <Ctrl>+ <Shift>+ <Enter>输入的
输入数组, 却没有反映。因为不是一次做几万个数据,每天针对每个需求做的, 所以数据量不大, 只希望方便和准确, 请将您做的格式发到我邮箱 21150797@qq.com 谢谢
[/Quote]
这个数组公式是用于得到产品归类编码的。不在规则说明中使用。给出的公式范例是"要的结果"表中C2单元格内的。修改过的xlsx文件已经给你发了过去。请查收。
yimanine 2010-02-01
  • 打赏
  • 举报
回复
10楼的高手,Oasis0535

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





yimanine 2010-02-01
  • 打赏
  • 举报
回复
衷心祝福大家虎年虎虎生威
yimanine 2010-02-01
  • 打赏
  • 举报
回复
非常感动各位,谢谢你们的热心。希望发可以发更精确的 函数 到我邮箱
21150797@qq.com

我初略解决了问题,先说下我自己的思路, 我把所有SYMANTEC , MS 的产品都设置了关键字,
即使那些不在 之前要求的关键字里的, 也一一 列出来, 而不是用others 来表示。


然后用了vlookup True 模糊匹配, ,3重IF 语句来实现, 基本可以都正确,解决了目前的小麻烦, 可是不是很完美。

IF(F2="Microsoft Corporation",VLOOKUP(J2,'Class Code'!$B$1:$C$58,2,TRUE),IF(F2="symantec",VLOOKUP(Sheet2!#REF!,'Class Code'!$B$60:$C$71,2,TRUE),
VLOOKUP(F2,Vendor!O:R,4,FALSE)))





Microsoft Bztlk 308
Microsoft CCF 308
Microsoft Cmmrc 308
Microsoft Core 308
Microsoft Duet 308
Microsoft Entourage 308
Microsoft Exprssn 308
Microsoft HPCPk 308
Microsoft ILM 308
Microsoft ISA 308
Microsoft MSDN 308
Microsoft MSMath 308
Microsoft SrchSvr 308
Microsoft SysCtr 308
Microsoft TechNet 308
Microsoft VFoxPro 308
Microsoft Visual 308
Microsoft VSPRO 308
Microsoft VSTeam 308
Microsoft Whale 308
Microsoft WinEBS 308
Microsoft WinHPC 308
Microsoft WinRghts 308
Microsoft WinRmt 308
Microsoft WinSB 308
Microsoft WinWebSvr 308
Microsoft Works 308


Symantec Antivirus 846
Symantec BACKUP EXEC 425
Symantec BE 425
Symantec ENDPOINT 846
Symantec MULTI-TIER 846
Symantec NBU 425
Symantec NETBACKUP 425
Symantec PROTECTION 846
Symantec SEP 846
Symantec service 425
Symantec SMP 846
Symantec VRTS 425


绿洲 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oasis0535 的回复:]
{=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)}
[/Quote]

输入数组公式是通过<Ctrl>+<Shift>+<Enter>输入的。我把你的“规则说明”tab修改成了如下的样子,如果某一品牌有“其他”产品条目,则必须放到该品牌所有产品描述的最下面:

A 列品牌 b列产品描述 c 列产品归类编码
Microsoft Office 117
Microsoft Visio 117
Microsoft word 117
Microsoft excel 117
Microsoft powerpoint 117
Microsoft PerformancePoint 117
Microsoft OneNote 117
Microsoft InfoPath 117
Microsoft Exchange 123
Microsoft Exchg 123
Microsoft Outlook 123
Microsoft Outlk 123
Microsoft Project 119
Microsoft Prjct 119
Microsoft Win 7 132
Microsoft Win Pro 7 132
Microsoft Win Ult 7 132
Microsoft Vista 132
Microsoft Windows Svr 132
Microsoft WinSvr 132
Microsoft Windows Server 132
Microsoft XP 132
Microsoft SQL 435
Microsoft Access 435
Microsoft OfficeSharePoint 435
Microsoft DynCRM 435
Microsoft Hyper-V 635
Microsoft Virtual Server 635
Microsoft Publisher 124
Microsoft Pblshr 124
Microsoft 308
Symantec NETBACKUP 425
Symantec BACKUP EXEC 425
Symantec NBU 425
Symantec BE 425
Symantec 846
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
绿洲 2010-02-01
  • 打赏
  • 举报
回复
按照之前(参考#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等范围。

注意:这种方法的效率不高!!!如果表格稍大,计算速度将会很慢!!!
garcon1986 2010-01-30
  • 打赏
  • 举报
回复
学习啦
laoyebin 2010-01-29
  • 打赏
  • 举报
回复
函数很难实现,VBA自定义函数可以不?
yimanine 2010-01-29
  • 打赏
  • 举报
回复
已经上传了 http://www.access911.net/csdn

01-27-多重条件.xlsx


第一页规则说明, 除了ms & symantec 需要查看具体描述 的关键字,才能决定产品归类,其他都是 直接根据品牌有一一对应的 归类编码。

要实现的功能在第2面, 绿色格子。请帮忙
绿洲 2010-01-29
  • 打赏
  • 举报
回复
这个问题如果不修改你的原始查询表,程序实现的难度非常大。建议把B列详细列出的关键字全部拆分开,每一行只包含一个产品关键字。然后从原始表(规则说明)向查询表(要的结果)反向搜索。这样的结果可能会得到类似于VB的关键字把VBS重复统计的情况。不过针对性的设置分割标志就可以解决。

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

A B C
======================
Microsoft Office 117
Microsoft Visio 117
Microsoft word 117
......
Microsoft Win 7 132
......
laoyebin 2010-01-28
  • 打赏
  • 举报
回复
格式全乱了,楼主发给我吧
laoyebin@163.com
ACMAIN_CHM 2010-01-28
  • 打赏
  • 举报
回复
没看明白,你想要的是什么。

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

可以上传到 http://www.access911.net/csdn

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧