プロが教えるわが家の防犯対策術!

お世話になります。勉強のために
リッチテキストボックスをひとつ作成し、プロパティ
のTextにマウスをやると入力欄が出ましたので
aaa
bbb
ccc
ddd
eee
fff
ggg
と改行しながら入力したら、リッチテキストボックス
に、意図したとおりに入力できているし
実行しても意図したとおりに文字が入っています。
一瞬これはいいぞ!と思いましたが
ただ、プロパティのTextの欄には
aaabbbcccdddeeefffgggと横長に
入っており、少し嫌な予感がしました。
まあスペースの関係でそうなってるのだろうと思いました。

次にバー(HScrollBar1)を作成し
0-6で可変。 ユーザーが行番号を指定する
目的です。
以下が、バーを操作した時に、行番号に対応した
配列要素が表示されるという目的のイベントです。
(TextBox1が表示先です)

Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll


Dim strVal
Dim aryStrings
strVal = RichTextBox1.Text
aryStrings = Split(strVal, "VbCr")
TextBox1.Text = aryStrings(HScrollBar1.Value)


End Sub
結果は、失敗でした。!!
試しに、RichTextBox1.Textのプロパティを手動で
aaaVbCr
bbbVbCr
cccVbCr
dddVbCr
eeeVbCr
fffVbCr
gggVbCr
と書き換えて実行すると、成功しました。
しかしこれでは、改行を自動的に認識していることになりません。
よく考えてみると、Split(strVal, "VbCr")のVbCrは
””で囲まれているので、単なる意味を持たない文字列のような気がします。
Split関数自体は成功ですが、
本来なら、Split(strVal, "VbCr")ではなく
Split(strVal, VbCr)でもって
改行位置で区切ってほしいのですが
"VbCr"で区切るのなら、"ほにゃ”で区切っても良いことに
なります。
お手数ですがどなたか素人向けに教えてください。

A 回答 (2件)

こんにちは、



リッチテキストボックスに以下のように設定して、

aaaaa
bbb
sss
ddd

vbCrではなく
vbLfを利用して、
splitします。

Dim s() As String

s = Split(RichTextBox1.Text, vbLf)

sの配列に分割します。

配列の中身を出力すると

For i = LBound(s) To UBound(s)

Debug.Print(s(i))

Next

出力結果

aaaaa
bbb
sss
ddd

配列sの中身を結合すると

Debug.Print(Join(s, ""))

結果は、
aaaaabbbsssddd
になります。

分割する定数の問題だと思います。

環境は、visual basic 2005
    • good
    • 0
この回答へのお礼

vbLfを利用してsplitすればよかったのですね。おかげでやっと
解決しました。というかLBound(s) To UBound(s)の件はまだ
テストしてないのですが、配列の0から配列の要素数までみたいな
意味ですよね。あとで検索して調べてみたいと思います。
僕の環境ではDim i As Integer でFor i =0 to 5
Next で実験してイミジエトに出力が、うまくいきました。
 正直言って、最初、フォームに出力されると思ってましたので
結構、気づくのに時間かかったんですが(^^)
どちらにしても肝心なことは解決できましたので
本当にありがとうございました!
 

お礼日時:2007/08/19 17:30

Private Sub Command1_Click()


  MsgBox CutStr(rtbTextBox.Text, vbCrLf, 2)
End Sub

これで 'bbb' が表示されました。

VB 6.0 Excel 2003 でのテストです。

Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String
  Dim strDatas() As String
  
  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function

質問者が試みているのは、 CurStr関数と同じことですね。
ところで、

○ MsgBox CutStr(rtbTextBox.Text, vbCrLf, 2)
× MsgBox CutStr(rtbTextBox.Text, "vbCrLf", 2)

であることは判りますよね。

vbCrLf ---- 記号定数。

これを、文字列である "vbCrLf" とやった訳です。

[イミディエイト]
? CutStr("AAA vbCrLf BBB vbCrLf CCC", "vbCrLf", 1)
AAA
? CutStr("AAA vbCrLf BBB vbCrLf CCC", "vbCrLf", 2)
BBB

もちろん、この場合、文字列に区切り文字として "vbCrLf" を書き加えれば CutStr は成功します。

※単純に、記号定数にダブクォーテーションを付けるというチョンボをしているだけですね。
    • good
    • 1
この回答へのお礼

回答いただき本当にありがとうございました。
大変参考になりました。

また、
CurStr関数についても、解説いただきありがとうございました。

Split関数だけしか知らなかった(というか)これも知りたてのほやほや
なんですが、。それ以外にも色々あるものなんですね。


>  vbCrLf ---- 記号定数。
>  これを、文字列である "vbCrLf" とやった訳です
仰せのとおりです。(^^);

お礼日時:2007/08/19 17:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています