• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBスクリプトで他条件分岐を作成したいです。)

VBスクリプトで他条件分岐を作成する方法

Wendy02の回答

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

>no.4とno.5がno.1のパターンで編集 されてしまいました。 パターンで言われるよりも、例を示していただいたほうがよいと思います。 ご指摘な部分は、確認できていませんが、コードを短縮してみました。 n = Value Select Case True Case Left(n, 2) = "3A" And Len(n) = 14 And InStr(1, n, "-", 1) = 0 Value = Left(n, 3) & "-" & Mid(n, 4) Case Left(n, 1) = "3" And Len(n) = 14 And InStr(1, n, "-", 1) = 9 Value = Left(n, 3) & "-" & Mid(n, 4, 11) Case Len(n) = 14 And InStr(1, n, "-", 1) = 9 Value = Left(n, 3) & "-" & Mid(n, 4, 11) Case Len(n) = 14 And InStr(1, n, "-", 1) = 0 And Left(n, 1) = "3" Value = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) Case Len(n) = 14 And InStr(1, n, "-", 1) = 0 Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) Case Else Value = n End Select

gx9wx
質問者

お礼

2010年9月27日16:48トライ結果です。 使用データーベースを頭3と頭3Aがあるものから 頭9と頭9Xの方に変更したので記述がそうなっています。 ・9月22日QNo.6198175-ANO.2で教えていただいた方の記述を修正 n = Value Select Case True 'パターン5の編集 9X頭で計14桁かつハイフンがない Case Left(n, 2) = "9X" And Len(n) = 14 And InStr(1,n, "-",1) = 0 '3-11でハイフン編集をする Value = Left(n, 3) & "-" & Mid(n, 4) '以下から下の行は削除 'パターン3の編集1 9頭で計14桁かつハイフンがある 'Case Left(n, 1) = "9" And Len(n) = 14 And InStr(1, n, "-", 1) = 9 'ハイフンを抜いて9頭で計13桁にする 'n = Replace(n, "-", "",1, -1 ,1) '3-5-5でハイフン編集する 'Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5) 'このパターン3の編集1について '9頭と9X頭の定義が別文で指定されている 'それは9頭の計14桁ハイフン無しと9X頭の計14桁ハイフン無し 'よって計14桁でハイフンがあれば頭9も9Xもそれ以外も 'パターン3の編集2でモーラされるので省いてもいいのでは? 'ここまでの行は削除する 'ここから下の行は追加(編集不良の対策 パターン4の定義が欠如の為追加) 'パターン4の編集 9頭で計14桁かつハイフンがない Case Left(n, 1) = "9" And Len(n) = 14 And InStr(1, n, "-", 1) = 0 '5-5-2-2でハイフン編集 mValue = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) 'ここから上の行まで追加(編集不良対策) 'パターン3の編集2-基本型8桁ハイフン5桁で計14桁 '頭は問わず計14桁でハイフンがある 'この定義で9頭と9X頭の8桁ハイフン5桁で計14桁はモーラできるはず Case Len(n) = 14 And InStr(1,n, "-",1) = 9 'ハイフンを抜いて13桁にする n = Replace(n, "-", "",1 , -1, 1) '3-5-5でハイフン編集する Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5) '1の編集 頭は問わず計14桁でハイフン無し '9頭と9X頭はすでに条件分岐しているのでこれでいい Case Len(n) = 14 And InStr(1,n, "-",1) = 0 '3-5-2-2-2でハイフン編集 Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) '上記までの条件に該当しない物 パターン2の編集はここに含まれる Case Else 'その場合編集はしないで値を返す Value = n End Select '削除 'Next これだとパターン4が 90000000000000A→90000000000000Aで編集されません。 本来は90000-00000-00-0Aです。 現在正常編集できているQNo.6153785で教えていただいた物を修正した物 (このA-NO.4の補足の記述) と変わりないと思うのですが、なぜか駄目です。 まだ原因が不明です。 なお ・この回答9月26日QNo.6198175-ANO.4で教えていただいた物をそのまま使用した場合 全パターン正常に編集できました。 ありがとうございました。

gx9wx
質問者

補足

