• ベストアンサー

エクセルの文章を分割して表示する

行き詰ってしまたため、質問させていただきます。よろしくお願いします。 エクセルにある文章をセル内の文字数を制限して、それを超える場合は順次下のセルへ表示させたいのです。 文字の割り付けでセルの幅を調節すればできないことはないのですが、大量の文章となると1つ1つセルを挿入しながらの作業になり大変な労力なので違う方法があると助かります。 例)B列にある文章をA列の文字数を20文字までとして順次表示させたい。             B列 1行目 本日はお忙しい中お集まり頂きましてありがとうございます。 2行目 今回は○○議題について検討していきます。 3行目 (空欄) 4行目 報告からお願いします。 5行目 ××支店では、前月比・前年比ともに大きく上回り、純益は○○○○○円で前月より30%増となりました。 これを↓のように           A列 1行目 本日はお忙しい中お集まり頂きましてありが 2行目 とうございます。 3行目 今回は○○議題について検討していきます。 4行目 (改行) 5行目 報告からお願いします。 6行目 ××支店では、前月比・前年比ともに大きく 7行目 上回り、純益は○○○○○円で前月より30 8行目 %増となりました。 のように表示させたいのですが、どのような方法が適当でしょうか? いろいろとやってみて、マクロしかないのかな?と思っていますが、出来れば関数で、関数では難しいようでしたらマクロでの方法を教えていただければと思います。 どうぞ、よろしくお願いいたします。

  • Jail3
  • お礼率80% (20/25)

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

普通なら、テキストエディタ(ワードでも可)で1行を20文字にセットしておいて、入力するのが一番妥当だと思うけど、何か理由があるのでしょうね。 <とりあえずのサンプルマクロ> Sub test() Dim tmp As String Dim r As Long, rw As Long rw = 1 For r = 1 To ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row  tmp = Cells(r, 2).Text  Do While Len(tmp) > 20   Cells(rw, 1).Value = Left(tmp, 20)   tmp = Right(tmp, Len(tmp) - 20)   rw = rw + 1  Loop  Cells(rw, 1).Value = tmp  rw = rw + 1 Next r End Sub 単純に文字数で判別しているだけで、行末処理(禁則処理など)は面倒なのでやっていない。 「。」や「、」が行頭にくる可能性あり。 アクティブシートに対して処理を行います。

Jail3
質問者

お礼

回答いただきありがとうございます。 おっしゃるように、ワード等で出来れば一番いいのですが、テンプレートがありまして、それにはめ込む感じになるものですから… マクロありがとうございます。思ったとおりになりました。

その他の回答 (8)

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.9

ANo.8です。 > このように上と下がくっついてしまい、質問のA列のようにならないのです。 > また、セルを1つ1つやっていくと、400行もありますと膨大な時間が必要となり、これも現実的ではないかな?と思っております。 確かに、「文字の割付」ではすべてのセルを選択して実行すると、そのようになります。 「ツール」→「ユーザー設定」→「コマンド」タブの「分類」から「編集」を選択し、「コマンド」の「文字の割付」コマンドをツールバーにD&Dして登録しておけば、目視で数行ごとに選択して、「文字の割付」コマンドをクリックするだけで自動的にセルに割付されますので、400行程度なら比較的短時間で完了すると思います。

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.8

Excelの「文字の割付」機能を使うとご希望のように文字列が列幅に合わせて分配されます。 1) 文字数を一定にするために、等幅フォントに変更し、表示したい文字数になるよう列幅を調整します。 2) 入力されているセル範囲を選択し、「編集」→「フィル」→「文字の割付」をクリックします。 3) 「選択範囲の下のセルに・・・」のメッセージに「OK」を押します。 「文字の割付」 http://akubizzz.hp.infoseek.co.jp/sub124.html

Jail3
質問者

お礼

