![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
毎月の店舗ごとの商品別の売り上げが、図(元データ)のような形式で提出されます。
(縦軸が商品、横軸が店舗名と数量・金額・在庫数)
集計のため、横軸の項目(店舗名・数量・金額・在庫数)を、縦軸に並び替えるため、手動で行っているのですが、80店舗あるため、VBAで並び替える方法がありましたらご教示いただけますと幸いです。
縦軸の商品は月によって増えたり、減ったりします。
横軸の店舗数も月によって増えたり、減ったりします。
数量・金額・在庫数 は毎月固定です。
説明が拙く恐縮ですが、何卒よろしくお願いいたします。
![「Excel VBAで、横並びのデータを縦」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/6/1193103_5fc49b11c3932/M.jpg)
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でしょうか。
元データのシート名はなんでしょうか。
並び替え先のシート名はなんでしょうか。
又、図を添付する場合は、添付図の赤線で囲った部分も提示してください。
そうするとセルの正確な位置がわかります。
![「Excel VBAで、横並びのデータを縦」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/c/543026052_5fc5496271562/M.png)
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行目の商品数、店舗数を変更すれば、それに応じた表示に変わります)
>集計のため、横軸の項目(店舗名・数量・金額・在庫数)を、縦軸に並び替えるため、手動で行っているのですが、~
そもそもの話になりますが、元の表の形式を見直した方が宜しいようにも感じますが…?
![「Excel VBAで、横並びのデータを縦」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/5/587726_5fc4aa64c95d0/M.jpg)
早々のご回答ありがとうございます。
色々とご説明が足りず、申し訳ありません。
元のデータは、社外から取得しているものになり、こちらの希望レイアウトでいただけないか打診しましたが、できないとの回答で今回ご相談を上げさせていただきました。
関数でもできるのですね。大変勉強になります。
早速試してみたいと思います。
お探しの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横のデータを縦にする方法
Excel(エクセル)
-
エクセルで横データを縦に並べ変えたいです。
財務・会計・経理
-
エクセルで横並びの複数データを縦の一本のデータにしたい
Excel(エクセル)
-
-
4
VBA横に並んでいるデータを縦に並ぶデータにしたいです。
Visual Basic(VBA)
-
5
VBA横データを縦にしたいです
Visual Basic(VBA)
-
6
エクセルで横並びの複数データを縦のデータにしたい こんにちは。宜しくお願い致します。 A B C D
ソフトウェア
-
7
VBAで横データを縦データに変換する方法を教えて下さい。
その他(Microsoft Office)
-
8
マクロ:横並びデータを縦並びに変更
Excel(エクセル)
-
9
VBA 縦のデータを横にするコード
IT・エンジニアリング
-
10
エクセルで縦に並んだデータをある項目毎に横に並び替えたい
Excel(エクセル)
-
11
エクセル 横並びの複数行データを縦1列にしたい
Excel(エクセル)
-
12
エクセルで1列に500行並んだデータを5列毎に改行
Excel(エクセル)
-
13
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
14
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
15
excelで、セル内の横並びのデータを、違うシートへ縦並びにしたい
Excel(エクセル)
-
16
Excelで、あるセルの値に応じて行を自動挿入したい
Visual Basic(VBA)
-
17
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
18
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
19
別のシートから値を取得するとき
Visual Basic(VBA)
-
20
エクセルのマクロで結合セルに値を貼り付けたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoftにofficeアプリについ...
-
【スプレドシート】IMPORTRANGE...
-
大学のレポート A4で1枚レポー...
-
Office2021を別のPCにインスト...
-
英数字のみ全角から半角に変換
-
会社のPCに入っているExcelでバ...
-
複数の写真を1枚に印刷
-
Windows 11で、IME言語バー(IM...
-
以下マクロの処理を最終行まで...
-
エクセルでXLOOKUP関数...
-
Microsoft Formsの「個人情報や...
-
Outlook で宛先が複数の場合の人数
-
teams設定教えて下さい。 ①ビデ...
-
Microsoft365で写真をアルバム...
-
SUMIFS関数について
-
VBAファイルの保存先について
-
エクセルで英文字に入れた下線...
-
PCを買い換えました。 今使って...
-
Excel 日付を比較したら、同じ...
-
Excel VBA 日程表からスケジュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
英数字のみ全角から半角に変換
-
「生産性ソフトウェア」とは何...
-
会社PCのメールが更新されない
-
【関数】○年○ヶ月と表示された...
-
WEBの記事を印刷する際にA...
-
エクセルでXLOOKUP関数...
-
Microsoft familyに追加されま...
-
会社のOutlookにてメールを予約...
-
Microsoft Formsの「個人情報や...
-
Microsoft365の一部を解約したい
-
マクロ自動コピペ 貼り付ける場...
-
Outlook で宛先が複数の場合の人数
-
outlookのメールが固まってしま...
-
【Excel VBA】PDFを作成して,...
-
大学のレポート A4で1枚レポー...
-
office365って抵抗感ないですか?
-
Microsoftにofficeアプリについ...
-
Excel テーブル内の空白行の削除
-
マイクロソフト 一時使用コード...
おすすめ情報
ご説明不足で申し訳ありません。補足いたします。
元データの「商品名」と書かれているセルの位置はA1セルになり、シート名は「元データ」です。
並び替え先のシート名は「並替」で、こちらも「商品名」と書かれているセルの位置はA1セルになります。
元データは社外から取得しているものになり、こちらの希望レイアウトでいただけないか打診しましたが、できないとの回答で今回ご相談を上げさせていただきました。
どうぞよろしくお願いいたします。