• ベストアンサー

UWSCにおける変数の扱い方

UWSCでの質問です。 変数を変数で指定することは可能でしょうか? joken = 1 ka_mes = "OK" hi_mes = "NG" ifb joken = 1 then hensu = ka else hensu = hi msgbox(hensu + "_mes") // ←この結果として「OK」と表示させたい 簡略化していますので、この例では、素直にif文のthenとelseにmsgbox命令を書けばいいのですが、実際のプログラムはhensuを何度も使うためそうもいきません。 よろしくお願いします。

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

  • ベストアンサー
回答No.4

// こういうこと? joken = 1 ka_mes = "OK" hi_mes = "NG" ifb joken = 1 then  hensu = "ka" else  hensu = "hi" endif msgbox(eval(hensu + "_mes"))

alldayday
質問者

お礼

ありがとうございます。 やりたいのはこういうことです! 助かりました。

alldayday
質問者

補足

もしかして、眠たい詩人さんですか? いつも、サイトを参考にさせてもらってます。 拙い質問ですが、質問の意図を汲み取ってご回答頂きありがとうございました。

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

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

UWSCは連想配列が使えるようなので、そっちの方がより近いやり方になりますか。 HashTbl mes mes["ka"] = "OK" mes["hi"] = "NG" ifb joken = 1 then hensu = "ka" else hensu = "hi" endif msgbox(mes[hensu])

alldayday
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

なんでそんなトリッキーなことがしたいのでしょうか? っていうのと、そんな器用な真似は出来ないと思います。 代替案としては配列使うくらいですかねぇ。 dim mes[1] = "OK", "NG" ifb joken = 1 then hensu = 0 else hensu = 1 endif msgbox(mes[hensu])

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

使ったことはないので直感で書きますが、 ifb (joken = 1) then hensu = ha_mes else hensu = hi_mes endif msgbox(hensu) では駄目なんですか? 変数の中身を別の変数に入れる、なんて普通にできると思うんですが……

alldayday
質問者

補足

ご回答ありがとうございます。 言葉が足らず申し訳ありません。 ご回答頂いた方法はもちろん可能です。 ただ、今回やりたいのは、「hensu + "_mes"」みたいに変数名自体を可変で設定したいのです。 よろしくお願いします。

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

