[算表] VBA如何將字串內容視為邏輯運算內容?

看板Office作者 (翼をください)時間2年前 (2021/05/18 11:57), 2年前編輯推噓1(1018)
留言19則, 3人參與, 2年前最新討論串1/1
軟體: 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://www.ptt.cc/bbs/Office/M.1621310220.A.389.html

05/18 12:28, 2年前 , 1F
內文寫到的某種語法,可以用evaluate,如debug.print
05/18 12:28, 1F

05/18 12:28, 2年前 , 2F
evaluate("1=1") 回傳true,看是否可以應用到實際字串內,
05/18 12:28, 2F

05/18 12:28, 2年前 , 3F
有可能會需要調整寫法
05/18 12:28, 3F

05/18 12:43, 2年前 , 4F
謝謝so大,目前 And Or沒問題了,但是好像無法處理Like
05/18 12:43, 4F

05/18 12:43, 2年前 , 5F
,有建議的方式嗎?在考慮是不是用Instr當替代方案…
05/18 12:43, 5F

05/18 12:46, 2年前 , 6F
哎呀,我搞錯了,And Or也不行,好像只能是= <>這種符號
05/18 12:46, 6F

05/18 12:46, 2年前 , 7F
05/18 12:46, 7F

05/18 12:47, 2年前 , 8F
想說先問問看so大,沒有的話可能就要自己寫Function來處
05/18 12:47, 8F

05/18 12:47, 2年前 , 9F
理了
05/18 12:47, 9F

05/18 13:00, 2年前 , 10F
and和or也是可以,只是寫法要調整,如"and(1=2,1=1)","or
05/18 13:00, 10F

05/18 13:00, 2年前 , 11F
(1=2,1=1)",會類似工作表函數的寫法
05/18 13:00, 11F

05/18 13:02, 2年前 , 12F
謝謝!那Like有解嗎?一般工作表的寫法沒有Like,都是用
05/18 13:02, 12F

05/18 13:02, 2年前 , 13F
Find() > 0 …
05/18 13:02, 13F

05/18 13:11, 2年前 , 14F
如果可以調整為工作表函數的find的話,寫法如"find(""a"",
05/18 13:11, 14F

05/18 13:11, 2年前 , 15F
""daef"")>0"
05/18 13:11, 15F
謝謝so大的協助,後來用了新增一個function來解決這個問題: https://imgur.com/a/qXgUwiZ 這樣就可以在Evaluate中使用Like功能 ※ 編輯: foolkids (36.228.85.128 臺灣), 05/19/2021 08:20:56

05/19 19:36, 2年前 , 16F
好酷 想請教運用場景
05/19 19:36, 16F

05/19 19:37, 2年前 , 17F
因為我可能思維固化了
05/19 19:37, 17F

05/19 19:37, 2年前 , 18F
這個方式 可以替代那些方式 或者說 你遇到甚麼狀況
05/19 19:37, 18F

05/19 19:38, 2年前 , 19F
然後選擇這種方式
05/19 19:38, 19F
我的使用場景是這樣: 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
文章代碼(AID): #1WepiCE9 (Office)
文章代碼(AID): #1WepiCE9 (Office)