• ベストアンサー

VBAの例題について

以下のページでこのように str = str & year & "年はうるう年で、夏季オリンピック開催年です!" & vbCrLf としている所があります。 https://www.sejuku.net/blog/30059 ここで私は【=】のあとに【str】を入れている理由が分かりません。試しにstrを入れないで実行しても同じ結果になりました。 =の後にstrを入れる理由を教えてください。 お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • aa5462
  • ベストアンサー率40% (20/49)
回答No.1

'うるう年の場合 year = 2016 '結果表示の処理 If year Mod 4 = 0 Then str = str & year & "年はうるう年です!" & vbCrLf Else str = str & year & "年はうるう年ではありません!" & vbCrLf End If 'うるう年でない場合 year = 2017 '結果表示の処理 If year Mod 4 = 0 Then str = str & year & "年はうるう年です!" & vbCrLf ElseIf year Mod 4 <> 0 Then str = str & year & "年はうるう年ではありません!" & vbCrLf Else '何もしない End If 2016年と2017年の結果を改行して繋げて、メッセージボックスに出力しています。 おそらく2016年と2017年の算出式を同じにしたいからだと思います。 2016年の式の最初のstr&は無くても同じ結果に名なると思いますが、 2017年の式の最初のstr&が無ければ「2017年はうるう年ではありません!」としか出力されないでしょう。

bitamin123456
質問者

お礼

お礼が遅くなりました。1番わかりやすく、納得いく回答でした。ありがとうございました。

その他の回答 (3)

  • ubku
  • ベストアンサー率37% (227/608)
回答No.4

最大の理由は、プログラムのメンテナンス性を考えてのことだと思います。例えば2016の前に2012~2015の処理を追加した場合、=の後にstrが無いと期待した動作をしません。いわゆるバグとなります。 逆に、最初にstrを使う前には str = "" と明示しておくとバグが混入しにくくなります。これは作法です。 ちなみに、全然関係ありませんが、うるう年の判定には4で割るだけでは不十分です。4で割り切れても100で割り切れる場合はうるう年ではありません。100で割り切れても400で割り切れる場合はうるう年です。判定プログラムを改良してみるのも面白いですね。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

この例題では str = str &・・とする必然的な理由は、小生には、理解できない。 よく、長くなるSQL文などで、完成形の1部ずつ、追加していって、1行づつに表現し、最後に完成形に至る、形にしているケースがある。 行数は増えるけれど。継ぎ足して行くイメージです。 後日読む人と、コードを作る人のわかりやすさや、確認のためです。 「&」 だけでも済ませられる(表せる)。 実例をWEBで探したが、探せなかった。 sqlwhere += というのも似たものだろう(VB.NETなど他処理系)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

この様なことも有るので、たまたま同じ式を使ったのでしょう Sub macro1()   Dim year As Variant, str As String   For Each year In Array(2016, 2017)     If year Mod 4 = 0 Then       str = str & year & "年はうるう年です!" & vbCrLf     Else       str = str & year & "年はうるう年ではありません!" & vbCrLf     End If   Next   MsgBox str, vbInformation End Sub

関連するQ&A