作者hmsboy (一 身 是 宅)
看板Office
标题[问题] 想要把IIF的语法改良其他语法
时间Fri Oct 8 15:04:06 2021
(若是和其他不同软体互动之问题 请记得一并填写)
软体:office
版本:2019
其中一段 功能是
我有N个特定产品名称 产品甲~产品庚
......
Range("A2").Select
For i = 1 To 30
chkV1 = ActiveCell.Offset(0, 1).Value
ckVF = IIf(InStr(1, chkV1, "产品甲", 1) <> 0, "产品甲", _
IIf(InStr(1, chkV1, "产品乙", 1) <> 0, "产品乙", _
IIf(InStr(1, chkV1, "产品丙", 1) <> 0, "产品丙", _
IIf(InStr(1, chkV1, "产品丁", 1) <> 0, "产品丁", _
IIf(InStr(1, chkV1, "产品戊", 1) <> 0, "产品戊", _
IIf(InStr(1, chkV1, "产品己", 1) <> 0, "产品己", _
IIf(InStr(1, chkV1, "产品庚", 1) <> 0, "产品庚", _
"")))))))
If ckVF = "" Then
......
这种是前一个人写的
里面很多用这种IIF语法
如果要精简加未来好写好扩充
请问要怎麽改写
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.114.65 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1633676649.A.560.html
1F:→ Catbert: 使用Array 跟 Filter 10/08 18:50
阵列的话 我的程度还不行 不知道怎麽改
这段VBA的用意是这样
我有一份产品清单 要抓出 产品甲~产品庚
在一堆明细上 抓一栏品名资料
品名栏资料为 "美味的产品乙 100G" "来自大自然天然产品丙 300G"
"A牌产品辛五入装"
而要把重点三个字抓下来判断
例如跑到这笔资料 "来自大自然天然产品丙 300G"
产品甲 = 0
产品乙 = 0
产品丙 <>0 所以这一笔资料 就是产品丙
※ 编辑: hmsboy (220.142.41.41 台湾), 10/08/2021 22:09:03
谢谢 我的程度 有实作范本的话 就能改下去
我都视为模组 把旧语法套用上去 看得懂 从头写写不出来
我试看看
因为前一个人很爱用IIF 布林运算
全都部分写一长串
※ 编辑: hmsboy (59.120.114.65 台湾), 10/09/2021 10:18:06
有一行 我改成
For Each aWord In arrWords
If InStr(chkV1, aWord) > 0 Then
ckVF = aWord
Exit For
End If
Next
因为 後面还有
If ckVF = "" Then .....
如果被排除资料 会删除
这样感应该没错吧?
另外这部份
arrWords = Array("产品甲", "产品乙", "产品丙")
抓取产品名单 以便将来名单容易修改
ckP(i) = Worksheets("字串区").Cells(i + 1, 6).String
如果要放进去 要怎麽放
※ 编辑: hmsboy (59.120.114.65 台湾), 10/09/2021 11:14:48
5F:推 by135tw: 我po的也是google关键字後修改一下来的 10/09 17:49
6F:→ by135tw: If ckVF = "" Then ..... 跑看看和原本的结果会不会一样 10/09 17:50
7F:→ by135tw: 就知道会不会出错了 10/09 17:51
8F:→ by135tw: 最後的部份因为你有工作表有放产品清单了 10/09 17:52
9F:→ by135tw: 最简单的就是把arrWords = Array("产品甲", "产品乙", " 10/09 17:53
10F:→ by135tw: 改成类似 arrWords = Worksheets("字串区").Range("a:a") 10/09 17:55
我是改成
For Each aWord In Worksheets("字串区").Range("F2:F8")
我练习之後
对阵列的理解
Sub test()
Dim arrWords As Variant, aWord As Variant
arrWords = Array("产品甲", "产品乙", "产品丙")
For Each aWord In arrWords
MsgBox (aWord)
Next aWord
End Sub
这样的架构应该没错吧
※ 编辑: hmsboy (59.120.114.65 台湾), 10/11/2021 17:07:08
※ 编辑: hmsboy (59.120.114.65 台湾), 10/11/2021 17:41:21
11F:→ by135tw: 用Worksheets("字串区").Range("F2:F8") 有点违反你的 10/11 21:01
12F:→ by135tw: 好扩充要求 如果新增产品到F9之後还要到VBA改 10/11 21:03
13F:→ by135tw: 阵列没有很难只是名字对新手来说不常见 google就有 10/11 21:04
14F:→ hmsboy: 对喔 Range 我原本的方法才能抓资料抓下去 10/12 15:20
15F:→ hmsboy: 再请教一下 Range("a:a") 不包含 A1标题 要如何写 10/12 15:25
16F:→ by135tw: Range("A2:A" & Rows.Count) 10/13 17:33