返回列表 上一主題 發帖

取出固定字串後的數字

取出固定字串後的數字

問題
如何取出A欄內fee後的數字,若同一儲存格有兩個數字,則分別列出
答案如B2至C3

取出固定字串後的數字.zip (6.35 KB)

joyce

  1. Sub zz()
  2. Dim a, b(), k, n&
  3. a = [a2:a3].Value
  4. ReDim b(1 To UBound(a), 1 To 10)
  5. With CreateObject("vbscript.regexp")
  6.     .Pattern = ".*?fee\$(\d+)"
  7.     .Global = True
  8.     .ignorecase = True
  9.     For i = 1 To UBound(a)
  10.         If .test(a(i, 1)) Then
  11.             k = Split(.Replace(a(i, 1), "$1|"), "|")
  12.             n = IIf(UBound(k) > n, UBound(k), n)
  13.             For j = 0 To UBound(k) - 1
  14.                 b(i, j + 1) = k(j)
  15.             Next
  16.         End If
  17.     Next
  18.     [b2].Resize(i - 1, n) = b
  19. End With
  20. End Sub
複製代碼

TOP

B2:右拉/下拉
=iferror(-LOOKUP(1,-MID($A2,FIND("|",SUBSTITUTE($A2,"fee","|",COLUMN(A1)))+4,ROW($1:$9))),"")

TOP

回復 3# 准提部林


    能否請問在LOOKUP前面那個 "-" 是什麼意思呢?

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

回復 4# yc1031


取出來的數值是"負數" >> 加 "-" 轉正數~~

TOP

本帖最後由 Andy2483 於 2023-6-1 08:53 編輯

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

執行前:


執行結果:



Option Explicit
Sub TEST()
Dim Brr, Crr, A, i&, j%, M%
'↑宣告變數
Brr = Range([A2], [A65536].End(3))
'↑令Brr變數是 二維陣列,以A欄儲存格值帶入
ReDim Crr(1 To UBound(Brr), 1 To 100)
'↑令Crr變數是 二維空陣列,縱向範圍同Brr陣列,橫向1~100
For i = 1 To UBound(Brr)
'↑設順迴圈!逐列執行
   If InStr(Brr(i, 1), "fee$") = 0 Then GoTo i01 Else: A = Split(Brr(i, 1), "fee$")
   '↑如果Brr陣列值不包含 "fee$"就跳到標示i01位置繼續執行,
   '否則就令A變數是 一維陣列,以"fee$" 分割Brr陣列值帶入A陣列裡

   If M < UBound(A) Then M = UBound(A)
   '↑如果M變數小於A陣列的最大索引號,就令M變數是 A陣列的最大索引號
   For j = 1 To UBound(A): Crr(i, j) = Val(A(j)): Next
   '↑設順迴圈!將A陣列值轉化為數值後寫入Crr陣列裡
i01: Next
[B2].Resize(UBound(Brr), M) = Crr
'↑令Crr陣列值從[B2]開始寫入匡列的儲存格中,超過範圍的陣列值忽略
Erase Brr, Crr, A
'↑令釋放變數
End Sub


'==================================================
'補充:以下另一種情況
Sub TEST_1()
Dim Brr, Crr, A, i&, j%, M%
Brr = Range([A2], [A65536].End(3))
ReDim Crr(1 To UBound(Brr), 1 To 100)
For i = 1 To UBound(Brr)
   If InStr(Brr(i, 1), "fee") = 0 Then GoTo i01 Else: A = Split(Brr(i, 1), "fee")
   If M < UBound(A) Then M = UBound(A)
   For j = 1 To UBound(A): Crr(i, j) = Val(Replace(A(j), "$", "")): Next
i01: Next
[B2].Resize(UBound(Brr), M) = Crr
Erase Brr, Crr, A
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 難行能行,難捨能捨,難為能為,才能昇華自我的人格。
返回列表 上一主題