こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBスクリプトで他条件分岐を作成したいです。

VBスクリプトで他条件分岐を作成したいです。

大変申し訳ありません。再質問です。
使用している印刷ソフトにて以下の説明があります。

VBスクリプト(Microsoft Visual Basic Scripting Edition)
とは、Windows PCで使用できるスクリプト言語です。
Visual BasicやOfficeのVBAとは似ていますが、別の言語となります。
本印刷ソフトはVBスクリプトを利用する事で、あらかじめ用意されている書式以外の
自由な書式で表現したり、データーベースに基づく複雑な条件分岐に従って
内容を変更したりできます。

:省略

データソースに入力されている値に対して後処理をかけることができます。
(データソースはExcelからデータベースフィールドで取得し、
 値をその他のオプションのVBスクリプトで後処理します)

ようするにValueから値を読み込み、値を編集してValueに返すという
処理をすることになります。
例えばデータソース 3A500100000099 の 3A5と00100000099の間(3文字目のあと)に
ハイフンを入れるスクリプトであれば

  str = Value
  Value = Left(str,3) & "-" & Mid(str,4,14)

という内容になります。

この説明から
現在ソフトの設定にて接続されているデーターソース(指定のエクセルファイルのC列)
に入力されている値において以下の5種類が存在していて(全て半角英数字)
その5種類によって以下の法則で編集(半角ハイフンをかます)をして値を返したいです。
データ元のエクセルファイルに式を入れるのも選択肢ですが、このエクセルファイルは
システムの夜間バッチでファイル名は同じで上書更新される為エクセルに式を入れておいても
翌日には式が消えてしまいます。
このソフトはこういう場合に取得したデータを加工して表示されそれが印刷されるので
この機能を使用したいのです。

Select Case を使用するべきだと思うのですが未経験者の私の手に負えません。
今回限りの設定なのでなんとか乗り切りたいです。
よろしくお願いします。

1.○○○○○○○○○○○○○○(先頭が3以外で14文字) 
   ↓
  ○○○-○○○○○-○○-○○-○○(3-4、8-9、10-11、12-13桁の間に半角ハイフンを入れる)

2.○○○○○-○○○○○(5ケタ-5ケタ) 
    ↓
  ○○○○○-○○○○○(変換しない)

  3○○○○-○○○○○(先頭が3で5ケタ-5ケタ)
    ↓
  3○○○○-○○○○○(変換しない)

  3A○○○-○○○○○(先頭が3Aで5ケタ-5ケタ)
    ↓
  3A○○○-○○○○○(変換しない)

3.○○○○○○○○-○○○○○(8桁ハイフン5桁) 
   ↓
  ○○○-○○○○○-○○○○○(3-4、8-9桁の間に半角ハイフンを入れる)

  3○○○○○○○-○○○○○(先頭が3で8桁ハイフン5桁) 
   ↓
  3○○-○○○○○-○○○○○(3-4、8-9桁の間に半角ハイフンを入れる)

  3A○○○○○○-○○○○○(先頭が3Aで8桁ハイフン5桁) 
   ↓
  3A○-○○○○○-○○○○○(3-4、8-9桁の間に半角ハイフンを入れる)


4.3○○○○○○○○○○○○○(先頭が3で14桁) 
   ↓
  3○○○○-○○○○○-○○-○○(5-6、10-11、12-13桁の間に半角ハイフンを入れる)


5.3A○○○○○○○○○○○○(先頭が3Aで14桁)
   ↓
  3A○-○○○○○○○○○○○(3-4桁の間に半角ハイフンを入れる)

投稿日時 - 2010-09-21 18:58:12

QNo.6198175

困ってます

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

>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

投稿日時 - 2010-09-26 14:12:24

補足

この回答をいただく前の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】

投稿日時 - 2010-09-27 09:51:52

お礼

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で教えていただいた物をそのまま使用した場合

全パターン正常に編集できました。

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

投稿日時 - 2010-09-27 17:01:49

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>no.1のパターンは編集されましたが
>no.4とno.5がno.1のパターンで編集
>されてしまいました。

今、関わっている #6200348「エクセルでマクロの記録が出来ません。」側を一度、参考にしてください。9Xとか、数字と文字は違いますが、同じスタイルだと思います。もしダメなら、こちらも再検討します。

投稿日時 - 2010-09-25 20:15:53

補足

