返回列表 上一主題 發帖

[發問] EXCEL VBA 由計算說明計算金額(二)

[發問] EXCEL VBA 由計算說明計算金額(二)

原發問如下,是利用刪除字串來刪除部必要的字元
http://forum.twbts.com/thread-7705-1-1.html

因為前方式還不是很方便使用,希望設定簡單規則來刪除不必要的字元或是保留必要的字元
C欄計算說明中,只要保留 數字 0-9,運算符號 + - * / ^ % ,括號 ( ), 英文 a-z A-Z 其他刪除,
刪除後會變成標準計算式,再計算式放入D欄金額欄,為了方便檢查正確性,可否以公式方式放入。




檔案 EXCEL VBA 計算說明轉金額(二).rar (5.99 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

回復 2# Hsieh
感謝回覆,
這次有 CreateObject("Scripting.Dictionary") 讓我一直看不懂,上網研究後大致已經懂了你的程式,
因為要修改去除的碼,重新依照你的公式構架編寫如下:

另外再補充請教一問題, Mid(字串, i, 1) 取出一字如何判定是中文字?

Function MyCal(MyStr$) As Double
    Application.Volatile
    Set d = CreateObject("Scripting.Dictionary")
    Dic = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789%+-*/^()"
    For i = 1 To Len(Dic)
        d(Mid(Dic, i, 1)) = Mid(Dic, i, 1)
    Next
    For i = Len(MyStr) To 1 Step -1
        MyStr = Replace(MyStr, Mid(MyStr, i, 1), d(Mid(MyStr, i, 1)))
    Next
    MyCal = Evaluate(MyStr)
End Function
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 4# Hsieh

感謝回覆

在EXCEL是用CODE,爾且碼是正數5位
在VBA是用ASC,爾且碼是負數5位
VBA的ASC與EXCEL的ASC是不同意義,
EXCEL的函數與VBA的函數不同名用法也不同,學習起來真是痛苦。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 6# chin15
哇! 使用 CreateObject("VBSCRIPT.REGEXP") 讓程式碼更短,真厲害
雖然看不懂,還是先給一個讚
EXCEL裡找不到說明,網路都是例子找不到完整說明,不知哪裡有說明可以看,可否告知 一下。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 8# chin15

說明清楚,感謝你,又讓我多學了好幾招,再給你一個 讚
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 9# c_c_lai

謝謝你提供,在看你的公式時,也讓我想到另一種簡單寫法(列舉法)
Function MyCal(MyStr$) As Double
    Dim Dic As String, xStr As String
    Dic = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789%+-*/^()"
    For i = 1 To Len(MyStr)
        If InStrB(1, Dic, Mid(MyStr, i, 1), 1) <> 0 Then
            xStr = xStr & Mid(MyStr, i, 1)
        End If
    Next i
    MyCal = Evaluate(xStr)
End Function
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題