• ベストアンサー

エクセルVBA(初心者)

imogasiの回答

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

基本的に=の右側の「値」や「関数が実行されて結果が値」になったあとで、その値が左辺の変数1つに代入されます。 手続き型言語はそういう約束で記述します。 文法といえば文法なのでしょうが、もっと基礎(本)的な約束ごとです。 ーーーーー Sub 練習() InputBox ("誰") '付け加えた InputBox "だれ" a = InputBox("だれ") MsgBox a MsgBox ("誰だ") End Sub 最初2つは、これは関数が実行されるが、受ける変数がないので あとでその値を使うことができず、徒労に終わる。だからそんな 使い方はしない。 MsgboxはMsgbox関数ですが、関数の戻り値を無視する場合は()カッコは必要ないことになっていて、()をつけるとエラーになりますと書いた本もあったがエラーにならなかった。 普通は()を書きません。最後の例も関数の戻り値を無視していますが、こちらの使い方も結構よく使います。

関連するQ&A

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • エクセルVBA、入力しないと閉じないInputBox

    必ず何かを入力しないと閉じないInputBoxを作ろうと思います。 以下のコードで入力がなければ閉じないというか、Line:に戻るので、何度でも現れるInputBoxになるようですが、このやり方は正しいですか? 通常はどうやるのでしょうか? Sub test() Dim a line: a = Application.InputBox("必ず入力して下さい。", "Input!") If Len(a) = 0 Or a = False Then GoTo line MsgBox "有難う。" & a & " ですね。", , "(o。_。)oペコッ" End Sub

  • エクセル2010のvbaについて

    Sub abc() Dim a Set a = Selection If a.Width * 4 / 3 <> 90 And a.Height * 4 / 3 - 1 <> 120 Then MsgBox ("120x90px以外の画像以外は挿入できません") End If End Sub 上のコードを実行するとなぜか120×90以外でも メッセージが表示されなくなります (Msgbox a.Width * 4 / 3は90 Msgbox a.Height * 4 / 3は120と正しく表示されます) 更に高さが1px多くなってしまいます(-1) (高さを調べても121pxではなく120pxでした) たまにvbaをしている時にあるので 回答と原因もお願いします

  • エクセルVBA Inputboxについて教えてください。

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

  • vbaでCountIf関数を使いたい(エクセル)

    A1セルにa-a-aがはいっています。 この場合aは3つですよね。 これをvbaで取得するコードを作っているのですがうまくできません。 Sub test() Dim myStr As String myStr = "a" MsgBox WorksheetFunction.CountIf(Cells(1, 1), "*" & myStr & "*") End Sub これをすると、なぜか1が返ってきます。 Aは3つあるのになぜ1が返るのでしょうか? A1にaaaaaを入れて実行しても1が返ります。

  • エクセルVBAでBeep音は?

    エクセル2000、Win2000です。 VBAで音を出そうと、下記のマクロを記述しました。 ところが、「MsgBox i & "回実行しました。」の部分を、コメントブロックしたら一回しか鳴りません。ビー、ビー、ビーと三回鳴ると思ったのですが、どうしてでしょうか? Sub sound() Dim i As Integer For i = 1 To 3 Beep 'MsgBox i & "回実行しました。" Next i End Sub

  • Excel VBA 実行されないのはなぜ

    いつもお世話になっております。 VBAの練習で以下のような構文を作成し実行すると 構文のサンプルを並べているシートでのみエラーが表示されます。 新規シートでは実行されるので、なぜなのかと思います。 変数名が重複しているということもありません。 思い当たる点がありましたら教えてください。 よろしくお願いいたします。 Sub InputBoxメソッドで選択した範囲を取得する() Dim myselect As Range 'On Error Resume Next Set myselect = Application.InputBox("セル範囲を選択します。", Type:=8) If myselect Is Nothing Then Exit Sub myselect.Value = "test" End Sub

  • Excel2000のVBAでわからないことがあります。

    こんなものを作ってみました。 Sub 理想体重() Dim Sin As Long Dim Tai As Long Sin = InputBox("あなたの体重は?", "体重") Tai = InputBox("あなたの身長は?", "身長") If Tai >= Sin * Sin * 21 / 10000 + 3 Then MsgBox "太りすぎです" ElseIf Tai <= Sin * Sin * 21 / 10000 - 3 Then MsgBox ("痩せすぎです") Else MsgBox ("標準です") End If End Sub 結果はきちんと出てくるのですが、最初の変数宣言のところがわかりません。 最初は、Longではなく、Integerにしたのですが、オーバーフローのエラーが出たので、Longに変更したところ、きちんと出てくるようになりました。 しかし、なぜ、Integerではだめなのかがわかりません。私としては、Integerは32,767までの数字が入るのだから、身長や体重を入れたぐらいだと、オーバーフローにはならないのではないかと考えています。 きっと、根本的なものがわかっていないんだとは思うのですが、違いを教えていただければうれしいです。 よろしくお願いいたします。 (VBAを勉強したばかりです。)

  • vba なぜこうなるのか・・・。

    こんばんは、よろしくお願いします。 A1セルにデータが入っている状態で、以下の変数を使いA列の最終データが入っている行を調べると、(65536)が表示されます。なぜ、(1)にならないのでしょうか? ためしにA1及びA2セルにデータを入れマクロを実行すると、正確に2が表示されました。 Sub 練習() dim maxrow as long maxrow = Sheets(1).Range("a1").End(xlDown).Row   msgbox maxrow End Sub EXCEL2000を使用しています。よろしくお願いします。  

  • VBAについて

    こんばんは、VBA初心者で勉強をはじめたばかりで、自分で例題を作り調べながら途中まで作成しましたが、行き詰ったのでご教授をお願いします。ECXEL2000を使用しています。 ○やりたいこと。 ・INPUTBOXを表示させ、年齢を入力してもらう。 ・年齢が、18~64歳までならA2セルに入力年齢を表示させる。     17以下は「就職前」、65歳以上は「退職済」とBOXで表示させ、セルには表示させない。 ・A2セルに入力したら、A3セルをセレクトする。 ・INPUTBOXを表示させ、再度年齢入力をしてもらい、既にA2セルに年齢が入力済みであれば、A3に表示する。これをA10セルまで行えるようにする(その都度マクロの実行で実施) ○作成したマクロです。・・・やりたいことがすべて記述できていません。 Sub 年齢入力() 'INPUTBOXに入力される年齢の変数   Dim r As Integer 'データの最終行を代入する変数 Dim k As Long r = InputBox("年齢入力") k = Rows.Count Range("a2").Select If 17 < r And r < 65 Then MsgBox ("入力します") Range("a2") = r ElseIf r >= 65 Then MsgBox ("退職済") ElseIf r <= 17 Then MsgBox ("就職前") End If Cells(k, 1).End(xlUp).Offset(1).Select End Sub 以上のマクロのどこを変更すれば、私のやりたいことができるようになりますでしょうか?よろしくお願いします。