[[20180928095309]] 『配列内の連番の欠番抽出の出力形式を変えたい』(ミリンダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『配列内の連番の欠番抽出の出力形式を変えたい』(ミリンダ)

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

ねむねむ様
さっそくありがとうございます。
私の記入不足で大変申し訳ないのですが、帳票ファイルNoは必ず
0から始まるようになっているのですが(終わりの番号は不定)、
先頭部分が抜けることもあります。

例えば
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.