
毎月の店舗ごとの商品別の売り上げが、図(元データ)のような形式で提出されます。
(縦軸が商品、横軸が店舗名と数量・金額・在庫数)
集計のため、横軸の項目(店舗名・数量・金額・在庫数)を、縦軸に並び替えるため、手動で行っているのですが、80店舗あるため、VBAで並び替える方法がありましたらご教示いただけますと幸いです。
縦軸の商品は月によって増えたり、減ったりします。
横軸の店舗数も月によって増えたり、減ったりします。
数量・金額・在庫数 は毎月固定です。
説明が拙く恐縮ですが、何卒よろしくお願いいたします。

No.3ベストアンサー
- 回答日時:
標準モジュールに登録してください。
並替の1行目はあなたが作成してください。
マクロは2行目から設定します。
Option Explicit
Public Sub 並び替え()
Dim maxrow1 As Long
Dim maxcol1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim col1 As Long
Dim shouhin_count As Long '商品数
Dim tenpo_count As Long '店舗数
Dim sx As Long
Dim tx As Long
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("元データ")
Set sh2 = Worksheets("並替")
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row '1列目最終行
maxcol1 = sh1.Cells(2, Columns.Count).End(xlToLeft).Column '2行目最終列
maxrow2 = sh1.Cells(Rows.Count, 1).End(xlUp).Row '1列目最終行
shouhin_count = maxrow1 - 2
If shouhin_count < 1 Then Exit Sub
If (maxcol1 - 1) Mod 3 <> 0 Then Exit Sub
tenpo_count = (maxcol1 - 1) \ 3
If tenpo_count < 1 Then Exit Sub
sh2.Rows("2:" & Rows.Count).ClearContents '並替の2行目以降をクリア
row2 = 2
'店舗数分の繰り返し
For tx = 1 To tenpo_count
'商品数分の繰り返し
For sx = 1 To shouhin_count
row1 = sx + 2
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "A") '商品名
col1 = (tx - 1) * 3 + 2
sh2.Cells(row2, "B").Value = sh1.Cells(1, col1) '店舗名
sh2.Cells(row2, "C").Value = sh1.Cells(row1, col1) '売り上げ数
sh2.Cells(row2, "D").Value = sh1.Cells(row1, col1 + 1) '売り上げ金額
sh2.Cells(row2, "E").Value = sh1.Cells(row1, col1 + 2) '在庫数
row2 = row2 + 1
Next
Next
MsgBox ("完了")
End Sub
色々とご説明が足りず、申し訳ありませんでした。
早速試してみたところ、無事できました。
大変助かりました。
本当にありがとうございました。
No.2
- 回答日時:
各セルの正確な位置が判らないと、マクロを作成できません。
元データの商品名と書かれているセルはA1でしょうか。
並び替え先の商品名と書かれているセルはA1でしょうか。
元データのシート名はなんでしょうか。
並び替え先のシート名はなんでしょうか。
又、図を添付する場合は、添付図の赤線で囲った部分も提示してください。
そうするとセルの正確な位置がわかります。

No.1
- 回答日時:
こんにちは
VBAのご質問のようですが、関数でもできるのでご参考までに。
ご提示の図がはっきりと見えないのと、セル位置が不明なので考え方だけになりますけれど・・・
添付図で1~6行目までが元のデータ(行数は可変です)とし、11行目以降に縦並びに表示するものと仮定します。
また、9行目のB列、E列で商品数と店舗数を指定するものと仮定します。
添付図では、
A12セルに
=IF(ROW(A1)>$B$9*$E$9,"",INDEX(A:A,MOD(ROW(A1)-1,$B$9)+3))
B12セルに
=IF(ROW(A1)>$B$9*$E$9,"",INDEX($1:$1,INT((ROW(A1)-1)/$B$9)*3+2))
C12セルに
=IF(ROW(A1)>$B$9*$E$9,"",INDEX($B:$IV, MOD(ROW(A1)-1,$B$9)+3, INT((ROW(A1)-1)/$B$9)*3+COLUMN(A1)))
の式を入れて、E12セルまでフィルコピー
さらに、A12:E12を選択して、下方に必要な分だけフィルコピーしています。
(9行目の商品数、店舗数を変更すれば、それに応じた表示に変わります)
>集計のため、横軸の項目(店舗名・数量・金額・在庫数)を、縦軸に並び替えるため、手動で行っているのですが、~
そもそもの話になりますが、元の表の形式を見直した方が宜しいようにも感じますが…?

