• ベストアンサー

EXCELでフォームのテキストBOXに入力した文章を別セルに書き出すマ

EXCELでフォームのテキストBOXに入力した文章を別セルに書き出すマクロ Excel VBAでフォームのテキストBOXに入力した文章を別セルに書き出すマクロを作成しています。 普通に書き出すことと、改行コードで改行させることはできます。 しかし、改行コード&決まった文字数(任意)で改行し、改行後の先頭に句読点が来たときには句読点で改行させるようにしたいです。 (句読点が行末に来る場合、任意の文字数に+1する) どのようにしたら良いでしょうか? 今行っている方法だと、1行で文字数での改行が2回行われるとおかしくなってしまいます。 ご教授ください

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

必要な仕事を丁寧に。 作成例: Private Sub CommandButton1_Click()  Dim a As Variant  Dim LineLength As Long  Dim i, j  ’決まった文字数の指定  LineLength = 9  a = Split(TextBox1, vbLf)  For i = 0 To UBound(a)   j = LineLength   Do Until j > Len(a(i))    ’句読点の指定。連続した句読点の検出    Do While Mid(a(i), j + 1, 1) Like "[,、,、.。.。?!?!]"     j = j + 1    Loop    a(i) = Application.Replace(a(i), j + 1, 0, vbLf)    j = j + 1 + LineLength   Loop  Next i  Cells(1, 1) = Join(a, vbLf) End Sub

masakanosan
質問者

お礼

回答ありがとうございました 本日自分の作成した物の中に組み込みまして、動作を確認しました。 自分の中では句読点は”。”と”、”しか考えていなかったので、目からウロコでした。 一番早かったのと、非常に読みやすいマクロだったのでベストアンサーとさせていただきました。 ありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>今行っている方法だと、1行で文字数での改行が2回行われるとおかしくなってしまいます。 どのようにしているのか、言葉では、よく分かりません。 >Excel VBAでフォームのテキストBOXに入力した文章を別セルに書き出すマクロを作成しています。 フォームというのは、UserForm のことだとは思いますが、セルに書き出すということで、セルに一行を割り当てることにしました。Excelの本来の機能の「分割」にありますから、これ自体はあまり意味がありませんが、そうでない場合は、一部を書き換えることによって、1セルに入れることも可能です。見栄えがあまり良くありません。 なお、意図的に、「、あいうえお」と入れられた文章は、「、」が分離されてしまいます。 また、全角・半角の区別がついていません。だから、半角文字での出力では、文字数は合っていても、バランスは取れていません。英字のワードラップはされません。それから、TextBox の中のEnterコードは、Cr + Lf になっています。 '// Private Sub commandbutton1_Click()  Dim iKeta As Long  Dim buf As String, buf2 As String, buf3 As String  Dim i As Long, v As Variant  Dim Ar As Variant, ArBuf As Variant    '桁の設定  iKeta = 20  'Val(TextBox2.Value) 'TextBox2 から取る場合  If iKeta = 0 Then Exit Sub  If Len(TextBox1.Value) < 2 Then   MsgBox "文書がありません。", vbExclamation   Exit Sub  Else   buf = TextBox1.Value  End If  Ar = Split(buf, vbCrLf)  For Each v In Ar   For i = 1 To Len(v) Step iKeta    If StrConv(Mid$(v, i, 1), vbWide) Like "[、。)]*" Then     buf2 = buf2 & Mid$(v, i, 1) & vbLf & Mid$(v, i + 1, iKeta)     i = i + 1    Else     buf2 = buf2 & vbLf & Mid$(v, i, iKeta)    End If   Next   buf3 = buf3 & vbLf & buf2   buf2 = ""  Next  ArBuf = Split(Mid$(buf3, 3), vbLf)  ActiveCell.Resize(UBound(ArBuf) + 1) = Application.Transpose(ArBuf)  Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column)).WrapText = False End Sub 'Private Sub UserForm_Initialize() ''TextBox1 のプロパティが変更されていない場合 ' With Me.TextBox1 ' .MultiLine = True ' .EnterKeyBehavior = True ' End With 'End Sub

masakanosan
質問者

お礼

回答ありがとうございます。 Textboxのプロパティまで気に掛けて頂いてありがとうございます 回答に気が付いたのが帰宅後だったので、試せませんが、後日確認して勉強させていただきます。 ありがとうございました

