• ベストアンサー

VBAで変数のタイプを知るには?

多くの人に入力させるシステムをエクセルで作成中です。 数値を入力してほしい場所に文字やスペースを入れられると 思わぬトラブルになります。 a=inputbox("年齢")・・・(A) if a+10>b then ////・・・(B) といった入力後の作業の前に つまり(A)(B)の間に 変数aが文字(strings)なのか整数値(integer) なのかを調べるようにしたいのですが どういう方法があるでしょうかお分かりの方お教えください

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

変数のデータ型を取得する(TypeName 関数) http://www.optimizm.jp/003/vba_str_003.shtml

yamutya
質問者

お礼

ありがとうございました typename なるほど

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAの変数

    いつもお世話になるます。 エクセルvbaでaを変数にしたとき 例 private sub text1() a=inputbox("数字入力") end sub private sub text2() if a=777 then ・・・ みたいなことをしたいのですが、private subが違うと、変数も別物になるようです。どんなprivate subでも共通で使える変数を使うにはどうすればいいのでしょうか? 宜しくお願いします。

  • VBA

    ExcelのVBAについて質問です。 1000以下の任意の整数nを画面入力から読み込んで、1+2+3+4+・・・+nの合計値をセルA1に表示させたいのですが、1とnの和が足されてしまいます。 どこがおかしいのでしょうか? 指摘お願いします。 以下テキストです。 スペースなどは気にせずテキストの部分でご指摘お願いします Sub ()   Dim i As Integer Dim n As Integer n = Application.InputBox(Prompt:="1000以下の整数を入力してください", Type:=1) If n <= 1000 Then For i = 1 To n iResult = i + 1 Cells(1, 1) = iResult Next i End Sub よろしくおねがいします。

  • 変数について

    質問1:-0.0685274635この数値を扱うのは(計算したりIFで判断するには)どの変数を使えば良いですか? '変数 Variant Double=倍精度浮動 Currency=通貨型 Integer=整数型 Float=浮動小数点型 Long=長整数型 Dim CAL_DA As Integer Range("A1")="-0.0685274635" CAL_DA =Range("a1") 質問2:CAL_DAが-6.85274..になってしまいます。 ただし、必要とするのは-0.068の桁でよいのですが 質問3:CAL_DA =Mid(Range("a1"),1,6)いけますか? 以上ですよろしくお願いします。

  • ExcelのAutoFilter への変数の使用がうまく行きません!

    ExcelのAutoFilter への変数の使用がうまく行きません! Windows XP Home Edition SP3 Office XP Personal 2002 Excel 2002 下記の NNN に 「 InputBox に 入力した整数 」 を変数で使用したいのですが、 どのようにすればよろしいでしょうか? 何卒、ご教示のほどをお願い致します。 Sub TEST1() Dim NNN As Integer Dim msg As String Dim i As Integer Application.ScreenUpdating = False   msg = "【整数】 を入力してください。"   NNN = InputBox(msg)   If ActiveSheet.AutoFilterMode Then    With ActiveSheet.AutoFilter    For i = 88 To 90    .Range.Rows(1).Cells(i).AutoFilter Field:=i, Criteria1:="<=NNN" '←この NNN です    Next i   End With   End If Application.ScreenUpdating = True End Sub

  • 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 以上のマクロのどこを変更すれば、私のやりたいことができるようになりますでしょうか?よろしくお願いします。

  • VBA inputbox関数について

    質問をさせてください。 VBA inputbox関数にて 数字を入力をし、その数字を元に挿入を行うというものを施しています。 そして下記の内容で実際は動くのですがどうしても疑問点が浮かんできます。 それはinputbox関数には宣言をしないと文字列として処理されますよね? なので、宣言をlongにして整数化をしています。 しかし、If "1" <= buf1 <= "65536" Thenの部分で 数字に""(ダブルコーテーション)を入れないとうまく作動しません。 例えば「0」を入力しても正の処理へ行います。 ダブルコーテーションで囲んでいる数値は文字列として認識されるはず・・ 入力は数値として宣言をしているのだからダブルコーテーションはいらないのではないんでしょうか? また、もし数字ではなく、記号などを入力をしてしまった場合の偽の処理へいくにはどうすれば いいでしょうか? 恐れ入りますがよろしくお願いいたします。 Sub test() Dim buf1 As Long buf1 = InputBox("コピー先の列番号を入力してください") If "1" <= buf1 <= "65536" Then Cells(buf1, 1).EntireRow.Insert Else MsgBox "正しい列番号を入力してください" Exit Sub End If End Sub

  • (VBA)条件でスキップ

    以下のようなコードで現在処理しています。 必ず1回は、変数(m1),変数(m2)を指定して 同じ処理なら2回目の変数指定はスキップするように「Goto ラベル」で 変数指定をスキップしていますが 上手い処理の仕方が判らないのでなので 「If YNFlag = 1 And n > 1 Then GoTo Skip」と 判断が付きにくいコードとなってしまいました。 もう少し、分かりやすコードがありますか ? Sub test() ’FLAG1で判断 ' FLAG=1なら変数1,変数2は変らずに最後まで同じ値で処理する ' FLAG<>1なら、変数1,変数2は処理前にその都度指定する Flag1 = Application.InputBox(prompt:="全て同じ処理ですか?" & vbCrLf & _ "同じなら「1」を入力してください。", Title:="(数値入力)", Type:=1) n = 1 For I = 1 To LowCount 'Private関数のNumberingを呼び出す > 文字数が直ぐ可視化出来るようにしたシートを表示 Nubering (I) If Flag1 = 1 And n > 1 Then GoTo Skip All2 = Application.InputBox(prompt:="変数(1),変数(2) を指定" & vbCrLf & _ " 半角スペースで数値を2つ入力してください。", Title:="変数指定(数値入力)", Type:=2) myArray = Split(All2, " ") For II = 0 To UBound(myArray) m1 = myArray(0) m2 = myArray(1) - myArray(0) Next Skip: Ws1.Activate SepM= Mid(Ws1.Range("A" & I), m1, m2) Ws1.Range("B" & I).Value = "'" & SepM n = n + 1 Next I ExDeleteStr = s1 & sc End Function

  • Exsel プログラムなんですが・・・。

    簡単なゲームを作ってみようと思い、ExcelでAからZまでの文字を入れて正解の文字を当てるものを作っています。 しかし、本を参考に作ってみたのですが、Ifの所で型が一致しませんと出るのですが、どこが間違っているのか分かりません。 できれば、Ifとwhile~Loop,を使って作りたいのですが・・・。 どなたか、詳しい方、ご教授の程よろしくお願いします。 以下、作成したものです。 Sub Ex667() Dim a As String Dim b As String Dim i As Integer a = "J" i = "A" a = InputBox("AからZまでの文字を入力", "文字当て", "A") Do While a <> "" i = i + 1 If a = b Then MsgBox i & "回目で正解!" Exit Do ElseIf "A" < a And a < "Z" Then If a = b Then a = InputBox("もっと後の数です。", "ハズレ") Else a = InputBox("もっと前の数です。", "ハズレ") End If Else a = InputBox("入力ミス") End If Loop End Sub 回答よろしくお願いします。

  • subプロシージャ

    2次方程式a*x^2+bx+c=0えお解くプログラムを考える。メインプロシージャmain1がsubプロシージャread1,solve1,display1を1回ずつ呼び出す。プロシージャread1で変数a,b,cにinputboxで整数値を入力する。プロシージャsolve1では、まず判別式D=b^2-4*a*cを計算して、D>0の場合にはx1、x2に実数解x1=(-b+sqr(D)/(2*a)、x2=(-b-sqr(d)/(2*a)を求める。D<0の場合はx1に実部-b/(2*a)を、x2に虚部sqr(-D)/(2*a)を求める。プロシージャdisplay1は入力された3つの整数値とsolve1で得られた2つの変数x1.x2の値を判別式Dの符号に応じてMsgbox関数で表示する。 以上のプログラムをモジュールレベル変数を用いてつくりなさい。 Sub read1() '問10(1) Dim a As Integer, b As Integer, c As Integer a = InputBox(" aの値を入力して") b = InputBox(" bの値を入力して") Sub solve1() D = b ^ 2 - 4 * a * c If D > 0 Then x1 = (-b + Sqr(D)) / (2 * a) x2 = (-b - Sqr(D)) / (2 * a) Else x1 = -b / (2 * a) x2 = Sqr(-D) / (2 * a) Sub display1() End Sub ここまでやったのですがこの先どうやるかわかりません。 おしえてください。 あとモジュールレベル変数ってなんですか?

  • VBAの変数について

    VBAでUserFormからデータを入力します。 入力された各データをTarget1~Target20に代入します。 各Targetにデータが入っている場合は、配列K(i)に「1」を格納します。 そこで、Target "1"~"20" を変数iであらわしたいのですが、どのように表現したらよいのでしょうか。 Dim i As Integer Dim K(20) As Integer Target1 = TextBox1.Value Target2 = ComboBox1.Value : : Target19 = TextBox12.Value Target20 = ComboBox8.Value For i = 1 To 20 If 『  ?   』 <> "" Then K(i) = 1 EndIf Next i