• ベストアンサー

行と列の入れ替え

エクセルの行と列の入れ替えで悩んでいます。 教えてください。 下記の様なデータが500人分あったとして 山田太郎 京都府 xxx@xxx.co.jp 東京花子 東京都 xxxxx@xxx.com 大阪次郎 大阪府 xxxxxxx@xxxxx.ne.jp 次のようにするにはどうしたらいいのでしょうか? 山田太郎 京都府 xxx@xxx.co.jp 東京花子 東京都 xxxxx@xxx.com 大阪次郎 大阪府 xxxxxxx@xxxxx.ne.jp 悩んでいます、みなさん教えてください。

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

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

マクロでよければ、B1 から書き出すように作りました。 シートモジュールか標準モジュールでお使いください。 Sub TransPosePrc()  Dim DataArray  Dim TransData() As Variant  Dim i As Long, j As Long  DataArray = Range("A1", Range("A65536").End(xlUp)).Value  If UBound(DataArray, 1) + 1 Mod 4 > 255 Then    'B列から出力するなら256より1つ少ない    MsgBox "データを切り分けてください", 16    Exit Sub  End If  ReDim TransData(1 To 3, 1 To 1)  j = 1  For i = LBound(DataArray, 1) To UBound(DataArray, 1) Step 4   ReDim Preserve TransData(1 To 3, 1 To j)   TransData(1, j) = DataArray(i, 1)   TransData(2, j) = DataArray(i + 1, 1)   TransData(3, j) = DataArray(i + 2, 1)   j = j + 1  Next i  Range("B1").Resize(UBound(TransData, 1), 3).Value = TransData() End Sub

sakurako0317
質問者

お礼

ありがとうございます。 なるほど、大変参考になりました。

その他の回答 (3)

  • telescope
  • ベストアンサー率54% (1069/1958)
回答No.3

A1セルからデータが入力されているとして、 B1セルに =INDIRECT("A"&ROW(B1)*4-3) C1セルに =INDIRECT("A"&ROW(C1)*4-2) D1セルに =INDIRECT("A"&ROW(D1)*4-1) 下方向にフィルします。 4行ごとにデータが入っているので、row関数で行番号を取得して4を掛けます。 INDIRECT関数は、セルの内容を返します。 A1セルがタイトルで、A2セルからデータなら =INDIRECT("A"&(ROW(B2)-1)*4-2)

sakurako0317
質問者

お礼

ありがとうございます。 試してみます。

  • Masa1977
  • ベストアンサー率36% (44/119)
回答No.2

あんまりきれいな方法じゃありませんが、以下の方法はどうでしょうか? 注・方法が駄目でデータを壊すとアレなので、データのバックアップを取ってから試してくださいね <前提> 全てのデータがA列記述されていて n+1行目に氏名、 n+2行目に住所、 n+3行目にメールアドレス、 n+4行目に空白行、 という繰り返しになっている。 B~D列が空白になっている。 <step1> セルB1に =IF(MOD(ROW(B1),4)=1,A1,"") と入力。 セルC1に =IF(MOD(ROW(C1),4)=1,A2,"") と入力。 せるD1に =IF(MOD(ROW(D1),4)=1,A3,"") と入力。 <step2> セルB1からD1を選択し、データの最終行まで纏めてコピー。 <step3> シート全体をコピーして、別のシートに形式を選択して貼り付けるで「値」のみを貼り付ける。 <step4> A列を削除 <step5> オートフィルタで空白以外を表示させる・・・・・って感じでどうかなぁ

sakurako0317
質問者

お礼

ありがとうございます。 試してみます。m(__)m

  • iiitttooo
  • ベストアンサー率26% (83/308)
回答No.1

おはようございます。 入れ替える範囲(と言っても全てだと思いますが)を反転させます。 『編集』『コピー』と進んでください。 『貼り付け』のときに『形式を選択して貼り付ける』を選ぶと『行列を変換する』にチェックを入れてください。 ただし、入れ替え得る限度があります。

sakurako0317
質問者

お礼

ありがとうございます。 しかしながら、その方法では、単に行と列が入れ替わるだけなので、 きちんとした一覧にするためには、移動させる手作業が発生しますよね? それも省きたいのです。。。

関連するQ&A