作者foolkids (翼をください)
看板Office
标题[算表] VBA如何将字串内容视为逻辑运算内容?
时间Tue May 18 11:56:56 2021
软体: Office Excel
版本: 2013
我有个需求,需要将字串内容视为运算内容,例如:
Debug.Print 某种语法(“1 = 1”)
结果要得到 True
会有这个需求是因为字串内容是随机的,不限制有几项判断,也不限定And或Or,
所以希望可以整理成单一字串後进行判断。
自串可能会是:
A Or B and C Or D Or E …
以上,还请各位高手协助,感激不尽!
手机提问,排版不佳请见谅
--
┌─────────────────────────────┐
│就这样,终於到了启程的日子。
│
│和来机场送行的朋友们说着玩笑话,其实内心恍恍惚惚像在作梦。
│
│也似乎是因为,
为了走到「出发」这一步,耗尽了全部心力。 │
└─────────────────石田裕辅《不去会死!》─┘
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.10.4.74 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1621310220.A.389.html
1F:→ soyoso: 内文写到的某种语法,可以用evaluate,如debug.print 05/18 12:28
2F:→ soyoso: evaluate("1=1") 回传true,看是否可以应用到实际字串内, 05/18 12:28
3F:→ soyoso: 有可能会需要调整写法 05/18 12:28
4F:→ foolkids: 谢谢so大,目前 And Or没问题了,但是好像无法处理Like 05/18 12:43
5F:→ foolkids: ,有建议的方式吗?在考虑是不是用Instr当替代方案… 05/18 12:43
6F:→ foolkids: 哎呀,我搞错了,And Or也不行,好像只能是= <>这种符号 05/18 12:46
7F:→ foolkids: … 05/18 12:46
8F:→ foolkids: 想说先问问看so大,没有的话可能就要自己写Function来处 05/18 12:47
9F:→ foolkids: 理了 05/18 12:47
10F:→ soyoso: and和or也是可以,只是写法要调整,如"and(1=2,1=1)","or 05/18 13:00
11F:→ soyoso: (1=2,1=1)",会类似工作表函数的写法 05/18 13:00
12F:→ foolkids: 谢谢!那Like有解吗?一般工作表的写法没有Like,都是用 05/18 13:02
13F:→ foolkids: Find() > 0 … 05/18 13:02
14F:→ soyoso: 如果可以调整为工作表函数的find的话,写法如"find(""a"", 05/18 13:11
15F:→ soyoso: ""daef"")>0" 05/18 13:11
谢谢so大的协助,後来用了新增一个function来解决这个问题:
https://imgur.com/a/qXgUwiZ
这样就可以在Evaluate中使用Like功能
※ 编辑: foolkids (36.228.85.128 台湾), 05/19/2021 08:20:56
16F:推 waiter337: 好酷 想请教运用场景 05/19 19:36
17F:→ waiter337: 因为我可能思维固化了 05/19 19:37
18F:→ waiter337: 这个方式 可以替代那些方式 或者说 你遇到甚麽状况 05/19 19:37
19F:→ waiter337: 然後选择这种方式 05/19 19:38
我的使用场景是这样:
1. 维护者Key-in筛选条件,例如:"IsLike([栏位A],""A*"")"
2. 程式後续将中括号[]里的栏位A转换成特定资料,例如 "A0312"、"A1130"、"B0050"..
我实际上的场景是一张大表跑回圈,大表的标题是栏位A~栏位H。
回圈每列执行时,都替换中括号内的字串(第n列的栏位A),等後续送去Evaluate判断
3. 所以筛选条件本来是"IsLike([栏位A],""A*"")" 会变成
"IsLike("A0312",""A*"")",送去Evaluate判断後就可以知道每列是否符合筛选条件
4. 筛选条件可能会依据状况而改变,使用者只要维护字串就好,不用动程式码,
例如我条件可能会先判断索取资料的人,决定条件为
a."IsLike([栏位A],""A*"")" 或
b."IsLike([栏位A],""B*"")" 或更复杂,想要
c."OR(AND([栏位B] > "10", IsLike([栏位A],""C*""), IsLike([栏位A],""D*"")"
如此一来就可以用同一段程式码进行动态逻辑变更
※ 编辑: foolkids (220.137.31.203 台湾), 05/20/2021 19:31:04