• ベストアンサー

エクセル データの並べ替え

名前:山田 姓:男 ・ ・ 年齢:20才 名前:吉田 姓:女 ・ ・ 年齢:30才 ・ ・ ・ このようなデータを次のように並べ替えたいのですが、 簡単に行える方法はないでしょうか?   A列     B列          F列 名前:山田  姓:男   ・  ・  年齢:20才 名前:吉田  姓:女   ・  ・  年齢:30才 ・ ・ ・

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 仮にデータがA列にあるとして、とりあえずB~G列に参照します。 B1に、 =INDEX($A:$A,(ROW(A1)-1)*6+COLUMN(A1)) と入力して、G1までコピー、 さらにB1:G1を下の行にコピーします。 そうしたら、コピーしたB1:Gxを選択してコピー、 同じ場所にメニューの[編集]→[形式を選択して貼り付け]の[値]貼り付けします。 あとは、必要に応じて元のA列を削除して1列ずらして下さい。

VitaminBB
質問者

お礼

回答ありがとうございます。 うまく行きました。

その他の回答 (5)

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.6

「簡単に」を重視するのであればこれでしょうね。 並び替えをしたいシートを表示して、このマクロ(並び替え)を実行すると、後は勝手にやってくれますよ。 A列に入力なしの行が10行続くと終了するようになります。 あとはこれをベースに多少アレンジを加えるといいと思いますよ。 Option Explicit Public Sub 並び替え() Dim iInRow As Integer Dim iOutRow As Integer Dim iInterval As Integer iInRow = 1 iOutRow = 0 iInterval = 0 With ActiveSheet While iInterval <= 10 If InStr(1, .Cells(iInRow, 1), "名前") <> 0 Then iOutRow = iOutRow + 1 Call Makelist(iInRow, iOutRow) iInterval = 0 End If iInRow = iInRow + 1 iInterval = iInterval + 1 Wend End With End Sub Private Sub Makelist(iInRow As Integer, iOutRow As Integer) Dim iOutCol As Integer iOutCol = 1 With ActiveSheet While Len(Trim(.Cells(iInRow, 1))) <> 0 If iInRow <> iOutRow Then .Cells(iOutRow, iOutCol) = .Cells(iInRow, 1) .Cells(iInRow, 1).ClearContents End If iInRow = iInRow + 1 iOutCol = iOutCol + 1 Wend End With End Sub

VitaminBB
質問者

お礼

わざわざマクロを作っていただき、ありがとうございました。 今回は自分が知らないだけで、エクセルの関数を 駆使するば出来るのかもしれないと思い質問しました。 思ったとおり、関数の工夫でもやれることが分かりました。

回答No.5

基本的には他の方が書かれているように、「コピー」→「形式を選択してコピー」→「行列を入れ替える」にチェック。という手順しかない(自動的にやろうとするとマクロでないと無理かと)。 でも、1レコードずつやるのは大変なので、もうちょっと楽にするテクニックで、 A列に上記のデータがあるとします。 B1セルに =LEFT(A1,FIND(":",A1,1)-1) と入力して、データの数だけ下にコピーします。 名前、性別、年齢などの項目が取り出せてると思うので、 A,B列を選んで、メニューバーから「データ」→「フィルタ」→「オートフィルタ」を選びます。 1行目のセルに▼マークがついたと思います。B列のこのマークをクリックすると、選択肢が現れますので、名前を選びます。 すると名前だけのデータが並びます。 ここで、A列の名前だけのデータを範囲指定して、、「コピー」→「形式を選択してコピー」→「行列を入れ替える」をやれば、名前は一度にできます。 で、あとは、B列の選択肢を性別、年齢・・などに変えて同じことやれば、項目の数だけコピーする操作で並び替えができます。

VitaminBB
質問者

お礼

回答ありがとうございます。 確かに回答の方法で出来ました。

  • a987654
  • ベストアンサー率26% (112/415)
回答No.4

基本的には、no1,no2の方の答えられている 方法ですが、件数が多くて大変であれば登録マクロを 使われたらいかがですか?方法は下記を参考に、 1.マクロ登録を2名分行う。 2.マクロ修正にて、1名分の処理をFOR-NEXTで囲む 3.2名目のプログラムを参考にしてFOR増分値、最終値   FOR内でのセル値の変更等を追記する 4.2名目のプログラム行を削除 あとはマクロを起動すれば、自動的に終了します。   

VitaminBB
質問者

お礼

回答ありがとうございます。

回答No.2

こんにちは。 「名前:山田」~「年齢:20才」をコピーして、貼り付けたいセルで右クリック→形式を選択して貼り付け→"行列を入れ替える"にチェック→OK を繰り返せば、地道ですが確実にできます。 ご参考になれば幸いです。

VitaminBB
質問者

お礼

回答ありがとうございます。 質問の仕方がまずくてすみません。 回答のようにするのが大変なので、 もう少しうまくやれる方法はないかという質問です。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

対象のデータ行単位になっていれば、次の方法で可能です。 ・対象のセル範囲をドラッグし右クリック→コピー ・移動先で右クリック→形式を選択して貼り付け→行列を入れ替えをチェックオン

VitaminBB
質問者

お礼

回答ありがとうございます。

関連するQ&A