VBAの算数とプログラミングの式の違い

このQ&Aのポイント
  • VBAにおいて算数とプログラミングの式は異なる扱いとなります。
  • 算数では左から右に計算が進みますが、VBAでは式の逆順で計算されます。
  • したがって、VBAの式では「i + 1」のように逆順で書く必要があります。
回答を見る
  • ベストアンサー

VBAって算数とは式が逆なんですか?

算数では 1+1=2 と言う書き方をしますよね。(左から右) だけど、 Sub サンプル1() Dim i As Long i = 1 i +1 = i MsgBox i End Sub をしようとすると、 「+」マークが消えてしまい、 i 1 = iになっちゃいます。 そして、サンプル1を動かすことができません。 Sub サンプル2() Dim i As Long i = 1 i = i + 1 MsgBox i End Sub なら、無事動かせました。 私の頭の中では、 1+1=2(左から右) の感覚しかないので、 サンプル2の動きが不気味なのですが 「プログラミングとはそういうものだ」と割り切るしかないのでしょうか?

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

  • ベストアンサー
noname#176157
noname#176157
回答No.1

>i=1 は、変数iに1を入れる。 >i +1 = i あなたの解釈では、「i+1を変数iに入れる」で、先のi=1と処理の方向が逆です。だめですね。

XJKPRKSWT
質問者

お礼

やはりだめですね。ありがとうございました。

その他の回答 (3)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

あなたは小学生 すごいですね 中学になったら算数でなく、数学という学問に変わります。 中学では A=2+5 のような表現になります。 = 両側に 演算記号を付けて 2×3=2+2+2 のようにも表現します。 この表現は外国でも同じです。

XJKPRKSWT
質問者

お礼

ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>算数では >1+1=2 >と言う書き方をしますよね 算数のその式は、「1+1の結果は2と等しい(2です)」と言ってます。 「2に1+1を入れている」つもりは、どこにもありません。2に入れる??ってそもそも意味不明ですよね。 アナタのマクロをちょいと修正するなら… sub macro1()  dim i, j  i = 2  j = 3  msgbox 1 + 1 = i  msgbox 1 + 1 = j end sub 実行すると「TRUE」そして「FALSE」という結果が現れます。 最初の結果は、1+1は2と等しい、です。算数と同じですね。 次の結果は、1+1は3と等しくない、です。算数なら1+1≠3といった具合です。 で。 そもそも「変数」や「代入」の概念は、小学校の算数には出てきません。なので小学校の算数では、「左に右の値を代入する」を説明できないんです。 代入の概念は中学校の数学以降で初めて勉強します。 y=a×x+b といったのをやったのを、もう忘れちゃいましたかね。これが「右の結果を左に代入する」、つまりVBAのマクロの値の代入の式です。

XJKPRKSWT
質問者

お礼

ありがとうございました。

  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

VBAは左に入れ物(変数)を用意し、その中身はこれを入れる(直値か計算式か変数)、と指定するので、右から左ですね。 (VBA、VB、Java、JavaScript、C言語、C++、Perl、昔のPCのBASICなど、私がやってきた言語は大抵右から左です。 ただし、やっていない言語も多々あるので、絶対右から左、とは断言できませんが…。 アセンブラ言語の場合、CPUで異なり、右から左や左から右があります。以上参考まで)

XJKPRKSWT
質問者

お礼

基本的にプログラミング言語は右から左だけど、絶対なわけではないようですね。 もっと色々勉強してみます。ありがとうございました。

関連するQ&A

  • プロシージャーの外で宣言した変数の値の破棄の仕

    プロシージャーの外で宣言した変数の値の破棄の仕方について教えてください。 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i End Sub ++++++++++++++++++ を実行すると、どんどん値が増えていきますが、 回避するには、 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i i = 0 End Sub ++++++++++++++++++ とするしかないのでしょうか? ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i Set i = Nothing End Sub ++++++++++++++++++ としたら、エラーになりました。

  • Excel2007VBAプロシージャの引数について

    ●質問の主旨 下記コードのうち、 buf = buf & msg & vbCrLfについて 1.右辺の変数bufはどんな役割があるのでしょうか? 2.右辺のbufを省略したら、メッセージボックスに 表示される「Excel」の文字は3つから1つになります。 これはなぜでしょうか? ご存知の方ご教示よろしくお願いします。 ●コード Sub Sample8() Call Sample9("Excel", 3) End Sub Sub Sample9(msg As String, n As Long) Dim i As Long, buf As String For i = 1 To n buf = buf & msg & vbCrLf Next MsgBox buf End Sub

  • VBA 100億になると#が自動で付く

    下記のコードを見てください。 Option Explicit Sub test1() Dim i As Long i = 1000000000 End Sub Sub test2() Dim i As Long i = 10000000000# End Sub test2の#は私が付けたものではありません。 test1より一つ多く0を付けたら勝手に付きました。 どうしてなのでしょう? 不思議です。

  • エラーメッセージはコピペできないのでしょうか?

    MsgBoxはctrl+cでコピペできるのですが エラーメッセージはコピペできないのでしょうか? Sub Sample() Dim i As Long i = "a" End Sub でエラーを発生させて、コピーしてみても何も起こりません。

  • 奇数・偶数の判断 VBA

    Sub Macro1() Dim i As Long i = 1 For i = 1 To 10 If i = ? Then '偶数ならと言うコード MsgBox "偶数です" Else MsgBox "奇数です" End If Next End Sub ここまでは自分で作れたのですが、iが奇数か偶数かを判断するコードがわかりません。 ご教授よろしくお願いします。

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • VBAのプログラムでCheckboxの使い方

    すみません。教えてください。 チェックボタンオブジェクト名を配列に格納したいのですが、可能でしょうか。 <内容> 例えば、チェックボタンオブジェクト名がcheckbox1~checkbox4まで在ったとき、"checkbox & 変数" にしたいのです。 <Sample> Sub CHECKBOX() Dim i As long For i = 1 To 4 With Worksheets(Sheet_No) On_Off(i) = .Controls("CheckBox" & i).Value End With Next i MsgBox (On_Off(2)) End Sub

  • VBAのシートイベントで教えてください

    シートのN4以下で、既に同じ番号があれば「既に同じ番号があります」 と表示するようにしたく、下のように書きましたが、肝心な部分 の、どのように同じ番号をみつけるようにすのかわかりませんでした。 教えていただけないでしょうか。宜しくお願いします。 Private Sub worksheet_change(ByVal target As Range) Dim 範囲左 As Integer Dim 範囲右 As Integer Dim 範囲上 As Integer 範囲左 = 1 範囲右 = 16 範囲上 = 4 With target 'if '指定した範囲の列Nに既に同じ番号や文字列があれば MsgBox "既に同じ番号があります。" End If End With End Sub

  • エラーが発生した場合は VBA

    Sub Sample() On Error GoTo Err1 Dim i As Integer i = "あ" '←ココで構文エラーとなる。 MsgBox "あ" Debug.Print "無事終了します" Exit Sub Err1: Debug.Print "エラーになりました" i = 1 Resume Next 'エラーの発生した次の行から処理を続行します。 End Sub このようなエラー処理で エラーが発生した場合は MsgBox "あ" ではなく i = "あ" '←ココで構文エラーとなる。 に戻る事は出来ないのでしょうか?

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

専門家に質問してみよう