電子書籍の厳選無料作品が豊富!

エクセルで左図のようなデータを右図のように並び替える方法を教えてください。

並び替えたデータは別シートに作成したいです。
関数を使ってできる方法をお願いします。

「エクセルで縦に並んだデータを横に並び替え」の質問画像

質問者からの補足コメント

  • 回答有難うございます。

    右の図は別シートの同じ位置より始まり
    Bに出てくる同じ数字のデータを横に並べたい
    Bデータはランダムに出てきます。

    説明が下手ですみません、よろしくお願いします。

      補足日時:2019/07/26 15:31

A 回答 (10件)

No2です



回答を読まれた形跡がないので、多分、興味は無いのでしょうけれど、一応。


Sheet2の同じ位置(A列が空白でB列にID)とするなら、No2を1文字変えるだけで済みます。
C2セルに

=IFERROR(INDEX(Sheet1!C$1:C$8,AGGREGATE(15,6,INDEX(ROW($B$2:$B$8)/(Sheet1!$B$2:$B$8=$B2)/(Sheet1!C$2:C$8<>""),,),1)),"")
    • good
    • 1
この回答へのお礼

有難うございます。

右の図は別シートの同じ位置より始まり
B列に出てくる同じ数字のデータを横に並べたい
B列データはランダムに出てきます。

説明が下手ですみません、よろしくお願いします。

お礼日時:2019/07/26 16:36

変なこだわりは捨ててピボットテーブルでそれぞれの列の最大値を出せば


いいでしょう。
    • good
    • 0
この回答へのお礼

有難うございます

お礼日時:2019/07/29 08:02

今書いてるテキストデータくれたら、教えてあげる。

    • good
    • 0

[No.7]誤謬訂正


式 … を入力したセル K2 を…オートフィル ⇒ 範囲 A2:O3 を選択した…
「A2:O3」→ 「K2:O3」
    • good
    • 0
この回答へのお礼

有難うございます

お礼日時:2019/07/29 08:03

》 関数を使ってできる方法をお願いします。


合点承知!下記の関数で可能です。
皆さんのような諄い説明無し!先ずは黙って試してみる!

添付図参照

式 =SUMPRODUCT(($B$2:$G$7=$J2)*(C$2:C$7)) を入力したセル K2 を下に1行右に4列オートフィル ⇒ 範囲 A2:O3 を選択したマンマ、下記の[条件付き書式]を設定

ルールの適用先: =$K$2:$O$3
ルールの種類: “指定の値を…書式設定”
ルールの内容↓
 ̄ ̄左端→“セルの値” ̄中央→“次の値に等しい” ̄右端→ =0
 ̄ ̄書式→白のフォント色
    • good
    • 0

こんにちは!



VBAになりますが、一例です。
↓の画像のような配置で元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールです。
尚、Sheet1のA列データに対して1行目のA~Eの重複はない!という前提です。

Sub Sample1()
 Dim myDic As Object
 Dim i As Long, j As Long
 Dim lastRow As Long, lastCol As Long
 Dim wS As Worksheet
 Dim c As Range
 Dim myKey, myR

  Set myDic = CreateObject("Scripting.Dictionary")
  Set wS = Worksheets("Sheet2")
   wS.Cells.ClearContents
    With Worksheets("Sheet1")
     lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
     lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
      Range(.Cells(1, "B"), .Cells(1, lastCol)).Copy wS.Range("B1")
       myR = Range(.Cells(2, "A"), .Cells(lastRow, lastCol))
        For i = 1 To UBound(myR, 1)
         If Not myDic.exists(myR(i, 1)) Then
          myDic.Add myR(i, 1), ""
         End If
        Next i
       myKey = myDic.keys
        For i = 0 To UBound(myKey)
         wS.Cells(i + 2, "A") = myKey(i)
        Next i
        For i = 1 To UBound(myR, 1)
         For j = 2 To lastCol
          If myR(i, j) <> "" Then
           Set c = wS.Range("A:A").Find(what:=myR(i, 1), LookIn:=xlValues, lookat:=xlWhole)
           wS.Cells(c.Row, j) = myR(i, j)
          End If
         Next j
        Next i
    End With
     Set myDic = Nothing
     MsgBox "完了"
End Sub

※ Sheet2の表示形式は好みの表示形式にしてください。m(_ _)m
「エクセルで縦に並んだデータを横に並び替え」の回答画像5
    • good
    • 0
この回答へのお礼

有難うございます。
やはり、VBAでないと出来ないですかね。

もう少し、頑張ってみます。

お礼日時:2019/07/26 16:07

No.1です。



> データ量が多いので、簡単にできないかと思い
貼り付けで「行列を入れ替える」方法は、データー量の制限はありません…
    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2019/07/26 16:04

統合なら一発ですが…

    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2019/07/26 16:03

こんにちは



並べ替えの説明がないので、添付の図から勝手に解釈しました。

>別シートに作成したいです。
別シートの添付図と同じ範囲(J1:O4)に表を作成するものとします。

勝手な解釈なので、以下の仮定をしています。
※ 元データの存在するシート名は「Sheet1」とする
※ 元データの範囲は添付図の通り(B1:G8)で、1行目とB列が項目タイトル
※ 元データの列タイトル(A~E)は、並べ替え後の列タイトル(A~E)とは同じ順
 (タイトルの検索も可能でしょうけれど、面倒になるばかりなので・・・)
※ もしも、マッチするデータが複数存在する場合は行番号の小さな方を採用する

上記を条件として、並べ替え後の表のK2セルに
=IFERROR(INDEX(Sheet1!C$1:C$8,AGGREGATE(15,6,INDEX(ROW($B$2:$B$8)/(Sheet1!$B$2:$B$8=$J2)/(Sheet1!C$2:C$8<>""),,),1)),"")
の式を入力し、右、下方の必要な範囲にフィルコピー。

ではいかが?
    • good
    • 0

コピーしてから貼り付けで「行列を入れ替える」で良いです。



> 関数を使ってできる方法をお願いします。
こんな関数はありません。
    • good
    • 2
この回答へのお礼

ありがとうございます。

データ量が多いので、簡単にできないかと思い
もう少し、考えてみます。

お礼日時:2019/07/26 15:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!