• 締切済み

文字列で渡された式

質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

noname#16765
noname#16765

みんなの回答

回答No.2

こういう感じでならできますが(AccessVBAで確認)。 式strが真の場合はTRUE、偽の場合はFALSEが表示されます(下の例の場合はTRUE)。 Public Sub strCheckTest() Dim str As String str = "10 > 5" If Eval(str) Then MsgBox ("TRUE") Else MsgBox ("FALSE") End If End Sub

noname#16765
質問者

お礼

昨日、頑張って調べた結果こういったものが出来ました! 返却値はInteger型になりましたけど・・・ Private Function strCheckTest(ByVal Expression As String) As Integer Dim Sc As Object Dim val As Integer Sc = CreateObject("ScriptControl") Sc.Language = "VBScript" val = Sc.Eval(Expression) Sc = Nothing Return val End Function ありがとうございます。

  • process9
  • ベストアンサー率29% (81/272)
回答No.1

無理です。

関連するQ&A

  • Like演算子で、[と]を文字として扱い比較したい

    今、フォルダ内のファイルリストを作成するVBA(Excel2003)を作っています。そこで、ファイル(絶対パス:フルパス)に「含まれていい文字」と「含まれない文字」(キーワード)を指定できる機能を作っています。 以前、VB6で類似の機能を作った時は、すんなり行ったのですが、VBAではうまくいきません。正規表現が使えるに越したことはないのですが、「 [ や ] を文字として認識するだけでもいいです。」 リストを作るフォルダには、  [20].txt  テキスト[a]txt  メモ[10] - コピー.txt などのテストファイルとその他ファイルが存在します。 キーワードを指定しないときには、うまく行きます。 指定すると、たとえば [10].txt というファイルがヒットしないように、NGワードを [10] を指定すると、[20].txtまでヒットしません。[a]では全てがヒットしません。 また、OKワードに[10]を指定すると[10]と[20]がヒットします。 ===== NGワードを比較している部分 ==== 引数:in_str が NGワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_NG(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_NG = True     Exit Function   End If      Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))     Dim tempFLG As Boolean   tempFLG = True      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = False       End If     End If   Next   If tempFLG = True Then     keywords_NG = True   Else     keywords_NG = False   End If End Function ===== OKワードを比較している部分 ==== 引数:in_Str が OKワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_OK(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_OK = True     Exit Function   End If   Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))      Dim tempFLG As Boolean   tempFLG = False      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = True       End If     End If   Next      If tempFLG = True Then     keywords_OK = True   Else     keywords_OK = False   End If    End Function ===== [や]を区切り文字ではなくする関数 ==== Public Function keywords_escape_sequence(keywordStr As String) As String      If keywordStr = "" Then     keywords_escape_sequence = ""     Exit Function   End If      Dim myIDX As Currency   Dim str_X As String      str_X = ""        For myIDX = 1 To Len(keywordStr) Step 1     If Mid(keywordStr, myIDX, 1) = "[" Then       str_X = str_X & "[[]"     ElseIf Mid(keywordStr, myIDX, 1) = "]" Then       str_X = str_X & "[]]"     Else       str_X = str_X & Mid(keywordStr, myIDX, 1)     End If   Next      keywords_escape_sequence = str_X End Function =====================================================     If keywords_OK(keywords_OK_Str, フルパス)) = True And _       keywords_NG(keywords_NG_Str, フルパス)) = True Then         'ファイルリスト作成     end if ===================================================== 正規表現を使うためには…というページを見つけ参照設定に以下の項目にチェックを入れてみましたが、結果は変わらす □Microsoft VBScript Regular Expressions 5.5 ===== RegExp と CreateObject ==== 参照設定をできれば変更したくない場合は、RegExp と CreateObject を使えば良いとあるページに書いてありましたが、参照設定でもできなかったので、これだけは試してません。 ヒントだけでもお教えください。

  • Excel:文字列の比較:大文字と小文字の区別

    Excel(2002)のワークシートの数式で文字列を比較するとき 半角英字の大文字と小文字が区別されないようなのですが、 区別するためにはどうしたらよいのでしょうか。 ※任意のセルで ="a"="A" とすると TRUE が帰ってくる。Countif などの動作も同様。 ※VBAでは次のコードを実行すると FALSE が表示される。 Sub compare() If "a" = "A" Then MsgBox "TRUE" Else MsgBox "FALSE" End If End Sub カテゴリ違いかもしれません。とすれば申し訳ありません。よろしくおねがいします。

  • Excel VBAの文字列と数値の分類

    txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですが、よく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890454 String.txtの完成形 AbFgp あ ylutBLKL え '変数の宣言 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Input #1, myText Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 CC = Len(myFile) For XX = 1 To CC str = Mid(myFile, XX, 1) If str >= 0 And str <= 9 Then B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If ここまでやっている状態です。よろしくお願いします。

  • accessのvbaで中国語の印字幅取得

    accessに格納している日本語と中国語の文字列に関して 半角文字10文字分の印字幅に収まるかどうか判定したいのです 以下のような関数を作ってみて クエリからこの関数を呼び出してみたのですがうまくいきませんでした function 判定(s as string) as boolean if lenb([名称])>10 then 判定=false else 判定=true end if では判定できなかったので・・・ 何かいい手段はあるでしょうか? アドバイスお願い致します

  • 文字列の比較

    いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • 2010 excel マクロ 記号の変化

    エラー発生で強制終了になってしまいます。2007年のexcelで作成したものですが、2010だと強制終了になってしまいます。 内容は□をダブルクリックすると■になるように作っています。 記述は2003年からのマクロ記述なので、変化が必要なのでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'セルをダブルクリックすると、・→○→△→×→・と変更する。 Dim S1 As String Dim S2 As String Dim S01 As String Dim S02 As String Dim S03 As String Dim S04 As String S1 = "□" S2 = "■" S01 = "・" S02 = "○" S03 = "△" S04 = "×" On Error GoTo ERR_12 sCheckXY S1, S2 sCheckX1234 S01, S02, S03, S04 sChangeXY S1, S2 Exit Sub ERR_12: End End Sub Sub sChangeXY(X As String, Y As String) '選択セルに□があれば■に変える Dim Str0 As String 'str1の左端 Dim Str1 As String 'strの右側更新 Dim Str2 As String 'strの左側更新 Dim Str20 As String 'strの左側一部保存 Dim L As Long Dim M As Long Dim N As Long Str1 = ActiveCell.Text L = Len(Str1) Debug.Print L If L = 0 Then End End If For N = 1 To L Debug.Print Str2 Str0 = Left(Str1, 1) If Str0 = X Or N = L Then If Str20 <> "" Then If N = L Then Str20 = Str20 + Str0 End If If MsgBox(Str20 & "  はチェックしますか?", vbYesNo, "選択肢") = vbYes Then Str2 = Str2 + Replace(Str20, X, Y) Str20 = Str0 Else Str2 = Str2 + Replace(Str20, Y, X) Str20 = Str0 End If Else Str20 = Str0 End If Else Str20 = Str20 + Str0 End If Str1 = Right(Str1, L - N) Next N ActiveCell.Value = Str2 End Sub Sub sCheckXY(X As String, Y As String) '選択セルがXならY,YならXにチェックをかえる If ActiveCell.Text = X Then ActiveCell.Value = Y End ElseIf ActiveCell.Text = Y Then ActiveCell.Value = X End End If End Sub Sub sCheckX1234(X1 As String, X2 As String, X3 As String, X4 As String) '選択セルがXならY,YならXにチェックをかえる If ActiveCell.Text = X1 Then ActiveCell.Value = X2 End ElseIf ActiveCell.Text = X2 Then ActiveCell.Value = X3 End ElseIf ActiveCell.Text = X3 Then ActiveCell.Value = X4 End ElseIf ActiveCell.Text = X4 Then ActiveCell.Value = X1 End End If End Sub

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • アクセスにてテーブル内の重複チェックについて

    下記の様なテーブル構成になっています。 大分類マスタ 大分類 長整数型 分類見出し 文字列 このテーブルにフォームから入力をさせているのですが重複チェックの時にvercheckのデータ形式が違いますと出てエラーが出ます。色々とデータ形式を変えたのですがうまくいきません。 どの様にすれば宜しいのでしょうか?ご教授頂きます様お願い致します。 尚、テーブルの数値を文字形式にすれば動作するのは分かっているのですが数値形式の場合の やり方を教えてください。 Dim str大分類 As String Dim str分類見出し As String Dim vercheck As Variant If IsNull(大分類) = False Then str大分類 = 大分類 vercheck = DLookup("大分類", "T大分類マスタ", "大分類='" & str大分類 & "'") If Not IsNull(vercheck) Then MsgBox ("同じ大分類番号があります") Exit Sub Cancel = True Else End If Else Exit Sub End If If IsNull(分類見出し) = False Then str分類見出し = 分類見出し vercheck = DLookup("分類見出し", "T大分類マスタ", "分類見出し='" & str分類見出し & "'") If Not IsNull(vercheck) Then MsgBox ("同じ分類見出しがあります") Exit Sub Cancel = True Else End If Else Exit Sub End If -------ここからフォームから直にテーブルに書いています。--------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T大分類マスタ", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs![大分類] = Forms!F大分類マスタ登録画面!大分類 rs![分類見出し] = Forms!F大分類マスタ登録画面!分類見出し rs.Update End Sub

  • 文字列の比較をしたい

    String str1 = "北海道" String str2 = "北海道" str1とstr2が同じ場合にある処理をしたい場合、比較のところの記述はどのように書けばよいのでしょうか。 単純に If str1 = str2 Then ~~~~~ Else   ~~~~ End If でよいのでしょうか。 環境はVB.NETです。

  • またまた エクセルのユーザー定義で

    前回以下のようなコードを教えていただきましたが、この変換を複数列で使えるようにするにはどうしたらいいのでしょうか? D,G,N,Q,X,AA,の列に効かせたいのですが。 Private Sub worksheet_change(ByVal Target As Range) If Intersect(Target, Columns(1)) Is Nothing Or Selection.Count <> 1 Then Exit Sub Dim str As String str = Target Application.EnableEvents = False If Target <> "" Then If Len(str) = 7 Then Target = Left(str, 5) & "A" & Mid(str, 6, 1) & "-" & Right(str, 1) Else Target = Left(str, 5) & "A" & Mid(str, 6, 2) & "-" & Right(str, 1) End If End If Application.EnableEvents = True End Sub

専門家に質問してみよう