特定の文字が入力された場合に改行したい

解決


なお  2007-09-04 19:03:12  No: 99384

Text1とText2があり、Text1に文字が入力されたらText2にも同じ文字が
反映される、といった内容のプログラムを作成しています。

Text1に任意の文字列を入力し、文字列の中に"|"が存在した場合に
Text2の文字列は"|"が改行に変わるようにしたいと思い
インターネットで見つけたサンプルコードを参考に以下を作成しました。

Public Function RepCRLF(s As String, rep As String) As String

  Dim a As String
  Dim i As Long
  Dim j As Long

  a = s
  j = Len(rep)
  i = 1 - j
  Do
    i = InStr(i + j, a, vbCrLf)
    If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
  Loop Until i = 0

  RepCRLF = a

End Function

Private Sub Text1_Change()

  Text2.Text = RepCRLF(Text1.Text, "|")

End Sub

これはうまくいったのですが、今度は逆に、
Text1に任意の文字列を入力し、文字列の中に改行が存在した場合に
Text2の文字列は改行が"|"に変わるようにしたいのですが
どうしてもうまくいきません。

i = InStr(i + j, a, vbCrLf)

i = InStr(i + j, a, "|")

Text2.Text = RepCRLF(Text1.Text, "|") 

Text2.Text = RepCRLF(Text1.Text, vbCrLf)

上記のように単純にコードを変更しただけではできないのでしょうか。

よろしくお願い致します。


なお  2007-09-04 20:19:39  No: 99385

すいません文章がおかしかったようです。。。

Text1とText2があり、Text1に文字が入力されたらText2にも同じ文字が
反映される、といった内容のプログラムを作成しています。

Text1に任意の文字列を入力し、文字列の中に改行が存在した場合に
Text2の文字列は改行が"|"に変わるようにしたいと思い
インターネットで見つけたサンプルコードを参考に以下を作成しました。

Public Function RepCRLF(s As String, rep As String) As String

  Dim a As String
  Dim i As Long
  Dim j As Long

  a = s
  j = Len(rep)
  i = 1 - j
  Do
    i = InStr(i + j, a, vbCrLf)
    If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
  Loop Until i = 0

  RepCRLF = a

End Function

Private Sub Text1_Change()

  Text2.Text = RepCRLF(Text1.Text, "|")

End Sub

これはうまくいったのですが、今度は逆に、
Text1に任意の文字列を入力し、文字列の中に"|"が存在した場合に
Text2の文字列は"|"が改行に変わるようにしたいのですが
どうしてもうまくいきません。

i = InStr(i + j, a, vbCrLf)

i = InStr(i + j, a, "|")

Text2.Text = RepCRLF(Text1.Text, "|") 

Text2.Text = RepCRLF(Text1.Text, vbCrLf)

上記のように単純にコードを変更しただけではできないのでしょうか。

よろしくお願い致します。


じぇふ  2007-09-04 22:42:34  No: 99386

環境はVB5以前で良いですか?

試しに実行してみましたが、
>If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
の行でエラーになりました。

Text1への入力を  あいう|  とした場合
i=4となります。
・・・ってことで、単純にコードを変えるだけでは
 If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
で「プロシージャの呼び出しまたは引数が不正です」となります。


大吉末吉  2007-09-05 00:27:13  No: 99387

単に「文字数」を数え損なっているだけでは・・・
"|"は、1文字ですが、vbCrLfは2文字(vbCrとvbLf)です。

>If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)

Rigthで「-1」しているのは、vbCrLfの2文字分を省くためです。
例えば、
"あいう[vbCr][vbLf]えお"
の場合、Len=7、i(InStrの結果)は、4です。
ですから、Leftは3(i-1)を、Rigthは2(Lenの値-i-1)を指定します。

逆処理の場合、"|"は1文字ですから、
"あいう|えお"
の場合、Len=6、i(InStrの結果)は、4です。
ですから、Leftは3(i-1)を、Rigthは2(Lenの値-i)を指定するように変更すれば良いのでは・・・


なお  2007-09-05 00:52:17  No: 99388

じぇふさん、末吉大吉さん、
大変わかりやすいご説明を頂き、うまく処理することができました。

本当に有り難うございました!


SSY  2007-09-05 01:00:55  No: 99389

そもそもこのRepCRLF関数自体vbCrLfを変換する関数なのでこれに手を加えるのはどうかと・・・。
たぶんY.SAKさんのサイトから見つけたかと思いますが、
この関数の直下に
■任意文字列の置換
という関数があります。
こちらを使用してはいかがでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加