- 締切済み
文字列
Visual Basic6.0 よろしくお願いします。 (ab"N1"cde"N11"fjh"N111"ij"N1111"k) のような文字列から (ab"N0001"cde"N0011"fjh"N0111"ij"N1111"k) のように N の後の数字を4桁数字にしたい 場合はどうすれば良いでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- K-Sogacchi
- ベストアンサー率53% (50/93)
変換の条件がいまいち見えない感も ありますが、とりあえず >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 のあたりが特徴的) 力業では ありますが、条件を理論的に明確にして、ループしながらのチェックの際の 状態遷移をうまく表すことが出来れば、大抵の こういった処理は何とかなります。
- redfox63
- ベストアンサー率71% (1325/1856)
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 といった具合です # エラーチェックなどをしていないので適宜修正してください
お礼
ありがとうございました。m(_ _)m
補足
よろしく お願いします。 "N1abc"を"N0001abc"のように したい場合はどうすれば良いでしょうか? よろしく お願いいたします。
お礼
(゜ロ゜)ギョェ 本当にありがとうございました。 m(_ _)m