For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ 指定してそのあと全部と指示していますが、それでも大丈夫でしょうか? 手直しした構文もぜひ見てください!(回答とほぼ同じですが) よろしくお願いいたします。 Dim saki Dim gyo Dim moji Dim n
saki = 2
For gyo = 2 To 7 mae = 0 ato = 0 moji = Range("D" & gyo).Value For n = 1 To Len(moji) If Mid(moji, n, 1) = "、" Then mae = ato ato = n Range("G" & saki).Value = Range("B" & gyo).Value Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1) saki = saki + 1 End If Next mae = ato Range("G" & saki).Value = Range("B" & gyo).Value Range("L" & saki).Value = Mid(moji, mae + 1) saki = saki + 1 Next End Sub
2017/05/12 05:21
小川慶一さんのコメント
(コメントID: 4506)
受講生 さん:
> そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。
ループ内で自分で変数をいじるとしたら、発展編1で扱う Do Loop構文のほうですね。 Do Loopは、For Nextとは異なり、勝手にカウンターの値が変わっていくということがありません。
> For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ > 指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?
受講生さんの投稿
(投稿ID: 3047)
8100の受講生です。
早速お返事いただきありがとうございます。
>For Next構文のカウンターに使う変数は、構文内で変更しないというのが原則です。
そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。
その点を意識し考えてみたところ、最初の構文ではうまくいかず、小川先生の模範通りMidを使って1文字ずつ調べることに落ち着きました。
自分で手直しした構文を回答と見比べたところ、笑ってしまうほど同じで
(当たり前かもしれませんが・・・)とてもうれしくなりました。
For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ
指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?
手直しした構文もぜひ見てください!(回答とほぼ同じですが)
よろしくお願いいたします。
Dim saki
Dim gyo
Dim moji
Dim n
saki = 2
For gyo = 2 To 7
mae = 0
ato = 0
moji = Range("D" & gyo).Value
For n = 1 To Len(moji)
If Mid(moji, n, 1) = "、" Then
mae = ato
ato = n
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1)
saki = saki + 1
End If
Next
mae = ato
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1)
saki = saki + 1
Next
End Sub
小川慶一さんのコメント
(コメントID: 4506)
受講生 さん:
> そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。
ループ内で自分で変数をいじるとしたら、発展編1で扱う Do Loop構文のほうですね。
Do Loopは、For Nextとは異なり、勝手にカウンターの値が変わっていくということがありません。
> For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ
> 指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?
ループを抜けたあとなら、もう最後の要素しか残っていないので、mid関数の引数は2つで十分でしょうね。
にもかかわらず僕が最後でmid関数の引数をあえて3つ指定したのは、ループ内での表記と統一させるためです。
実は、
[code]
for 文はじまり
なんらかの処理 '[A1]
for 文終わり
なんらかの処理 '[A2]
というのは、よくあるパターンです。
このとき、[A1], [A2]で微妙にでも違うコードを書いてしまうと、可読性やメンテナンス性が落ちるので(*)、可能な限り、[A1], [A2] は同じことを書いたほうがよいです。
(*) [A1], [A2]がまったく同じだと、なんらかの理由で[A1], [A2] でやる処理のロジックを変更するときにも、片方でテストして、OKだったらそれをそのままもう片方にコピペ、で済むので楽。
いただいたコードは、インデントが揃っていないのが気になりますのでそこだけ直しましょう。