連續 & 不連續 之陣列處理方式ex:1~3,5,7,9~11
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
連續 & 不連續 之陣列處理方式ex:1~3,5,7,9~11
各位大大如題,陣列內的數字已經會依照數字大小進行排序,由小至大
但要如何達到以下效果呢~?(陣列長度不一定)
假設陣列為
1,2,3,5,7,9,10,11 =>1~3,5,7,9~11
1,11=>1,11
5,6,8,9=>5~6,8~9
也就是上一個數字與這個數字是連續的就要用"~"表示,且省略中間數字
但若不是連續的,則以","顯示,且不得省略數字 |
|
PKKO
|
|
|
|
|
- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
2#
發表於 2014-11-16 06:55
| 只看該作者
各位大大如題,陣列內的數字已經會依照數字大小進行排序,由小至大
但要如何達到以下效果呢~?(陣列長度不一定 ...
PKKO 發表於 2014-11-16 05:04  - Sub nn()
- Dim iI%
- Dim lL&
- Dim sStr$
- Dim vA, vB
-
- 'vA = Array(1, 2, 3, 5, 7, 9, 10, 11)
- 'vA = Array(1, 11)
- vA = Array(5, 6, 8, 9)
- ReDim vB(0)
- lL = vA(0)
- sStr = lL
- For iI = 1 To UBound(vA)
- If vA(iI) <> lL + 1 Then
- If vA(iI - 1) <> sStr Then sStr = sStr & "~" & vA(iI - 1)
- vB(UBound(vB)) = sStr
- ReDim Preserve vB(UBound(vB) + 1)
- sStr = vA(iI)
- End If
- lL = vA(iI)
- Next
- If vA(UBound(vA)) <> sStr Then sStr = sStr & "~" & vA(iI - 1)
- vB(UBound(vB)) = sStr
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
3#
發表於 2014-11-16 07:19
| 只看該作者
回復 2# luhpro
感謝大大的回覆,但無法成功顯示,最後結果只會出現末幾碼而已 |
|
PKKO
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
4#
發表於 2014-11-17 16:06
| 只看該作者
本帖最後由 GBKEE 於 2014-11-17 16:08 編輯
回復 3# PKKO
試試看- Option Explicit
- '1,2,3,5,7,9,10,11 =>1~3,5,7,9~11
- Sub Ex()
- Dim Ar(), i As Integer, S As String, Msg As Boolean
- Ar = Array(1, 2, 3, 5, 6, 9, 10, 11, 15)
- S = Ar(0)
- For i = 0 To UBound(Ar)
- If i = UBound(Ar) Then
- If Ar(i) - 1 = Ar(i - 1) Then S = S & Ar(i)
- ElseIf Ar(i) + 1 <> Ar(i + 1) Then
- If Msg Then S = S & Ar(i) & "," & Ar(i + 1)
- If Msg = False Then S = S & "," & Ar(i + 1)
- Msg = False
- ElseIf Ar(i) + 1 = Ar(i + 1) Then
- Msg = True
- S = S & IIf(Right(S, 1) <> "~", "~", "")
- End If
- Next
- MsgBox S
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
5#
發表於 2014-11-17 22:46
| 只看該作者
回復 4# GBKEE
感謝版大,完全正確!,且完全明白了!! |
|
PKKO
|
|
|
|
|
- 帖子
- 181
- 主題
- 5
- 精華
- 0
- 積分
- 197
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- 2000
- 閱讀權限
- 20
- 性別
- 女
- 註冊時間
- 2014-3-9
- 最後登錄
- 2024-4-29
|
6#
發表於 2014-11-17 23:03
| 只看該作者
回復 GBKEE
感謝版大,完全正確!,且完全明白了!!
PKKO 發表於 2014-11-17 22:46 
我很好奇
為何 luhpro大的 , 你會無法成功
我試著ok的 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
7#
發表於 2014-11-17 23:14
| 只看該作者
Dear 只會出現尾數(8~9)- Sub nn()
- Dim iI%
- Dim lL&
- Dim sStr$
- Dim vA, vB
-
- 'vA = Array(1, 2, 3, 5, 7, 9, 10, 11)
- 'vA = Array(1, 11)
- vA = Array(1, 6, 8, 9)
- ReDim vB(0)
- lL = vA(0)
- sStr = lL
- For iI = 1 To UBound(vA)
- If vA(iI) <> lL + 1 Then
- If vA(iI - 1) <> sStr Then sStr = sStr & "~" & vA(iI - 1)
- vB(UBound(vB)) = sStr
- ReDim Preserve vB(UBound(vB) + 1)
- sStr = vA(iI)
- End If
- lL = vA(iI)
- Next
- If vA(UBound(vA)) <> sStr Then sStr = sStr & "~" & vA(iI - 1)
- vB(UBound(vB)) = sStr
- MsgBox vB(UBound(vB))
- End Sub
複製代碼 回復 6# bobomi |
|
PKKO
|
|
|
|
|
- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 111
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-5-8
               
|
8#
發表於 2014-11-18 10:54
| 只看該作者
- Sub ex()
- Dim Ay()
- ar = Array(1, 2, 3, 5, 7, 9, 10, 11, 13, 14, 15) '不連續陣列
- For i = 0 To UBound(ar) - 1 ''不處理最後元素
- j = i
- x = ar(j)
- Do Until ar(j) + 1 <> ar(j + 1)
- j = j + 1
- If j = UBound(ar) Then Exit Do
- Loop
- y = ar(j)
- i = j
- ReDim Preserve Ay(s)
- Ay(s) = IIf(x = y, x, x & "~" & y)
- s = s + 1
- Next
- If j = UBound(ar) - 1 Then '處理最後元素
- ReDim Preserve Ay(s)
- Ay(s) = ar(UBound(ar))
- End If
- MsgBox Join(Ay, ",")
- End Sub
複製代碼 回復 7# PKKO |
|
學海無涯_不恥下問
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
9#
發表於 2014-11-18 14:15
| 只看該作者
回復 7# PKKO
是可以的- vB(UBound(vB)) = sStr
- MsgBox Join(vB, ",")
複製代碼 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
10#
發表於 2014-11-18 21:13
| 只看該作者
感謝兩位超版的指教,以及bobomi 的提醒,原來是小弟疏忽了,感恩!! |
|
PKKO
|
|
|
|
|