web-dev-qa-db-ja.com

VBAの数値間で展開する方法

いくつかの数字を別の数字に拡張する必要があります

入力が399207で10 =出力の場合のように399207399208 399209 399210

入力:

422209           10
904L1009         10
356608           11
0003ML00030-1    3
00EO0632         33
00SH0062         65
0177-5002        3
01RLCB0082901001 3
02AE0078         81
02ID0081         82
0301ME001218-1   3
07HY0569         71
327798           800
336999           7000

現在、このプロセスにはユーザー定義のサブ関数を使用しています

これは私のコードです

Function EXPAND_serial(pno As String, n As String, _
                       Optional delim As String = "@")

    Dim m As String, i As Long, pnos As Variant

    m = Right(pno, Len(n))
    pno = Left(pno, Len(pno) - Len(n))
    ReDim pnos((m) To (n))

    For i = (m) To (n)
        pnos(i) = pno & (i)
    Next i


    EXPAND_serial = Join(pnos, delim)

End Function

このコードを使用すると、メジャー番号では正常に機能しますが(01から09)、09から10以上を超えると

0をスキップしますしたがって、0が来ると、入力桁が各出力桁の長さと一致しません

理解を深めるために私のスナップを参照してください。これを修正する方法は私を助けます

明るい赤の背景のハイライトに問題があります

enter image description here

1
baskar

非常に単純なようです。間違っている場合は、関数String(Number, Character)を使用して修正してください。この関数についてもっと理解できます ここ

Function EXPAND_serial(pno As String, n As String, _
                       Optional delim As String = "@")

    Dim m As String, i As Long, pnos As String

    m = Right(pno, Len(n))
    pno = Left(pno, Len(pno) - Len(n))
    ReDim pnos(m To n)

    For i = m To n
        pnos(i) = pno & String(Len(n) - Len(CStr(i)), "0") & i
    Next i

    EXPAND_serial = Join(pnos, delim)

End Function

追伸:コードを読みやすくするために、余分な括弧を削除しました。

1
Edu Garcia