関連するQ&A

  • UWSCについて

    UWSCでマクロを使い画像判断検索?をしたいのですが While true  // 繰り返し ここから if GETKEYSTATE(VK_ESC) then exit // Escapeキーでスクリプト停止 Ifb chkimg("aiueo.bmp") = true then // 画像判定 // ここから あった時 sleep(1) // 待ち時間 // ここまで あった時 // ここから なかった時 else  sleep(1) // 待ち時間 // ここから なかった時 BTN(LEFT,CLICK,74,60,1217) Endif // 画像判定 終了 wend //繰り返し ここまで これで画像ファイルの名前を uwsc_aiueo.uws にしてくださいとあったのでそのままファイル名に使ってるのですがうまくいってません。 初心者ですが教えていただけないでしょうか?

  • UWSCにつきまして

    大変恐れ入ります。 リモートデスクトップ経由で、UWSCでVBE(VBのEditor画面)が開いていた場合にメール送信するUWSCのソースを記述していますが、どうにも動きません(常にElseに入ってしまいます、またメール部分はClass化していて動確を取っているのでご考慮頂なくても大丈夫です)。 ローカルなら動くようですが、リモートデスクトップ経由だと何かまずいことがあるのでしょうか? お忙しいところ、申し訳ございませんが、宜しく御願い申し上げます。 errid = GETID("Basic") Ifb errid < 0 then //何もしない Else Sleep(1) // From,To,Subject,Textbody,AddAttachment // 結果 = SendMail.Send(送信元,送信先,件名,文書,添付ファイルパス) endif

  • UWSCのSELECT文の記述方法

    UWSCのSELECT文について教えてください。 今IFB-ELSE-ENDIFを使って行っている条件文を SELECT文でスマートに書き直しできますか? たとえば ifb cnt < 3 then print "3未満" elseif cnt >=3 and cnt <= 5 then print "3~5" else print "6以上" endif みたいな範囲を持った条件式なんですが、 select文の範囲指定みたいな記述方法が分かりません。 select case cnt < 3 print "3未満" case cnt >=3 and cnt <= 5 print "3~5" default print "6以上" endif の様に書いても上手く動きません。 select文はこういう使い方はできないんでしょうか?

  • UWSCについて

    UWSCの設定について質問させて頂きます。 私がしたいのは、画面上に画像が現れた瞬間からカウントをスタートし、一定時間で左クリックを一回押すというものです。 現在は下記のように試しており、大体は思い通りなのですが、カウントスタート前にUWSCの停止ボタンのポップアップが点滅状態のため画像が現れた瞬間に反応できてないような感じです。 コンマ数秒でのことですがどうしても正確にしたいのです。 プログラムについての知識もなく行き詰まってしまいました。 どうか宜しくお願い致します。 while true if GETKEYSTATE(VK_ESC)then exit ifb CHKIMG("画像.bmp",0) BTN(LEFT,CLIK,10000) ENDIF WEND

  • UWSCの画像認識について

    プログラム初心者ですがUWSCでプログラムを作っています 画像認識において認識するべき画像が複数種類あるときのパターンができなくて困っています ifb CHKIMG("青空") x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT,CLICK,x,y,100) SLEEP(0.5) else Endif のように、単独の画像を認識し、その画像をクリックさせることはできるのですが 「青空」もしくは「夕空」もしくは「夜空」が出た時にその画像をクリックする のような命令をかくことができません ifb CHKIMG("青空" or "夕空" or"夜空") のような形でかければいいのですが、もちろんこれでは動きませんでした どうすればこれを実行できるようになるのか教えてくださいm(__)m

  • UWSC 非アクティブでの動作

    while true if GETKEYSTATE(VK_ESC) then exit // Escapeキーでスクリプト停止 ID = GETID("TEST.txt - メモ帳","Notepad") ifb (ID < 0) MSGBOX("ウィンドウが見つかりません") exitexit endif id = GETCTLHND("TEST.txt - メモ帳","Notepad"),"Edit","1") MOUSEORG(id,2) KBD(VK_S,DOWN,200) wend TEST.txtという名前のメモ帳に、最小化していたり、非アクティブな状態でも UWSCによるキー入力を送信したいのですが、上手くいきません・・。 実行させると 「式がおかしい or  型があっていない」 「13行目: id = GETCTLHND("TEST.txt - メモ帳","Notepad"),"Edit","1")」 と表示され、動いてくれません。 いろいろ調べてはみたのですが、解決できなかったので どなたかわかりやすく説明などして下さるとありがたいです。

  • JBScriptの正規表現のマッチ文字を変数化

    初めての質問です。 質問用にプログラムを次の通りに作りました。実行すると OK と表示しますが、これを、文章に応じて表示させたいのです。本例の場合は、曇り20度、湿度60% です。 つまり、正規表現でマッチした文字を変数に代入して、その変数を用いて、msgbox出力したいのですが、どの様にコード(マッチ文字の変数化)を記述すれば良いのでしょうか? 本例でいえば、曇りを変数xに、20を変数yに、60を変数zに取り込めるようにしたいのです。 質問用なので、プログラムの意味はこだわらないでください。 本番用では、"本日は曇り20度ですが、湿度60%でした。"は、関数の引数で可変の文章です。 質問が下手で済みません。よろしくお願いいたします。 【sample.vbsの内容】 if blnCheck("本日は曇り20度ですが、湿度60%でした。") then msgbox "OK" '曇り20度、湿度60% と表示させたい else msgbox "NG" end if Function blnCheck(strLen) Dim objRE Set objRE = new RegExp objRE.IgnoreCase = True objRE.pattern = "^本.*(晴)|(曇り)|(雨)\d\d.*湿度\d\d.*" blnCheck = objRE.Test(strLen) Set objRE = Nothing End Function

  • エクセル・時刻に関する質問

    添付画像のようなエクセルで以下の標準モジュールを作っています。 Sub test001() If Cells(2, 2) = TimeValue("9:00:00") Then MsgBox ("9:00:00認識しました") Else MsgBox ("9:00:00認識しませんでした。") End If If Cells(3, 2) = TimeValue("9:05:00") Then MsgBox ("9:05:00認識しました") Else MsgBox ("9:05:00認識しませんでした。") End If If Cells(3, 2) = 0.378472222222222 Then MsgBox ("2回目9:05:00認識しました") Else MsgBox ("2回目9:05:00認識しませんでした。") End If If Cells(4, 2) = TimeValue("9:10:00") Then MsgBox ("9:10:00認識しました") Else MsgBox ("9:10:00認識しませんでした。") End If If Cells(5, 2) = TimeValue("9:15:00") Then MsgBox ("9:15:00認識しました") Else MsgBox ("9:15:00認識しませんでした。") End If If Cells(6, 2) = TimeValue("9:20:00") Then MsgBox ("9:20:00認識しました") Else MsgBox ("9:20:00認識しませんでした。") End If End Sub 実行すると、9:05:00 だけが、「9:05:00認識しませんでした。」となります。 時刻以外は同じ内容のはずですが 9:05:00 だけ認識されません。 解決策をお願いします。

  • VB6,論理演算子Orの使い方がわからない

    以下のようなコードを書きました。 If a = 0 Or 6 Then   msgbox a Else   msgbox "a" End If 期待しているのは、変数aの値が0か6のときにだけ変数aを表示するというものです。 しかし実際にはたとえばaの値が2のときでも変数aが表示されてしまいます。 ひょっとしてOrの使い方を間違っているのでしょうか? よろしくお願いします。

  • InputBoxで代入した変数を比較演算子で処理

    InputBoxに入力し その値を判定後次処理に進むよう作成中で つまづいてます。 InputBoxにtype1を記述すると 空白で「OK」を選択時に 「入力した数式は正しくありません」 というヘルプ付のエクセル標準の警告 が表示される為、type1をやめ、  IsNumericが数値ではないのにTrueを返す文字の対策、 正の整数半角以外の時は再入力させるように (0、負、数字以外、大文字、キャンセル、キャンセルのキャンセル、  空白でOKを押すなど) してみましたが肝心の ElseIf 開始行2 > 最終行 Then と ElseIf 終了行2 <= 開始行2 Then が思ったように処理されません。 ウォッチ式でも ElseIf 開始行2 > 最終行 Then ↓ 3 > 25  12 > 25 →双方Falseのはず→True→【NG】 ElseIf 終了行2 <= 開始行2 Then ↓ 3 <= 4 →Trueのはず→True→【OK】 7 <= 4 →Falseのはず→False→【OK】 12 <= 4 →Falseのはず→True→【NG】 4 <= 11 →Trueのはず→False→【NG】 という具合です。 変数の型の未定義が原因かと 数値系で定義すると"False" Thenの所で「型が一致しません」で ERRです。 変数の開始行、終了行の型をAs Longにして ElseIf 開始行 = "False" Then ElseIf 終了行 = "False" Then ↓ ElseIf 開始行 = False Then ElseIf 終了行 = False Then にすればERRは出ませんが本題は改善されません。 片方の変数を数値で固定すれば思ったように動きました。 例:ElseIf 終了行2 <= 4 Then 変数同士を比較演算子で判定はできないのでしょうか? 正しく判定できない原因を教えていただきたくお願いします。 Dim 最終行 Dim 開始行 Dim 開始行2 Dim 終了行 Dim 終了行2 Dim 質問 最終行 = Cells(Rows.Count, 3).End(xlUp).Row Do 開始行 = Application.InputBox("開始行を" & vbCrLf & _ "数字で入力してください") If 開始行 = "" Then '(分岐1-1)空白でOKを押時 MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 開始行 = "False" Then '(分岐1-2)キャンセル選択時 '(分岐1-2-1) If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub 'OK押下時→終了 End If '1-2-1終了 ElseIf IsNumeric(開始行) Then '(分岐1-3-1)数値か確認 開始行2 = StrConv(開始行, vbNarrow) '数値なら全角→半角 'IsNumericがTrueを返した時の確認 If InStr(開始行2, ".") Then '(1-3-2)小数指定時と123.56対応 MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 <= 0 Then '(1-3-3)負の数字と-123対応 MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" 'IsNumericが数値ではないのにTrueを返してしまう文字の対策 ElseIf InStr(開始行2, "+") Then '(1-3-4)+123と123+対応 MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "-") Then '(1-3-5)123-対応 MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, ",") Then '(1-3-6)1,,,,,,6対応 MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "E") Then '(1-3-7)3E2対応 MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "D") Then '(1-3-8)3D2対応 MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" '判定開始 ElseIf 開始行2 = 1 Then '(1-3-9)1は駄目 MsgBox "【1】は指定できません。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 > 最終行 Then '(1-3-10)●入力値が最終行を超える MsgBox "【" & 開始行2 & "】" & "行以降はデータがありません。(>_<)" _ & vbCr & "再入力してください", vbCritical, "エラー!!" Else '(1-3-11)1~10以外の場合 Exit Do 'Doを抜ける End If '1-3 11項目終了 Else '(分岐1-4)数値以外の場合 MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If '1~4終了 Loop 質問 = MsgBox("最終行まで処理しますか?", vbYesNo + vbQuestion) Select Case 質問 Case vbNo Do 終了行 = Application.InputBox("終了行を" & vbCrLf & _ "数字で入力してください") If 終了行 = "" Then MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 終了行 = "False" Then If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub End If ElseIf IsNumeric(終了行) Then 終了行2 = StrConv(終了行, vbNarrow) If InStr(終了行2, ".") Then MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 0 Then MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "+") Then MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "-") Then MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, ",") Then MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "E") Then MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "D") Then MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 開始行2 Then'●判定 MsgBox "入力した値は" & vbCr & "開始行以前です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" Else Exit Do End If Else MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If Loop 最終行 = 終了行2 '最終行の値を終了行2に変更 Case vbYes 'Yesの場合 End Select '最終行の値は変更せず次の処理へ