- ベストアンサー
InputBoxから論理式を得てIF文の論理式に反映したいのですが?
InputBoxで、論理式を入力させて、その論理式が同じマクロ内のIF文の論理式に反映させたいのですが、”型が一致しません”というエラーが出てしまいます。どうすればよいのでしょうか?お教えください。
- みんなの回答 (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
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
こんな具合でどうでしょう ---------------------------------------------------------------- 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 列
お礼
ありがとうございました。 使用させていただきます。
- naganaga_001
- ベストアンサー率71% (172/242)
お世話になります。 .NET であれば、こちらが参考になると思います。 http://dobon.net/vb/dotnet/programing/eval.html
補足
初心者で、申し訳ありません。 エクセルのマクロを作成しています。 範囲をマウスで指定し、その中で条件にあう数字を赤で教示したいのです。 つぎのようなマクロを考えたのですが、動きません。 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)
エクセルVBAですよね。 例えば Dim exp As String exp = InputBox("論理式を入力して下さい", "論理式入力") If Evaluate(exp) Then MsgBox "yes" Else MsgBox "no" End If というようなプログラムで、 A1セルに 10 が入力されている時 InputBox での入力で A1=10 と入力すると、"yes" と表示されます。
補足
初心者で、申し訳ありません。 つぎのようなマクロが動かずに困っています。 マウスで指定した範囲の中で、条件にあった数字を赤で印字したいのです。 よろしくお願いします。 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 列
お礼
ありがとうございます。 こんなに短く書けるのですか。 驚きました。 勉強させていただきます。 どうぞ、これからもよろしく願いします。