strcompareでの「その他」の処理について

このQ&Aのポイント
  • teratermマクロのstrcompareを使用して、特定の文字列を抜き出した後の処理方法について質問です。
  • 現在作成中のコードでは、指定した文字列以外が入力された場合の制御ができません。
  • if文やelse文を使用して制御する方法を教えていただきたいです。
回答を見る
  • ベストアンサー

strcompareでの「その他」の処理について

お世話になります。 teratermマクロのstrcompareの使い方についての質問です。 Inputboxで入力した文字から一部の文字列をstrcopyで抜き出し、その抜き出した文字列に応じて処理を実行させたいのですが、 特定の文字以外の文字列を入力してしまった際の処理をどのように書けばいいのかが分かりません。 以下、現在作成中のコードです。 (NAMEは抜き出した文字列です) strcompare NAME 'aaa' if result=0 go to aaa strcompare NAME ' bbb' if result=0 go to bbb :aaa messagebox 'aaa' 'name' end :bbb messagebox 'bbb' 'name' end この場合例えば'xyz'という文字列を抜き取ってしまったときの制御が行えません。 if then elseで作り込めますでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

strcompare NAME 'aaa' if result=0 go to aaa strcompare NAME ' bbb' if result=0 go to bbb ; この位置にくるのは、ここまでにif result=0 go to ~でジャンプしなかった時だけ ; つまり、(C言語の)swithのdefault:節に相当する messagebox '非該当' 'name' end :aaa (以下略) 他には、処理内容によりますが、以下のようなやりかたをすれば、ラベルは不要になります ; 該当する処理があったかどうか valid_name=0 strcompare NAME 'aaa' if result=0 then ; aaa に対する処理 valid_name=1 endif strcompare NAME 'bbb' if result=0 then ; bbb に対する処理 valid_name=1 endif (略) ; 該当するものがなかった if valid_name=0 then ; その他の場合の処理 endif 「処理してマクロ終了」なら、valid_name変数を使用することなくendで終了する、という方法もあります。 他にもいろんな方法が考えられます。

timloos
質問者

お礼

早速のご回答ありがとうございました。 どうやら難しく考えすぎていたみたいです(笑) また機会がありましたらよろしくお願い致します。

