Board logo

標題: [發問] 提取字串內數字比大小 [打印本頁]

作者: wayne0303    時間: 2021-6-18 09:57     標題: 提取字串內數字比大小

當藍色框小於等於390,紅色框小於等於90的時候為1
當藍色框小於等於390,紅色框大於90小於等於180的時候為2

否則則為空白


謝謝


※藍色框內數字為3-4位數不等


[attach]33414[/attach]
作者: samwang    時間: 2021-6-18 16:23

回復 1# wayne0303

請測試看看,謝謝
作者: wayne0303    時間: 2021-6-18 18:28

回復 2# samwang

先謝謝!

但可以用式子(公式)的方法解嗎?
作者: samwang    時間: 2021-6-18 19:37

回復 3# wayne0303

公式不太會寫只能寫到這樣了,程式也有小修改,請再測試看看,謝謝。
作者: wayne0303    時間: 2021-6-18 20:28

回復 4# samwang


好的!先謝謝
我再試看看~
作者: hcm19522    時間: 2021-6-19 14:59

https://blog.xuite.net/hcm19522/twblog/589842248
作者: samwang    時間: 2021-6-20 07:59

h大的公式真的好厲害,學起來了,感謝分享。
作者: wayne0303    時間: 2021-6-21 08:19

本帖最後由 wayne0303 於 2021-6-21 08:32 編輯

回復 6# hcm19522


哇~感謝h大大的幫忙!

但最後面這個"0;;"是代表?
作者: 准提部林    時間: 2021-6-21 10:39

回復 6# hcm19522

R312-1°  --- 這種的最後一節有可能誤判!!!...12-1是日期
作者: 准提部林    時間: 2021-6-21 11:10

資料太少, 無法多驗證:
=CHOOSE((-LOOKUP(,-RIGHT(TEXT(,"[$"&B2&"]"),{1,2,3,4}))<=390)*SUM(N(-LOOKUP(1,-RIGHT(LEFT(B2,LEN(B2)-1),{1,2,3,4}))<={90,180}))+1,"",2,1)
作者: 准提部林    時間: 2021-6-21 14:01

Sub TEST_a1()
Dim Arr, i&, j%, TR, V1, V2
Arr = Range([b1], [b65536].End(xlUp))
For i = 2 To UBound(Arr)
    TR = Split(Arr(i, 1), "-"): Arr(i - 1, 1) = "": V = ""
    If UBound(TR) < 1 Then GoTo i01
    For j = 1 To Len(TR(0))
        If Mid(TR(0), j, 1) Like "#" Then V1 = Val(Mid(TR(0), j)): Exit For
    Next j
    If V1 = "" Or V1 > 390 Then GoTo i01
    V2 = Val(TR(UBound(TR)))
    Arr(i - 1, 1) = IIf(V2 > 180, "", IIf(V2 > 90, 2, 1))
i01: Next i
[c2].Resize(UBound(Arr) - 1) = Arr
End Sub
作者: samwang    時間: 2021-6-21 14:26

回復 11# 准提部林

准大,請教一下 Like "#"   是取數字,我是用ASCII判斷,那如果是只取英文, 要如何寫 Like ...
另外這種寫法要如何查到所有相關資訊(如特殊符號、英文大寫...),
因為ASCII有相關資訊,只要找到就可以擷取相關字,謝謝
作者: 准提部林    時間: 2021-6-21 15:21

回復 12# samwang

MSGBOX "1" LIKE "#"
MSGBOX "1" LIKE "[0-9]"
MSGBOX "123" LIKE "###"  '三個數字. 一個#為一個數字

MsgBox "A" Like "[A-Z]"  '大寫
MsgBox "a" Like "[a-z]"  '小寫
MsgBox "x" Like "[A-z]"  '大小寫

MsgBox "7" Like "[0-9A-Z-/+]"  '數字_英大寫_符號-/+

部份與正則用法類似, 但我對正則不熟, 只能就所知玩玩~~
作者: samwang    時間: 2021-6-21 15:57

回復 13# 准提部林


感謝准大指導,另外剛剛google 一下,分享多一個中文寫法,謝謝。

MsgBox "中" Like "[一-籲]"    '中文字
作者: hcm19522    時間: 2021-6-21 16:04

