• ベストアンサー

【EXCEL】複数行を1行に

Wendy02の回答

  • 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
質問者

お礼

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

関連する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の列の並びを指定することにより、全てのデータ が並び替えれるソフトをご存知でしたら教えていただけませんか よろしくお願いします。