返回列表 上一主題 發帖

[發問] 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 三鍵輸入公式

回復 11# ML089
一個是帶入公式、另一個直接換算為值,
都是蠻不錯且簡單的處理方式。

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

回復 8# chin15

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

TOP

回復 1# ML089
提供你參考。
  1. Function decodeFMT(decode As String) As String
  2.     Dim tLen%, txt$, num$
  3.    
  4.     If Len(decode) = 0 Then decodeFMT = "": Exit Function
  5.     num = "=Sum("
  6.     For tLen = 1 To Len(decode)
  7.            txt = Mid(decode, tLen, 1)
  8.            If txt = "(" Or txt = ")" Or txt = "+" Or txt = "+" Or txt = "+" Or txt = "-" Or txt = "*" Or txt = "/" Or (txt >= "0" And txt <= "9") Then
  9.                 num = num + txt
  10.            End If
  11.     Next tLen
  12.     decodeFMT = num + ")"
  13. End Function
複製代碼
EXCEL VBA 計算說明轉金額.rar (9.07 KB)

TOP

http://www.dotblogs.com.tw/yc421206/archive/2008/12/14/6386.aspx

TOP

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

TOP

EXCEL VBA 計算說明轉金額(二).rar (7.58 KB)
1

評分人數

    • Hsieh: 給你一個讚!金錢 + 2

TOP

回復 4# Hsieh

感謝回覆

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

TOP

回復 3# ML089
判斷是否為漢字,可利用ASC函數取得字元碼,小於0則為漢字
學海無涯_不恥下問

TOP

        靜思自在 : 原諒別人就是善待自己。
返回列表 上一主題