• ベストアンサー

【EXCEL】複数行を1行に

エクセルにまだまだ不慣れなもので、質問させてください。 下の図《1》のようなデータが大量にあります。CSV形式に出力したいのですが《2》のように並べ替えなければいけませんよね?(←ここら変の知識も未熟なものですみません。。) 《1》のようなデータを《2》のような並びにする事は可能でしょうか? ちなみに《1》のようなデータは、一行ずつ空白行をはさみ、下まで何百件も並んでいます。また、1データの行数もランダムです。 何か良い方法がありましたら是非ご教授下さい。よろしくお願い致します。 《1》 A  B   C   D   E   F 1 ●● 2 ■■ 3 ▲▲ 4 ◎◎ 《2》 A   B  C  D  E   F 1 ●● ■■ ▲▲ ◎◎ 2 3 4

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

  • ベストアンサー
  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.6

ちょっとかわった方法ですが… まずそのファイルを「CSV(カンマ区切り)形式」に保存します。 保存したファイルを正規表現の使えるテキストエディタで開きます。 置換で 「\n\n」→「丸い卵も切りようで四角」 「\n」→「,」 「丸い卵も切りようで四角」→「\n」 その後、テキストエディタを閉じます。 そのファイルをExcelで読み込めば、目指す形式に並び替えられているはずです。 ただし、ExcelでCSVファイルを読み込むときには時間がかかる場合がありますので、あわてずにやってみてください。

siscooo
質問者

お礼

色々な方法があるのですね!とても参考になります。どうもありがとう御座いました!

その他の回答 (7)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。Wendy02です。 使わないかもしれませんが、マクロで考えてみました。基本的なエラー処理は含めています。 ●● ■■ ▲▲ ~改行~ ○○ □□ △△ 以下のようにCSVに出力される   A B C D E F   1 ● ● ■ ■ ▲ ▲ 2 ○ ○ □ □ △ △ あくまでも、2列が条件で、変換して256列の単位を越えるものは、出力されません。また、保存される、CSVのファイル名は、元のブックの名称が使用されます。 'なるべく標準モジュールに登録してください。 '---------------------------------------------------------- 'Option Explicit Sub TransposedCSVOut()  '2列-数行をまとめて、横に変換して出力する  Dim tmpSht As Worksheet  Dim AcSht As Worksheet  Dim myRng As Range  Dim myArea As Range  Dim i As Long, j As Integer, k As Integer  Dim Ar As Range, c As Range  Dim SaveName As String    '保存名は、現在のブックの名前を使用します。  'ただし、同名のCSVファイルがある場合は、枝番がつきます。  With ActiveWorkbook   SaveName = Mid$(.Name, 1, InStrRev(.Name, ".") - 1)  End With    Application.ScreenUpdating = False    Set AcSht = ActiveSheet  With AcSht   '2列の設定は、Resize(,2)   Set myRng = .Range("A1", .Range("A65536").End(xlUp)).Resize(, 2)  End With  '定数すべて選択  Set myArea = myRng.SpecialCells(xlCellTypeConstants, 23)    With ActiveWorkbook   Set tmpSht = .Worksheets.Add(After:=.Sheets(.Worksheets.Count))  End With    i = 1  '注意:空白行のない場合は、途中で中断されます。    For Each Ar In myArea.Areas      With Ar    '行が、128行以上では、縦横変換で256列には収まらない    If Ar.Rows.Count > 128 Then     If MsgBox("変換時に256列越えていますので、排出されません。" & vbCrLf & _      "OK =スキップして継続, Cancel = 中止", vbInformation + vbOKCancel + vbDefaultButton2) = vbCancel Then      Application.DisplayAlerts = False      tmpSht.Delete      SaveName = ""      Application.DisplayAlerts = True      GoTo Quit     End If    Else     If WorksheetFunction.CountA(.Cells) > 0 Then      For Each c In Ar.Cells       k = k + 1       c.Copy tmpSht.Cells(i, k)      Next c      i = i + 1     End If    End If   End With   k = 0  Next Ar  Application.CutCopyMode = False    If i < 2 Then   Application.DisplayAlerts = False   tmpSht.Delete   SaveName = ""   Application.DisplayAlerts = True   GoTo Quit  End If  tmpSht.Move    '枝番付け  Do While Dir(SaveName & ".csv") <> ""   If InStrRev(SaveName, "_") > 0 Then    SaveName = Mid$(SaveName, 1, InStrRev(SaveName, "_") - 1)   End If   j = j + 1   SaveName = SaveName & "_" & CStr(j)  Loop    'CSV 保存  ActiveWorkbook.SaveAs SaveName, FileFormat:=xlCSV  ActiveWorkbook.Close False Quit:  AcSht.Select  Application.ScreenUpdating = True    If SaveName <> "" Then   MsgBox "このブックと同じフォルダに " & SaveName & ".csv で、保存されました。", vbInformation  Else   MsgBox "出力に失敗しました。", vbCritical  End If    Set Ar = Nothing  Set tmpSht = Nothing  Set myArea = Nothing  Set myRng = Nothing  Set AcSht = Nothing End Sub '----------------------------------------------------------

