• ベストアンサー

UWSCで使うファイルをexcelで作りたい

まずあまりの初心者ゆえに失礼がありましたらすみません。 UWSCというフリーソフトのスクリプトの編集をexcelでして そのあとにメモ帳などに移して使うつもりなのですが たとえば下記のようなものがあったとして BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_1,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) という文章を BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_2,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) になって BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_3,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) をへて BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_4,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) となり BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_5,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) というかたちでKBD(VK_数字,CLICK,)という部分だけを1から500まで増やしていって あとの数値は同じものをずっと並べていきたいのですが普通にフィルハンドル?をつかってやると 私が編集したいKBD(VK_数字,CLICK,)の部分以外の数値までおそらく増えていってしまうんですよね。 KBD(VK_数字,CLICK,)の数字の数値だけを増やしていくことはできますでしょうか? なおどうやらソフトの性質として数字が10をこえると KBD(VK_10,CLICK,) ではなく KBD(VK_1,CLICK,) KBD(VK_0,CLICK,) や KBD(VK_1,0,CLICK,) と表現しなければいけなくなるようなのですが そういう数値の増やし方はできますでしょうか? 超初心者なので全く何もわからないのですがそんな人間でもできますでしょうか。

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

No,1です。 マクロサンプルです。 Sub make_UWSC() Dim rcount As Integer Dim srcstr1 As String Dim srcstr2 As String Dim srcstr3 As String Dim srcstr4 As String Dim srcstr5a As String Dim srcstr5b As String Dim srcstr5 As String Dim srcstr6 As String Dim srcstr7 As String Dim icount As Integer Dim scount As String srcstr1 = "BTN(LEFT,CLICK,223,72)" srcstr2 = "SLEEP (0.5) " srcstr3 = "SKBD(VK_a,DOWN) " srcstr4 = "SKBD(VK_b,DOWN) " srcstr5a = "KBD(VK_" srcstr5b = ",CLICK)" srcstr6 = "KBD(VK_TAB,CLICK) " srcstr7 = "KBD(VK_RETURN,CLICK) " rcount = 1 For icount = 1 To 500 scount = Right("000" & Str(icount), 3) Cells(rcount, 1) = srcstr1 rcount = rcount + 1 Cells(rcount, 1) = srcstr2 rcount = rcount + 1 Cells(rcount, 1) = srcstr3 rcount = rcount + 1 Cells(rcount, 1) = srcstr4 rcount = rcount + 1 If icount >= 100 Then srcstr5 = srcstr5a & Mid(scount, 1, 1) & srcstr5b Cells(rcount, 1) = srcstr5 rcount = rcount + 1 End If If icount >= 10 Then srcstr5 = srcstr5a & Mid(scount, 2, 1) & srcstr5b Cells(rcount, 1) = srcstr5 rcount = rcount + 1 End If srcstr5 = srcstr5a & Mid(scount, 3, 1) & srcstr5b Cells(rcount, 1) = srcstr5 rcount = rcount + 1 Cells(rcount, 1) = srcstr6 rcount = rcount + 1 Cells(rcount, 1) = srcstr7 rcount = rcount + 1 Next icount End Sub

masaaki12
質問者

お礼

ありがとうございます。 大変お手数おかけいたしました。 マクロのというものの内容も理解しながら 勉強していこうと思います。

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

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 #5の imogasiさんがご指摘になった >文字列を1文でキーーインする書き方もあるようだ >SENDSTR を試してみました。簡単に出来ましたが、ちょっと以下の部分が分かりにくいですね。  myID = GetID(GET_FROMPOINT_WIN) それから、KBD(VK_TAB,CLICK,) なぜ、元のコードにTab があるのか分かりません。もともと、何に使うかは、お返事にはありませんね。 メモ帳等で貼り付けて、拡張子をUWS にしてください。 //SampleLoop.UWS Public myID SENDSTR(0,"") for i = 1 to 111 BTN(LEFT,CLICK,223,72,) SLEEP(0.5) myID = GetID(GET_FROMPOINT_WIN) SENDSTR(myID,"ab" + i) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) next ほぼ同じものを、VBAで書いてみました。 'VBA マクロ(Excel上のみです) Sub TestMacro() Dim i As Long  For i = 1 To 111   Cells(i, 1).Value = "ab" & i  Next i End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#4 です。 私の書いたコードは、あくまでも、UWSCのスクリプト・コードですから、Excelは関係ありません。メモ帳に入れて、拡張子を、.UWS としてください。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

