こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1つのセル内にある長文を分割、カタマリ別にセル入力

Excelで1つのセル内にある長文をあるカタマリ毎に自動分割し、
各カタマリごとにつき1つのセルに入力する方法を教えてください。

1つのカタマリは ”。” でセンテンスとして区切るか、
センテンスが80文字以上の場合は80文字で区切ります。

たとえば

ひとつのセル内に以下のような文章がある場合、

”ウィグル人の居住区とイスラムの文化遺産を破壊しつつ辺境「開発」。景気刺激策のばらまきで少数民族の習俗をついでに破滅させる一石二鳥。アルタイ山脈はモンゴル、露西亜、カザフスタン、中国を東西に貫く。その頂点とみられる、ベルーハ山は標高4506メートル、カザフと露西亜の国境を分ける。中国側の「アルタイ市」は、地理的にウルムチの北方およそ600キロ、「阿弥泰」の漢語を当てるが、原住民はもともと漢族ではない。ちょうどアルタイ市の位置は中国、モンゴル、露西亜、カザフ国境であり、北のロシア側はアルタイ共和国。”

整形後は

"ウィグル人の居住区とイスラムの文化遺産を破壊しつつ辺境「開発」。"
"景気刺激策のばらまきで少数民族の習俗をついでに破滅させる一石二鳥。"
"アルタイ山脈はモンゴル、露西亜、カザフスタン、中国を東西に貫く。"
"その頂点とみられる、ベルーハ山は標高4506メートル、カザフと露西亜の国境を分ける。"
"中国側の「アルタイ市」は、地理的にウルムチの北方およそ600キロ、「阿弥泰」の漢語を当てるが、原住民はもともと漢族ではない。"
"ちょうどアルタイ市の位置は中国、モンゴル、露西亜、カザフ国境であり、北のロシア側はアルタイ共和国。"

のようにカタマリごとにセルに入力したいです。

セル内の整形は出来るのですが、分割したカタマリをセル毎に入力する方法がわかりません。

ご教示いただければ大変助かります。

投稿日時 - 2012-04-10 18:03:39

QNo.7413827

困ってます

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

こんばんは!
VBAになってしまいますが・・・
一例です。
文章はA1セルに入っているとして、B1セル以降に表示させるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i, k, M, N As Long
Dim str As String
Dim myArray As Variant
myArray = Split(Cells(1, 1), "。")
For k = 0 To UBound(myArray)
Cells(k + 1, 2) = myArray(k) & "。"
Next k
For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
If Cells(i, 2) = "。" Then
Cells(i, 2).ClearContents
ElseIf Len(Cells(i, 2)) > 80 Then
str = Cells(i, 2)
N = WorksheetFunction.RoundDown(Len(str) / 80, 0)
Rows(i + 1 & ":" & i + N).Insert
For M = 0 To N
Cells(i + M, 2) = Mid(str, M * 80 + 1, 80)
Next M
End If
Next i
End Sub 'この行まで

参考になりますかね?m(_ _)m

投稿日時 - 2012-04-10 21:15:13

お礼

求めているそのものです!ありがとうございます!
A3から入力、B3から出力したい場合はどこをいじればいいんえしょうかね?

投稿日時 - 2012-04-10 23:39:15

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ご質問のような文字列の加工は、left(find)で計算する、まさに典型的な例です。つまり、下の【方法1】が最も素直な方法と思われます。

ご質問の長文がA1に入力されているとします。


【方法1】

(1)B1に「=left(a1,find("。",a1))」と入力
(2)A2に「=substitute(a1,b1,"")」と入力
(3)B1をコピーしB2に貼り付け(ドラッグ・アンド・ドロップやオートフィルでも可)
(4)A2:B2の範囲を選択
(5)B2の右下隅の角を下向きにドラッグすることで、適当な行数、オートフィル
(6)B列に「#VALUE!」というエラーが出るまでドラッグ。ご質問の文では7行目で出現するので、B1:B6の範囲に、求めるデータができあがっています。

【方法2】

(1)A1にカーソルを置いた状態でリボン(古いバージョンではメニューバー)の「データ」の「区切り位置」をクリック
(2)表示されるウィザードで「カンマやタブなどの…」を選択し、「次へ」ボタンをクリック
(3)「区切り文字」として「その他」をチェックし、その右のボックスに「。」を入力の上、「完了」ボタンを押す
(4)A1:F1の範囲にデータが分割されているので、この範囲を選択してコピー
(5)「形式を選択して貼り付け」をA4に貼り付けるが、その際、「行列を入れ替える」をチェック
(6)A12に「。」を入力
(7)B4に「=a4&$A$12」と入力
(8)B5以下の行をオートフィル。これでB4:B9の範囲に、求めるデータができあがっています。


なお、「区切り位置」ウィザードで「カンマやタブなどの…」の代わりに「スペースによって…」のほうを選ぶと、区切る位置を自由に指定し、更にドラッグで動かしたりすることができます。元のデータの内容によっては、こちらのほうが便利なこともあります。

投稿日時 - 2012-04-10 23:40:07

ANo.4

マクロや関数など複雑な手順の方がカッコ良ければ、既出回答がお勧めです。


最初の手順)
Ctrl+Hで置換のダイアログを出し、


。Ctrl+J
ここでCtrl+Jは「。」の記入に続けてコントロールキーを押しながらJのキーを押す。見た目上は何も入力されているようには見えません

にすべて置換し、「。」でセル内改行させます

続けてそのセルをコピーし、「ワードに」貼り付ける
ワードからコピーし、エクセルに張り戻す

と、「。」でセルを分けて記入できます。



次の手順)
データを記入できたセルのフォントを「MS明朝」に変更する
列幅を80文字幅にする
80文字を超えているセンテンス(のセル)では、列幅を超えて(折り返して全体を表示の設定がついていればセル内で複数行に折り返して)表示されている

それらのセルの下に、必要数の空セルを挿入する
80文字超えのセルで
ご利用のエクセルのバージョンが不明ですが、
Excel2010ではホームタブの「フィル」から文字の割り付けを行う
Excel2007ではホームタブの「フィル」から「両端揃え」を行う
Excel2003以前では編集メニューのフィルの文字の割付を行う

投稿日時 - 2012-04-10 23:16:46

添付図参照
A3: =LEN(B1)-LEN(SUBSTITUTE(B1,"。",""))
A5: =FIND("。",B$1,A4+1)
B5: =IF(ISERROR(A5),"",MID(B$1,A4+1,A5-A4))

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2012-04-10 19:06:50

ANo.1

セルの内容をテキストファイルに書き出し、エクセルから区切り文字「。」でインポート。
80文字で区切りが必要なセンテンスは、カット&ペーストで対応するのが早そうな気がします。

投稿日時 - 2012-04-10 18:19:39

あなたにオススメの質問