回答いただきありがとうございます。 文字の割付は試してみたのですが複数のセルを選択して実行すると、 1行目 本日はお忙しい中お集まり頂きましてありが 2行目 とうございます。今回は○○議題について検 3行目 討していきます。 4行目  5行目 報告からお願いします。××支店では、前月 6行目 比・前年比ともに大きく上回り、純益は○○ 7行目 ○○○円で前月より30%増となりました。 このように上と下がくっついてしまい、質問のA列のようにならないのです。 また、セルを1つ1つやっていくと、400行もありますと膨大な時間が必要となり、これも現実的ではないかな?と思っております。 使用しているのがExcel2003なのですが、それよりも上位バージョンでは複数セルを選択しても出来るものなのでしょうか。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.7

No.6です。 MID関数、無駄なことやっていましたね。 No.5の方のマクロを参考にシンプルにして見ました。 Sub Sample() K = 1 For i = 1 To Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row  If Len(Cells(i, 2).Value) > 0 Then   For j = 0 To Int((Len(Cells(i, 2).Value) - 1) / 20)    Cells(K, 1).Value = Mid(Cells(i, 2).Value, j * 20 + 1, 20)    K = K + 1   Next j  Else   K = K + 1  End If Next i End Sub

Jail3
質問者

お礼

回答いただきありがとうございます。 いろいろと勉強になります、ありがとうございます。 活用させていただきます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.6

No.2です。 せっかくなのでマクロ作って見ました。 B列の文字数が20文字ちょうどでも変な改行は入りません。 20文字で分割した時に最後の文字列が20文字以下の場合の処理を手抜きする為、お尻に空白を20文字分くっつけてA列に入れる時にTRIMをかけて空白を取っています。 そのため、20文字で分割した時、頭が空白の場合、A列にはその空白抜きで入ります。 Sub Sample()  Dim nARow, nBRow, nMoji, nLast, nBloop As Long  Dim sOne As String  nARow = 1 'A列の行  nMoji = 20 'A列一行の文字数  nLast = Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row 'B列の最終行  For nBRow = 1 To Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row 'B列を1行目から最終行まで処理   sOne = Cells(nBRow, 2).Value 'B列の1行分の文字列   If Len(sOne) = 0 Then    nARow = nARow + 1 '文字列無しの場合はA列を1行進めてお終い   Else    nBloop = Int((Len(sOne) - 1) / nMoji) '何分割するか    sOne = sOne & String(nMoji, " ") '後ろに空白をくっつける    For nLoop = 0 To nBloop     '20文字取り出して余分な空白削除したものをA列に     Cells(nARow, 1).Value = Trim(Mid(sOne, 1 + nLoop * nMoji, nMoji))     nARow = nARow + 1 'A列を一行進める    Next nLoop   End If  Next nBRow End Sub

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

マクロご存知であれば、以下参考にしてください。 Sub Macro1() K = 1 For i = 1 To Range("B65536").End(xlUp).Row For j = 0 To Int(Len(Cells(i, 2).Value) / 20) Cells(K, 1).Value = Mid(Cells(i, 2).Value, j * 20 + 1, 20) K = K + 1 Next j Next i End Sub

Jail3
質問者

お礼

回答いただきありがとうございます。 マクロ使用させていただきました。思ったとおりにできました。ありがとうございます。

回答No.4

文面から察すると、株主総会等の会議のコンテのようですね。 おそらく、テンプレかなんかになっていて今回だけではなく今後も使用されるのではと推測しています。 どのような理由でExcelを使用されているのかはわかりませんが、こういった場合には苦労してExcelを使うのではなく、Wordを使用されたほうが良いのではないかと思います。 他に同時に印刷したい表などがあるかもしれませんが、その場合でもExcelで作成した表をWordに張り付ける等したほうがやりやすい場面もあります。 ExcelにはExcel、WordにはWordの得意分野がありますので、良いとこ取りをしたほうが結局は楽になると思います。 どうしてもExcelでなければいけないのであれば、 1.A1:A8を結合し、セルの書式設定で「折り返して全体を表示する」にし、列幅は20文字表示されるように、行の高さやフォント等は適宜調整してください。 その後、B1~B5の内容をコピーします。(コピーの仕方には少し工夫が必要になります) とするか、 2、テキストボックスを使用する という方法が良いのではないでしょうか 2.

Jail3
質問者

お礼

