返回列表 上一主題 發帖

如何截取某一字眼(K2)冒後之後的10個字

再請教,針對這題,再變化題目,如下:
問題:
如何截取k2冒號以後的字串,共10個字(不含冒號),答案在B欄
k2格式,英文字k有大寫或小寫;另,k2後面冒號,有的全形有的半形
除了以上的情形外,有可能在2後面有一個『碼』字(例如A5~A8)
另外,增加了,儲存格內有(輔二:或輔二:)這個字眼,也要冒號後面10個字(例如A10~A12)
joyce

TOP

回復 11# leiru

如何截取某一字眼(K2)冒後之後的10個字.zip (7.51 KB)

joyce

TOP

回復 11# leiru


    =MID(A2,FIND(":",ASC(A2),-LOOKUP(,-SEARCH({"K2","輔二"},A2)))+1,10)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

若只有一個 ":" 或 ":"
=MID(A2,SEARCH(":",ASC(A2))+1,10)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 14# ML089


    謝謝您回覆,儲存格內有多個冒號
joyce

TOP

若使用准大的方式,您後面{3,4}的陣列要與新增條件"輔二:"後的個數相稱才會正確。如下:
修改前=MID(A2,-LOOKUP(,-SEARCH({"K2:","K2碼:","輔二:"},ASC(A2))-{3,4}),10)
修改後=MID(A2,-LOOKUP(,-SEARCH({"K2:","K2碼:","輔二:"},ASC(A2))-{3,4,3}),10)

TOP

回復 1# leiru


    謝謝前輩發表此主題與範例
後學藉此帖習得多樣知識與經驗,以下心得註解請參考
執行前:


執行結果:


Option Explicit
Sub TEST_20221228_1()
Dim i&, N&, A$, Arr
'↑宣告變數:(i,N)是長整數變數,A是字串變數,Arr是通用型變數
Arr = Range([A1], Cells(Rows.Count, 1).End(3))
'↑令Arr是 二維陣列,以[A1]到A欄有內容最後列儲存格,這之間儲存格值倒入
For i = 1 To UBound(Arr)
'↑設順迴圈!i從1到Arr陣列縱向最大索引列號數
   A = StrConv(Arr(i, 1), vbNarrow)
   '↑令A這字串變數是i迴圈Arr陣列值經StrConv() 將全形字轉為半形字 的字串
   'StrConv 函式
   'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/strconv-function

   If A Like "*:??????????*" Then
   '↑如果A字串變數包含 ":"冒號後面有10個以上字元 ?
      Arr(i, 1) = Left(Split(A, ":")(1), 10)
      '↑令i迴圈Arr陣列值換成: A字串變數以 ":"字元分割後的索引號1的一維陣列值再取左側10字元
      If Arr(i, 1) Like "7????????H" = False Then N = N + 1
      '↑如果i迴圈Arr陣列值不是前7 後H 包夾的10個字元,就令N這長整數變數累加1
      Else
         Arr(i, 1) = ""
         '↑令i迴圈Arr陣列值是 空字元
   End If
Next
[C1].Resize(UBound(Arr), 1) = Arr
'↑令[C1] 擴展向下Arr陣列縱向最大索引列號數列, 向右不擴展, 這範圍儲存格值以Arr陣列值帶入
MsgBox N & " 個結果疑似規則異常!"
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2022-12-28 08:56 編輯

回復 7# leiru


    謝謝前輩
以下變更條件執行結果與心得註解,請參考

執行前:


執行結果:


Option Explicit
Sub TEST_20221228_2()
Dim i&, N&, A$, Arr, Brr, j
'↑宣告變數:(i,N)是長整數變數,A是字串變數,(Arr,Brr,j)是通用型變數
Arr = Range([A1], Cells(Rows.Count, 1).End(3))
'↑令Arr是 二維陣列,以[A1]到A欄有內容最後列儲存格,這之間儲存格值倒入
For i = 1 To UBound(Arr)
'↑設順迴圈!i從1到Arr陣列縱向最大索引列號數
   A = StrConv(Arr(i, 1), vbNarrow)
   '↑令A這字串變數是i迴圈Arr陣列值經StrConv() 將全形字轉為半形字 的字串
   'StrConv 函式
   'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/strconv-function

   If A Like "*:7????????H*" Then
   '↑如果A字串變數包含 ":"冒號後面有10個以上字元 ?
      Brr = Split(A, ":")
      '↑令Brr是一維陣列,帶入以":"分割A字串變數的陣列值
      For Each j In Brr
      '↑設順迴圈!令j是 Brr陣列裡的值
         j = Left(j, 10)
         '↑令j這通用變數是自身 取前10個字的字串
         If j Like "7????????H" Then Arr(i, 1) = j: Exit For
         '↑如果j字串變數是 前7 後H 包夾的10個字元,就令i迴圈Arr陣列值換成j變數值:結束j迴圈
      Next
      If Arr(i, 1) Like "7GA??????H" = False Then N = N + 1
      '↑如果i迴圈Arr陣列值不是前7GA 後H 包夾的10個字元,就令N這長整數變數累加1
      Else
         Arr(i, 1) = ""
         '↑令i迴圈Arr陣列值是 空字元
   End If
Next
[C1].Resize(UBound(Arr), 1) = Arr
'↑令[C1] 擴展向下Arr陣列縱向最大索引列號數列, 向右不擴展, 這範圍儲存格值以Arr陣列值帶入
MsgBox N & " 個結果疑似規則異常!"
Set Arr = Nothing
End Sub

#12樓範例:
[E1].Resize(UBound(Arr), 1) = Arr:
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題