- 締切済み
文字列の置換
VB6で開発してます。 以下のようなことをやりたいのですが、 効率のよい方法はないものでしょうか? <やりたいこと> 文字列1の中にある『_』と同じ位置にある 文字列2の文字を『_』に置き換えたい。 [変換前] 文字列1:12_3456_ 文字列2:ABCDEFGH [変換後] 文字列1:12_3456_ 文字列2:AB_DEFG_ どなたかわかる方がいらっしゃったら教えて下さいm(_ _)m
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
質問をそのままコーディングしたら下のようになりました。 ご参考に。 Sub Okikae() Dim strA As String, strB As String Dim L As Integer 'カウンタ strA = "12_3456_" strB = "ABCDEFGH" For L = 1 To Len(strA) If Mid(strA, L, 1) = "_" Then '文字列1の中に『_』があったら Mid(strB, L, 1) = "_" '文字列2のその位置を『_』で置き換える End If Next MsgBox strB End Sub
- imogasi
- ベストアンサー率27% (4737/17070)
下記を参考にしてください。 Sub test01() a = "12_234_5_6" b = "abcdefghijkl" s = 1 p1: p = InStr(s, a, "_") MsgBox p If p = 0 Then GoTo p2 Mid(b, p, 1) = "_" s = p + 1 GoTo p1 p2: MsgBox b End Sub 納得後にMsgBoxを外してください。
更に訂正です(汗) (恥の上塗り?) > (2) 等しくない場合は...... ご質問のケースでは1文字 → 1文字の置換と最初から要件が決まってますので、(2)の場合は考えなくていいです。m(_ _)m
No.1の訂正です。m(_ _)m > (2) 等しくない場合は...... (2)の場合は文字列連結演算子で繋げた方が簡単そうです。 (Replace関数でも、できなくはないと思いますが、この場合は面倒そう)
(1) 置換「前」の文字列と置換「後」の文字列の文字数が等しい場合は、 Instr関数とMid$ステートメントを使えば可能です。 (2) 等しくない場合は、Instr関数とReplace関数を使用すればよいでしょう。 ※ 代入演算子の右辺式で使用するのがMid$「関数」、左辺式で使用する のがMid$「ステートメント」です。 ※ 上記(1)の場合は、Mid$ステートメントの方がReplace関数より高速に 処理できます。(正確なベンチマーク値等は失念)