siscooo
質問者

お礼

マクロはこれから勉強していこうと思っております。説明して頂きましてどうもありがとう御座いました!

回答No.7

OFFSET関数をつかってみてはいかがでしょうか?     A  B C D  E  F  G  H  1  ●●   1  1  (1) (2) (3) (4) 2  ■■   2 (5)  ・   ・   ・   ・ 3  ▲▲   3  ・   ・   ・   ・   ・ 4  ◆◆ 5   6  ○○ 7  □□ 8  △△ 9  ◇◇ 10 (1)=OFFSET($A$1,D1-1,0,1,1) (2)=OFFSET($A$1,D1,0,1,1) (3)=OFFSET($A$1,D1+1,0,1,1) (4)=OFFSET($A$1,D1+2,0,1,1) (5)=D1+5 ※全角数値が行番号、半角数字が実数値、カッコ数字が関数です。 C列はただの通し番号です。 D列は開始行番号です。今回は5行(データ4行+改行)1セットなので(5)の式で上の行+5を行います。 E~H列で実際に並び替えを行っています。 (1)~(5)の式を入力したら、あとはドラッグでそのまま下にコピーをします。(・の部分) すべて値に貼り付けなおしてから、データとして必要のないD列(開始行番号)を削除してください。 ご参考になれば幸いです。

  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.5

1です。 状況がわかりました。 住所録の場合、最初にExcelで作成するときに、並びを工夫しておくと良いですね。   氏名   住所   電話   家族 1 佐藤   東京都  090--  たかし 2 上田   兵庫県  080--  まゆみ …みたいにしてはどうでしょう。 そうすればCSVで吐き出して、はがきソフトに読み込むのも簡単だと思います。

siscooo
質問者

補足

申し訳ございません!最初から質問の仕方が悪かったようです。 >> 氏名   住所   電話   家族 1 佐藤   東京都  090--  たかし 2 上田   兵庫県  080--  まゆみ …みたいにしてはどうでしょう。 そうなんです。実にこのようにしたいという質問だったのです。改行で区切られたデータを一行カンマ区切りにして出力したかったのです。 ●● ■■ ▲▲ ~改行~ ○○ □□ △△ のようなテキストを ●●, ■■,▲▲ ○○,□□,△△ のような並びにすることは可能ですか?という意味でした。 解り難かったようでごめんなさい!

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.4

CSV形式への変換については他の方が回答されているのでさておき B2 B3 B4 B5 ・ ・ ・ と順に下へ並ぶデーターを B1・C1・D1・E1… と横方向へ続くデーターに並べ替えたい場合について回答しますね まず、先に他の方が述べられているように Excelでの横方向のデーターの羅列は 比較的件数が少なく設定されています。(AからIVまでの256件) それに対し縦は65536件データーを置けるようです、 なので、Bのラインから置きだす場合は255件しか置けないので 縦に並んだデーターから255件選んでコピーし 置きたい位置の右端を(この場合だとB1とかB2と加点)選択した後 そこの上で右クリックからプルダウンメニューを出して 「形式を選択して貼り付け」を選び 出てきたメニューから 右下隅の「行列を入れ替える(E)」にチェックを入れて 「OK」ボタンを押すと 縦並びが横並びに変換されて貼り付けられます。 この際にデーターの入っていないCの列のC1に1、 C2に 「=IF(MOD(C1,255)=0,1,C1+1)」 と書いた上 C2をコピーしてC65536までコピ-してみてください 1から255個までデーター個数をカウントしてくれるはずです お役に立てましたでしょうか?