このソフトの機能で 繰り返しで対処できないのかな。 WINDOWSマクロテクニック(小林シンヤ)翔泳社 2005 というUWSCの解説本を読みましたか。 私も最近目を通したのだが、まだ身についてないので、今は具体的にかけません。すみません。 For Next、その他の繰り返しも使える。 文字列を1文でキーーインする書き方もあるようだ SENDSTR 数字列もそれがないかな。 ーーー エクセルVBAでやれば、質問どおりだけなら何とかできる。 VBAで考えた。 手抜きして KBD(VK_b,DOWN,) KBD(VK_5,CLICK,) <== この5を1桁打ち式に連続した番号で 変える KBD(VK_TAB,CLICK,) のところ(3行)しか考えてない。後は定まった文を増やすだけ ーーー Sub test01() k = 1 For i = 1 To 101 '500は多いので101で止めた Cells(k, "A") = "KBD(VK_b,DOWN,)" k = k + 1 Select Case i '-- Case 1 To 9 X = Trim(Str(i)) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 '--- Case 10 To 99 X = Trim(Str(Int(i / 10))) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 X = Trim(Str(i Mod 10)) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 '-- Case 100 To 500 X = Trim(Str(Int(i / 100))) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 X = Trim(Str(Int((i Mod 100) / 10))) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 X = Trim(Str(i Mod 10)) Cells(k, "A") = "KBD(vk_" & X & ",CLICK)" k = k + 1 End Select Cells(k, "A") = "KBD(VK_TAB,CLICK,)" k = k + 1 Next i End Sub このコードを修正することが出来るかな。 結果 1部 KBD(VK_b,DOWN,) KBD(vk_1,CLICK) KBD(VK_TAB,CLICK,) KBD(VK_b,DOWN,) KBD(vk_2,CLICK) KBD(VK_TAB,CLICK,) KBD(VK_b,DOWN,) KBD(vk_3,CLICK) KBD(VK_TAB,CLICK,) KBD(VK_b,DOWN,) ーー 終わりの方 100のあたり KBD(VK_b,DOWN,) KBD(vk_9,CLICK) KBD(vk_9,CLICK) KBD(VK_TAB,CLICK,) KBD(VK_b,DOWN,) KBD(vk_1,CLICK) KBD(vk_0,CLICK) KBD(vk_0,CLICK) KBD(VK_TAB,CLICK,) KBD(VK_b,DOWN,) KBD(vk_1,CLICK) KBD(vk_0,CLICK) KBD(vk_1,CLICK) KBD(VK_TAB,CLICK,) === あとエクセルのセルではなく、テキストに書くコードを知る必要がある(略) しかしUWSCが言語である以上、こんなに単純に文を並べなければならない仕様のはずないと思うよ。

masaaki12
質問者

お礼

ありがとうございます。 UWSCもエクセルも初心者なので四苦八苦しております。 わざわざお調べいただいてありがとうございます。 お心づかい感謝です。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 ここのカテゴリは、あくまでも、Office ですが、なぜ、ここにお聞きになっているのか素朴な疑問があります。UWSC って、一種のキーロガーですね。 もしかして、そのコード自体が、Excelそのものを扱うもののような気がしました。UWSC のヘルプでみて位置を見ると  BTN(LEFT,CLICK,223,72,)  X=223, Y=72, の場所って、Excelですと、数式バーのあたりのようですね。 Excelなら、VBAがあります。 Excelなら、VBAをお使いになったほうが良いのではないでしょうか?外部ツールの最大の欠点は、フレームの中の位置決めが出来ません。可能なのは、外周だけなのですね。Excelは、その状況に合わせて、位置が移動するのです。 もちろん、Excelでないにしても、Excelでドラッグやコピーして、500ブロック書く必要はないとは思います。というよりも、スクリプト系言語の場合は、スクリプトファイルの文字列を多くするのは関心しません。 そのコードは以下のようにループすればよいとは思います。UWSCのヘルプを読みながら書いてみました。Cにも感じは似ているようです。初めて書いてみたので、他の環境で、うまく行くか分かりませんが、間違っていれば、UWSCは通らないと思います。 とりあえず、"111" までにしました。"500" も入れられま。"111"は、三桁の数の検査するための最も少ない数です。 もし、Office だったら、その旨を書いてください。 //SKeysSample.UWS Public arry[9] arry[0] =VK_0 arry[1] =VK_1 arry[2] =VK_2 arry[3] =VK_3 arry[4] =VK_4 arry[5] =VK_5 arry[6] =VK_6 arry[7] =VK_7 arry[8] =VK_8 arry[9] =VK_9 for i = 1 to 111 BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) TOKENFIG(i) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) next Procedure TOKENFIG(ai) for j =1 to length(ai) n = copy(ai,j,1) KBD(arry[n],CLICK,) next Fend

