• ベストアンサー

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

専門家に質問してみよう