- ベストアンサー
Excelで同一セル内に入力されているデータを他のセルに分割したい
- エクセルで同一セル内に入力されているデータを他のセルに分割する方法を紹介します。
- 入力されたデータがセル内改行で区切られている場合、それぞれのデータを挿入して分割することができます。
- マクロの編集が難しい場合でも、OKWaveなどの情報を参考にすることで解決することができます。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
#04です。B列、C列の値をコピーするようにしました Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range ActiveSheet.Copy after:=ActiveSheet For idx = Range("A65536").End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, "A"), Chr(10)) > 0 Then wkStr = Split(Cells(idx, "A").Value, Chr(10)) Set rng = Cells(idx, "B") For cnt = UBound(wkStr) To 0 Step -1 Cells(idx, "A").Value = wkStr(cnt) Cells(idx, "B").Value = rng.Value Cells(idx, "C").Value = rng.Offset(0, 1).Value If cnt > 0 Then Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown End If Next cnt End If Next idx End Sub >何度も何度も申し訳ありませんが でもね、こんな風に追加で質問を小出しにされるのはいやですね。 これ以上変更があるならご別スレにしてください。それなら回答します
その他の回答 (7)
- zap35
- ベストアンサー率44% (1383/3079)
#04です。B列も行を空けるようにしました。 >A列全部が対象になってたりするとありがたいのですが そうなっています。A列の最終行まで処理します Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String ActiveSheet.Copy after:=ActiveSheet For idx = Range("A65536").End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, "A"), Chr(10)) > 0 Then wkStr = Split(Cells(idx, "A").Value, Chr(10)) For cnt = UBound(wkStr) To 0 Step -1 Cells(idx, "A").Value = wkStr(cnt) If cnt > 0 Then Cells(idx, "A").Insert shift:=xlDown End If Next cnt Cells(idx + 1, "B").Resize(UBound(wkStr), 1).Insert shift:=xlDown End If Next idx End Sub
お礼
ありがとうございます!! ちなみにC以降からも増やすとすると、どこをどういじればいいんでしょうか? 参考までにC行も増えるようにしてもらえるとありがたいです。 何度も何度も申し訳ありませんが、宜しくお願い致します。
補足
お礼に書いたものプラス、B列に入っているデータを、A列が増えた分、セルを増やした際、増やしたセルにコピーすることもできますか? たとえばA1のセルが3つ増えたら、B1のセルに入っていた1という数字を増えた分(B1~B3)にコピーする、とか…。 バラバラ追加で要望が出てしまい、すいません。 宜しくお願い致します。
- maron--5
- ベストアンサー率36% (321/877)
◆関数のよる方法です ◆A1のデータが、B1から右に表示されます B1=TRIM(INDEX(MID(SUBSTITUTE($A1,CHAR(10),REPT(" ",100)),ROW($1:$10)*100-99,100),COLUMN(A1))) ★右にコピー
- sakuuuuu
- ベストアンサー率32% (67/209)
No.3です。 >1 改行コードをはずす。 > ctrl+h で置換ボックスをあけ、 > 「検索する文字列」にctrl+j > 「置換後の文字列」にspaceを設定し置換する。 > → 表示上は何も変わらないが置換はされている。 すみません、「置換後の文字列」でspaceでできなければ カンマに置換して、区切り位置指定はカンマ区切りでやってみてください。 (どうやらスペースだとうまくいかないケースもありそうなので) ちなみに、 この置換後の文字列は、「区切り位置」の区切り位置を指定する 文字となります。 セル内で使用していない文字を設定してください。 (セル内で区切り位置の文字列を使用しているとそこでセルが分割されてしまいます) この「区切り位置」変更の手法は便利でよく使うので 覚えておいたほうが良いと思います。
- zap35
- ベストアンサー率44% (1383/3079)
マクロサンプルです シートのコピーを作成してから実行するようにしています。 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String ActiveSheet.Copy after:=ActiveSheet For idx = Range("A65536").End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, "A"), Chr(10)) > 0 Then wkStr = Split(Cells(idx, "A").Value, Chr(10)) cnt = UBound(wkStr) Cells(idx, "A").Value = wkStr(cnt) Do cnt = cnt - 1 Cells(idx, "A").Insert shift:=xlDown Cells(idx, "A").Value = wkStr(cnt) Loop Until cnt = 0 End If Next idx End Sub
お礼
これです。 思っていたとおりのことができました。 これにもうひとつ追加でお願いしたいのですが、例えばA1に対応する値がB1に入っていた場合、A1から増えたセルの分だけ、Bのセルも増やすことはできますか? A1にデータが5行入っていたら、セルが5個に増えますよね。 その個数(セル×5コ)だけ、Bも増えたりするとありがたいのですが…。 また、このマクロはA1~A100までのみが対象でしょうか? A列全部が対象になってたりするとありがたいのですが。。。。
- sakuuuuu
- ベストアンサー率32% (67/209)
2ステップでできます。 1 改行コードをはずす 2 区切り位置の変更 1 改行コードをはずす。 ctrl+h で置換ボックスをあけ、 「検索する文字列」にctrl+j 「置換後の文字列」にspaceを設定し置換する。 → 表示上は何も変わらないが置換はされている。 参照 セル内の改行を検索/置換する http://pc.nikkeibp.co.jp/article/NPC/20060215/229489/ 2 区切り位置の変更 a列全体を選択、メニューから「データ」→「区切り位置」を選択 「区切り位置指定ウィザード」が表示されるので 「スペースによって右または左に揃えられた固定長フィールドのデータ」 →「次へ」→「次へ」→「完了」 これでOK!
- keirika
- ベストアンサー率42% (279/658)
Sub Sample() Dim i As Integer Dim j As Integer Dim Data As Variant For i = 1 To 100 Data = Split(Cells(i, 1), Chr(10)) For j = 0 To UBound(Data) Cells(i, j + 2) = Data(j) Next j Next i End Sub でどうでしょう。
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法は如何でしょうか。 (1)A1:A100を選択→コピーしてワードに貼り付け (2)ワードの置換で検索文字列欄に「任意指定の行区切り」、置換文字列欄に「段落記号」を特殊文字から選択→すべて置換 (3)置換後の文字列を選択→コピー→エクセルの別シートに形式を選択して貼り付け→テキストを選択→OK
お礼
>zap35さま 本当にありがとうございました。 また質問がある際はおっしゃるとおり別スレにいたします。 心から感謝いたします!