Board logo

標題: [發問] 請益-如何篩選出字串中的各個對應數字 [打印本頁]

作者: chen76771    時間: 2020-6-11 23:21     標題: 請益-如何篩選出字串中的各個對應數字

請教各位大大
如附件,目前已經篩選出t及L所對應的數值,可W後面夾帶的資料太過混亂,且實際資料有好幾千筆,此檔案只是簡易版的範例
可有更好的方式可以做出分別篩選出資料中的長寬高
謝謝
作者: hcm19522    時間: 2020-6-12 10:00

https://blog.xuite.net/hcm19522/twblog/589183022
作者: p212    時間: 2020-6-12 10:31

本帖最後由 p212 於 2020-6-12 10:34 編輯

回復 1# chen76771
假設A欄資料字串的最大長度為100個字
陣列公式(Shift+Ctrl+Enter三鍵齊按)
=MID(A2,FIND("L",A2)+1,MAX(IF(ISNUMBER(MID(A2,ROW(INDIRECT("1:100")),1)*1),ROW(INDIRECT("1:100")),""))-FIND("L",A2))
請參考!
作者: chen76771    時間: 2020-6-14 23:29

回復 2# hcm19522
感謝大大
經過自己的測試及理解之後,依然不解此公式中的奧秘
1.lookup括號裡面第一個參數是空白的
2.最後一個參數裡面有個大括號(1,2,3,4)
謝謝解惑
作者: chen76771    時間: 2020-6-14 23:32

回復 3# p212
感謝謝謝幫忙,可依此公式獲得的結果是錯誤,不曉得原因出在哪
作者: ML089    時間: 2020-6-15 08:48

本帖最後由 ML089 於 2020-6-15 09:14 編輯
請教各位大大
如附件,目前已經篩選出t及L所對應的數值,可W後面夾帶的資料太過混亂,且實際資料有好幾千筆 ...
chen76771 發表於 2020-6-11 23:21



    B2 =-LOOKUP(0,-MID($A2,FIND(B$1,$A2)+1,{1,2,3,4,5,6,7,8,9}))

[attach]32172[/attach]
作者: hcm19522    時間: 2020-6-15 09:46

=-LOOKUP(,-MID($A2,FIND(B$1,$A2)+1,{1,2,3,4}))

1 .空代表 0      2.MID是取指定位置起 {1,2,3,4}字  前+ "-" 二作用  數字化且為負值   0>任一負值  所以找出最後負值  最前LOOKUP +"-' 回正值
作者: Andy2483    時間: 2023-12-13 11:35

本帖最後由 Andy2483 於 2023-12-13 12:51 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖清楚陣列索引號規則,學習方案下,請各位前輩指教
執行前:
[attach]37121[/attach]

[F1].Resize(UBound(Crr) , 3) = Crr:
[attach]37122[/attach]

[F1].Resize(UBound(Crr) + 1, 3) = Crr:
[attach]37123[/attach]

Option Explicit
Sub TEST()
Dim Brr, Crr, Q, i&
'↑宣告變數
Brr = Range([A2], [A65536].End(3))
'↑令Brr變數是帶入儲存格值的二維陣列
ReDim Crr(UBound(Brr), 1 To 3)
'↑宣告Crr變數是 二維空陣列,縱向索引號從 0 到 Brr陣列最大索引列號,
'UBound(Brr) 同 0 To UBound(Brr) ,0 To 可以省略
'橫向索引欄號從 1 到 3

Q = [{"t","W","L"}]
'↑令Q變數是一維陣列,Q(1)="t",Q(2)="W",Q(3)="L"
'=[{~}]這樣方式的一維陣列沒有0索引號
'Q = Array("t", "W", "L"):這樣方式的一維陣列有0索引號

Crr(0, 1) = Q(1): Crr(0, 2) = Q(2): Crr(0, 3) = Q(3)
'↑此Crr陣列0索引號列是用來放標題列,這樣的方式較不會影響迴圈的設計,
'迴圈數 源頭陣列資料對齊同一個 迴圈數 結果陣列資料

For i = 1 To UBound(Brr)
'↑設順迴圈將資料寫入結果陣列裡
   If Not Brr(i, 1) Like "*t#*W#*L#*" Then GoTo i01
   Crr(i, 1) = Val(Split(Brr(i, 1), Q(1))(1))
   Crr(i, 2) = Val(Split(Brr(i, 1), Q(2))(1))
   Crr(i, 3) = Val(Split(Brr(i, 1), Q(3))(1))
i01: Next
[F1].Resize(UBound(Crr) + 1, 3) = Crr
'↑令結果陣列寫入儲存格裡,
'UBound(Crr) + 1 ,這+1的原因是Resize()擴展縱向橫向儲存格範圍,照習慣是同陣列最大索引號範圍,
'但是Crr陣列有0索引號,且UBound(Crr)是Crr陣列最大索引列號,所以必須+1 :

'貼入儲存格的方式是以陣列的最左上角資料開始向下/向右所需範圍貼入儲存格,
'最左上角陣列開始索引號是(1,1),就從 (1,1)陣列的最左上角資料開始下/右寫入
'最左上角陣列開始索引號是(0,1),就從 (0,1)陣列的最左上角資料開始下/右寫入
'所以Crr陣列有0索引列號,就必須以陣列最大列號+1的儲存格範圍寫入儲存格中,才會完整

End Sub

PS:陣列裡有沒有(0,0) (1,0) (0,1)這些索引號,全憑其宣告
1.ReDim Crr(100,100) 同  ReDim Crr(0 To 100,0 To 100) ,索引號是從0開始,
如果所想要的開始索引號縱向橫向都要從1開始,就必須ReDim Crr(1 To 100,1 To 100)

2.Brr = Range([A1], [A65536].End(3))
令Brr變數是帶入儲存格值的二維陣列,這樣的二維陣列,其陣列索引號從(1,1)開始,而且沒有(0,0) (1,0) (0,1)這些索引號




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