Board logo

標題: 取出固定字串後的數字 [打印本頁]

作者: leiru    時間: 2020-5-28 14:11     標題: 取出固定字串後的數字

問題:
如何取出A欄內fee後的數字,若同一儲存格有兩個數字,則分別列出
答案如B2至C3
作者: ikboy    時間: 2020-5-28 14:48

  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
複製代碼

作者: 准提部林    時間: 2020-5-28 18:41

B2:右拉/下拉
=iferror(-LOOKUP(1,-MID($A2,FIND("|",SUBSTITUTE($A2,"fee","|",COLUMN(A1)))+4,ROW($1:$9))),"")
作者: yc1031    時間: 2020-5-29 09:38

回復 3# 准提部林


    能否請問在LOOKUP前面那個 "-" 是什麼意思呢?
作者: hcm19522    時間: 2020-5-29 10:23

https://blog.xuite.net/hcm19522/twblog/589160566
作者: 准提部林    時間: 2020-5-29 10:52

回復 4# yc1031


取出來的數值是"負數" >> 加 "-" 轉正數~~
作者: Andy2483    時間: 2023-6-1 08:45

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

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

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

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


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




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