• ベストアンサー

セル内で改行された文字列をセル分割したい

以下のような一セル内で改行された文字列を改行ごとに分割して別シートへコピーしたいと考えています。 (以下は山田さんのレコード一行を記載しましたが下のセルに担当者のレコードが同様に続きます。)    A         B           C          D  ----------+---------------+------------+---------------+   担当者      日付         履歴        更新日  ----------+---------------+------------+---------------+  山田       2001/01/01    札幌支店    2005/01/01            2002/01/01    福岡支店    2005/04/01            2003/04/01    東京支店    2005/04/01  ----------+---------------+------------+---------------+ 上記を別シートへ以下のようにセル内容を分割してコピーしたいのです。    A         B            C           D  ----------+---------------+------------+---------------+   担当者     日付         履歴       更新日  ----------+---------------+------------+---------------+    山田     2001/01/01    札幌支店     2005/01/01  ----------+---------------+------------+---------------+    山田     2002/01/01    福岡支店     2005/04/01  ----------+---------------+------------+---------------+    山田     2003/04/01    東京支店     2005/04/01  ----------+---------------+------------+---------------+ 当方Excel2000を利用していますが上記の処理VBAマクロをどうか教えてください。

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

  • ベストアンサー
回答No.2

範囲を選択してgetDataで作業シートにデータを作ります。 ついでに、putDataで現在の選択セルからに書き出します。 読み書きともActiveSheetに対して行うので、別シートのボタンなどで行う場合は、シートを指定してください。 この場合、Application.ScreenUpdating を設定してあげると、画面の表示を切り替えをしないので見栄えがいいです。 Option Explicit Const workSheetName = "作業シート" '適当な作業シート Sub getData() Dim ws As Worksheet '作業用シート Dim cellA() As String Dim cellB() As String Dim cellC() As String Dim cellD() As String Dim r As Long Dim p As Long Dim i As Integer 'Sheets(元データシート名).Select '元データシートを指定する場合 With Selection 'チェック If .Columns.Count <> 4 Then MsgBox "選択幅が間違っています" Else '作業シートにデータを作成 p = 1 Set ws = Sheets(workSheetName) ws.Cells.Clear For r = .Row To .Row + .Rows.Count - 1 'セルごとのデータを取得(セル内改行(LF)で分ける) cellA = Split(Cells(r, .Column + 0), vbLf) cellB = Split(Cells(r, .Column + 1), vbLf) cellC = Split(Cells(r, .Column + 2), vbLf) cellD = Split(Cells(r, .Column + 3), vbLf) If UBound(cellB) <> -1 Then 'B列が空のセルならスキップ '一応データの有効範囲を合わせる ReDim Preserve cellA(0) ReDim Preserve cellC(UBound(cellB)) ReDim Preserve cellD(UBound(cellB)) 'bufに書き込む For i = 0 To UBound(cellB) If cellB(i) <> "" Then '改行だけの行もあるかもしれないので ws.Cells(p, 1) = cellA(0) 'A列はいつも先頭 ws.Cells(p, 2) = cellB(i) ws.Cells(p, 3) = cellC(i) ws.Cells(p, 4) = cellD(i) p = p + 1 End If Next End If Next End If End With End Sub Sub putData() Dim ws As Worksheet '作業用シート Dim lastRow As Long 'Sheets(出力データシート名).Select '出力データシートを指定する場合 With Sheets(workSheetName) If .Cells(1, 1) = "" Then MsgBox "データがありません" Else 'データ転送 lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row Range(Cells(Selection.Row, Selection.Column), Cells(Selection.Row + lastRow - 1, Selection.Column + 3)) = .Range(.Cells(1, 1), .Cells(lastRow, 4)).Value '.Cells.Clear '多重ペースト防止用に作業データを消す場合 End If End With End Sub

azuaz_001
質問者

お礼

お教えいただいた方法で意図する作業ができました。どうもありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

マクロを使わなくても 元シートのデータ範囲をコピーし(今回は質問の例データをコピーしてエクセルに貼り付けた)、新シートに貼り付ける。 山田の前のスペースが邪魔だったりするが、それのスペースを除いて (大げさにやるならTRIM関数があるが手作業でどうか) データー区切り位置ー次へースペースー完了で 担当者 日付 履歴 更新日 ----------+---------------+------------+---------------+ 山田 2001/1/1 札幌支店 2005/1/1 2002/1/1 福岡支店 2005/4/1 2003/4/1 東京支店 2005/4/1 のようになりましたよ。罫線のーーー+が実際どういうモノか不明だが。 山田を全行入れるには E列に=IF(A3="",E2,A3) と入れて下方向に式を複写する。その後A列にE列の「値}を複写して 式を消す。E列は列削除。