noname#204879
noname#204879
回答No.3

》 《1》のようなデータを《2》のような並びにする事は可能でしょうか? 可能です。 でも、マクロがお出来になる方ならお茶の子だろうけど、それが出来ない私なら次のようにするかと。面倒なので、もっと簡単でスマートな方法があれば私も知りたいところ。 1.先頭行に1行の空白行を挿入して、データが2行目から始まることにする。   つまり、データはセル A2、A3、A4、… にあり、データの区切りとしての1行の空   白行が所々にある。 2.セル B1 に式 =A2="" を入力して、此れを下方に(列Aの下端のデータと同じ行ま   で)ズズーッと複写 3.セル C2 に式 =IF(A2="","",IF(A1="",A2,C1&","&A2)) を入力して、此れを下方に   (列Aの下端のデータと同じ行まで)ズズーッと複写 4.列B、C全体を選択して、[コピー]→[値の貼り付け]を実行 5.セル B1 のみを選択 6.[データ]→[フィルタ]→[オートフィルタ]を実行 7.セル B1 のオートフィルタ矢印(▼)をクリックして、FALSE を選択 8.セル B2 を選択して、Ctrlキーおよび Shiftキーを抑えたままで、下向き矢印(↓)   キーをチョーン 9.[編集]→[行の削除]を実行して、表示されていたデータを全削除 10.ステップ6に同じ 11.(ステップ1で挿入した)先頭行を削除 12.列A、Bを削除 13.列Aを選択 14.[データ]→[区切り位置]を実行 15.“カンマやタブなどの…”に目玉を入れて[次へ]をクリック 16.“カンマ”にチェック入れ 17.Enterキーを2回叩き付け 以上の件で再質問があれば、ステップ番号および疑問点を示されたい。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >CSV形式に出力したいのですが《2》のように並べ替えなければいけませんよね? 逆の質問が時々あります。その質問者の方々は、みなさん、CSV形式のファイルだと思っていますが、似ていて違うものです。それは、CSV形式のファイルではありません。データベース・ソフトでないと出来ません。標準では、Excelでは、256列でおしまいになってしまうからです。

  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.1

はじめまして CSVにするからといって、並べ方を変える必要はありません。 保存するときに、CSV形式で保存すればよいことです。 これで解決にはならないでしょうか?

siscooo
質問者

補足

ご回答ありがとうございます。 住所録など、データの移し変えをする際、CSVではき出すと ○山○子,123-4567,東京都○○区,03-1234-5678 ○田○夫,456-7890,北海道○○市,011-123-4567 のように表示されるのでこのような並べ方にしなければならないと思っていました。

