条件の複合

解決


新人A  2006-01-07 00:45:54  No: 129398

こんにちは。今回も前と同じ質問になってしまうんですけど、もしよろしければ教えて下さい。

この間から作りつづけているモノなのですが、テキスト1で書いた文字を、ボタンを押すことでテキスト2に記入させるモノです。条件は

・20文字すぎたら改行
・”。”があると改行
・2回目以降は1回目の文の後から文字を表示させる

なのですが、複合すると実行はできても何かエラーっぽくなってしまいます。
今のソースはこんな感じです。

'残り文字数をカウントする変数
Private Sub Form_Load()

    lngNOKORI = 20

End Sub
-----------------------------------------
'テキスト1で書いた文を変数に格納
strAA = txt1.Text
   
'変数に格納された文字がなくなるまで繰り返し
Do While Not strAA = ""

    strCCC = strAA
    strAAA = Left(strCCC, lngNOKORI)
     strAA = Mid(strCCC, lngNOKORI + 1)

'20文字すぎたら改行させる
    If Len(strAAA) = lngNOKORI Then
        strAAA = strAAA & vbCrLf
        lngNOKORI = 20
    ElseIf Len(strAAA) < lngNOKORI Then
            lngNOKORI = lngNOKORI - Len(strAAA)
    End If
    
'”。”があったら改行させる
    strAAA = Replace$(strAAA, "。", "。" & vbCrLf)

'文字をテキスト2に表示
    Me.txt2.Text = Me.txt2.Text & strAAA
    
Loop

といった感じに作りました。これは変数に20文字ずつ格納していき文字がなくなるまで処理をさせるやり方です。
ですが、例えば
「あ。い。うえおかきくけこさしすせそたちつてとなにぬねの」
と入力したら
-----------------------------------------------
あ。                                      ←  。で改行
い。                                      ←  。で改行
うえおかきくけこさしすせそたちつてとなに  ←  20文字で改行
ぬねの
-----------------------------------------------
と出したいのに
-----------------------------------------------
あ。
い。
うえおかきくけこさしすせそたちつ
てとなにぬねの
-----------------------------------------------
と出てしまいます。つまり「あ+。+い+。」も20文字の制限に含まれているからです。違うパターンの文にするとさらにおかしな表示の仕方にもなってしまいます。なので、"。"があるところで改行したとき残り文字数もまた20に戻して続きの処理を正常にさせたいのですが、"。"があったときの処理をどのようにすればうまく回るようになるのでしょうか??長く汚い文での質問で申し訳ありません。


matsu  2006-01-07 01:53:19  No: 129399

'”。”があったら改行させる
    strAAA = Replace$(strAAA, "。", "。" & vbCrLf)

の次に
lngNOKORI = Len(strAAA) - InStrRev(strAAA, "。")

これでうまくいくと思いますが、確認はしていません。


Dental  2006-01-07 01:57:21  No: 129400

> ・20文字すぎたら改行
> ・”。”があると改行

それって、順番が逆じゃないですか?
どっちを先に処理するかで、別の結果になるような気がするのですが。

たとえば、「20文字改行」した後で「。改行」した場合は
"あいうえお。かきくけこさしすせそたちつてと" は 4行になり、
"あいうえお。かきくけこ。さしすせそたちつてと" は 5行になります。

でも順番を逆にして、「。改行」した後で「20文字改行」した場合は
"あいうえお。かきくけこさしすせそたちつてと" は 3行になりますし、
"あいうえお。かきくけこ。さしすせそたちつてと" も 3行です。

******************************************************************
「20文字改行」した後で「。改行」
******************************************************************

======================================
あいうえお。かきくけこさしすせそたちつてと
======================================
      ↓20文字改行
======================================
あいうえお。かきくけ
こさしすせそたちつてと
======================================
      ↓。改行
======================================
あいうえお。
かきくけ
こさしすせそたちつて

======================================

******************************************************************

======================================
あいうえお。かきくけこ。さしすせそたちつてと
======================================
      ↓20文字改行
======================================
あいうえお。かきくけ
こ。さしすせそたちつ
てと
======================================
      ↓。改行
======================================
あいうえお。
かきくけ
こ。
さしすせそたちつ
てと
======================================

******************************************************************
「。改行」した後で「20文字改行」
******************************************************************

======================================
あいうえお。かきくけこさしすせそたちつてと
======================================
      ↓。改行
======================================
あいうえお。
かきくけこさしすせそたちつてと
======================================
      ↓20文字改行
======================================
あいうえお。
かきくけこさしすせそ
たちつてと
======================================

******************************************************************

======================================
あいうえお。かきくけこ。さしすせそたちつてと
======================================
      ↓。改行
======================================
あいうえお。
かきくけこ。
さしすせそたちつてと
======================================
      ↓20文字改行
======================================
あいうえお。
かきくけこ。
さしすせそたちつてと
======================================


Dental  2006-01-07 01:58:17  No: 129401

しまった……10文字改行になってる…。orz


新人A  2006-01-10 18:29:14  No: 129402

matsuさん、dentalさん、ご回答ありがとうございます。
とても参考になる意見でしたのでお二人の意見を参考に改良していきます。今はまだ解決してませんが、解決できるように頑張ります。


新人A  2006-01-11 00:35:22  No: 129403

やっと完成することができました。
これも皆様のおかげです。
ありがとうございました。
これからもっともっと精進したいと思います。


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

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






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