• ベストアンサー

セル内の長文テキストの分割

セル内の長文テキストを、任意の位置で分割し、下のセルへ移動させる方法を教えてください。 下図のように、エクセルのA列に長文のテキストが入力されているとします。 (|○○....|は1つのセルのつもりです。) | |             A           | |1|関東地方は雨模様が続きますが、東北地方は..........| |2|今日のニュースは、新潟県で起こった事件の続報......| |3|いつもお世話になっております。このところ..........| |4|The method is descrived in the blow figure .......| ..... これを、たとえば、 A2セルの「新潟県で」以降の文章をA3へ移動させ、 以降のセルの内容も一つ下のセルに移動させる方法はありますでしょうか? | |             A           | |1|関東地方は雨模様が続きますが、東北地方は..........| |2|今日のニュースは、新潟県で........................| |3|起こった事件の続報................................| |4|いつもお世話になっております。このところ..........| |5|The method is descrived in the blow figure .......| セル内のテキストの内容に規則性はありません。 文章を読みながら、任意の箇所で文章を区切っていく作業を行いたいのです。 マクロの記録をやってみましたがうまくいきませんでした。 どうぞよろしくお願いいたします。

  • naogo
  • お礼率72% (39/54)

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

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.7

様子を見ながら仕様を詰めていたのですが、 既に一段落ついちゃった感じですね。 今更感もありますが、一応ご参考まで。 イベントドリブンマクロなので、標準モジュールではなく 対象シートのシートモジュールに記述してください。 ●動作の概要  対象範囲のセルについて、  区切とする部分に 【Alt+Enterでセル内改行を入れて確定】 すると、  改行数に応じて 【自動的にセルまたは行を挿入】 し、  元の文字列を 【改行部分で分割して各セルにセット】 します。  モード1 : セルを挿入(他列に影響を与えない)  モード2 : 空白行を挿入  モード3 : 元の行をコピーして挿入  とりあえず、下記では  ・対象範囲:A1:A65536  ・モード:1  にしてありますが、ニーズに合わせて適当に変更してください。 '==================↓ ココカラ ↓================== Private Sub Worksheet_Change(ByVal Target As Range)  Dim myRng As Range  Dim myAry As Variant  Dim myOpt As Long  Dim i   As Long  myOpt = 1 '挿入モード  Set myRng = Range("A1:A65536") '対象範囲    Set myRng = Intersect(myRng, Target)  If myRng Is Nothing Then Exit Sub  If InStr(1, myRng.Text, vbLf) = 0 Then Exit Sub  Set myRng = myRng(1, 1)  myAry = Split(myRng.Value, vbLf)  Application.EnableEvents = False  Application.ScreenUpdating = False  With myRng   .Value = myAry(0)   For i = 1 To UBound(myAry)    Select Case myOpt     Case 1      .Offset(i, 0).Insert xlShiftDown     Case 2      .Offset(i, 0).EntireRow.Insert xlShiftDown     Case 3      .EntireRow.Copy      .Offset(i, 0).EntireRow.Insert xlShiftDown      Application.CutCopyMode = False    End Select    .Offset(i, 0).Value = myAry(i)   Next i   .Offset(i, 0).Activate  End With  Application.ScreenUpdating = True  Application.EnableEvents = True End Sub '==================↑ ココマデ ↑================== Excel2003,2007で動作確認。ご参考まで。

naogo
質問者

お礼

出来ました! す、すばらしい...。 動画までつけていただいて本当にありがとうございます。 カスタマイズできるなんて、さらに素敵です。 この作業を大量に行う必要があったので、本当に助かります! うれしいです! なんとお礼を申し上げていいやら。 ありがとうございました。m..m

その他の回答 (6)

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.6

