初めまして。お世話になります。初めてこちらのサイトで質問させていただくので、何か不備があった場合は先にこの場でお詫び申し上げます。
私はExcel VBAで、セル内の空白で区切られた単語を反転させるプログラムを再帰的に書いています。
例えば、
山田 田中 鈴木 本田
という単語の列があった場合、これを
本田 鈴木 田中 山田
という風に反転させたいのです。
実は、某所でも質問したのですが、その時は自分でも何がわかっていて何がわかっていないのかさっぱりだったので、プログラマーの方がいらっしゃるというこのサイトで、改めて質問させていただくことにいたしました。
現在、私が書いたプログラムは以下の通りです。
lang
1Function ReverseWord(str As String) As String 2 3Dim Num As Integer, N As Integer 4Dim R1 As String, R2 As String, R3 As String 5 6 If N = 0 Then 7 Num = InStr(str, " ") 8 R1 = Mid(str, 1, Num) 9 R2 = Mid(str, Num) 10 R3 = R1 + R3 11 12 N = N + Num 13 ReverseWord (R2) & " " & R3 14 End If 15 16 If Len(str) > N > 0 Then 17 Num = InStr(str, " ") 18 19 R1 = Mid(R2, 1, Num) 20 R2 = Mid(R2, Num) 21 R3 = R1 + R3 22 ReverseWord (R2) & " " & R3 23 N = N + Num 24 End If 25 26 If InStr(R2, " ") = 0 Then 27 R3 = " " + R2 + R3 28 End If 29 30 ReverseWord = R3 31 32End Function
このプログラムについて質問です。
始めのIf文(N=0の部分)で、再帰呼び出しを書いたのですが(ReverseWord(R2))、If文(N=0)のところでループしてしまい、ここから長い期間わからないまま止まっております。おそらくこの始めのIf文がいけないのだと思いますが、何がいけないのか、教えていただけないでしょうか。
再帰呼び出しについて自分がよくわかっていないということもあるのだと思いますが、ここを理解しないと次に進めず困っております。ループ文ではなく、あくまで再帰的に書きたいということを強調させていただきます。
どなたか回答いただけると幸いでございます。
※完成したので一応載せておきます。正直、この再帰呼び出しは非常にわかりづらいと思いますが、非常に参考になる回答をいただいたので、あえて、ということで、あしからず。
lang
1Option Explicit 2Public N As Integer 3Public R1 As String, R2 As String, R3 As String 4 5Sub TestRM() 6Dim Tt2 As String 7 Tt2 = Sheet1.Cells(10, 2) 8 9 MsgBox ReverseWord(Tt2) 10 11 If InStr(R2, " ") = 0 Then 12 R1 = "" 13 R2 = "" 14 R3 = "" 15 End If 16End Sub 17 18Function ReverseWord(str As String) As String 19 20Dim Num As Integer 21 22 If N = 0 Then 23 Num = InStr(str, " ") 24 R1 = Mid(str, 1, Num) 25 R2 = Mid(str, Num + 1) 26 R3 = R1 + R3 27 N = Num 28 ReverseWord (R2) 29 End If 30 31 If (Len(str) > N) And (N > 0) Then 32 Num = InStr(R2, " ") 33 R1 = Mid(R2, 1, Num) 34 R2 = Mid(R2, Num + 1) 35 R3 = R1 + R3 36 N = N + Num 37 ReverseWord (R2) 38 End If 39 40 If InStr(R2, " ") = 0 Then 41 R3 = R2 + " " + R3 42 End If 43 44 If R2 = "" Or InStr(R2, " ") = 0 Then 45 N = 0 46 R1 = "" 47 R2 = "" 48 End If 49 50 ReverseWord = R3 51 52End Function
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。