Board logo

標題: [發問] 如何分截取字串(長、寬、高) [打印本頁]

作者: coldedge    時間: 2020-5-16 18:04     標題: 如何分截取字串(長、寬、高)

大家好,想請教各位是否有辦法縮短我以下的公式?

A欄位的字串是「數值*數值*數」,數值分別代表長度*寬度*高度。
如果我要求算A欄位字串中「長+寬+高」數值。我只會使用較長的函數分解後再加上
公式 =LEFT(A2,FIND("*",A2)-1)+MID(A2,FIND("*",A2)+1,FIND("*",A2,FIND("*",A2)+1)-(FIND("*",A2)+1))+MID(A2,FIND("*",A2,FIND("*",A2)+1)+1,10)
可是這樣的公式很長,是否有辦法再縮短呢?
謝謝大家!
[attach]32035[/attach]

[attach]32034[/attach]
作者: hcm19522    時間: 2020-5-16 18:27

SUM(MID(SUBSTITUTE(A2,"*",REPT(" ",99)),{1,2,3}*99-98,99)*1)

PRODUCT(MID(SUBSTITUTE(A2,"*",REPT(" ",99)),{1,2,3}*99-98,99)*1)
作者: coldedge    時間: 2020-5-16 18:47

回復 2# hcm19522

原來可以用空字串代替的方法來取得數值,函數的運用真得是千變萬化,感謝 hcm 大大又教了我一課!:D
作者: Andy2483    時間: 2023-6-2 09:48

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA陣列,學習方案如下,請各位前輩指教

執行前:
[attach]36499[/attach]

執行結果:
[attach]36500[/attach]


Option Explicit
Sub TEST()
Dim Brr, A, i&, j%, T$, xA As Range
'↑宣告變數
Set xA = Range([F1], [A65536].End(3))
'↑令xA變數是A~F欄儲存格
xA.Offset(1, 1).ClearContents: Brr = xA
'↑令xA變數向下向右各偏移1的範圍儲存格清除內容,
'令Brr變數是 二維陣列,以xA變數(儲存格)值帶入陣列中

For i = 2 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 1): A = Split(T, "*")
   '↑令T變數是 第1欄陣列值,
   '令A變數是 以"*"符號分割 T變數的一維陣列

   For j = 0 To 2: Brr(i, j + 2) = A(j): Next
   '↑設順迴圈!將A陣列值寫入Brr陣列裡
   Brr(i, 5) = Evaluate(Replace(T, "*", "+"))
   '↑令Brr第5欄陣列值是 (T變數置換 "*" 為 "+"後的新字串,
   '再將此字串以Evaluate方法計算成數值)

   Brr(i, 6) = Evaluate(T)
   '↑令Brr第6欄陣列值是 (T變數以Evaluate方法計算成數值)
Next
xA = Brr
'↑令Brr陣列值寫入xA變數中(儲存格)
Set xA = Nothing: Erase Brr
'↑令釋放變數
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)