
毎月の店舗ごとの商品別の売り上げが、図(元データ)のような形式で提出されます。
(縦軸が商品、横軸が店舗名と数量・金額・在庫数)
集計のため、横軸の項目(店舗名・数量・金額・在庫数)を、縦軸に並び替えるため、手動で行っているのですが、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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 棚卸表の前月比の関数等あれば教えてください 2 2023/05/02 18:34
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Excel(エクセル) Excelのマクロを教えていただけないでしょうか? 1 2023/07/06 19:56
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- スーパー・コンビニ 一斉値上 スーパーの食料品 値上や単価の仕組みは? 4 2022/06/01 16:18
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- その他(ビジネス・キャリア) エクセルで一覧表を作るときのレイアウト、月日と項目の配置について相談です。 2 2023/04/11 09:37
- au(KDDI) auStyleの来店予約をする時に、iPhone14の商品予約もしました。昨日予約したのですが、連絡 1 2022/12/19 20:45
- その他(買い物・ショッピング) お詫びの電話をガチャンと切る 2 2023/01/11 18:42
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA横に並んでいるデータを縦に並ぶデータにしたいです。
Visual Basic(VBA)
-
エクセルで縦に並んだデータをある項目毎に横に並び替えたい
Excel(エクセル)
-
エクセルで横データを縦に並べ変えたいです。
財務・会計・経理
-
-
4
VBA横データを縦にしたいです
Visual Basic(VBA)
-
5
エクセルで横並びの複数データを縦の一本のデータにしたい
Excel(エクセル)
-
6
VBA横のデータを縦にする方法
Excel(エクセル)
-
7
エクセルで横並びの複数データを縦のデータにしたい こんにちは。宜しくお願い致します。 A B C D
ソフトウェア
-
8
VBA 縦のデータを横にするコード
IT・エンジニアリング
-
9
VBAで横データを縦データに変換する方法を教えて下さい。
その他(Microsoft Office)
-
10
マクロ:横並びデータを縦並びに変更
Excel(エクセル)
-
11
EXCEL VBA 複数列を2列にまとめる
Excel(エクセル)
-
12
エクセルで複数列を二列にまとめる
その他(Microsoft Office)
-
13
エクセル 横並びの複数行データを縦1列にしたい
Excel(エクセル)
-
14
Excelで、あるセルの値に応じて行を自動挿入したい
Visual Basic(VBA)
-
15
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
16
Excelのマクロ名の並び順の法則は?
Excel(エクセル)
-
17
エクセル VBA 時系列に横一列に並んだデータを 縦に整頓するマクロを教えてください。
Visual Basic(VBA)
-
18
VBAで重複データを合算したい
Excel(エクセル)
-
19
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
20
エクセルで複数列を1列にまとめるマクロ
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
Microsoft365、ページ設定がで...
-
大学のレポート A4で1枚レポー...
-
libreoffice calcで行を挿入し...
-
快活CLUBについて 私用で使う書...
-
Office2021を別のPCにインスト...
-
エクセルで特定のセルの値を別...
-
エクセルVBAで1004エラーになり...
-
Microsoft Formsの「個人情報や...
-
セルの文を上書きせずに、別の...
-
エクセル:一定間隔で平均値を...
-
マクロ自動コピペ 貼り付ける場...
-
マイクロソフト 一時使用コード...
-
時間の平均値を計算する方法を...
-
エクセルマクロ(超初心者)
-
MSオフィス2013にMS365が上書き...
-
Microsoft Office Homeインスト...
-
表の作成について
-
エクセル ○○以上○○以下の関数を...
-
Excelで〇のついたものを抽出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
Office2021を別のPCにインスト...
-
大学のレポート A4で1枚レポー...
-
Microsoft365について
-
outlookのメールが固まってしま...
-
英数字のみ全角から半角に変換
-
Office 2021 Professional Plus...
-
エクセルVBAで1004エラーになり...
-
エクセルで特定のセルの値を別...
-
MSオフィス2013にMS365が上書き...
-
Microsoft Formsの「個人情報や...
-
【Excel VBA】PDFを作成して,...
-
別シートの年間行事表をカレン...
-
office2019 のoutlookは2025年1...
-
マクロ自動コピペ 貼り付ける場...
-
表の作成について
-
office365 回復できない。
-
マイクロソフト 一時使用コード...
-
Teams内でショートカットって貼...
-
Microsoft Office Homeインスト...
おすすめ情報
ご説明不足で申し訳ありません。補足いたします。
元データの「商品名」と書かれているセルの位置はA1セルになり、シート名は「元データ」です。
並び替え先のシート名は「並替」で、こちらも「商品名」と書かれているセルの位置はA1セルになります。
元データは社外から取得しているものになり、こちらの希望レイアウトでいただけないか打診しましたが、できないとの回答で今回ご相談を上げさせていただきました。
どうぞよろしくお願いいたします。