いろいろすいません。

サンプルは以下のように準備し結果は以下のとうりでした。

なお使用するデーターベースは他で教えてもらっている
方を利用することにしましたので
3頭→9頭
3A頭→9X頭
にしています。


1.12345678901234(先頭が9以外で14文字) 
   ↓
  123-45678-90-12-34
  (3と4、8と9、10と11、12と13桁の間に半角ハイフンを入れる)
  【OK】

2.55555-55555(5ケタ ハイフン 5ケタ) 
    ↓
  55555-55555(変換しない)
  【OK】

  95555-55555(先頭が9で5ケタ ハイフン 5ケタ)
    ↓
  95555-55555(変換しない)
   【OK】  

  9X555-55555(先頭が9Xで5ケタ ハイフン 5ケタ)
    ↓
  9X555-55555(変換しない)
  【OK】

3.88888888-55555(8桁ハイフン5桁) 
   ↓ 
  888-88888-55555(3と4、8と9桁の間に半角ハイフンを入れる)
  【OK】

  988-88888-55555(先頭が9で8桁ハイフン5桁) 
   ↓
  988-88888-55555(3と4、8と9桁の間に半角ハイフンを入れる)
  【OK】

  9X888-88888-55555(先頭が9Xで8桁ハイフン5桁) 
   ↓
  9X888-88888-55555(3と4、8と9桁の間に半角ハイフンを入れる)

  【OK】

4.9123456789012A(先頭が9で14桁) 
   ↓
  91234-56789-01-2A(5と6、10と11、12と13桁の間に半角ハイフンを入れる)
   が正規のところ
   ↓
  912-34567-89-01-2A
   (3と4、8と9、10と11、12と13桁の間に半角ハイフンを入れる)
   で【NG】です。  

5.9X123456789012(先頭が9Xで14桁)
   ↓
  9X1-23456789012(3と4桁の間に半角ハイフンを入れる)

  【OK】

NO.2とNO.3は3種類記載しましたが
これは、質問以前にいろいろ作成していた時に

基本的に14桁。で頭が9か9Xかそれ以外でNO.1が基本編集で
NO.4とNO.5で9と9Xで条件を付けていたのですが
例外パターンのNO.2とNO.3で頭が9と9Xが来た場合
全部NO.4とNO.5になってしまったので
NO.2とNO.3にも9と9X頭を追加して
こちらが誤編集されないようにという事で記述しました。

最初に教えていただいた記述を修正したら
質問前に苦闘していた時と同じくNO.2とNO.3にて頭に9と9Xがくると
NO.4に編集されてしまう。

88888-55555 → 88888-55555 【OK】
98888-55555 → 988-88555-55 【NG】 
9X888-55555 → 9X8-885-55-55 【NG】
かつ
9123456789012A →91234-56789-01-2Aになってほしいが
         912-34567-89-01-2Aというのは直らずです。

で、その後、なんとか修正できて
解決しました。ありがとうございます。

投稿日時 - 2010-09-27 08:58:31

お礼

>もし、補足で書かれた内容で動くなら、以下のようにすればよいです。
>でも、これは、VBScript なんかじゃありません。
>前回の内容を少し替えただけです。
>今回の細かい仕様は分かりませんから、標準的な関数も使えるのかも不明では、
>なんとも言いようがありません。

このように回答をもらっており恐縮なのですが、
QNo.6198175-ANO.2の

n = Value
Select Case True

----省略-----

Case Else
Value = n
End Select
Next


'Next
にするだけで動作しました。(一部誤編集は除いて)
(これはソフトがそうアラームしたので)

QNo.6153785-ANO.2で教えていただいた、

'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 = Trim(n)
Select Case True

----省略-----

Case Else
mValue = n
End Select
'MsgBox mValue
Next

は動作がしなかったです。でアラームも(構文が不正です)だけでした。

'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

-----省略----- 

'削除
'Next
'追加
Value =mValue

と修正したら動作した理屈がわかりません。(ただし、一部誤編集は同じ)

誤編集についてはどちらも省略部分の条件分岐と処理の部分を修正すれば
誤編集もなくなりその理由もわかったのですが
この動作する、しないが私には検討もつきません。

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

投稿日時 - 2010-09-27 11:43:34

ANo.2