回復 10# 准提部林

謝了   疏忽了
作者: hcm19522    時間: 2021-6-21 16:05

回復 8# wayne0303


    https://blog.xuite.net/hcm19522/twblog/589844999
作者: 准提部林    時間: 2021-6-21 16:06

回復 14# samwang


中文...沒多去測試--特殊字/簡體/日本中文--會不會有判錯,
所以不太敢用~~
作者: wayne0303    時間: 2021-6-21 16:18

本帖最後由 wayne0303 於 2021-6-21 16:22 編輯

回復 10# 准提部林


感謝准大相助!
作者: wayne0303    時間: 2021-6-21 16:24

回復 16# hcm19522


謝謝h大~
作者: samwang    時間: 2021-6-22 09:33

回復 17# 准提部林


中文...沒多去測試--特殊字/簡體/日本中文--會不會有判錯
>> 經過測試,真的有問題,謝謝
作者: wayne0303    時間: 2021-9-2 08:50

回復 2# samwang


samwang大!

我拿了你之前的檔案來試,我移動了來源資料的位置執行會出現

1.執行階段錯誤9
   陣列索引超出範圍



2.執行階段錯誤13
    型態不符

這是該改哪邊?


謝謝
作者: samwang    時間: 2021-9-2 10:43

回復 21# wayne0303


    我拿了你之前的檔案來試,我移動了來源資料的位置執行會出現
>>可否附上檔案,謝謝
作者: wayne0303    時間: 2021-9-2 10:54

回復 22# samwang


再麻煩你有空再看看~

謝謝
作者: samwang    時間: 2021-9-2 11:18

回復 23# wayne0303


更改如下,謝謝
Arr = Range([u3], [u65536].End(3))
作者: wayne0303    時間: 2021-9-2 11:44

回復 24# samwang


可以了,謝謝samwang大的指導!
作者: wayne0303    時間: 2021-9-2 13:18

回復 24# samwang   



samwang大~不好意思又要麻煩你一下

搜尋資料下方有中文字的話會干擾...
作者: samwang    時間: 2021-9-2 14:10

本帖最後由 samwang 於 2021-9-2 14:11 編輯

回復 26# wayne0303

Arr = Range([a11], [a65536].End(3)), 修改如下紅字
Arr = Range([a11], [a11].End(4))

End(3) = End(xlUp)
End(4) = End(xlDown)
作者: wayne0303    時間: 2021-9-2 19:54

回復 27# samwang


謝謝samwang大~
作者: Andy2483    時間: 2023-12-1 11:34

本帖最後由 Andy2483 於 2023-12-1 15:14 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習字串反向與陣列,學習方案如下,請各位前輩指教
執行前:
[attach]37093[/attach]

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

Option Explicit
Sub TEST()
Dim Brr, S, i&, V1, Ve
'↑宣告變數
Brr = Range([B1], [B65536].End(xlUp))
'↑令Brr變數是 以指定的儲存格範圍值的二維陣列
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2到Brr陣列縱向最大索引列號
   S = Split(Trim(Brr(i, 1)) & "-", "-")
   '↑令S變數是分割字串的一維陣列
   V1 = Val(StrReverse(Mid(Val("1" & StrReverse(S(0))), 2)))
   '↑令V1變數是將0索引號陣列值字串反轉後,在前方連接字串"1"成為新字串,
   '再此新字串轉為數值,取第2字之後的字,接著將此字串反轉回來,最後轉為數值

   Ve = Val(S(UBound(S) - 1))
   '↑令Ve變數是倒數第2個陣列值轉為數值
   If V1 > 390 Or UBound(S) - 1 = 0 Then Brr(i - 1, 1) = "": GoTo i01
   '↑如果藍色區域數值大於390 或 Brr(i, 1)字串裡沒有"-",
   '就令陣列放結果的陣列值清除,跳到標示的位置繼續執行

   Brr(i - 1, 1) = Switch((Ve <= 180) * (Ve > 90), 2, Ve <= 90, 1)
   '↑令陣列放結果的陣列值寫入正確值
i01: Next
[D2].Resize(UBound(Brr) - 1) = Brr
'↑令[D2]儲存格擴展所需範圍儲存格值以 Brr陣列值帶入
End Sub




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