この回答をいただく前の9月24日深夜に修正完了し報告したかったのですが 補足もお礼も使い果たしできませんでした。大変申し訳ありません。 内容は一番最初9月4日QNo.6153785で教えていただいた物を修正です。 (9月4日QNo.6153785-ANO.2で教えていただいた物は動作がしなかったのですが  以下の様にしたら動作はしました。ですがNO.4の編集は正しくないです。)  9月22日QNo.6198175-ANO.2で教えていただいた物は動作はしますがNO.4の編集は正しくないです。) なお使用データーベースを頭3と頭3Aがあるものから 頭9と頭9Xの方に変更したので記述がそうなっています。 記述が完璧かの裏づけはないのですが、 現在実データーで検証中で5種類とも変換できています。 今日は勉強の為9月22日QNo.6198175-ANO.2で教えてもらった方の記述を修正してみます。 その後この回答9月26日QNo.6198175-ANO.4と見比べてみます。) VBScript Dim myData Dim mValue Dim buf Const vbNarrow=8  '削除 'myData = Array("41234564811114", "12345-12345",_ "12345678-12345", "31234567890123", "3A145677812300") 'For Each n In myData  '追加 n=Value n = Trim(n) Select Case True  '5の編集 9X頭で14桁、ハイフンがない? Case Left(n, 2) = "9X" And Len(n) = 14 And InStr(1,n, "-",1) = 0  '3-11でハイフン編集 mValue = Left(n, 3) & "-" & Mid(n, 4)  'ここから下の行は削除    '3の編集 8桁-5桁の選択(1)9頭で計14桁でかつハイフンが1個ある?   'Case Left(n, 1) = "9" And Len(n) = 14 And InStr(1, n, "-", 1) = 9    'ハイフンを抜く   'n = Replace(n, "-", "",1, -1 ,1)    '3-5-5でハイフン編集   'mValue = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)  'ここから上の行まで削除  'ここから下の行は追加(動作不良の対策)  '4の編集 9頭で14桁、ハイフンがない? Case Left(n, 1) = "9" And Len(n) = 14 And InStr(1, n, "-", 1) = 0  '5-5-2-2でハイフン編集 mValue = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2)  'ここから上の行まで追加(動作不良対策)  '3の編集 8桁-5桁の選択(2)先頭は条件無しで計14桁でハイフンが1個ある? Case Len(n) = 14 And InStr(1,n, "-",1) = 9  'ハイフンを抜く n = Replace(n, "-", "",1 , -1, 1)  '3-5-5でハイフン編集 mValue = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)  '1の編集 14桁でハイフンがない? Case Len(n) = 14 And InStr(1,n, "-",1) = 0  '3-5-2-2-2でハイフン編集 mValue = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) _ & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2)     '非該当の場合 Case Else  'データをそのまま表示する mValue = n End Select 'MsgBox mValue  '削除 'Next  '追加 Value =mValue 4.9123456789012A(先頭が9で14桁)     ↓(5-5-2-2)   91234-56789-01-2A   (5と6、10と11、12と13桁の間に半角ハイフンを入れる) 【OK】

