Board logo

標題: 如何截取某一字眼(K2)冒後之後的10個字 [打印本頁]

作者: leiru    時間: 2018-6-25 11:49     標題: 如何截取某一字眼(K2)冒後之後的10個字

問題:
如何截取k2冒號以後的字串,共10個字(不含冒號),答案在B欄
k2格式,英文字k有大寫或小寫;另,k2後面冒號,有的全形有的半形
除了以上的情形外,有可能在2後面有一個『碼』字(例如A5~A8)
作者: joblyc017    時間: 2018-6-25 13:40

回復 1# leiru


    公式詳解,請參考:https://goo.gl/aaUxUL
[attach]28888[/attach]
作者: li_hsien    時間: 2018-6-25 13:41

回復 1# leiru

如果要抓的字串一定出現在冒號後面

可以用下方做法試看看
  1. =IF(ISERROR(MID(A1,FIND(":",A1)+1,10)),MID(A1,FIND(":",A1)+1,10),MID(A1,FIND(":",A1)+1,10))
複製代碼

作者: hcm19522    時間: 2018-6-25 13:47

=MID(A1,FIND(":",SUBSTITUTE(A1,":",":"))+1,10)
作者: leiru    時間: 2018-6-25 13:51

謝謝各位,不好意思,真正題目一個儲存格內,有可能有多個冒號
作者: 准提部林    時間: 2018-6-25 13:52

=MID(A1,FIND(":",ASC(A1&":"))+1,10)
作者: leiru    時間: 2018-6-25 13:52

回復 5# leiru
作者: hcm19522    時間: 2018-6-25 14:28

回復 5# leiru


    http://blog.xuite.net/hcm19522/twblog/584771966
作者: 准提部林    時間: 2018-6-25 15:32

回復 7# leiru


=MID(A1,-LOOKUP(,-SEARCH({"K2:","K2碼:"},ASC(A1))-{3,4}),10)
作者: ML089    時間: 2018-6-25 21:53

=MID(A1,FIND(":",ASC(A1),SEARCH("K2",A1))+1,10)
作者: leiru    時間: 2018-7-12 18:03

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

回復 11# leiru
作者: ML089    時間: 2018-7-13 14:14

回復 11# leiru


    =MID(A2,FIND(":",ASC(A2),-LOOKUP(,-SEARCH({"K2","輔二"},A2)))+1,10)
作者: ML089    時間: 2018-7-13 14:32

若只有一個 ":" 或 ":"
=MID(A2,SEARCH(":",ASC(A2))+1,10)
作者: leiru    時間: 2018-7-13 16:42

回復 14# ML089


    謝謝您回覆,儲存格內有多個冒號
作者: infoverdad    時間: 2018-7-13 20:27

若使用准大的方式,您後面{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)
作者: Andy2483    時間: 2022-12-28 08:12

回復 1# leiru


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

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

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
作者: Andy2483    時間: 2022-12-28 08:46

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

回復 7# leiru


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

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

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

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:
[attach]35685[/attach]




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