作者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/m.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