masaaki12
質問者

お礼

ありがとうございます。 本当に全くの初心者でしてVBAというものがあるらしいという ぐらいしか知識のないものでご提言ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

エクセルで回答します。まずA1セル~A7セルに以下を貼り付けます BTN(LEFT,CLICK,223,72,) SLEEP(0.5) KBD(VK_a,DOWN,) KBD(VK_b,DOWN,) KBD(VK_1,CLICK,) KBD(VK_TAB,CLICK,) KBD(VK_RETURN,CLICK,) 次にA8セル~A14セルに以下の式をそれぞれ貼り付けます A8  =A1 A9  =A2 A10  =A3 A11  =A4 A12  ="KBD(VK_"&IF((ROW()+2)/7>=100,LEFT((ROW()+2)/7,1)&","&MID((ROW()+2)/7,2,1)&","&RIGHT((ROW()+2)/7,1),IF((ROW()+2)/7>=10,LEFT((ROW()+2)/7,1)&","&RIGHT((ROW()+2)/7,1),(ROW()+2)/7))&",CLICK,)" A13  =A6 A14  =A7 次に「A8~A14を選択した状態」でCtrl+Cでコピーし、A15~A3500を選択してCtrl+Vで貼り付けます。 最後にA1~A3500を選択してコピーし、メモ帳に貼り付けてください

masaaki12
質問者

お礼

ご丁寧にありがとうございます。 さっそく試してみたいと思います。 わざわざすみませn。

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

ご自分でも少し、気づかれているようですが、 1から初めて500まで、繰り返し入力するわけですよね。 でも、1から9は、それぞれのキーを押すだけですが、10以上は、 10というキーを押すのではなく、1と0の順に押すわけでして。。 あと、ドラッグで、数字を増やすと、望まないところまで変化して しまうのも、Excelの仕様です。 さいわい、Excelには、マクロ(VBA)という機能があり、 簡単なプログラムで、自由度の高いものができます。 固定の文字列と、可変の文字列を結合させて、UWSC用の命令を 作りこむことが可能です。 マクロはどの程度、理解されていますか? 明日、また、マクロサンプルを提示させていただきます。

masaaki12
質問者

お礼

ありがとうございます。 マクロというのも勉強中でまだ全然理解はできていません。 お気づかい感謝いたします。

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

