Board logo

標題: [發問] 數組括號內的數字 分折 [打印本頁]

作者: adrian_9832    時間: 2018-10-3 21:47     標題: 數組括號內的數字 分折

大家好 請問一個數組 比如以下 :

A1
2301(1,3,5-7,9-0)   


怎麼可以用方程式或VBA 變成以下這樣結果 因為括號內的號碼不一致 有時是 , 有時是-                 請各位指教
23011
23013
23015
23017
23019
23010
作者: n7822123    時間: 2018-10-4 00:49

本帖最後由 n7822123 於 2018-10-4 00:53 編輯

回復 1# adrian_9832

要用一些解字串的技巧
VBA如下,把A1解析後放到B欄
公式找別人幫忙吧.......我工作表函數會的不多
只知道instr 可以用 find 取代
但是split 不知道工作表函數有沒有類似的
  1. Sub TEST()
  2. Ar = Split(Replace([A1], "-", ","), ",")
  3. Ar(0) = Right(Ar(0), Len(Ar(0)) - InStr(Ar(0), "("))
  4. An = UBound(Ar)
  5. Ar(An) = Left(Ar(An), Len(Ar(An)) - 1)
  6. [B1].Resize(An + 1) = Application.Transpose(Ar)
  7. End Sub
複製代碼
[attach]29493[/attach]
作者: n7822123    時間: 2018-10-4 01:05

本帖最後由 n7822123 於 2018-10-4 01:07 編輯

回復 2# n7822123


更正! 忘記加前面的數字了
  1. Sub TEST()
  2. Ar = Split(Replace([A1], "-", ","), ",")
  3. A0 = Left(Ar(0), InStr(Ar(0), "(") - 1)
  4. Ar(0) = Right(Ar(0), Len(Ar(0)) - InStr(Ar(0), "("))
  5. An = UBound(Ar)
  6. Ar(An) = Left(Ar(An), Len(Ar(An)) - 1)
  7. For i = 0 To An
  8.   Ar(i) = A0 & Ar(i)
  9. Next i
  10. [B1].Resize(An + 1) = Application.Transpose(Ar)
  11. End Sub
複製代碼
[attach]29494[/attach]
作者: hcm19522    時間: 2018-10-4 10:22

https://blog.xuite.net/hcm19522/twblog/585478117
作者: 准提部林    時間: 2018-10-4 11:28

9-0 ???
有沒有9-2之類的,
舉的例子只有一個, 程式寫了也是白寫,
上傳較完整的數據吧!!!
作者: ikboy    時間: 2018-10-4 11:44

  1. Sub zz()
  2. Dim s$
  3. s = "2301(1,3,5-7,9-0)"
  4. With CreateObject("vbscript.regexp")
  5.     .Pattern = "\d+"
  6.     .Global = True
  7.     k = Split(s, "(")
  8.     If .test(k(1)) Then
  9.         Set t = .Execute(k(1))
  10.         For Each x In t
  11.             Debug.Print k(0) & x
  12.         Next
  13.     End If
  14. End With
  15. End Sub
複製代碼

作者: jackyq    時間: 2018-10-4 13:57

回復 1# adrian_9832


沒法還原吧
如何知道 23016 不是其中一組解


23011
23013
23015
23016
23017
23019
23010
作者: 准提部林    時間: 2018-10-4 14:17

5-7
應指5.6.7吧!
作者: adrian_9832    時間: 2018-10-4 17:40

我打少6那個號碼  抱歉   多謝各位大大們的幫助
作者: adrian_9832    時間: 2018-10-4 17:41

23011
23013
23015
23016
23017
23019
23010
作者: adrian_9832    時間: 2018-10-4 17:42

hcm19522 發表於 2018-10-4 10:22



    公式上要改動嗎? 少了一個6 抱歉..
作者: n7822123    時間: 2018-10-4 22:05

本帖最後由 n7822123 於 2018-10-4 22:10 編輯

回復 11# adrian_9832

無言.....原來你的"-" 不是區格符號 而是連續的意思?

5-7=5,6,7
那9-0 應該如何解釋?
一、9,10
二、9,8,7,6,5,4,3,2,1,0
三、9,0

如果是第3種,那是不是表示你的位數都只有1位,個數最多就0~9  共10種?
作者: 准提部林    時間: 2018-10-5 12:55

Sub Macro1()
Dim xR As Range, T, TT, Tr, j%, N&, ARR
ReDim ARR(1 To 2000, 0)
For Each xR In Range([a1], [a65536].End(3))
    TT = Split(Replace(Replace(xR, ")", ""), "-0", "-10"), "(")
    For Each T In Split(TT(1), ",")
        Tr = Split(T & "-" & T, "-")
        For j = Tr(0) To Tr(1)
            N = N + 1: ARR(N, 0) = TT(0) & Right(j, 1)
        Next j
    Next
Next
[b1].Resize(N) = ARR
End Sub
作者: adrian_9832    時間: 2018-10-5 20:42

回復 12# n7822123

9-0
即是9,0  

0為最大的號碼  
所以如果括號有0 比如 2130(1-0) 即是

21301
21302
21303
21304
21305
21306
21307
21308
21309
21300
作者: adrian_9832    時間: 2018-10-5 20:44

回復 13# 准提部林

版大威猛!




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