azuaz_001
質問者

お礼

ご回答ありがとうございます。 質問の表記で-------------+-----------と記載しているのは セルをイメージしました。A1に「担当者」A2に「山田」と記載しているイメージです。問題はB.C.D列のセル内容ですが前任者が一つのセルに改行を利用して入力しているため、内容を行に分割したいと考えています。件数が非常に多く手作業を排除した方法でVBAを利用した方法がわかる方にお教えいただきたく投稿させていただきました。

関連するQ&A

  • セル内で改行された文字列をセル分割したい

    以下のような一セル内で改行された文字列を改行ごとに分割して別シートへコピーするExcelVBAを作成したいと考えています。 (以下は山田さんのレコード一行を記載しましたが下のセルに担当者のレコードが同様に続きます。)    A         B           C          D  ----------+---------------+------------+---------------+   担当者      日付         履歴        更新日  ----------+---------------+------------+---------------+  山田       2001/01/01    札幌支店    2005/01/01            2002/01/01    福岡支店    2005/04/01            2003/04/01    東京支店    2005/04/01  ----------+---------------+------------+---------------+ 上記を別シートへ以下のようにセル内容を分割してコピーしたいのです。    A         B            C           D  ----------+---------------+------------+---------------+   担当者     日付         履歴       更新日  ----------+---------------+------------+---------------+    山田     2001/01/01    札幌支店     2005/01/01  ----------+---------------+------------+---------------+    山田     2002/01/01    福岡支店     2005/04/01  ----------+---------------+------------+---------------+    山田     2003/04/01    東京支店     2005/04/01  ----------+---------------+------------+---------------+ ※質問の表記で-------------+-----------と記載しているのは セルをイメージしました。A1に「担当者」A2に「山田」と記載しているイメージです。問題はB.C.D列のセル内容ですが前任者が一つのセルに改行を利用して入力しているため、内容を行に分割したいと考えています。件数が非常に多く手作業を排除した方法でVBAを利用した方法がわかる方にお教えいただきたく投稿させていただきました。 当方Excel2000を利用していますが上記の処理VBAマクロをどうか教えてください。

  • Excel マクロ VBA セル内で改行された文字列の分割

    はじめまして。 ExcelのVBA初心者で、ちょっと困っています。 (例) (1) セルA1に以下のような改行された文字列が入力されています。 【セルA1】 a aa aaa b bb bbb (2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。 【セルA2】 a aa aaa 【セルA3】 b bb bbb ※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。 そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。 Sub 分割() Dim A, B, C A = Split(Range("A1"), Chr(10)) B = 0 For Each C In A B = B + 1 Range("A2").Offset(B - 1, 0).Value = C Next End Sub ご教授いただけると助かります。 よろしくお願い致します。

  • VBAを使って一つのセル内で文書を改行

    現在VBAを使ってシート1の内容をシート2にコピーさせるもの作りました。↓ s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") これでさらにシート2にコピーしたないようは 同じセル内で改行したいのです。 いわばAlt+Enterキーみたいな機能なのですが・・・ つまり出力がシート1の指定セルの内容が 『新年あけましておめでとう』なのですが、シート2は 『新年あけまして  おめでとう』という内容を出力したいのですが、 改行のプログラムはわかりますでしょうか??m(_ _)m 簡単なプログラムでもいいのです。 もしわかれば他にも応用したいので、この例で行くと『て』という文字を判別して『て』という文字があったらその文字のあとを改行させたいのですができますでしょうか?

  • Excelのセル内改行について

    Excelのセル内に改行を含むデータが入力されています。 Excelでコピー&ペーストを行えば問題ないのですが、 メモ帳にペーストすると改行が ↑ と表示されてしまい、 1行になってしまいます。 メモ帳にペーストしてもセル内で改行されているように 改行したままで貼り付けを行うことは可能でしょうか? Sheet1:A1 あいうえおかきくけこ さしすせそ たちつてとなにぬねのはひふへほ メモ帳:貼り付け あいうえおかきくけこ↑さしすせそ↑たちつてとなにぬねのはひふへほ

  • Excelのセル内容の分割について

    以下のようにセルA1では家族の名前が”・”で区切られて入力してあり、セルB1ではそれに伴う”備考”が記入してあります。 A1                                      | B1 山田太郎・花子・次郎・三郎    | 備考文書 以上のような形式を一括で以下のように行を挿入し分割したいと考えています。 *備考は全てB1をコピーしたい。 山田太郎                             | 備考文書 山田花子                             | 備考文書 山田次郎                             | 備考文書 山田三郎                             | 備考文書 分かり難い説明で申し訳ありませんが宜しく御願い致します。

  • Excelでセルをコピーしたときに、「改行」もコピーされるのが困る

    Excelで、 セル(何か言葉が入っている。)を選択して、右クリック-[コピー]をして、 エディタ(例えば、メモ帳や秀丸)に貼り付けると、 選択したセルの中身の言葉が貼り付きますが、 改行も貼り付いてしまうので、 貼り付けた直後で改行されてしまいます。 実はシートの保護がかかっています。 シートの保護を解除しないで、 この改行を貼り付けないようにする(改行されないようにする)にはどうすればよいのでしょうか。 Excel2000です。

  • ExcelVBAで文字列編集後別シートのセルにコピーしたいのですが

    Excel2000を使用しています。作業中のブックのSheet1の後ろに別のファイルをコピーすることができました。そこから(コピーできたファイル)から文字列を編集してSheet1の特定のセルに貼り付けたいのですが、未熟者でできません。以下の操作をVBAマクロで実行したいのですが解る方教えてください。 (1)コピーしたファイルのA4セルにある文字列をMID(A4,6,10)で取り出しSheet1のB21セルに貼り付ける。(日付) (2)(1)が日付なのでそれから曜日を取得し、Sheet1のE21に表示する。 (3)コピーしたファイルのA5セルにある文字列をMID(A5,8,1)で取り出し(一桁の数字)1の時は福岡、2の時は佐賀、3の時は長崎、4の時は熊本、5の時は大分、6の時は宮崎、7の時は鹿児島、8の時は沖縄とSheet1のB24セルに表示する。 (4)コピーしたファイルのA6セルにある文字列をMID(A6,8,2)で取り出し(二桁までの数字)その後ろに"本"をつけてSheet1のB24セルに表示するB28に表示する。例)12本 (5)コピーしたファイルのA2セルにある文字列をMIDB(A2,20,6)で取り出し(時刻)Sheet1のE30セルに表示させる。 (6)コピーしたファイルのA12セルにある文字列をMID(A12,11,5)で取り出し(時刻)Sheet1のE34セルに表示させる。 (7)(6)の15分前の時刻をE36セルに表示させる。 よろしくお願いいたします。

  • Excel 特定のセルだけEnterでセル内改行

    タイトル通りのことなのですが、VBA等を駆使してできないか悩んでいます Excelのセル内改行は通常Alt+Enterなのですが、 使っているシートの一つのセルだけ複数行入れるような大きな所があります。 他のセルでは問題ないのですがここの入力時では、 いつもAltを押しながらでないと改行できない煩わしさが募りまして、 「このセル内に限り」Enterキーだけで改行できるようにしたいのです。 条件としてはあくまでこのセルのみで、形を崩さずにできることが望ましいです。 この入力セルは他シートから参照されているため 複数行のセルに分割したり、テキストボックスに置き換えることは難しいです 色々探した挙句、Application.MoveAfterReturn など VBAを駆使して考えてみたのですが 手詰まりになってしまいました。 何かできる方法はありますでしょうか?

  • EXCEL関数 セル内の改行を認識できますか?

    いつも大変お世話になっております。 一度はあきらめかけたのですが、もし方法があったら教えてください。 セルの中に以下のような入力があります。 10/1-5 10/6-10 上記はひとつのセルの中で改行されています。 これを以下のように分解することは可能でしょうか。 2008/10/1 2008/10/5 2008/10/6 2008/10/10 今度は4つのセルに分かれます。 関数でなんとかならないかと思ったのですが、どうしても改行がダメのようです。 (認識しません) またセルの中には4つの日付があるとは限らず、ひとつの場合もあります。 10/20 この場合は 2008/10/20 2008/10/20 となります。。。やはり無理でしょうか。

  • VBA(エクセルで改行したもの→改行なしでコピー)

    VBAでシート1の指定セルの内容をシート2の指定セルにコピーするプログラムをつくりました。 a.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") こんな感じです。 これだとシート1で1つのセル内で改行してると、そのままの状態でシート2にコピーされてしまいます。 これをシート1では改行されていますが、シート2では改行なしで出力したいのです。 こんなプログラムを組むことは可能なのでしょうか? 知っている方がいましたらお願いします。知恵を貸してください。 本当に困っています。

専門家に質問してみよう