回答いただきありがとうございます。 自分もエクセルではなく、ワードで作れたらいいのですが… 今エクセルで作成しているのと近いのでワードのテンプレートの「会議議事録3」というのがあるのですが、これを使う場合は文章を打ち込む時にある文字数(今回の質問ですと20文字)になったら自動的に次のセル(表)へ移動してくれればいいのですが、何か方法があるのでしょうか?ただやみくもに打ち込むだけではそのセル内で2行や3行になってしまって、罫線の意味をなさなくなってしまうのです。 ですので、今回はエクセルでの方法をおたずねしました。 ワードでの方法などあれば教えていただけるとありがたく思います。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

見た目上改行されていれば良いのなら、列全体を選択し、セルの書式-配置で「折り返して全体を表示する」にする。 あとは幅を調整。文字数も合わせる場合は、フォントを等幅フォントに。

Jail3
質問者

お礼

回答いただきありがとうございます。 会社で用意されたエクセルのテンプレートがありまして、その中に表示させたいので折り返して表示ですとテンプレがずれてしまうため使えないのです。 質問にテンプレートの事を書き忘れてましたね。失礼しました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

B列を一度テキストファイルにコピペして、テキストファイルで編集作業を行ない、 その結果をA列に貼り付ける。 と言うのは無理なのでしょうか? (B列以外にデータがあり、改行による行挿入が必要なら無理かも知れませんが。)

Jail3
質問者

お礼

回答いただきありがとうございます。 B列は例のは短いですが、実際は400行くらいあり、文字数も合計で1万文字以上あるため、テキストファイルでの編集となると20文字づつ数えていかなければならないため、途方もなく時間がかかってしまいます。

