私がやろうとしているのは、数値をインクリメントしてから、ループして最初の桁を減算し、最初の2
桁に1
なるまで残りをインクリメントすることです2
=0
だから私はM201001
なりm191002
、次はm181003
それまでm011020
あなたがする必要があるのはleft
、 、mid
およびright
関数を使用して値を 3 つに分割することです。
次に、必要に応じてループを実行します。私はそれを自分で試しているので、そうしたら答えを更新します。
追加されたコード:
Sub Testing()
Dim myIn As String
myIn = "M201001"
Dim myLeft As String
Dim myMid As Integer, myRight As Integer, i As Integer
Dim myOut As String
myLeft = Left(myIn, 1)
myMid = CInt(Mid(myIn, 2, 2))
myRight = CInt(Right(myIn, 4))
myOut = myLeft & Format(myMid, "00") & Format(myRight, "0000")
i = 0
Debug.Print "IN: " & myIn
Debug.Print "BROKEN UP: " & myOut
Do Until myMid = -1
Debug.Print "ITERATION " & Format(i, "00") & ": " & myLeft & Format(myMid, "00") & Format(myRight, "0000")
myMid = myMid - 1
myRight = myRight + 1
myOut = myLeft & Format(myMid, "00") & Format(myRight, "0000")
i = i + 1
Loop
End Sub
説明が必要な場合は、お尋ねください。喜んで説明させていただきます。
これを試して
Function GetNextNumber(n As String) As Variant
' Validate input
If Len(n) <> 7 Then
GetNextNumber = xlErrNum
Exit Function
ElseIf Left$(n, 1) <> "M" Then
GetNextNumber = CVErr(xlErrNum)
Exit Function
End If
GetNextNumber = Left$(n, 1) & Format(val(Mid$(n, 2)) - 9999, "000000")
End Function
これを使ってテスト
Sub demo()
Dim n As Variant
n = "M201001"
Debug.Print n
Do
n = GetNextNumber(CStr(n))
If IsError(n) Then Exit Sub
Debug.Print n
Loop Until val(Mid$(n, 2)) <= 19999
End Sub