関連するQ&A

  • UWSCのスクリプトについて

    画像Dを認識したら画面上に画像Bがあっても 処理Bを実行しない為にはどうしたら良いでしょうか。 -------- while True BTN(LEFT,click,150,10,110)   //処理A Sleep(2) ifb CHKIMG("A.bmp")    x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) endif Ifb ChkImg("B.bmp")       //処理B BTN(LEFT,click,1120,90,110) Sleep(1) KBD(VK_return,DOWN,30) endif ifb CHKIMG("C.bmp")      //処理C x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) wend --------

  • (UWSC) エクセルのセルをコピーするには?

    UWSCで、エクセルにあるセルの中身をコピーしたいと 考えています。 getstrを使って、 a = GETSTR(GETID("Microsoft Excel","XLMAIN"),p)  (pは適当な数字) としましたがうまくいかないみたいです。 例えば、i行j列のセルにある文字をコピーするには、 どのようにすればいいのでしょうか? KBD(VK_CTRL,DOWN,32) KBD(VK_C,CLICK,31) KBD(VK_CTRL,UP,40) でもかまいません。

  • USWC初心者です。画像で終了させたいのですが

    USWCをさわり初めたばかりの初心者です。 3ヵ所をクリック+キー押しするだけで、基本ループし、指定画像が出たら終了するようにしたいのですが、終了が上手くできません。延々とループしてしまいます・・・・。 いろいろと検索して、調べながらやっているのですが、1日やってても解決しない状態です。 USWCがおわかりにになる方がいらっしゃいましたら、ご教授いただけますと助かります(>_<) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //tabキーが押されるとマクロ終了。 While !GetKeyState(vk_tab) WHILE (TRUE) BTN(LEFT,DOWN,1403,796,1154) MMV(1403,796,10) BTN(LEFT,UP,1403,796,125) MMV(1403,796,405) KBD(VK_1,CLICK,2574) KBD(VK_2,CLICK,25210) MMV(1403,797,13574) SLEEP(0.01) Wend Wend IFB (CHKIMG("owari.bmp")=TRUE) THEN x=G_IMG_X + 1213 y=G_IMG_Y + 457 BTN(LEFT,DOWN,1213,457,858) endif Wend Sleep(2) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  • UWSCで ENTERキーを押した時の挙動について

    UWSCで ENTERキーを押した時の挙動を再現したいのですが上手くいきません。 アバター sekiguchi_kou_dayoさん2017/6/2302:40:58 UWSCで ENTERキーを押した時の挙動を再現したいのですが上手くいきません。 ●試したコード IESetData(IE,True,"","innerText=編集",2) sleep(0.5) IESetData(IE,"2017/08/28","TAG=input",9) sleep(0.5) KBD(VK_RETURN) 実際、手でエンターキーを押すのとテキストボックスの日付が更新されるのですが、KBD(VK_RETURN)だと更新がかかりません。 考えられる可能性がございましたらアドバイスを頂けると助かります。宜しくお願い致します。

  • エクセルにて為替の自動売買プログラムを作成しており、キー記録マクロ「U

    エクセルにて為替の自動売買プログラムを作成しており、キー記録マクロ「UWSC」を使用して 指し値を貼りたいと思っております。 エクセルの値を持つことは出来たのですが、それをUWSCでクリックで指定した所に値を代入する事が できません。 下記プログラムの一番下の行です。 だれか教えて欲しいです。 ctrlwin(getid("FX Trading Station 2.0"),max) ACW(GETID("FX Trading Station 2.0"),-7,-7,1036,750,0) BTN(RIGHT,CLICK,172,208,300) ACW(GETID("FX Trading Station 2.0"),-7,-7,1036,750,0) BTN(LEFT,CLICK,230,221,78) ACW(GETID("新規指値の作成","#32770"),328,193,371,342,0) BTN(LEFT,CLICK,504,341,62) KBD(VK_BACK,CLICK,40) KBD(VK_BACK,CLICK,40) KBD(VK_BACK,CLICK,40) KBD(VK_BACK,CLICK,40) KBD(VK_BACK,CLICK,40) KBD(VK_DELETE,CLICK,40) Excel = GETACTIVEOLEOBJ("Excel.Application"); val1 = Excel.ActiveSheet.range("A1").value;

  • UWSC 指定範囲内・及び指定文字の置き換え

    UWSC便利!…だけど難しい…な初心者です。お知恵を貸して下さい BTN(LEFT,CLICK,413,267,125) BTN(LEFT,DOWN,527,253,32) BTN(LEFT,UP,529,253,10) BTN(LEFT,CLICK,530,377,15) BTN(LEFT,CLICK,439,413,47) BTN(LEFT,CLICK,550,515,300) 上記の文字列のうち 1.各行の最後の,から)にある数字を一律50にしたい(上から125,32,10...とある数字です) 2.DOWNとUPのいずれか1つをCLICKに置換し、もう片行を削除したい よろしくお願いします

  • UWSCについて質問です。

    UWSCについて質問です。 特定のボタンを押している間だけループさせるスクリプトを組むにはどうすればいいでしょうか? ボタンを押している間はループされ、ボタンを押していない時は処理が止まる といったようなスクリプトをくみたいのですがどうもうまくいきません。処理させるスクリプト自体は簡単で NUMPAD7を押している間はAの処理 NUMPAD8を押している間はBの処理 NUMPAD9を押している間はCの処理 といった具合にスクリプトを組みたいのですがどうすればよろしいでしょうか? 教えて頂けると助かります。 ちなみに行う処理は以下のとおりです。 処理A BTN(LEFT,CLICK,450,500,10) BTN(VK_3,CLICK,10) while true //7を押している間はここからループ開始 BTN(LEFT,CLICK,400,300,10) BTN(LEFT,CLICK,700,660,10) Wend 処理B while true BTN(LEFT,CLICK,400,300,10) BTN(LEFT,CLICK,700,660,10) Wend 処理C while true BTN(LEFT,CLICK,400,300,10) BTN(LEFT,CLICK,400,660,10) wend

  • UWSCの指定画像チェック

    UWSCを利用して、画面内に指定画像があるか無いかチェックし、あればクリックしたりするスクリプト文を作成したいのですが・・・、うまくいきません; 詳しい方、どうか回答お願いしますm(_ _)m 自分の作ったスクリプト文は下記のとおりです。 ""のところの「A」はフォルダ名で、「neko.bmp」が画像ファイル名です。   IFB CHKIMG(".\A\neko.bmp")     MMV(G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,DOWN)     BTN(LEFT,DOWN,G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,UP)     BTN(LEFT,UP,G_IMG_X,G_IMG_Y)   ENDIF 上記のスクリプト文でUWSCを実行させると、なぜか「エラー NOT Found".\A\neko.bmp"」と出てき、実行してくれません。 画像の問題ではあると思うのですが、ちゃんとuws形式で保存されてますし、画像の方もbmp形式になってるので・・・どこか悪いのかと、思い当たるふしがありません。 悪いところや指摘がございましたらどうか教えてくださいm(_ _)m また、スクリプト文を作れる方がいましたら作成を頼めませんでしょうか。。。 私の希望する、UWSCの実行は下記のとおりです。また、"neko"は画像ファイル名のことです。 "neko"が画面内にあるか無いかチェックし、もしあれば、Ctrlキーを押したまま、"neko"が見つかった座標に左クリック。 この繰り返し。

  • UWSCについて

    ゲームで自動化マクロを作りたいのですが調べてもたのですがうまくいかずよくわからないので教えてください。 やりたい事は ・文字を見つけたらある場所をクリックする ・見つからなかったときは更新ボタンを押し見つかるまで繰り返す この二つなのですが While true  // 繰り返し ここから if GETKEYSTATE(VK_ESC) then exit // Escapeキーでスクリプト停止 Search = "○○" // 検索文字 // ここから あった時 BTN(LEFT,CLICK,232,344,702) BTN(LEFT,DOWN,200,530,593) MMV(200,530,10) BTN(LEFT,UP,200,530,125) MMV(200,530,203) BTN(LEFT,DOWN,245,365,390) MMV(245,365,15) BTN(LEFT,UP,245,365,141) MMV(245,365,203) MMV(245,365,374) MMV(245,365,422) BTN(LEFT,DOWN,193,542,343) MMV(193,542,10) BTN(LEFT,UP,193,542,109) MMV(193,542,94) MMV(193,542,46) MMV(193,542,452) BTN(LEFT,CLICK,245,421,110) BTN(LEFT,CLICK,219,250,230) BTN(LEFT,DOWN,184,245,47) MMV(185,246,78) BTN(LEFT,UP,185,246,63) // ここまで あった時 // ここから なかった時 BTN(LEFT,CLICK,74,60,1217) Search = "○○" // 検索文字 終了 wend //繰り返し ここまで これをすると検索もせずクリックする部分を繰り返してしまいます。 どこを直せばいいのでしょうか? よろしくお願いします。

  • UWSCで変数をキー入力

    UWSCで変数に応じたキー入力をしたいのですが、 どうすればいいのでしょうか? たとえば 変数Aが 1 の場合は 01 とキー入力 変数Aが 25 の場合は 25 とキー入力 という感じで、変数Aは1~84までの値を取ります。 これをSELECT文で試してみたのですが、 1~5くらいまでならうまくいくのですが、 さすがに84まであるとエラーがでてしまいます。 SELECT A CASE 1 KBD(VK_0,CLICK,40) KBD(VK_1,CLICK,40) CASE 2 KBD(VK_0,CLICK,40) KBD(VK_2,CLICK,40) ・ ・ CASE 84 KBD(VK_8,CLICK,40) KBD(VK_4,CLICK,40) SELEND ↑エラー 二桁目と一桁目で分けて入力すればよさそうですが、 どう処理すればいいのかわかりません。 また、仮に変数が文字列を値として取る場合も、 その文字列をそのままキー入力させるにはどうしたらよいでしょうか?

専門家に質問してみよう