>親オブジェクトとはこの場合、どれを指すのでしょうか?
根本的な部分のオブジェクト(プログラムの集合体でひとつの体系を為すもの)が理解していないからです。本来、直接、Value というプロパティに入れるような、VB系の言語に、そのような仕様を持つものはありません。

>ソフトはすごく簡単です。
?使い方の説明は必要はないのですが……。
掲示板で、ソフトの名前を言えないようなものの質問は控えたほうがよいと思います。

>資料の無断転載はいけないと思い、自分で理解した内容で質問しています。
引用と転載とは違います。どういうソフトのどこのヘルプやマニュアルのどこに書かれている内容か、必要な分を掲示するというのは、著作権法で認められた行為です。

もし、補足で書かれた内容で動くなら、以下のようにすればよいです。でも、これは、VBScript なんかじゃありません。前回の内容を少し替えただけです。今回の細かい仕様は分かりませんから、標準的な関数も使えるのかも不明では、なんとも言いようがありません。

'(基本的に全角空白は絶対にいれないでください。ハングする可能性があります。)

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
n = Replace(n, "-", "",1, -1 ,1)
Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)
Case Len(n) = 14 And InStr(1,n, "-",1) = 9
n = Replace(n, "-", "",1 , -1, 1)
Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)
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
Next

最後に、私個人も、いくつかのソフトの独特の、マクロ・スクリプト言語を持っているものがありますが、それは、言語として完全に成り立っているものではないから、必ずしも使いこなせるものではありません。
そういうものは、自分で勉強していくしかないと思います。まして、VBScript に似ているというだけでは、どうにも解決するとは思えないのです。同じソフトを使っている同好の人たちのサイトさえあれば、情報交換から、ある程度の目処が立ちますが、こういうグローバルな掲示板で、ソフト名さえ公開しないというなら、そもそも無理な質問だと思っていただいたほうが良いと思いますね。

投稿日時 - 2010-09-22 12:13:39

補足

すいません。早合点でした。
no.1のパターンは編集されましたが
no.4とno.5がno.1のパターンで編集
されてしまいました。
せっかく記述していただいので
ところどころ修正しながら、試します。
ありがとうございました。

投稿日時 - 2010-09-22 20:33:36

お礼

他の事もいろいろ教えていただきまして、すいません。
教えていただいた記述を入れてみました。

:Nextが不正です。

とアラーとが出ました。
でこのNextを削除したら、

思ったとうりに動作をしました。

5種類全部調べましたが完璧に編集されて表示されます。

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

投稿日時 - 2010-09-22 13:17:14

ANo.1

前回と同じ内容のようです。

この部門は、VBカテゴリでも、こちらのOffice系カテゴリでも同じ分野の質問に関しては、専門的な分野は同じ人が答える可能性が高いです。だから、私の指摘したポイントをクリアしていないと、どこで質問されても同じになってしまいます。

>VBスクリプト(Microsoft Visual Basic Scripting Edition)
>とは、Windows PCで使用できるスクリプト言語です。
>Visual BasicやOfficeのVBAとは似ていますが、別の言語となります。

と書かれても、こんなあたりまえの説明は不要です。
しかし、問題は、VBScript との相違点です。

>ようするにValueから値を読み込み、値を編集してValueに返すという
>処理をすることになります。
>例えばデータソース 3A500100000099 の 3A5と00100000099の間(3文字目のあと)に
>ハイフンを入れるスクリプトであれば
>
>  str = Value
>  Value = Left(str,3) & "-" & Mid(str,4,14)

この記述では、VBAでも、VBScript でもありえないのです。VB系を知らない人のコードだと思います。

>(データソースはExcelからデータベースフィールドで取得し、
> 値をその他のオプションのVBスクリプトで後処理します)

データソースは、どうやって取るのでしょうか。ODBC、ADO、DAO、それともオートメーションでしょうか。
オブジェクトの意識がまったくなく、それが書かれていません。

前回も書いたことを、具体的に書くと、もし、上記のコードがある程度の痕跡を持っているとしたら、

Dim str
With ○○○ ←この部分(Valueの親オブジェクト)が分からなければ、エラーが返ります。
  str = .Value '本当は、strは、VB系では関数だから、私は使わない。
  .Value = Left(str,3) & "-" & Mid(str,4,14)
End With

前回書いたように、Value の親オブジェクトは何か、それを書かない限りは無理です。