関連するQ&A

  • split で " または ' で挟まれた部分を一つとして処理するには?

    perl で 文字列を split で処理する時に、" や ' で挟まれた領域を一つの文字列として処理するにはどうやったらよいのでしょうか? たとえば $aaa = "aaa bbb 'c d e' fff"; @aaa = split(/ /, $aaa); だと、 aaa bbb 'c d e' fff となってしまいますが、 aaa bbb 'c d e' fff となるようにするにはどうするのでしょうか?

    • ベストアンサー
    • Perl
  • 重複時の網掛けについて

    以前、重複行を網掛けにする処理で質問を載せましたが、 もう少し深くやりたくて試しているのですが、 無限ループが発生して困っております。 A B 1 aaa 1 aaa 1 aaa 2 aaa 2 aaa 2 aaa 3 bbb 3 bbb 4 aaa 4 aaa 上記データがあって結果を A B C 1 aaa 重複 1 aaa 重複 1 aaa 重複 2 aaa 重複 2 aaa 重複 2 aaa 重複 3 bbb パス 3 bbb パス 4 aaa パス 4 aaa パス B列の値が同じの場合は、A列の番号が大きいもののみパスと するように処理を作成しようと思っております。 下記でまずはどのように値が返ってくるか試したのですが、 無限ループになってしまいました。 Dim i As Integer Dim n As Integer LastRow = Range("A65356").End(xlUp).Row For i = 1 To LastRow A_retsu = Cells(i, 1).Value B_retsu = Cells(i, 2).Value For n = 1 To LastRow If A_retsu = Cells(n, 1).Value And B_retsu = Cells(n, 2) Then MsgBox "パス" Else MsgBox "重複" End If Next Next End Sub 最終結果は、 3 bbb パス 3 bbb パス 4 aaa パス 4 aaa パス 上記だけを残して他は削除させる処理を作りたいです。 すいませんがお願いします

  • エクセルの文字処理

    以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD    A   B   C   D  1|    AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は  ・セル内にスペースで区切られない文字列があった場合には、B列に入れる  ・それ以外はスペースで区切って、A列B列C列D列に入れる  ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。

  • OSのバージョンでバッチ処理がうまく行かない場合があります

    IF EXIST "C:\aaa\" GOTO GO GOTO faild :GO RENAME C:\aaa\bbb.dll bbb.dll.old 上記のようなバッチ処理を書きました。 このバッチが2000とXPではきちんと動くのですが、Meと98では動きません。 Meと98では、C:\aaaというフォルダが存在するにも関わらず、 faildの処理に移行してしまい、リネームが行われません。 どのように書けば、Meや98でも上手く動くでしょうか? 自分のPCが2000なので、なかなか動作確認が難しいです。 よろしくお願い致します。 (pauseを使って調査してみて、おそらくエラーはここなのですが、もしかしたら違う箇所かも知れません。  補足も致しますので、お助けいただけると助かります!)

  • マクロの作り方について

    お世話になっております。 エクセルで次のようなテーブルの自動生成マクロを作成したいと考えておりますが、なかなかうまくいきません。 皆さまのお知恵を拝借いたしたく、お願いいたします。 「Data」シート、「Table」シートの2つのシートをエクセルに用意します。 「Data」シートには、200行2列のデータが予め入っています。 1列目にはaaa.F、aaa.W、aaa.R、bbb.F、bbb.W、bbb.Rといった形の文字列が延々と入っています。 2列目には数字のデータが入っています。 行いたいのは、まず1列目のデータを「.」で区切って、2つの配列「st」と「pr」に入れなおすことです。 ただ、単にsplitするだけですと、1列目のデータを分けた際に、 st=(aaa、aaa、aaa、bbb、bbb、bbb) pr=(F、W、R、F、W、R) といった形で同じ値が格納されますが、ダブっている文字ははじく様にしたいのです。 このため、例えばstについて、次のようなマクロを考えたのですが、これだとstをdebug.Print等で出力した際、一番最後のデータだけしか格納されていませんでした。 Dim C As Variant C = Worksheets("DATA").Range("A1:B65000") Dim D As Variant Dim i As Integer Dim st As Variant For i = 1 To 10 D = Split(C(i, 1), ".") If st <> D(0) Then st = D(0) Debug.Print (st)  ↑ここでstを出力している分には、aaa、bbb、cccとダブった文字を省いたすべてのデータが出力されます。 Else End If Next Debug.Print (st)  ↑ここでstを出力すると、最後のデータだけしか出力することができません。  st(3)等、特定の要素を出力しようとしてもできないようです。 stをvariant型にしていることが問題なのかもしれませんが、stをstring型のarrayで定義し、各要素ごとに入力すると、st(0)=aaa、st(1)=aaaといった形で同じ値のものも入ってしまいます。 異なった文字列だけ各要素に入力していくにはどのようにマクロを組めばよいのでしょうか?

  • シェルスクリプトについて

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。

  • 複数の列を繋げてA列に入れたい VBA

    aaa aaa  bbb aaa  bbb  ccc aaa (A列にaaa、B列にbbb、C列にcccが入ってます) と言うデータがあるのですが 全てA列に入れて aaa aaabbb aaabbbccc aaa としたいです。 ・最終列は必ずしもCではないのです。(Dの場合もEの場合もある) ・最終行も変化します。 Sub 分かれてる列を繋げる() Dim Col As Long Dim Row As Long For Row = 1 To Range("a65536").End(xlUp).Row   For Col = 1 To Cells(Row, 256).End(xlToLeft).Column    Cells(Row, 1) = Cells(Row, 1) & Cells(Row, 2) & Cells(Row, 3)    Next Col Next Row End Sub をやってみましたが、 aaa aaabbbbbb aaabbbcccbbbcccbbbccc aaa となってしまい、 欲しい結果とは違くなってしまいます。

  • TeraTermマクロで入力した文字を表示し接続

    TeraTermマクロで下記の構文で、インプットされた文字を メッセージ内に表示するにはどのような表記をすれば良いのでしょうか? inputbox '接続先ホストを入力してください''input please' INPUT = inputstr strlen INPUT if result = 0 then messagebox '入力が空白になっています。終了します。' 'Input error' end endif messagebox  ↑上記で 入力した文字+○○○に接続いたします。と表示をしたい。 connect COMMAND ようするに、入力したホスト名メッセージを表示したいのですが どのような構文表記すれば良いか教えて下さい。

  • Perlの文字列置換について

    Perlで文字列置換の業務をすることになりした。 Struts1からStruts2のJSPのタグの変換です。 (1)html:textarea property="aaa" styleClass="bbb" (2)s:textarea name="aaa" cssClass="bbb" (1)から(2)に変換したいです。 「html:textarea」が「s:textarea」に対応しており、その属性の「property="aaa"」が「name="aaa"」に対応、 「styleClass="bbb"」が「cssClass="bbb"」に対応するといった内容です。 aaaとbbbは任意の文字列 if ($str =~ /html:textarea/ ) { $str =~ s/html:textarea/s:textarea/; $str =~ s/property=\"(.+)\"/name="$1"/; $str =~ s/styleClass=\(.+)"\"/cssClass/; というように参考書を元に作成してみたのですが、変換は行われるものの、属性のpropertyとstyleClassの順番が逆だったり、ここに記載していない他の属性を間に入れたりすると変換ができません。 どなたか教えて下さい。

    • ベストアンサー
    • Perl
  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

専門家に質問してみよう