早々のご回答ありがとうございます。
色々とご説明が足りず、申し訳ありません。
元のデータは、社外から取得しているものになり、こちらの希望レイアウトでいただけないか打診しましたが、できないとの回答で今回ご相談を上げさせていただきました。
関数でもできるのですね。大変勉強になります。
早速試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA横に並んでいるデータを縦に並ぶデータにしたいです。
Visual Basic(VBA)
-
エクセルで縦に並んだデータをある項目毎に横に並び替えたい
Excel(エクセル)
-
エクセルで横データを縦に並べ変えたいです。
財務・会計・経理
-
-
4
エクセルで横並びの複数データを縦の一本のデータにしたい
Excel(エクセル)
-
5
VBA横のデータを縦にする方法
Excel(エクセル)
-
6
VBA横データを縦にしたいです
Visual Basic(VBA)
-
7
エクセルで横並びの複数データを縦のデータにしたい こんにちは。宜しくお願い致します。 A B C D
ソフトウェア
-
8
VBA 縦のデータを横にするコード
IT・エンジニアリング
-
9
VBAで横データを縦データに変換する方法を教えて下さい。
その他(Microsoft Office)
-
10
マクロ:横並びデータを縦並びに変更
Excel(エクセル)
-
11
初歩的な事だと思います。 Sub または Function が定義されていません。
Visual Basic(VBA)
-
12
エクセル 横並びの複数行データを縦1列にしたい
Excel(エクセル)
-
13
Excelのマクロ名の並び順の法則は?
Excel(エクセル)
-
14
Excelで、あるセルの値に応じて行を自動挿入したい
Visual Basic(VBA)
-
15
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
16
VBAで重複データを合算したい
Excel(エクセル)
-
17
エクセル VBA 時系列に横一列に並んだデータを 縦に整頓するマクロを教えてください。
Visual Basic(VBA)
-
18
エクセルで複数列を1列にまとめるマクロ
Excel(エクセル)
-
19
Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
Office2021を別のPCにインスト...
-
大学のレポート A4で1枚レポー...
-
outlookのメールが固まってしま...
-
Excelで〇のついたものを抽出し...
-
会社のOutlookにてメールを予約...
-
別シートの年間行事表をカレン...
-
Office 2021 Professional Plus...
-
エクセル 同じ数字を他の列に自...
-
パソコンWindows11 Office2021...
-
office2019 のoutlookは2025年1...
-
Excel 日付を比較したら、同じ...
-
マクロ自動コピペ 貼り付ける場...
-
エクセルで質問です。 ハイパー...
-
Microsoft365、ページ設定がで...
-
libreoffice calcで行を挿入し...
-
Excel テーブル内の空白行の削除
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
Microsoft Formsの「個人情報や...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
エクセルからメールを作れるか...
-
Microsoft365、ページ設定がで...
-
快活CLUBについて 私用で使う書...
-
パソコンWindows11 Office2021...
-
libreoffice calcで行を挿入し...
-
エクセルで質問です。 ハイパー...
-
outlookのメールが固まってしま...
-
Microsoft Formsの「個人情報や...
-
別シートの年間行事表をカレン...
-
Microsoft Formsでクイズの解答...
-
マクロ自動コピペ 貼り付ける場...
-
Excelで〇のついたものを抽出し...
-
Excel 日付を比較したら、同じ...
-
エクセルで特定のセルの値を別...
-
Officeを開くたびの「再起動メ...
-
office2019 のoutlookは2025年1...
おすすめ情報
ご説明不足で申し訳ありません。補足いたします。
元データの「商品名」と書かれているセルの位置はA1セルになり、シート名は「元データ」です。
並び替え先のシート名は「並替」で、こちらも「商品名」と書かれているセルの位置はA1セルになります。
元データは社外から取得しているものになり、こちらの希望レイアウトでいただけないか打診しましたが、できないとの回答で今回ご相談を上げさせていただきました。
どうぞよろしくお願いいたします。