せめてソフト名を書けば、こちら側でも調べます。その内容を明かさないままに、VBスクリプト様のものを、VBScript だと言われても、解決は難しいのです。あまり専門的な内容を書くと、逆に混乱するから書かないけれども、ヘルプの参考資料があるなら、変数の宣言の部分から、完全に動くものを、そのまま貼り付けてほしいものです。でも、なぜ、ソフト名を書けないのでしょうか?プライバシーの問題?もし、そういう事情があるなら、あまり掲示板では、業務に関してはお聞きならずに、メーカーに聞いたほうが良いと思います。

投稿日時 - 2010-09-22 08:48:06

補足

申し訳ありません。
別に質問方式を変えて回答を得たかったわけではありません。
前回の質問は締め切ってしまい、
サポートに問い合わせ、情報を得たので再質問をしました。

サポートで使い方は教えてくれても、記述まではサポート外でした。
また資料の無断転載はいけないと思い、自分で理解した内容で質問しています。

ちなみに

>例えばデータソース 3A500100000099 の 3A5と00100000099の間(3文字目のあと)に
>ハイフンを入れるスクリプトであれば
>
>  str = Value
>  Value = Left(str,3) & "-" & Mid(str,4,14)

において
str をAAAにしてみて
AAA = Value
Value = Left(AAA,3) & "-" & Mid(AAA,4,14)
にしても変換されて表示されました。
ですからこのstrをベースに記述をすれば他条件分岐の記述を書けるのかなと
思いました。

>前回書いたように、Value の親オブジェクトは何か、それを書かない限りは無理です。

この親オブジェクトというのが言葉の意味がわかりませんので
何を伝えていいのかわかりません。

ソフトはすごく簡単です。
用紙サイズを決めると
年賀状作成ソフトのようにそのサイズで画面に白紙枠が表示されます。
エクセルのオートシェイプと同じ要領で
その表示内にオブジェクトを挿入します。
でそこに文字入力をすればそれがそのまま印刷されます。
文字の拡大や位置などもエクセルのオートシェイプと
おなじ要領です。オブジェクトをつかんで移動や拡大縮小、
また子画面を開いて、フォントや色、位置のミリ指定など)
でそのオブジェクト部分をダブルクリックすると、
プロパティ画面になり、
・画面データ(自分で入力)
・日付(システム日付から)
・シリアルNO.
・データーソース
などの選択があります。
でデーターソースを選択すると
どのデーターソースを利用するか入力画面になり
例えばマイドキュメントの売上というフォルダの
2009年とういうエクセルファイルのB列と指定します。

そうすると画面にはそのエクセルのデータのB列の
値を表示します。
エクセルに12345678901234と入力されていれば
画面にも12345678901234と表示されます。

でこのデータソース選択画面で
VBスクリプトをONにして出てきた入力画面に

str = Value
Value = Left(str,3) & "-" & Mid(str,4,14)

と入力して決定すると
先ほどは
12345678901234と表示されていたのが
123-45678901234と表示されます。

親オブジェクトとはこの場合、どれを指すのでしょうか?

投稿日時 - 2010-09-22 10:47:17

お礼

2010年9月23日。
いろいろありがとうございました。

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
n = Replace(n, "-", "",1, -1 ,1)
Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)
Case Len(n) = 14 And InStr(1,n, "-",1) = 9
n = Replace(n, "-", "",1 , -1, 1)
Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)
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

で動作しています。

4.3○○○○○○○○○○○○○(先頭が3で14桁) 
   ↓
  3○○○○-○○○○○-○○-○○
  (5桁と6桁、10桁と11桁、12桁と13桁の間に半角ハイフンを入れる)
だけが、
パターン1の編集内容である
○○○-○○○○○-○○-○○-○○
(3桁と4桁、8桁と9桁、10桁と11桁、12桁と13桁の間に半角ハイフンを入れる)
で編集されてしまいます。
それ以外は完璧に編集できています。

この部分かなと思い

Case Left(n, 1) = "3" And Len(n) = 14 And InStr(1, n, "-", 1) = 9
n = Replace(n, "-", "",1, -1 ,1)
Value = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 5)

ところどころ修正してもこの症状は修正されず、
代わりに正常だったパターンが誤編集されてしまいました。
残りのパターンは編集されて印刷されていますしここらが限界かなと思います。
本当にどうもありがとうございました。

投稿日時 - 2010-09-23 20:26:40

あなたにオススメの質問