関連するQ&A

  • VBスクリプトの作成方法について教えてください。

    VBスクリプトの作成方法について教えてください。 あるアプリケーションにて、VBスクリプト編集の機能が有りそれを有効にします。 でイベント用スクリプト入力欄には 【サンプル: Value = Value + "123", サブ文字列の値に123を加えます。】 となっています。 これをサンプルとうりに入力欄に Value = Value + "123" と入力したら元データが、 AAAAAAAだったのが AAAAAAA123と表示されました。 元データを以下の条件によってVBスクリプトにて変化させたい場合 VBスクリプトはどのように作成すればいいでしょうか? データは半角で英数字のみでそれが混在です。 (元データは夜間バッチで自動上書更新されるので元データファイルに  式を入れておく事は出来ません。) 1.○○○○○○○○○○○○○○(先頭が3以外で14文字)     ↓   ○○○-○○○○○-○○-○○-○○ 2.○○○○○-○○○○○(5ケタ-5ケタ)      ↓   ○○○○○-○○○○○(変換しない)   3○○○○-○○○○○(5ケタ-5ケタ)     ↓   3○○○○-○○○○○(変換しない)   3A○○○-○○○○○(5ケタ-5ケタ)     ↓   3A○○○-○○○○○(変換しない) 3.○○○○○○○○-○○○○○(8桁ハイフン5桁)     ↓   ○○○-○○○○○-○○○○○   3○○○○○○○-○○○○○(先頭が3で8桁ハイフン5桁)     ↓   3○○-○○○○○-○○○○○   3A○○○○○○-○○○○○(先頭が3Aで8桁ハイフン5桁)     ↓   3A○-○○○○○-○○○○○ 4.3○○○○○○○○○○○○○(先頭が3で14桁)     ↓   3○○○○-○○○○○-○○-○○ 5.3A○○○○○○○○○○○○(先頭が3Aで14桁)    ↓   3A○-○○○○○○○○○○○ よろしくお願いします。

  • VBスクリプトの配列数字をJAVAスクリプトで使うには

    表題があまり良くないですが VBSでページを作っています その中で ページ閲覧者がテキストボックスに値を記入したときに JAVAスクリプトのonchangeでJAVAスクリプトへ飛んで VBスクリプトで定義した配列の値を代入したいのですが うまくいきません 飛んでいった先のコードが <script type="text/javascript"> <!-- //値の代入 function hoge(FRM){ FRM.hoge1.value=ここにVBスクリプトの配列 } // --> </script> これだけのことなのですが 配列を直接数字で書くと FRM.hoge1.value=<%=atai(1)%> hoge1にはきちんと値が入力されます しかし この1と言う数字の所に FRM.hoge2.value の値をいれてやろうとすると イメージとしては FRM.hoge1.value=<%=atai(FRM.hoge2.value )%> なんですが、これではエラーがでます(当然ですよね) 色々"" でくくったり & や + ()などの 組み合わせでやってもうまくいきません どなたか正しい構文か方法を教えてください よろしくお願いします  

  • vbスクリプトについて

    Excelファイル(D:\test.xls)を再起動するvbスクリプトを作成し、 4時間おきに実行するタスクスケジュールを設定したいと思います。 ※6:00、10:00、14:00、18:00、22:00、2:00のタスクスケジュールを作成し、  vbスクリプトを実行。 次のタスクスケジュールが実行されるまでの4時間は、Excelファイル(D:\test.xls)は 開いたままの状態です。 なので、vbスクリプトで、まずExcelファイル(D:\test.xls)が開いている場合は、 「D:\test.xls」を一旦(上書き保存なしで)閉じて、再度、「D:\test.xls」を開きたいと思っています。 ※他のExcelファイルが開いている場合は、「D:\test.xls」のみ閉じる。 「D:\test.xls」を開くスクリプトはできたのですが、「D:\test.xls」を閉じるところがわかりません。 どなたか教えていただけないでしょうか。 【vbスクリプト】----------------------------------------- '「D:\test.xls」が開いている場合は閉じる  ??? '「D:\test.xls」を起動する Dim xlApp Dim xlWbk Set xlApp=CreateObject("Excel.Application") xlApp.Visible=True Set xlWbk=xlApp.Workbooks.open("D:\test.xls",True) ---------------------------------------------------------

  • VB スクリプトで

    VB スクリプトで Error : Path not found Code : 800A004C Source : Microsoft VBScript runtime error というエラーが出ます。解決方法をご存知の方、教えてください。 よろしくお願いいたします。

  • VBスクリプトでエクセルを表示

    わかる方、教えて下さい。 サーバーサイトにあるエクセルファイル(例 C:\TEMP\PAPA.XLS)をASPのVBスクリプトで表示する方法を教えて下さい。 画面で何かをクリック(リンク)したらでは無く、VBスクリプトでポップアップ画面の様に表示したいのです。 お願いします。

  • 条件式のついて

    name="before" に7桁もしくは、8桁の半角数字の value があります。 もし7桁だったら、先頭から5桁目に「0」を挿入して、8桁にして name="after" に入力します。 "before" の value が8桁ならそのまま "after" に入力します。 上記の条件式の if else 文を考えておりまして、条件式の部分で煮詰まって しまっております。 ご教示お願い致します。

  • VBスクリプトでテキストファイルの行数カウント

    VBスクリプトでテキストファイルの行数をカウントする サンプルソースを探しています。 どなたかご存知の方、教えて下さい。

  • VBスクリプトでエクセルのセルに色をつける

    VBスクリプトを使って、あるエクセルファイルを開き、一行目に色をつけたいと思っています。なかなか良いサンプルコードが見つかりません。 どなたか参考になるサイトやコードを教えて頂けないでしょうか?

  • エクセル セルの先頭の0 VBAで

    テキストファイル.txtにおける数値 たとえば01234567の8桁を エクセルファイルの(A,1)セルに移動すると 1234567と表示されてしまいます あるコードがあるとしまして 途中省略しますが ・・・・・ .Cells(A, 1).Value = Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) これは あるプログラムの流れということですが これで 1234567 となってしまうので このコードのあとに Range (Cells(A, 1)) .NumberFormatLocal = "@" .Value = Format(.Value, "00000000") (この場合は 8桁とすでにわかっている場合ですが もし先頭に0がいくつ付くかわからない場合のケースも 教えていただけますか) とつけましたが エラーとなります 御教示くださいませ win10 office356

  • ジャバスクリプトについて質問です。

    ジャバスクリプトでテキストエリアに入力した文字数を表示したいのですが半角数でカウントは出来ませんか? <html> <head> <title>チェック</title> <script type="text/javascript"><!-- function tyek( str ) { document.getElementById("inputlength"). innerHTML = str.length + "文字"; } // --></script> </head> <body> <textarea cols="40" rows="9" onkeyup="tyek(value);"></textarea> <p id="inputlength">0文字</p> <br> </body> </html> 上記の設定では全角も一文字、半角も一文字でカウントされます。 例 aあ ⇒2文字 これを半角一文字、全角二文字という風に設定したいのですがどうすればいいのでしょうか?まだスクリプトを勉強しだしたばかりでよく分かりません… 回答の方宜しくお願い致します。