![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
エクセルで横に並んでいるセルを1列に対して1ユーザー1種類・1商品、購入日時で並べ直したいです。
添付の画像で説明すると
A1:鈴木さん B1:飲料 C1:ビール D1:2017/10/17
A2:鈴木さん B2:飲料 C2:ウーロン茶 D2:2017/10/17
A3:鈴木さん B3:お菓子 C3:チョコ D3:2017/10/17
・
・
A6 伊藤さん B6:飲料 C6:ビール D6:2017/10/17
というような感じです。
種類と商品は最大5つまでしか横に並んでいません。
実際には列がたくさんあるので、簡単にできる方法が知りたいです。
解決方法教えてください。
よろしくお願いいたします。
![「【エクセル】横に並んでいるものを縦に並べ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/8/542548674_5a30d6a868ecd/M.jpg)
No.4ベストアンサー
- 回答日時:
Sheet2 において、
A1: =OFFSET(Sheet1!A$2,(ROW(A1)-1)/5,)
B1: =OFFSET(Sheet1!B$2,(ROW(A1)-1)/5,MOD((ROW(A1)-1)*2,10))&""
セル B1 をセル C1 にコピー&ペースト
D1: =IF(B1="","",OFFSET(Sheet1!L$2,(ROW(C1)-1)/5,))
範囲 A1:D1 を下方にズズーッとオートフィル
てのは如何?
![「【エクセル】横に並んでいるものを縦に並べ」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/298588_5a313c253c230/M.jpg)
No.3
- 回答日時:
続けておじゃまします。
No.2のコードで間違いがありました。
>Range(wS.Cells(2, "A"), wS.Cells(lastRow, "K")).ClearContents
を
>Range(wS.Cells(2, "A"), wS.Cells(lastRow, "L")).ClearContents
に変更してください。
Sheet2の最終列はK列ではなく、L列でしたね。
どうも失礼しました。m(_ _)m
No.2
- 回答日時:
No.1です。
>日付はバラバラなんです。。。
やっぱりそうだったんですかぁ~!
それでは手っ取り早くVBAでの一例です。
Sheet1のE列作業列は不要なので、削除してください。
↓のコードを標準モジュールに記載し、マクロを実行してみてください。
尚、質問文通り最大5種類とます。
Sub Sample1() '//この行から//
Dim myDic As Object
Dim myKey, myItem, myR, myAry, myAry2
Dim i As Long, k As Long, lastRow As Long
Dim myStr As String, wS As Worksheet
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "K")).ClearContents
End If
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "D"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 4)
If Not myDic.exists(myStr) Then
myDic.Add myStr, myR(i, 2) & "_" & myR(i, 3)
Else
myDic(myStr) = myDic(myStr) & "_" & myR(i, 2) & "_" & myR(i, 3)
End If
Next i
End With
myKey = myDic.keys
myItem = myDic.items
For i = 0 To UBound(myKey)
myAry = Split(myKey(i), "_")
myAry2 = Split(myItem(i), "_")
wS.Cells(i + 2, "A") = myAry(0)
wS.Cells(i + 2, "L") = myAry(1)
For k = 0 To UBound(myAry2)
wS.Cells(i + 2, k + 2) = myAry2(k)
Next k
Next i
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub '//この行まで//
※ データ変更があるたびにマクロを実行する必要があります。
※ 日付順にソートが必要なのかもしれませんが、
今回は並び替えはしていません。m(_ _)m
No.1
- 回答日時:
こんばんは!
日付に1日だけなのでしょうか?
一例です。
元データはSheet1にあり、Sheet2に表示するとします。
↓の画像のようにSheet1に作業用の列を設けています。
(これはA列を重複なしに表示させるため)
作業列E2セルに
=IF(COUNTIF(A$2:A2,A2)=1,ROW(),"")
という数式を入れフィルハンドルでこれ以上データはない!という位まで下へフィル&コピーしておきます。
Sheet2のA2セルに
=IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!E:E,ROW(A1))),"")
B2セルに
=IF($A2="","",IFERROR(INDEX(Sheet1!$B$1:$B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),INT(COLUMN()/2))),""))
配列数式なので、Ctrl+Shift+Enterで確定しておきます。
C2セルに
=IF($A2="","",IFERROR(INDEX(Sheet1!$C$1:$C$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),INT(COLUMN(B1)/2))),""))
こちらも配列数式なので、Ctrl+Shift+Enterで確定!
B2・C2セルを範囲指定 → C2セルのフィルハンドルで右へ2列ずつコピー!
最後にA2~K2セルを範囲指定 → K2セルのフィルハンドルで下へコピーすると
画像のような感じになります。
※ 最初に書いたように1日のデータしかないのであれば
日付列は簡単なので、手を付けていません。
※ 日付がバラバラで日付ごとに分ける必要がある場合、
かなり面倒な数式になります。m(_ _)m
![「【エクセル】横に並んでいるものを縦に並べ」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/d/667667_5a30f2d750bb9/M.jpg)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) ランダムに並んだ人の名前から、全種類の人を抜き出す関数 7 2022/07/08 08:06
- Excel(エクセル) エクセル シート内のボックスを縦並びから横並びに 7 2023/04/05 04:28
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- お酒・アルコール このビールのサブスク あまりメリットがない気がするのですが。 3 2022/09/01 18:05
- Excel(エクセル) エクセルを活用した受注表作成の中で関数・数式を教えてください。 3 2022/07/23 08:14
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- Excel(エクセル) Excelグラフのラベルオプションの並べ替えは可能ですか。セルの値を最後にしたいのですが。 1 2022/06/05 10:45
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで作成した出欠表から日付...
-
勤務外時間を出す表が作りたい
-
Excel 偶数月の15日(土日祝...
-
エクセルの数式について教えて...
-
【マクロ】参照渡しとモジュー...
-
Excelの数式について教えてくだ...
-
【マクロ】参照渡しについて。...
-
VLOOKUP FALSEのこと
-
Excelのメニューについて
-
マクロを実行すると、セル範囲...
-
【マクロ】シート追加時に同じ...
-
Excelの条件付書式について教え...
-
【マクロ】Call関数で呼び出し...
-
エクセルで、数字の下4桁の0を...
-
別のシートの指定列の最終行を...
-
エクセルの設定、特定の列以降...
-
Excelでの文字入力について
-
Excelのデーターバーについて
-
Excel 日付の表示が直せません...
-
Vbaをバッチ処理で動かす方法に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報
tom04さん
ありがとうございます。
日付はバラバラなんです。。。