- 締切済み
エクセル 行列並び替えがわかりません
エクセルはSUM、AVEREGE等程度の関数を使いこなす程度のスキルしかもっていない為、データを以下の様に並び替えたいのですが、どうやったら良いのかわかりません。(過去ログからもうまく探せませんでした) どなたか、御協力いただけないでしょうか? 宜しくお願い致します。 (並び替え前データ) A B 1 相田太郎 391 2 相田太郎 485 3 相田太郎 928 4 飯田壮太 501 5 飯田壮太 456 6 石川五郎 388 7 石川五郎 484 8 石川五郎 761 ・・・・・以下400行くらいデータが続く。 (並び替え後データ) A B C D 1 相田太郎 391 485 928 2 飯田壮太 501 456 3 石川五郎 388 484 761 ・・・・・続く。。。。。 うまく表現できなくて申し訳ありません。 一人づつに2個、あるいは3個データを持っています。 そのデータを一人づつ縦列から横行に移したいのです。 どうかお願い致します。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
初心者には関数では難しい問題です。 特に#5のご回答の式がわかれば関数は卒業級です。 それよりは易しいと思うが。 本当はVBA向きの問題で、VBAでの処理がお勧めですが、VBAコードを見せてもわからないといわれそうだし。 例データ 相田太郎 391 相田太郎 485 相田太郎 928 飯田壮太 501 飯田壮太 456 石川五郎 388 石川五郎 484 石川五郎 761 この前提は、同じ人は行が集っている、飛び離れて現れない。 出現頻度は3回あり2回ありでもかまわない。 ーーー この質問には2つの解決点があって (1)重複なく名前を並べる方法 (2)縦のものを横にならべる方法 このうち(2)を中心に以下に載せる F2:F5に 相田太郎 飯田壮太 石川五郎 駕できた(上記(1))とする。 G2に =IF(COLUMN()>COUNTIF($A$2:$A$10,$F2)+6,"",OFFSET($A$2,MATCH($F2,$A$2:$A$10,0)-1+COLUMN()-6-1,1)) と入れてG2をG4まで、G2:G4をJ2:J4まで式を複写する。(同一人4回出現がMAXの場合の例) ーーー (1)はC列に =IF(COUNTIF($A$2:A2,A2)=1,MAX($C$1:C1)+1,"") と入れて下方向に式を複写する。 結果 相田太郎 391 1 相田太郎 485 相田太郎 928 飯田壮太 501 2 飯田壮太 456 石川五郎 388 3 石川五郎 484 石川五郎 761 F2に =OFFSET($A$2,MATCH(ROW()-1,$C$2:$C$10,0),0) と入れて、F4まで式を複写する。(imogasi方式) 結果 相田太郎 飯田壮太 石川五郎
- mu2011
- ベストアンサー率38% (1910/4994)
過去に同様の質問に対して回答した方法ですが如何でしょうか。 元データをシート1(400行)、並び替えをSHEET2とします。 (1)データ→フィルタオプションの設定で重複レコードは無視するで抽出し、シート1の名前データをシート2のA列に貼り付けます。 (2)表示シートのB1セル(仮です)に =IF(COLUMN(A$1)-1<COUNTIF(SHEET1!$A$1:$A$400,$A1),INDEX(SHEET1!$B:$B,SMALL(IF(SHEET1!$A$1:$A$400=$A1,ROW($A$1:$A$400),65536),COLUMN(A$1))),"")を設定し、縦横に必要分コピーして下さい。 数式は配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。
- kakkysan
- ベストアンサー率37% (190/511)
ANo.3です 訂正します >A2に1を入れ、b3には =IF(c3=c2,b2+1,1) と関数を入れ B2に1を入れ、b3には =IF(c3=c2,b2+1,1) と関数を入れ
- kakkysan
- ベストアンサー率37% (190/511)
あまりエレガントではないかも知れませんが、ピポットテーブルを使います。 まず、各人が出てくる数(2or3)を下記のように1・2・3のように番号付けします A B C D 1 N 氏名 データ 2 1 相田太郎 391 3 2 相田太郎 485 4 3 相田太郎 928 5 1 飯田壮太 501 6 2 飯田壮太 456 7 1 石川五郎 388 8 2 石川五郎 484 8 3 石川五郎 761 これにはA2に1を入れ、b3には =IF(c3=c2,b2+1,1) と関数を入れ、下までオートフィルでコピー 次にピポットテーブルを作ります(作り方はご存じですか?以下念のため) シートの空いた所(別のシートでも可)のセルをクリック。ピボットテーブル/ピボットグラフ ウィザード を開き、「分析するデータのある場所を」「Excel のリスト/データベース」にチェック 「作成するレポートの種類を指定」「ピボットテーブル」次へ 「使用するデータの範囲を指定」…作業する出たの全ての範囲を指定(フィールド名(ラベル名)も)「次へ」 フィールドリストから 行のフィールドに「氏名」をドラッグアンドドロップ 列のフィールドに「N]をドラッグアンドドロップ データアイテムに「データ」をドラッグアンドドロップ 以上でご希望の表が完成するはずです(名前の順番が変わりましたが) もしまだおわかりにならない点がありましたら、補足してください。
- ham_kamo
- ベストアンサー率55% (659/1197)
こういうのはマクロでやるのが手っ取り早いですね。 Sheet1に並び替え前データがあり、Sheet2に並び替え後データを作成するマクロを作ってみました。 ●手順 Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。 右の画面に以下のマクロをコピーして貼り付けます。シート名が異なる場合は2箇所あるSet文を修正してください。 Sub 並び替え() Dim WS1 As Worksheet, WS2 As Worksheet Dim N As String '名前 Dim FromRow As Integer '転記元の行番号 Dim ToRow As Integer '転記先の行番号 Dim ToCol As Integer '転記先の列番号 Set WS1 = Worksheets("Sheet1") '元データがあるシート名 Set WS2 = Worksheets("Sheet2") '並び替えたデータを転記するシート名 WS2.Cells.Clear For FromRow = 1 To WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row If WS1.Cells(FromRow, 1) <> N Then N = WS1.Cells(FromRow, 1) ToRow = ToRow + 1 ToCol = 2 WS2.Cells(ToRow, 1).Value = N Else ToCol = ToCol + 1 End If WS2.Cells(ToRow, ToCol) = WS1.Cells(FromRow, 2) Next End Sub その画面でそのままF5キーを押してマクロを実行するか、Alt+F11でExcelの画面に戻ってAlt+F8で上記マクロを実行してください。並び替えが行われます。 もし正常に動作しない場合や質問の意図と違っている場合は補足をお願いします。
こんばんは。 Aその表を範囲選択してコピーします Bコピー先を選択して「編集」→「形式を選択して貼り付け」 C「形式を選択して貼り付け」の右下にある「行列を入れ替える」にチェックを入れて「OK」します