• 受付
  • 困ってます

VBAの例題について

  • 質問No.9632214
  • 閲覧数81
  • ありがとう数0
  • 気になる数1
  • 回答数4

お礼率 77% (203/261)

以下のページでこのように
str = str & year & "年はうるう年で、夏季オリンピック開催年です!" & vbCrLf

としている所があります。
https://www.sejuku.net/blog/30059

ここで私は【=】のあとに【str】を入れている理由が分かりません。試しにstrを入れないで実行しても同じ結果になりました。

=の後にstrを入れる理由を教えてください。
お願い致します。

回答 (全4件)

  • 回答No.4

ベストアンサー率 36% (181/500)

最大の理由は、プログラムのメンテナンス性を考えてのことだと思います。例えば2016の前に2012~2015の処理を追加した場合、=の後にstrが無いと期待した動作をしません。いわゆるバグとなります。
逆に、最初にstrを使う前には
str = ""
と明示しておくとバグが混入しにくくなります。これは作法です。

ちなみに、全然関係ありませんが、うるう年の判定には4で割るだけでは不十分です。4で割り切れても100で割り切れる場合はうるう年ではありません。100で割り切れても400で割り切れる場合はうるう年です。判定プログラムを改良してみるのも面白いですね。
  • 回答No.3

ベストアンサー率 28% (4489/15985)

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

ベストアンサー率 62% (458/728)

Visual Basic カテゴリマスター
この様なことも有るので、たまたま同じ式を使ったのでしょう
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
  • 回答No.1

ベストアンサー率 42% (19/45)

'うるう年の場合
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年はうるう年ではありません!」としか出力されないでしょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