• 締切済み

文字列

Visual Basic6.0 よろしくお願いします。 (ab"N1"cde"N11"fjh"N111"ij"N1111"k) のような文字列から (ab"N0001"cde"N0011"fjh"N0111"ij"N1111"k) のように N の後の数字を4桁数字にしたい 場合はどうすれば良いでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。

みんなの回答

回答No.2

変換の条件がいまいち見えない感も ありますが、とりあえず >N の後の数字を4桁数字にしたい だけを条件にして、ダブルクォートも関係無しで処理する関数を 作ってみました。 たぶんバグは無いと思うんですが… 何分 急造なもので(汗) Private Function Sample(ss As String) As String Dim nFound As Boolean '"N"を見つけたフラグ Dim nNum As String '"N"の直後の数値文字列 Dim joiningNum As Boolean '"N"の後で数値を結合中フラグ Dim i As Integer 'カウンタ nFound = False nNum = "" For i = 1 To Len(ss) joiningNum = False '数値結合中フラグ 初期化 If Mid(ss, i, 1) = "N" Then 'Nならフラグを立てる nFound = True nNum = "" Else If nFound Then 'Nの後の処理 If IsNumeric(Mid(ss, i, 1)) Then '数値なら集めている数値文字列に結合、数値結合中フラグ立てる nNum = nNum & Mid(ss, i, 1) joiningNum = True Else '数値でなければ、そこまでで集めている数値を書式指定して戻り値に吐き出し、 'Nフラグを落とす Sample = Sample & Format(CLng(nNum), "0000") nNum = "" '集めた数値も初期化 nFound = False End If End If End If '1文字ごとの処理で、数値結合中でなければ、該当文字を戻り値に足す If Not joiningNum Then Sample = Sample & Mid(ss, i, 1) End If Next '万一、最後がN+数値だった場合のために、nNumに数値が残っていたら出力 If nNum <> "" Then Sample = Sample & Format(CLng(nNum), "0000") End If End Function この関数では、まさにNの直後の数値だけを変換するので、  (ab"N1abc"cde"N11de"fjh"N111a12b"ij"N1111"k) は  (ab"N0001abc"cde"N0011de"fjh"N0111a12b"ij"N1111"k) になります。 (N0111a12b のあたりが特徴的) 力業では ありますが、条件を理論的に明確にして、ループしながらのチェックの際の 状態遷移をうまく表すことが出来れば、大抵の こういった処理は何とかなります。

Ksou
質問者

お礼

(゜ロ゜)ギョェ 本当にありがとうございました。 m(_ _)m

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Splitで分解して各要素をチェックJoinで合成といった手順でしょう Function Sample( ss as String) as String   dim sa() as String   dim n as integer, i as integer   ' "による分解   sa = Split( ss, """" )   for i = 0 to UBound( sa )     if Left(sa(i),1) ="N" then       ' 書式の変更       n = Mid( sa(i), 2 )       sa(i) = """N" & Format( n, "0000" ) & """"     end if   next   ' 配列から文字列の合成   sample = Join(sa) End Function といった具合です # エラーチェックなどをしていないので適宜修正してください

Ksou
質問者

お礼

ありがとうございました。m(_ _)m

Ksou
質問者

補足

よろしく お願いします。 "N1abc"を"N0001abc"のように したい場合はどうすれば良いでしょうか? よろしく お願いいたします。

関連するQ&A

専門家に質問してみよう