• ベストアンサー

InputBoxから論理式を得てIF文の論理式に反映したいのですが?

InputBoxで、論理式を入力させて、その論理式が同じマクロ内のIF文の論理式に反映させたいのですが、”型が一致しません”というエラーが出てしまいます。どうすればよいのでしょうか?お教えください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3は、次のようにも書き換えることができます。 ---------------------------------------------------------------- Dim 論理式 As String Dim セル As Range 論理式 = InputBox("論理式を入力してください。", "論理式入力", "値 < 30") For Each セル In Selection If Evaluate(Replace(論理式, "値", CStr(セル.Value))) Then セル.Font.ColorIndex = 3 End If Next

tom_c
質問者

お礼

ありがとうございます。 こんなに短く書けるのですか。 驚きました。 勉強させていただきます。 どうぞ、これからもよろしく願いします。

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

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

こんな具合でどうでしょう ---------------------------------------------------------------- Dim 値 As Variant Dim 論理式 As String Dim 条件 As Boolean 左 = Selection.Column 上 = Selection.Row 右 = 左 + Selection.Columns.Count - 1 下 = 上 + Selection.Rows.Count - 1 論理式 = InputBox("論理式を入力してください。", "論理式入力", "値 < 30") For 列 = 左 To 右 For 行 = 上 To 下 値 = Cells(行, 列).Value 条件 = Evaluate(Replace(論理式, "値", CStr(値))) If 条件 Then Cells(行, 列).Font.ColorIndex = 3 End If Next 行 Next 列

tom_c
質問者

お礼

ありがとうございました。 使用させていただきます。

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

お世話になります。 .NET であれば、こちらが参考になると思います。 http://dobon.net/vb/dotnet/programing/eval.html

tom_c
質問者

補足

初心者で、申し訳ありません。 エクセルのマクロを作成しています。 範囲をマウスで指定し、その中で条件にあう数字を赤で教示したいのです。 つぎのようなマクロを考えたのですが、動きません。 Dim 値 As Variant Dim 論理式 As String 左 = Selection.Column 上 = Selection.Row 右 = 左 + Selection.Columns.Count - 1 下 = 上 + Selection.Rows.Count - 1 論理式 = InputBox("論理式を入力してください。", "論理式入力", "値 < 30") For 列 = 左 To 右 For 行 = 上 To 下 値 = Cells(行, 列).Value If 論理式 Then Cells(行, 列).Select Selection.Font.ColorIndex = 3 End If Next 行 Next 列

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

エクセルVBAですよね。 例えば Dim exp As String exp = InputBox("論理式を入力して下さい", "論理式入力") If Evaluate(exp) Then MsgBox "yes" Else MsgBox "no" End If というようなプログラムで、 A1セルに 10 が入力されている時 InputBox での入力で A1=10 と入力すると、"yes" と表示されます。

tom_c
質問者

補足

初心者で、申し訳ありません。 つぎのようなマクロが動かずに困っています。 マウスで指定した範囲の中で、条件にあった数字を赤で印字したいのです。 よろしくお願いします。 Dim 値 As Variant Dim 論理式 As String 左 = Selection.Column 上 = Selection.Row 右 = 左 + Selection.Columns.Count - 1 下 = 上 + Selection.Rows.Count - 1 論理式 = InputBox("論理式を入力してください。", "論理式入力", "値 < 30") For 列 = 左 To 右 For 行 = 上 To 下 値 = Cells(行, 列).Value If 論理式 Then Cells(行, 列).Select Selection.Font.ColorIndex = 3 End If Next 行 Next 列

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