>できたら、オリジナルデータは消去したいのですが、どうしたらいいでしょうか? やっぱり・・・そんな気はしてました(^^;; とりあえず簡単なのは WR = WR + StrNum(RepStr - 1) を WR = WR + StrNum(RepStr - 1) - 1 とすればオリジナルは一番下に押しやられます。 それと#4で述べわすれていましたがこのマクロは対照データが(A1)から始まる連続データになっていることが前提です。 途中で空白行があればその直前で停止しますのでご注意を。 開始セルを指定したい場合は NumStr = Cells(1, 1).End(xlDown).Row を修正してください。 #どう修正するかはご自分で調査してください このへんでご勘弁を(^^々

naogo
質問者

お礼

たびたびの質問にご回答いただきありがとうございました。 ご回答を参考に学びたいと思います。 本当にありがとうございました。

  • alna_sag
  • ベストアンサー率50% (4/8)
回答No.5

(1)分割したいセルに、セルカーソルを移動 (2)F2でセルの文字列を選択できるようにする。 (3)分割する位置に、文字カーソルを移動して文字列をCtrl+Xで切取る (4)Enterを押してセルの中から抜ける(下のセルに移動する) (5)そのままの位置で右クリックして[挿入]を選択 (6)[下方向にシフト]を選択してからのセルを挿入する (7)F2でセルの文字列を選択できるようにする。 (8)Ctrl+Vで貼付け こんなやり方でもいいんでしょうか?

naogo
質問者

お礼

数回の作業でしたら、ご回答いただいた 方法でも問題ないのですが、 同じ作業を何度も繰り返す必要があったため、 いい方法がないかしらとお尋ねしました。 ご丁寧なご回答ありがとうございました。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.4

となりのセルにデータがあるとのことなので、A列でオリジナルセルの直下に分割された文言を挿入するマクロをつくってみました。 区切り記号は ^ を使用します。 ^ は手作業で希望の位置に入れてください。 文頭/文末には^は無いものと考えています。 ^の入ったオリジナルデータは残るようにしています。 ご参考に Option Explicit Sub Strdiv() Dim StrW() Dim StrNum() Dim RepStr, RepWord, StRow, WorkCount, NumStr, WorkLen, WordMax, WorkStr, SpltNum, WR NumStr = Cells(1, 1).End(xlDown).Row ReDim StrNum(NumStr) '区切り数 StrNum(0) = 0 For RepStr = 1 To NumStr WorkStr = Cells(RepStr, 1).Value WorkLen = Len(WorkStr) StrNum(RepStr) = 1 SpltNum = 1 '区切りの最初 For RepWord = 1 To WorkLen If Mid(WorkStr, RepWord, 1) = "^" Then ' ^があれば区切記号 StrNum(RepStr) = StrNum(RepStr) + 1 If StrNum(RepStr) > WordMax Then WordMax = StrNum(RepStr) '区切り数の最大値 ReDim Preserve StrW(NumStr, WordMax) End If StrW(RepStr, StrNum(RepStr) - 1) = Mid(WorkStr, SpltNum, RepWord - SpltNum) SpltNum = RepWord + 1 End If Next RepWord StrW(RepStr, StrNum(RepStr)) = Mid(WorkStr, SpltNum, RepWord - SpltNum) Next RepStr WR = 0 For RepStr = 1 To NumStr WR = WR + StrNum(RepStr - 1) For RepWord = 1 To StrNum(RepStr) Cells(RepStr + WR + RepWord, 1).Insert shift:=xlDown Cells(RepStr + WR + RepWord, 1).Value = StrW(RepStr, RepWord) Next RepWord Next RepStr End Sub

naogo
質問者

補足

ありがとうございます! これがしたかったんです! すばらしいです。 ほんとにありがとうございます。 >^の入ったオリジナルデータは残るようにしています。 できたら、オリジナルデータは消去したいのですが、どうしたらいいでしょうか? 教えていただけると大変ありがたいです。 よろしくお願いいたします。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.3

文章中に絶対出現しない記号があれば、その記号を希望の位置に入力して、 区切位置→ウィザードでその文字を指定 すればセルで列方向に分割されます。 下のセルへの移動は・・・・がんばればマクロ化できると思います 1行ずつ分割されたセル数をカウントし、行挿入をループかな?

naogo
質問者

お礼

列方向へ分割はできるのですね。 ありがとうございます。 ちゃれんじしてみます! ありがとうございました。

noname#99913
noname#99913
回答No.2

どこで区切るのかが決まっていなければ、関数だろうがマクロを使おうが、不可能です。 No.1の方のやり方が最良だと思いますが、それが嫌なら手作業でやるしかないでしょう。 ところで、どうしても別セルにしなければいけないのですか? セル内改行でよければ、 (1)分割したいセルに、セルカーソルを移動 (2)F2を押す。 (3)分割する位置に、文字カーソルを移動 (4)Alt+Enterを押す。 で改行できます。

naogo
質問者

お礼

ありがとうございました!

naogo
質問者

補足

ご回答ありがとうございます。 どこで区切るかが問題なのですね。 ではAlt+Enterを先に区切りたい箇所に入れて、 それを目印に、同様のことを自動化するのは可能なのでしょうか? がんばって探してみます。 ありがとうございました!

  • goo39
  • ベストアンサー率36% (13/36)
回答No.1

(1)テキスト形式で保存(*.txt) (2)テキストファイルを編集(必要な箇所で改行)して保存 (3)保存したテキストファイルをエクセルで開く

naogo
質問者

お礼

早速ありがとうございます。 できればエクセル上で確認しながら、 上記作業を行いたいと考えております。 (隣のセルに別のデータが入っているため) どうもありがとうございました。

関連するQ&A

  • Word2013の表内セルへの文章コピーについて

    Word2013を使っているのですが、表を作成後あるセル内に TEXTファイル内の文章をコピーして、ペーストすると、 下記のように2行目から1文字明けて表示されます。 尚コピーした文章は、改行なしの1行の文章です。 これをの断ずれ?を直したいのですが、どうやればよいのでしょうか? ーーーーーーー 今日は朝から|  雨模様です|  傘をもって|  出勤します| ーーーーーーー よろしくお願いいたします・

  • 【エクセル】セルではなくテキストにリンクを貼りたいのですが。

    ごく基本的なことであればすいません・・・。 過去のQ&Aを調べてみてもそれらしきものがなかったので。 エクセルで「セル」ではなく、文章中の一部のテキストにリンクを貼りたいのですが、どのようにすれば良いのでしょうか? また、リンク先は通常のWEBページのアドレスです。 よろしくお願い致します。

  • エクセルで印刷されないセルの表示の仕方???

    WinXPエクセル2003です。他の人からエクセルのデータを頂いて、開くと、A1のセルに画面上では表示されている文章が(四角で囲まれいますがテキストボックスではないような…)印刷プレビューでは表示されていません。どうやったらこういうことが出来ますか?右クリックの「コメント」ではないようです。あと他のセルに移動すると、文章は消えます。ドラックもできますが、この文章自体はA1のセルのときだけ表示されます。

  • 新潟県と三重県、地方別にするとどの地域なの?

    初めましてこんにちは 新潟県と三重県なのですが、この県を東北地方とか中部・北陸地方という分類にする時、どこに入るのが正解なのでしょうか? あちこちのサイトをのぞいてみるのですが、新潟県は東北に入っていたり中部にいたり、三重県が近畿だったり中部・北陸だったり東海だったりします。 どこかに正しい情報が掲載されているサイトはないでしょうか。 またこの2県はどこに分類されるのが正解なのか教えてください。 よろしくお願いしますm(_"_)m

  • 新潟と沖縄は何地方?

    日本には「○○地方」という区分がありますが、新潟県と沖縄県は何地方なのかがあやふやな感じがします。 まず新潟県ですが、一般的には北陸地方といわれていますが、NTTドコモや電力会社は新潟県を北陸地方として扱っていません。NTTドコモからは中央(関東)・電力会社では東北と扱われています。 沖縄県も、NTTドコモのように九州とみなしたり、KDDIや電力会社のように九州とは別とみなしたりします。 結局、新潟と沖縄は何地方になるのでしょうか?また、企業によって地方のみなし方に違いがでるのは、なぜでしょうか?

  • 北陸地方の人ってどんな人?

    北陸地方の人って、どんなイメージですか? (ここでは新潟県は除き、富山県、石川県、福井県とします。) 福井県の人って、近畿地方ぽさあるんでしょうか? あまり出会ったことないので分かりません。 ちなみに、新潟県の人は東北の人に近いイメージあります。 ※ 人それぞれであり、一概には言えないというのは置いておいて、ご回答いただきたくお願いします。

  • EXCEL2010のテキストボックスについて

    テキストボックスに文字数制限はありますか? セルA1に文字列とセル値を&でつないだ文章を=の計算式で入力しています。 それをテキストボックスに=で取り込んでいるのですが、途中で文章が切れてしまいます。 文字数制限があるのでしょうか? この制限を解除する方法はないでしょうか? windows7 の excel2010です。 ご回答宜しくお願い致します。

  • 日本の地方区分はどうして不統一?

    日本は 東北地方、関東地方とかに区分されます。 しかし、例えば 新潟県が北陸地方に入ったり、入らなかったり、三重県も 東海地方だったり、近畿地方だったり と、どうして、地方区分が仕方が統一されていないのでしょうか?

  • トラベルについて

    新潟県に友達などがいるかと思います。 私は、新潟県といっても湯沢町に仲間(祭りの分も含む)もいます。 「東北地方(秋田県)から祭りに参加しているのは私だけ」って言われていますが、本当にそうなんでしょうか?  もし、本当にそうであればご意見聞いてみたいと思います。 

  • セルの文字列を取り出して一つのセルに入れる方法

    セルの文字列を取り出して一つのセルに入れる方法 こんにちは。 VBAの初心者のものです。 データ整理をしていたのですが、 次の様な場合、どのようにすればいいでしょうか。 例) 年度別、都道府県別の地震の発生件数のデータがあります。 これで1999年の地震が起こった都道府県を抽出するとします。 1999年の列でオートフィルタをかけ別のシートでまとめようと思います。 各年度でオートフィルタをかけて、次のようにまとめます。 1999年 北海道、宮城県、東京都 2000年 新潟県、静岡県、岡山県、石川県 2001年 福島県、宮城県、千葉県 2002年 愛知県、三重県、京都府 なお、都道府県のところはできれば一つのセルにいれたいと考えています。 1999年の場合なら Range("").value=北海道のセル&"、"& 宮城県のセル &"、"&東京都のセル 各都道府県の行番号が 北海道「1」 宮城県「4」 東京都「13」 ならば、 range("").value = range("A1").value&"、"&range("A4").value&"、"&range("A13").value というようになればいいのですが、 オートフィルタ後に行数をカウントし、次のようなコードにすると、 range("").value = range("A1").value&"、"&range("A2").value&"、"&range("A3").value 1999年 北海道、青森県、岩手県 となりオートフィルタ前の値が返されてしまいます。 このセルをどのように指定したらいいのかわかりません。 もしこれができないのであれば 各列に一つずつ(一つのセルに一つの都道府県)入れていく方法でも構いません。 1999年 北海道 宮城県 東京都  というような感じです。 よろしくお願いします。