関連するQ&A

  • テキストボックスへにセル値の入力

    エクセルマクロの初心者で恐縮なのですが、ユーザーフォームのテキストボックスに下記のようなことは可能でしょうか? 例1)ユーザーフォーム上にある「テキストボックス」に「オプションボタン1」を選択するとワークシートのセル値を入力(反映)することは可能でしょうか? 例2)次に、「オプションボタン2」を選択すると、例1でテキストボックスに入力(反映)した値を消去し、かつ、このテキストボックスに数値を直接入力したら、ワークシートの別セルに入力した数値が反映されるようにすることは可能でしょうか? 例1・2)についてどのようなマクロを組めばよいのでしょうか? マクロにお詳しい方、大変申し訳ございませんか、ご指導お願いいたします。

  • WORD2002:コントロールツールボックスのテキストボックス

    WORD2002でアンケートフォームを作成中です。 コントロール・ツールボックスでテキストボックスを作りました。広めにしてスクロールバーもつけ、たくさん入力できるようにしているのですが、ロック後、テキストボックス内の入力文章に任意で改行が入れられないのが気になります。これをなんとかする方法はないでしょうか? フォームで作ると回答者が任意で改行を入れられる点は良いのですが、入力文字に網掛けがかかってしまうのがデザイン上、気になります。かといって網掛けをオフにすると、入力位置が分かりにくくなってしまいます。※入力範囲は表のセルで表示しましたが、セル内のフォームフィールド以外の場所をクリックしても入力できないため、慣れない回答者には入力しづらそうです。 解決方法のアドバイスをどうぞよろしくお願いします!

  • エクセルVBAのテキストボックス改行について

    質問させて頂きます。 今VBAを使っているのですが TextBox内の改行がうまくいきません。 フォーム上にテキストボックスを置いて5~6行表示できる大きさにして、 (テキストボックス内に書いたものを保存ボタンでエクセル内の指定部分に反映させるコードを書き) それをマクロから開いて文字を入力している時に エンター押せば改行できると思っていたのですが出来ません。 CtrlやAlt押しながらもダメでした。 テキストボックスのプロパティ内に行を指定できる何かがあるのでしょうか? 色々いじりすぎて元に戻せなくなりつつあったので 質問させて頂きました。 ご存じの方おられましたら是非教えて下さい。 よろしくお願いします。

  • フォームのテキストボックスの内容

    こんばんは 顧客情報が入った名簿があり、ユーザーフォームを起動して入力・修正しています。チェックをすることで送付状を印刷するようにしてありますが、フォームの中に担当者が送付状に一言書き添えるためのテキストボックスを用意して送付状のセルに文章を入れようと思っています。ところが、テキストボックスでは改行して入力されている内容がセルにうまく表示できないのです。テキストボックスに表示されているとおりに印刷用シートに表示させるようなことは出来ないものでしょうか。よろしくお願いします。

  • フォームのテキストボックス内の改行について

    セルが繰返し処理で選択させるのですが。 その選択されるセルをいちいち、フォーム内のテキストボックスに表示されるようにしたいのですが。 普通の改行は VbCrLf でおこなうのはわかるのですが、それぞれ、記述するコードが別になっていて、各文字列は変数に入っているのですが。 こういうときはどうすればいいのでしょうか。 ↓ ↓ 例 繰り返す処理の中で、テキストブックにかかるイベントはひたすら書き込みです。 フォーム1.text = Range("苗字").Value      処理 フォーム1.text = Range("苗字").Value       処理  フォーム1.text = Range("苗字").Value 上のを改行させてテキストボックスに並べたいのです。 例:  田中 佐藤 鈴木 ・  というように。 どなたかご教授お願い致します。

  • エクセルのマクロで入力文字を一文字ずつ並んだセルに入れる

    エクセルマクロ超初心者です。 エクセルVBAでユーザーフォームを作成しました。 テキストボックスに入力した文字列を「登録」ボタン押下後、エクセルシートのセルに一文字づつ入るようにするにはどうすれば良いでしょうか? 例えばテキストボックスに「kohiro」と入力するとエクセルのsheet1のA1「k」、B1「o」、C1「h」、D1「i」、E1「r」、F1「o」となるようにしたいのです。入力する文字数は0~30文字までで、その都度長さは変わります。どうやって、文字をばらせばいいのか、またどうやって可変長の文字列を指定したセルに入力すればいいのかわかりません。どうかよろしくお願いいたします。

  • エクセルに貼り付けた入力フォームの中身を、別のセルに移したい

    例えば、YAHOOトップページの検索フォームの周りなどをコピーして、エクセルに貼り付けると、入力フォームもエクセルに貼り付けられるのですが、このフォーム内のテキストを別のセルに移し変えられるような、計算式かマクロを組みたいと考えております。 上記のような仕組みの設計について、詳しく説明してあるページなどありましたら、ご教授いただけないでしょうか。

  • セルの値をテキストボックスに表示したい

    excelマクロ初心者です。教えてください。 <やりたいこと> 選択したセルと同じ行のうち特定の列のセルの値をフォームの テキストボックスに表示し、そのフォーム上で表示したテキスト ボックスの値をコマンドボタンでコピーしたい。 また、もうひとうつのコマンドボタンをおすと選択したセルと 同じ行の別のセルに"完了"と入力できるようにしたい。

  • テキストボックスが空白の時、セルに入力"しない"

    ユーザーフォームにて、テキストボックスに入力されている文字や数字をユーザーフォーム内の"入力開始ボタン"を押したら、セル(A1)に入力されるように設定しています。 しかし、別のセル(C1)に A1 × B1 = X   という式が入力されており、テキストボックスが空白の状態で入力開始ボタンを押したら、セル(A1)に文字が打ち込まれたとカウントするのか、正しく計算できなくなります(A1を選択してデリートするとXに正しく0と表示されます)。 そこで、テキストボックスに文字か数字が打ち込まれている時のみセル(A1)に入力されるようにしたいのですが、回答宜しくお願いします。

  • EXCELのフォームで改行ができない

     EXCELのフォームで改行したいのですが、次のコードで改行しようとしています。  au = "手伝う" & vbCrLf & "手伝う"  TextBox1 = au でテキストボックスに       手伝う       手伝う と表示されて欲しいのですが改行が文字として表示されてしまい改行されません。何故なのでしょうか?テキストボックスのプロパティの問題でしょうか?    

専門家に質問してみよう