エクセルで1行に入力文字数制限と自動改行
- エクセルに入力文字数制限と自動改行する方法について知りたい。
- 入力フォームを作成しているが、1行の入力文字数を制限し、オーバーした場合に自動で改行する方法を教えてほしい。
- 全角半角の混在にも対応し、複数の指定セルで同じ作業を行いたい。また、結合したセルでJustifyを使うことはできるのか。
- ベストアンサー
エクセルで1行に入力文字数制限と自動改行
エクセルにて入力フォームを作成しているのですが、1行に対する入力文字数の制限とそれをオーバーした場合に自動で改行するマクロを知りたいです。 例えばA1セルに30文字で入力制限しそれ以上の入力があれば自動でA2セルに改行するというようなものです。 入力フォームなので複数行にわたってしまうため、A1セルのみではなくその下のA2セルA3セル...と複数の指定セルで同じ作業をさせたいです。 入力する際は全角半角が混在してしまうので、合わせて30文字ではなく半角は0.5文字というようにしたいです。 またセルは結合して作成しているのでJustifyは使えませんでした。使えたら楽だったんですが。それとも使い方間違えたかな。。。 いろいろと探してみたのですが、ちょうど自分の作りたいものに合うものが調べられず質問しました。 ご教授いただけると助かります。
- JESTA
- お礼率40% (2/5)
- その他MS Office製品
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
大昔に作成したのをアレンジしていたら、いつの間にか賑わっていますね。 http://okwave.jp/qa/q3611973.html UserFormの話なのか、最初からワークシートに入力するの判断しにくいですが、後者として作成しています。 動作としてはA列のあるセルに入力する(実用上の最大文字数の制限はありません)と、21~22バイト毎(全角半角の混じり具合によって異なる)に区切って一種の改行をし、最終行で編集モードになって継続して入力できるという、ワープロ紛いを目指したものです。ご参考まで。 Private Sub Worksheet_Change(ByVal Target As Range) Dim targetString As String Dim i As Long, j As Long Dim trimString As String Dim currentCell As Range Const limitLength As Long = 20 If TypeName(Target.Value) <> "String" Then Exit Sub If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub Application.EnableEvents = False Set currentCell = Target targetString = Target.Value If LenB(StrConv(targetString, vbFromUnicode)) > limitLength Then j = 1 For i = 1 To Len(targetString) trimString = Mid(targetString, 1, j) If LenB(StrConv(trimString, vbFromUnicode)) > limitLength Then currentCell.Value = trimString Set currentCell = currentCell.Offset(1, 0) currentCell.Activate targetString = Right(targetString, Len(targetString) - Len(trimString)) j = 1 Else j = j + 1 End If Next i currentCell.Value = trimString End If SendKeys "{F2}" Application.EnableEvents = True End Sub
その他の回答 (4)
- tom04
- ベストアンサー率49% (2537/5117)
No.1・4です。 たびたびごめんなさい。 大勢にほとんど影響はないのですが・・・ 前回のコードを2ヶ所訂正してください。 5行目と7行目に >Selection がありますが >Target にしてください。 その行を選択しているかどうかが不明ですし、 A列のセル変更があったセルに対して実行されるマクロになりますので、 厳密にいえば「Target」の方が正しい使い方だと思います。 何度も失礼しました。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! 文字数の制限なし!がご希望だというコトですので・・・ ↓のコードに変更してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, cnt As Long, startRow As Long, endRow As Long, myStr As String, tmp If Application.Intersect(Target, Range("A:A")) Is Nothing Or Target.Count <> 1 Then Exit Sub If LenB(StrConv(Selection, vbFromUnicode)) > 60 Then tmp = Selection Application.EnableEvents = False startRow = Selection.Row endRow = Int(LenB(StrConv(tmp, vbFromUnicode)) / 60) For k = startRow To startRow + endRow cnt = 0 myStr = "" For i = 1 To Len(tmp) cnt = cnt + LenB(StrConv(Mid(tmp, i, 1), vbFromUnicode)) myStr = myStr & Mid(tmp, i, 1) If cnt >= 60 Then Exit For End If Next i With Cells(k, "A") .Value = myStr .Offset(1) = Replace(tmp, myStr, "") tmp = .Offset(1) End With Next k Application.EnableEvents = True End If End Sub ※ 今回もシートモジュールです。 ※ No.2さんも指摘されていらっしゃいますが、半角英数(1バイト)の文字が偶数の場合は問題ないのですが、 奇数の場合は1バイト分だけ余計にその行内に表示されます。m(_ _)m
お礼
ありがとうございます。使わせていただきます。 大変助かりましたm(_ _)m
- tsubuyuki
- ベストアンサー率45% (699/1545)
一応、もう一例を参考までに。 Private Sub CommandButton1_Click() Dim myText As String myText = StrConv(TextBox1.Text, vbFromUnicode) For i = 0 To Int(LenB(myText) / 60) Range("A1").Offset(i, 0) = StrConv(MidB(myText, 60 * i + 1, 60), vbUnicode) Next End Sub [CommandButton1]をクリックすると、 [TextBox1]の内容をA1セルから順に書き出すようにしています。 ただし、 > 入力する際は全角半角が混在してしまうので、合わせて30文字ではなく半角は0.5文字 これも一応考慮してはいますが、 「切り出した部分に半角文字(記号)が奇数個だった場合」にはきっと不都合が発生します。 この考慮は全くしていません。 考慮ももちろん可能だとは思いますが、 それならば「すべてを全角に置き換えて30文字」の方が楽かなぁ、と思いますし。 まぁ、この辺は好みで使い分けてください。 ※Justifyは列幅・フォントなどによって結果が変わってしまいますから > 30文字で入力制限し と言う条件があるならオススメはあまりしません。
補足
最初はネットで見つけてきたマクロを使って半角も全て全角に変換して書き込まれるようにしたのですが、「半角は半角、全角は全角になるようにしてくれ」と言われたので今回質問させていただきました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてA列にデータを入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i As Long, k As Long, cnt As Long, myStr As String, tmp If Application.Intersect(Target, Range("A:A")) Is Nothing Or Target.Count <> 1 Then Exit Sub Application.EnableEvents = False With Target If LenB(StrConv(.Value, vbFromUnicode)) > 60 Then tmp = .Value For k = 1 To Len(tmp) myStr = myStr & Mid(tmp, k, 1) cnt = cnt + LenB(StrConv(Mid(tmp, k, 1), vbFromUnicode)) If cnt = 60 Then Exit For End If Next k .Value = myStr .Offset(1) = Replace(tmp, .Value, "") End If End With Application.EnableEvents = True End Sub 'この行まで ※ 60文字以上(3行にまたがる長さの文字列)は考慮していません。 こんなんではどうでしょうか?m(_ _)m
補足
もし60文字以上にしようとするならどこを変更すれば良いのでしょうか? > If LenB(StrConv(.Value, vbFromUnicode)) > 60 Then や > If cnt = 60 Then で指定しているようでは無いようなので。 それとも数値では無いところで指定してあるのでしょうか?
関連するQ&A
- エクセル2007で文字入力数の制限について質問です
エクセル2007で文字入力数の制限について質問です 全角と半角が混在した文章で全角は1文字、半角は0.5文字で計算して 合計で20文字以内とか設定できませんか? 「データの入力規則」では出来なそうなので。。。 また、20.5文字以内という設定は可能ですか? 簡単な関数でせいげんできれば助かります ご回答よろしくお願いします
- ベストアンサー
- オフィス系ソフト
- エクセルでセルに入力制限をしたいのですが。
例えばA1のセルには全角で10文字まで、B1のセルには半角カナで10文字までという入力制限ができるでしょうか?入力規則で設定したところ、文字数制限はできるのですが、半角,全角の区別をしてくれません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルのセルに入力文字の制限
エクセルのセルに文字の制限をしたいのですが、例えばA1セルには半角英数、B1セルにはひらがな、C1セルには半角カタカナという感じでキーボートの半角/全角や英数キーを変更しなくても入力出来る方法がありましたら教えて下さい。宜しくお願いします。
- ベストアンサー
- その他(業務ソフトウェア)
- EXCEL入力規則で文字数制限
EXCEL2002です。 A列に入力規則をかけ、全角20文字、半角40文字以内にしたいと思っています。 「エクセル技道場→入力規則→全角5文字、半角10文字」を参考にさせていただき、以下の式で入力規則のユーザー設定を行いました。 =AND(ISTEXT(A1),LENB(A1)<=40) この場合、最初の文字が半角の場合に制限数以下でもエラーメッセージが出てしまいます。 最初の文字が全角でも半角でも制限数以下であればエラーメッセージが出ないようにする方法はありますか? よろしくお願いします。 http://www2.odn.ne.jp/excel/waza/validation.html#SEC10
- ベストアンサー
- オフィス系ソフト
- Excelのセル内の行数を制限する
現在、Excelでセルの文字制限を行いたいと思っているのですが。 行数の制限はできるのでしょうか? 文字制限で96文字以内というのはできたのですが 行数は何か方法があるのでしょうか? 全角でも半角でも6行以上の入力をできないようにしたいのです。 全角8文字x6行(48文字) 半角16文字x6行(96文字) と表示制限を行いたいのです。
- ベストアンサー
- オフィス系ソフト
- エクセル 改行から1行に
A列の各セルに文字が改行されて入力されている場合、それを各セル改行から元の1行に戻す必要がある時、各セル一つずつ元に戻すのは大変なので何か便利な方法は無いでしょうか?
- 締切済み
- オフィス系ソフト
- Excelのセルへの文字入力について
Excelの1個のセルの中へ全角文字の入力をしたいのですが あああああああ いいいいい ううううううううう えええええ おおお 以上のように複数の行を1つのセルに入力、表示したいのですか どのように設定をすればいいのでしょうか 教えてください 今は折り返して全体を表示の設定をして適当にスペースを入れて行間を適当に広げて表示しています。 Enterキーで改行をして行間が自動的に広くなるようにはできないのでしょうか Excelは2007です
- 締切済み
- その他MS Office製品
- メールの1行の文字数制限について
フォームから入力された文字をメールで送信する仕組みをPHPで作成しているのですが、1000文字を超える文章を改行せずに入力して、mb_send_mail関数でメールを送信したところ、1000文字以降が文字化けしてしまいました。(メールサーバはsendmailを使用) メールに関する1行の文字数制限はRFCにて規定されているようなのですが、これを回避する方法はないでしょうか?
- ベストアンサー
- PHP
- ワード&エクセルでの文字入力と改行
いつもお世話になります。 ワードで罫線⇒挿入⇒表で、例えば1列3行の表を作ったとします。 その後、この表の1行目から文字を入力していき、行の左端から右端まで文字を入力します。通常、右端まで文字を入力した後、更に文字を入力し続けると勝手に改行し、罫線で作成した1行目が2段構成になってしまいます。 これをどうにかして、表の1行目に文字が入らなくなった場合、自動的に2行目に移行していくようにしたいのですが、どのようにすれば良いのでしょうか。 又、エクセルでも同様で、定めた文字数を超えたらセルから次のセルへ移行していく、という具合にしたいのです。 本当に初歩的な質問で、恥ずかしい限りなのですが、どうぞ宜しくお願い致します。
- 締切済み
- オフィス系ソフト
お礼
返答ありがとうございます。 入力文字数に制限がないので使い勝手が良さそうですね。参考にさせていただきますm(_ _)m