関連するQ&A

  • エクセル:複数セルからの参照

    お世話になります。 A,B,C列にデータが入っています。 D,E,F列に参照のためのデータがあります。 A,B,C列はそれぞれD,E,F列に対応しています。 A,B,C列と同じ並びのデータが入っている行をD,E,F列から探し、その隣のG列の値をH列に返す。 D,E,F列の並びが重複する行はありません。 A,D列は場所の名前、B,C,E,F列には数字が入っている。 例) A1に事務室 B1に20 C1に3 が入っているとする。 D/E/F列が 事務室/20/3 の並びになっているのが10行目の場合、H1にG10のセルの値を返す。 この場合、H列にはどんな計算式を入れておけばよいのでしょうか? A,B,C列と同じ並びのデータがD,E,F列で見つからない場合は空白をH列に返す。 ちなみにD/E/F列が 事務室/20/3 の並びになっている行は10行目しかないです。 よろしくお願いします。

  • Excelで複数行を1行にするマクロについて

    Excel2000で3行を繰り返し、1つの行にまとめていくマクロの書き方についてご教授ください。 例えば下記のような並びの時、 A B C D E F G H I ..... マクロを使って、 A B C D E F G H I ...... のようにしたいと考えています。

  • エクセルで1行にまとめられたCSVデータを複数行

    エクセルを使ってCSVファイルのデータを参照して複数行にまたがる表に反映させたいのですがうまくいきません。   A B C D E  1 あ い う え お 2 か き く け こ 上記のように1行で1件分のデータがCSVであります。 このデータを   A  B  C  D  E 1 あ う お 2 い え  3 か く こ 4 き け 上記のように参照させたいのです。 数件ならば1件1件を参照させれば表は完成するのですが、数千件あるのでできません。 1パターン作って、あとは連続フィルで出来れば助かります。 説明が難しく、わかりづらいかと思いますがお力をお貸しください。 よろしくお願いいたします。

  • 複数列を一列にする方法

    Excelで複数列に渡るデータを1列にまとめたいのですが、カット&ペースト以外によい方法はありませんでしょうか。 例えば表にあるセルA1-A10、B1-B10、C1-C10、D1-D10、E1-E10のデータを F列のF1から下へ一列に並べるといった感じです。 A1-A10→F1-F10 B1-B10→F11-F20 C1-C10→F21-F30 D1-D10→F31-F40 E1-E10→F41-F50 よろしくお願いします。

  • エクセル、任意の「行」だけを抽出したい。

    こんなことできますか? A1:F100のセル内にランダムに数字が入っています。 質問1) この中から 1行目→3行目→5行目と一つ飛ばしで入っているデータを抽出してH1:M100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 A1-B1-C1-D1-E1-F1 A2-B2-C2-D2-E2-F2 A3-B3-C3-D3-E3-F3 A4-B4-C4-D4-E4-F4 A5-B5-C5-D5-E5-F5 A6-B6-C6-D6-E6-F6 A7-B7-C7-D7-E7-F7 ・・・ A100-B100-C100-D100-E100-F100 の中から A1-B1-C1-D1-E1-F1 A3-B3-C3-D3-E3-F3 A5-B5-C5-D5-E5-F5 ・・・ を抽出して H1-I1-J1-K1-L1-M1 ・・・ H100-I100-J100-K100-L100-M100 の範囲内に表示させたいです。 質問2) 同様に、 1行目→4行目→7行目と二つ飛ばしで入っているデータを抽出してO1:T100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 ※ 説明がわかりにくいかもしれませんが、よろしくお願いします。

  • EXCEL関数 複数セルのデータと1つのセルにまとめたい

    先日アンケートを取りました。 質問に対し、回答は1~5の選択肢のうち、いくつでも選ぶ方式(複数回答)でした。 この回答データをEXCELで入力済みなのですが、ここで問題が発生してます。 EXCELは、 A列が回答者氏名 B,C,D,E,F列が回答(選択肢1~5のいずれか) となっています。 例えば、太郎さんが2,4,5と回答した場合には、 A列:太郎、B:2、C:4、D:5、E:空白、F:空白 になっています。 これを次のようにしたいのですが、何か方法はありますか? A列:太郎、G列:2 4 5

  • Awkで固定行ずつ行列転置

    A B C D E F G H . . . と、1列にデータが並んだテキストファイルの中身を A B C D E F G H ... のように4列ずつに区切って並べ替えるawkスクリプトを 書きたいのですが、どのように書けばいいでしょうか? もとのデータの行数は4の倍数とは限らないので、 並べ替え後の最後の行はフィールドが4つ未満になるかもしれません。

  • Excel教えてください。

    いつもお世話になってます。 |A |B |C |D |E | 1|(1) |(2) |(3) |(4) |(5) | 2|(6) |(7) |(8) |(9) |(10) | のように列に入ってるデータを |A | 1|(1) | 2|(2) | 3|(3) | 5|(4) | のように一行に並べたいのですが、何か簡単に出来る方法がありましたら教えてください。 Win.95 Excel 97

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • csvデータの列の入れ替えができるソフト

    次のようなCSVデータがあります a,b,c,d,e 11,12,13,14,15 21,22,23,24,25 31,32,33,34,35 上記のc列を1番目、次に、b,a,e,dのように列の順番を変えたいと 思っています 変換後は下記のイメージです c,b,a,e,d, 13,12,11,15,14 23,22,21,25,24 33,32,31,35,34 これはイメージであり、CSVの列数は300列程あります a,b,c,d,eの列の並びを指定することにより、全てのデータ が並び替えれるソフトをご存知でしたら教えていただけませんか よろしくお願いします。

専門家に質問してみよう