• ベストアンサー

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/17068)
回答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

  • C言語入門者です。プログラムの添削をお願いします。

     任意の西暦年を入力し、その年がオリンピックの開催年(夏季・冬季問わず)かどうかを判定するプログラムを作ろうと思っています。  #include<stdio.h> int main(void) {     int year, rest;     rest = year % 4;     printf("オリンピック(夏季・冬季問わず)が開催される年(西暦)を一つ答えなさい。");     scanf("%d", year);     if(rest == 0) printf("正解!夏季五輪!");     if(rest == 2) printf("正解!冬季五輪!");     if(!(rest == 0 || rest == 2)) printf("不正解!");     return 0; } 夏季五輪開催年を入力した場合、「正解!夏季五輪!」 冬季五輪開催年を入力した場合、「正解!冬季五輪!」 それ以外の場合、「不正解!」 と画面に表示されるようにしたいのです。    しかし、year にどんな数値を入力しても、「正解!夏季五輪!」としか表示されません。どこが間違っているのでしょうか?添削よろしくお願いします。

  • 東京都が2016年夏季オリンピックの招致運動をしていますが・・・

    東京都が2016年夏季オリンピックの招致運動をしています。 【1】 皆さんは2016年に東京で夏季オリンピックが 開催されることを願っていますか? 理由も教えてください。 【2】 もし東京でまたオリンピックが開かれることとなったら、 皆さんはどんな競技を生で見てみたいと思いますか? 見てみたい競技のベスト3を教えてください。

  • Excel プログラム

    閲覧いただきありがとうございます! 学校でいくつか分からない課題が出されたので、教えてくださると嬉しいです(;_;) (1)入力された三角形の3辺の長さa,b,cからHeronの公式  S=√s(s-a)(s-b)(s-c), s=a+b+c/2  によって面積Sを計算して出力するプログラムを作れ。平方根はVBA関数Sqrで計算。 (2)入力された年に夏季オリンピックが開催されるか、冬季オリンピックが開催されるか、オリンピックが開催されないかを判定するプログラムを作れ。 (3)4の倍数である年から100の倍数である年を除いた年、および400の倍数である年が閏年である。丹生慮k巣荒れた都市が閏年かどうかを判定するプログラムを作れ。 (2)と(3)は、If 条件 Then...Else...ステートメントを用いるそうです。 よろしくお願いいたします。m(_ _)m

  • オリンピックが南半球で開催されないわけは?

    オリンピックは2005年12月末までに、夏季冬季合計で戦争中止および特別大会を除くと47回実施されましたが、45回までは北半球で開催されており(日本開催3回を含む)、南半球ではオーストラリアで夏季が2回開催されただけです。 さらに、06年の冬季オリンピック開催地であるトリノはイタリアで、今後予定されているオリンピックも、08年夏季五輪は中国の北京、10年冬季五輪はカナダのバンクーバー、12年夏季五輪はロンドンと、やはり北半球での開催が決定しています。 その国の首都で開催される場合が多いですが、それほど大きいとはいえない都市での開催も冬季を中心にたまに見受けられるだけに、気になります。 その一方で、FIFAワールドカップは南半球開催も少なくはなく、第1回大会は南米のウルグアイでした。 南半球の五輪開催が少ないのには、何か理由があるのでしょうか???

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • ヒラマサオリンピックと東京オリンピック→ご興味は?

    2018年ヒラマサ冬季オリンピックまで、 あと1ヶ月となりました。 私はヒラマサ五輪には興味が湧きません。 2020年に開催の東京夏季オリンピックも、 1964年の東京夏季オリンピックの時と比べると、 市民の興味が全然薄いように感じられます。 あなたの興味はどうですか?

  • 北京オリンピック

    2008年夏季オリンピックは北京(中国)で開催されることになりました。 オリンピックの開催日、スケジュール等の日程をご存知の方ご連絡下さい。

  • 北京オリンピック

    2008年夏季オリンピックは北京(中国)で開催されることになりました。 オリンピックの開催日、スケジュール等の日程をご存知の方ご連絡下さい。

  • なぜオリンピックは7・8月にやるのか?

    ここの所オリンピック夏季大会は、7・8月に行われている。 なぜ選手にとって過酷な一番暑いこの時期にやるのか? 1964年東京オリンピックは、比較的涼しい10月に開催したのに。

  • 「明るい東京オリンピック」「暗い東京オリンピック」

    遠い昔の1964年に開催された東京オリンピックと、 近未来の2020年に開催される東京オリンピック。 同じ東アジアの大国で行われる夏季大会ですが、 30年後の2045年になって振り返ってみた場合、 どちらがこの国にとって明るいイベントとして 後世の子孫たちに語り継がれていくでしょうか?

専門家に質問してみよう