関連するQ&A

  • マクロを使用すると表示できなくなるのです

    さきほども別の質問をさせていただきました。 もう一つお願いいたします。 表形式で、c列に前年売上500,231,655 d列に当年売上485,652,311という数値がずらっとならんでおり、E列に前年比という項目があります。前年比は前年売上/当年売上でだすことはできます。これを小数点以下第二位までの%表示させています。この前年と当年売上の数値を百万単位や円単位、千円単位で表示させるマクロを作りました。そうすると、この前年比の項目の%表示したものが、1や0という数値に変わります。セルにはきちんと前年売上/当年売上の数式が入っているのですが%表示されなくなります。これをマクロを使ってもきちんと%表示させることってできるんでしょうか? 明日の会議で必要になる資料なもので、どなたか教えてください。よろしくお願いいたします。

  • エクセルの文章入力についてです。

    エクセルの文章入力についてです。 「折り返して全体を表示する」のように一定の文字列の幅でセルごとに分ける事はできないでしょうか? 一つのセルにある文章を入力するのは容易です。 しかし、与えられた横書きの書式は一定の文字数を入力すると、わざわざ下のセルに移動して途切れの悪い文字からの入力を強いられることになります。 要は、一旦1つのセルに入力した文章を、「折り返して全体を表示する」のように行が変わる毎に一つ下のセルに移動して一定数の列幅まで文字を入力したら一つしたのセルに移動して…を繰り返す表示は可能でしょうか。 「長さ」がキーワードかと思い、vbaのlenやlenbで試してみましたが一定の列幅に対して文字列の長さが一定せず「折り返して全体を表示する」のようには綺麗に表示されません。 ちなみにLenB(StrConv(Cells("A1"), vbFromUnicode))も試して見ましたがイマイチです。 もしかしたら、vbaなど使わなくても簡単にできるものなのでしょうか? 「折り返して全体を表示する」のように一定の文字列の幅でセルごとに分ける事はできないでしょうか?

  • エクセルの並び替え(マクロ・・・?)

    ・A列に店の名前 ・B列に「今年」・「前年」の文字 ・C列に売上 今年と前年の売上を店ごとにわかる状態です。 つまり、A列には同じ店名が2つ存在します。 例   A..............B................C 高島屋  今年   900 高島屋  前年   800 といった感じです。 これを、今年の売上の高い方から並び替えたいです。 このとき、前年の売上と比較できるように、前年のも今年の下のセルに表示したいのです。単純にC列だけを並び替えすると、前年とごちゃまぜになってしまいますし、店名もバラバラです。店名が2つ連続した状態で、尚且つ 今年の下のセルに前年がくるように、かつ今年の売上の高い方から並び替えることはできないでしょうか? そもそも前年・今年といったものを行ではなく、列にすればよかったのですが、すでに作ってしまった後でした、、、。 多量のデータなので、なんとか解決させたいです。 VBAやマクロになるのでしょうか? サンプルコードを記載してくれると非常に助かります。

  • エクセルでの自動日付入力

    エクセルでこんなことできますか? B列以降のどれかのセルに変更を加えて(セル内に文字入力、セル内の文字削除)、保存した後閉じます。 次回そのファイルを開いたとき変更したセルのある行の A列に保存した日付を表示させたいです。 「この行がいつ変更されたか」を知りたいのです。 わかりにくくてすみません。 マクロは初心者です。(たぶんマクロでないと無理?) よろしくお願いします。

  • Excel 2010で、セルの計算式を次シートに

    Excel 2010で、セルに入力した前年比や前月比の計算式を次のシートに自動的に引き継ぐ方法を教えてください。

  • エクセルに詳しい方、お願いします。

      http://okwave.jp/qa/q8816003.html に続いてのお願いです。 添付図の下段ように横積みグラフで色分けされたセルに 【1月】~【〇月】までの文字を書き入れるマクロを教えてください。 また、Tom04様のように【A1】セルに【行\列】を打ち込んだときに 絶妙に〔行〕を〔列〕より低く、〔列〕を〔行〕より高く表示する術を教えてください。

  • エクセルの表示について

    1行目:セルA1+セルB1= C1 2行目:セルA2+セルB2= C2  ・  ・  ・ という計算式を、50行作成します。 C列に、(=A1+B1)という計算式を入れて、1行目のC1とドラグ&ドロップし、50行目まで計算式を入力するとき、 B列に数字が入力されていないときに、計算式の入った C列にも何も表示されないようにしたいんです。 今の状態だと、A列に数字が入っていると、自動的にC列にも数字が入ってしまうので困っています。 当方はエクセル初心者なので、できれば、マクロなど複雑な方法を用いず、解決したいのですが・・・ どなたか御存知の方、アドバイスお願いします。

  • Excel マクロで 列と行を非表示にするには?

    Excel マクロ初心者です ボタンで sheetの 行1~10を非表示にして その後さらに列のBA~BJを非表示にするマクロを設定したいのですが マクロの自動記録にすると シート上一部のセルのみが残り その他は全て消えてしまいました。 行または列だけの非表示の自動記録は 正常に動きますが 単独のマクロを行と 列でそれぞれ作り、片方を動かした後 もう一方を動かすとやはり一部のみ残り 他は全て消えてしまいます。 マクロで行と、列を同時に非表示にするのは無理なんでしょうか?

  • エクセルのマクロについて教えてください

    こんな感じのマクロを考えています。 今いるセルの行番号の百の位を行番号とし、 A列のその行番号にある文字列を取得したい場合どのように書けばよいのでしょうか? 例) A2には「あさだ」と書かれています。 A3には「まお」と書かれています。 あるセルの行番号が342の時、百の位である3から、A列の3行目、つまりA3にある「まお」という 文字列を取得して表示させる。 TEXT(QUOTIENT (ROW(),100)&"","@")で上記でいうところの文字列3が取れますが、 ここからどうやってA3として、そのセル番号の中身を取得できるのでしょうか?

  • エクセルのマクロの作成について

    エクセルのマクロの作成について教えてください!! 一つのセルの中に3行の文字があるとして・・・・ そのセルの2行目と3行目を隣のセルにうつしたいです。 例えば・・ E列の1行目のセルに あいうえお かきくけこ さしすせそ と文字が入っていて、 それを F列の1行目のセルに かきくけこ さしすせそ のみ移動させたいです。 1行~300行ほどあって、さらにデータは増え続けます、手作業での移行が困難になってきました。 そもそも一つのセルの中身の文字の一部を違うところに移動させるマクロは組めるのでしょうか。 当方初心者です。お手柔らかにお願いします。

専門家に質問してみよう