関連するQ&A

  • IF関数の論理式

    IFの論理式を参照で入力することできませんか。 例えば、=IF(A3=0,"収入","支出")の場合A3を別のセル番号に置き換えたいんですが、数式をいじらないでやりたいんですが。論理式を別のセル参照でやればとおもうんですが。エクセル2003です。

  • IFの論理式

    エクセルで数式の検証を眺めていたところ、 =IF(1,) は0、(というか0以外の数字のとき) =IF(0,) はFALSEが返ってきていました。 この2つの論理式部分には何が起きているのですか?

  • If文の条件文の書き方

    お世話になります。 Excelでマクロを作成しております。 内容:  あるセルに、X<=300 というような条件を入れておきます。  ある値、たとえば、500 が来たときに、Xに代入して、  500<=300 という条件式を作り、それが、正しいか、正しくないか  の結果を求めたいと思っています。 このとき、if文の条件文は、値によって、変わらなくてはいけないので、 文字列の置き換え等をして、変数として条件文を作ると、「型が違います」 のエラーになります。 どのように条件文を作ればいいでしょうか?? hani = Cells(1,1).value 'セル1,1に、X<=300 が書かれています。 exp = Replace(hani, "X", 500) '"X"を500と置き換えます。 If exp Then Check = 0 Else Check = 1 End If よろしくお願いします。

  • エクセル関数でif文の作成の仕方

    if文の論理式にセルに何も入力されていない場合、別のセルに「-」を表示させようと、=IF(" ","-",・・・とするとエラーとなりました。 空白のセルはどのように表現すればよいのでしょうか?

  • If文について

    よろしくお願いします。 Excelのマクロで If文を使おうとしています。 ブックAのシート1に会員No.リストがあり、 ブックBに会員Noをシート番号にしたものがあります。 そこで、会員Noに等しいシートを見つけようと、下記のようにIf文を使いました。 しかし、等しいシート番号があるのに 一致した と出ません。 シートの最後まで進んで 不一致 が出ます。 どこが悪いのでしょうか。ご指導お願いします。 For I = 1 To ActiveWorkbook.Worksheets.Count 'ワークシートの数だけ繰り返す MsgBox 会員No & Worksheets(I).Name If 会員No = Worksheets(I).Name Then MsgBox "一致した" End If Next MsgBox "不一致" 質問の補足ですが、マクロはブックAにあります。 ブックAから会員Noを読み取り、ブックBをアクティブにしてから、If文に入っています。またIf文の前のMsgBox 会員No & Worksheets(I).Name で番号が一致する時があることも確認しています。

  • excel InputBox内はどう表記すれば?

    題名通りのプログラムを作成しています。今回お聞きしたいのは、InputBox内の内容と入力した内容をIf文などで "=" とするにはどうすればいいか、ということです。たとえば、 array1 = "季節" array2 = "冬" kotae = InputBox(問1 : array1 & "は" & array2 & "です") とした時、If文で「もし、入力した内容(kotae)と"季節は冬です"という文が等しいならば」というような式を作り、合っていればseikai + 1、異なればそのまま、といった感じです。簡単にいえばタイピングです。参考書も見たりしたのですが、解決策が出てきません。すごく単純な気もするんですが…文字だと混乱して何が何だか(汗 ご教授お願いします。

  • perl のif文(条件式)内に代入式は使えない?

    例えば、$a =1 という代入式を、if 文の条件式として、( $a = 1){ } とするとエラーが出ますが、代入式はif文の条件式として使えないのですか?

    • ベストアンサー
    • Perl
  • vba InputBox キャンセルなら

    Sub test() Dim i As Long i = InputBox("値をいれてください") 'キャンセルなら 'if then exit sub End Sub このような状態で、キャンセルボタンを押すかescキーを押したら、 'キャンセルなら 'if then exit sub でプロシージャーを抜けたいのですが、 キャンセルボタンを押すと、実行時エラー13になります。 (_型が一致しません。(Error13)) エラーを発生させずに、キャンセルさせるにはどうすればいいですか?

  • PerlでIF文の条件式をもっとスマートに書きたい

    PerlでIF文の条件式をもっとスマートに書きたいのですが。。。 以下のようなIF文の条件式を上手く書く方法がありますでしょうか? if($flg[0] == 1 || $flg[1] == 1 || $flg[2] == 1 || $flg[3] == 1 || $flg[4] == 1 || $flg[5] == 1 || $flg[6] == 1 || $flg[7] == 1 || $flg[8] == 1 || $flg[9] == 1)){ $flg[i]は配列@flgの各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。

  • 論理式 簡単化2

    3入力1出力の論理回路を真理値表を用いて、論理式と論理回路の図示がわからないので、 教えてください。また、その論理式が簡略化出来た時の論理式と論理回路も教えてください。 真理値表(左の3ケタの数値が入力、右の数値が出力を表している。) 000 0 001 0 010 1 011 0 100 0 101 1 110 0 111 1

このQ&Aのポイント
  • 裏面を出すにはどうしたらいいのか
  • 裏面作成はどうしたらよいでしょうか?
  • ご利用の製品についての質問です。
回答を見る