[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『配列内の連番の欠番抽出の出力形式を変えたい』(ミリンダ)
VBAで配列内に帳票ファイルNoを連番で格納しています。
しかし、連番に抜けている部分があり、この部分を抽出したいです。
今できているのは下記のようなコードで、実行結果は
「21,25,26,27,28,33,34,35,36,37」
となります。
これを
「21,25-28,33-37」という風に出力させたいのですがどうしたらいいでしょうか?
Sub Test()
Dim Arry Dim resultArry Dim Msg As String Dim i As Long
Arry = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 29, 30, 31, 32, 38, 39, 40)
For i = 0 To Arry(UBound(Arry)) resultArry = Filter(Arry, i) If UBound(resultArry) = -1 Then Msg = Msg & i & "," End If Next i
Msg = Left(Msg, Len(Msg) - 1)
MsgBox Msg
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
こちらの都合で分割になるがつなげてみてくれ。 これではどうか? Sub Test() Dim Arry Dim resultArry Dim Msg As String Dim i As Long
Arry = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 29, 30, 31, 32, 38, 39, 40)
(ねむねむ) 2018/09/28(金) 10:42
For i = 0 To UBound(Arry) - 1 If Arry(i) + 1 < Arry(i + 1) Then Msg = Msg & IIf(Msg = "", "", ",") & Arry(i) + 1 If Arry(i + 1) - Arry(i) > 2 Then Msg = Msg & "-" & Arry(i + 1) - 1 End If
End If Next i MsgBox Msg End Sub (ねむねむ) 2018/09/28(金) 10:43
例えば
Arry = Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 29, 30, 31, 32, 38, 39, 40)
のような場合でも[0-2]を抽出できませんでしょうか?
(ミリンダ) 2018/09/28(金) 10:53
>For i = 0 To UBound(Arry) - 1 の前に If Arry(0) <> 0 Then Msg = 0 If Arry(0) > 1 Then Msg = Msg & "-" & Arry(0) - 1 End If End If を追加ではどうだろうか?
(ねむねむ) 2018/09/28(金) 11:06
できました!
感謝感激です!!
(ミリンダ) 2018/09/28(金) 11:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.