No.5ベストアンサー
- 回答日時:
No2,No3です。
>廃盤の売場に並んでいないゼロと売場に並んでいて販売実績が無いゼロとでは元々意味合いが違いますから、本来はゼロの色を変えるとかしたかったのです。
>tatsu99様の提案通り、廃盤商品の売上金額や販売点数はゼロより空白になった方が、識別し易いですがそんな事可能なのですか?
マクロで行えば、可能です。
以下のマクロを登録して実行してください。(標準モジュールへ登録)
-----------------------------------------------------------
Option Explicit
Public Sub Macro()
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet
Dim maxRow1 As Long
Dim maxRow2 As Long
Dim maxRow3 As Long
Dim fm1 As String '売上金額伸長のフォーマット
Dim fm2 As String '点数伸長のフォーマット
Dim row As Long
Dim row3 As Long
Dim row3w As Long
Dim code As Variant '分類コード
Set Sh1 = Worksheets("sheet1") '前月売上
Set Sh2 = Worksheets("sheet2") '当月売上
Set Sh3 = Worksheets("sheet3") '売上集計
maxRow1 = Sh1.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
maxRow2 = Sh2.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
maxRow3 = Sh3.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
Dim dicT As Object '連想配列
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
fm1 = Sh3.Cells(2, 8).NumberFormat '表示形式を取得
fm2 = Sh3.Cells(2, 10).NumberFormat '表示形式を取得
'sheet1を処理する
row3 = 2
For row = 2 To maxRow1
code = Sh1.Cells(row, 1).Value
Sh3.Cells(row3, 1).Value = Sh1.Cells(row, 1).Value '分類コード
Sh3.Cells(row3, 2).Value = Sh1.Cells(row, 2).Value '商品
Sh3.Cells(row3, 3).Value = Sh1.Cells(row, 3).Value 'sheet1売上金額
Sh3.Cells(row3, 4).Value = Sh1.Cells(row, 4).Value 'sheet1点数
Sh3.Cells(row3, 5).Value = "" 'sheet2売上金額
Sh3.Cells(row3, 6).Value = "" 'sheet2点数
dicT(code) = row3
row3 = row3 + 1
Next
'sheet2を処理する
For row = 2 To maxRow2
code = Sh2.Cells(row, 1).Value
If dicT.exists(code) = True Then
'既存商品
row3w = dicT(code)
Sh3.Cells(row3w, 5).Value = Sh2.Cells(row, 3).Value 'sheet2売上金額
Sh3.Cells(row3w, 6).Value = Sh2.Cells(row, 4).Value 'sheet2点数
Else
'新規商品
Sh3.Cells(row3, 1).Value = Sh2.Cells(row, 1).Value '分類コード
Sh3.Cells(row3, 2).Value = Sh2.Cells(row, 2).Value '商品
Sh3.Cells(row3, 3).Value = "" 'sheet1売上金額
Sh3.Cells(row3, 4).Value = "" 'sheet1点数
Sh3.Cells(row3, 5).Value = Sh2.Cells(row, 3).Value 'sheet2売上金額
Sh3.Cells(row3, 6).Value = Sh2.Cells(row, 4).Value 'sheet2点数
dicT(code) = row3
row3 = row3 + 1
End If
Next
'付加情報を計算する
For row = 2 To row3 - 1
Sh3.Cells(row, 7) = Sh3.Cells(row, 5).Value - Sh3.Cells(row, 3).Value '売上金額増減
'売上金額伸長
If Sh3.Cells(row, 3).Value = "" Or Sh3.Cells(row, 3).Value = 0 Then
Sh3.Cells(row, 8).Value = 0
Else
Sh3.Cells(row, 8).Value = Sh3.Cells(row, 5).Value / Sh3.Cells(row, 3).Value
End If
Sh3.Cells(row, 8).NumberFormat = fm1
Sh3.Cells(row, 9) = Sh3.Cells(row, 6).Value - Sh3.Cells(row, 4).Value '点数増減
'点数伸長
If Sh3.Cells(row, 4).Value = "" Or Sh3.Cells(row, 4).Value = 0 Then
Sh3.Cells(row, 10).Value = 0
Else
Sh3.Cells(row, 10).Value = Sh3.Cells(row, 6).Value / Sh3.Cells(row, 4).Value
End If
Sh3.Cells(row, 10).NumberFormat = fm2
Next
'商品数が減少したとき、余分な行を消す
For row = row3 To maxRow3
Sh3.Range(Cells(row, 1), Cells(row, 10)).Value = ""
Next
MsgBox ("処理完了")
End Sub
----------------------------------------------------------
注意事項です。
sheet1,sheet2,sheet3は必ず存在すること。
sheet3の1行目は、作成しません。2行目以降を作成します。
売上額伸長、点数伸長のセルの表示形式(%表示)は、sheet3のH2、J2の内容を引き継ぎます。
ここの書式はクリアしないでください。
お返事大変遅くなりました。
マクロにコピペしてやってみました。
「何とかデバッグ・・・」とやらが何十回も出てきて諦めかけましたが、さきほど無事出来ました。
新規や廃盤の実績欄は空欄になっていたので、他の実績ゼロ商品と一目瞭然に違いが分かりました。
ありがとうございました。
明日、実際のデータで試してみます。
その際、もしマクロでわからないことが出て来ましたら、ご質問させてください。
ご報告とお礼まで。
No.10
- 回答日時:
No5です。
>マクロにコピペしてやってみました。
>「何とかデバッグ・・・」とやらが何十回も出てきて諦めかけましたが、さきほど無事出来ました。
こちらで、動作確認を行った時は、「何とかデバッグ・・・」は、表示されず、
”処理完了”のメッセージが表示されただけなのですが、「何とかデバッグ・・・」のメッセージが
表示されるのは、マクロのどの行でしょうか?
実際のデータや加工したデータでもtatsu99さんのマクロ式で試しました。問題無く出来ました。「何とかデバック・・・」は多分、シート名の数字が全角とかだったのでなったんだと思います。今は全く大丈夫です。
マクロってスゴイですね、ビックリしました。私も覚えたいです。
今回はエクセル素人の私にも分かり易く回答して頂き、ありがとうございました。
また機会ありましたら宜しくお願い致します。
No.7
- 回答日時:
例えば、Sheet3のA列に小分類コードが入力されているとします。
この状態で、Sheet3のC2セルに次の数式を設定すると目的の値が求められるのですが、この式は理解できますか?【Sheet3のC2セル】=IF(A2="","",SUMIF(Sheet1!A:A,A2,Sheet1!C:C))
これと同じような考え方で、C~J列の各値を求めて下さい。ここまでは初心者でもできるはずです。
問題なのは、A:B列への小分類コードと品名の入力です。
一番簡単なのは、Sheet1のA:B列を手作業でコピペ。その下にSheet2のA:B列をコピペ。A:Bセルを選択した状態で、「データ」タグの「重複の削除」で重複を削除し、さらにA列で並び替えを行えば完成です。
もうちょっと勉強すると上記の操作をマクロ記録して、自動実行することも可能になります。
飛び道具のようなマクロを使用するのも悪くはないですが、まずは、ご自分の身の丈に合った方法で、問題を解決されることをお勧めします。
簡潔な方法ご提示ありがとうございます。
やってみましたら、sheet3のC列D列は完成したのですが、E列F列は全て「0」になってしまいます。
sheet3E2セルの計算式は=IF(A2="","",SUMIF(Sheet2!A:A,A2,Sheet2!E:E))にしたのですが・・・
お手数ですが、E2セルの計算式アドバイスお願いします。
※A:B列への小分類コードと品名の入力は、「データ」タグの「重複の削除」で簡単にできました。
No.6
- 回答日時:
No5です。
excelに関する質問であれば、このカテゴリ(オフィス系ソフト)でなく
Excel(エクセル)のカテゴリのほうが、回答が付きやすいと思います。
(余談ですが、私はExcel(エクセル)のカテゴリの質問は見ますが、オフィス系ソフトのカテゴリはほとんど見ていません。
たまたま、今日、目にしたので回答した次第です)
No.4
- 回答日時:
No3です。
追加質問です。
質問4:sheet3の商品I、Jは、廃盤商品かと思います。(sheet2に商品I、Jはないため)
従って、sheet3の商品I、Jのsheet2売上金額とsheet2点数は、
0で表示するのではなく、空白で表示したほうが良いと考えますがいかがでしょうか?
0で表示した場合は、商品はあるが売り上げが0だったということになりませんでしょうか?
質問4その通りI、Jは廃盤商品です。
廃盤の売場に並んでいないゼロと売場に並んでいて販売実績が無いゼロとでは元々意味合いが違いますから、本来はゼロの色を変えるとかしたかったのです。
tatsu99様の提案通り、廃盤商品の売上金額や販売点数はゼロより空白になった方が、識別し易いですがそんな事可能なのですか?
No.3
- 回答日時:
補足要求です。
質問1:sheet1及びsheet2は約何行ありますか。
質問2:売上金額増減 売上金額伸長 点数増減 点数伸長の算出方法は、以下の式で良いですか。
売上金額増減=sheet2の売上金額-sheet1の売上金額
売上金額伸長=sheet2の売上金額/sheet1の売上金額(但し、sheet1の売上金額が0の場合は0を表示)
点数増減=sheet2の点数-sheet1の点数
点数伸長=sheet2の点数/sheet1の点数(但し、sheet1の点数が0の場合は0を表示)
質問3:マクロで上記を実現すると、マクロを実行したタイミングで、sheet1,sheet2の内容がsheet3に反映されます。
shee1,sheet2を更新しても、マクロを実行しない限り、sheet3に反映されませんがそれでも良いですか。
ご丁寧にありがとうございます。
質問1どちらも約350行です。将来的には800行ぐらいまで増える予定です。
質問2はその通りです。
質問3マクロ実行のタイミングで反映できるのが一番理想です。(ただ、私は作れませんが・・・)
No.2
- 回答日時:
画像が見えないので何をしたいのかが良くわかりませんが、
コードごとに整理したいのであれば、次の方法が利用できると思います。
Vlookupでコードを検索値とする、
sheet1の下にsheet2を連結して、ピボットテーブルを作成、
但し、範囲は都度指定です。
> 当方、エクセルは初心者レベルです。
これは余分な逃げ口上です… 誰でも知らないことに対しては初心者です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 関数について 4 2022/08/05 11:03
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Excel(エクセル) ある文字を含む際に、値を返す数式についてです 5 2022/08/28 16:58
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
Excel VBAのComboboxのRemoveItem
-
Excel2000 VBA ダブルクリック...
-
Excel VBA For Each Next構文...
-
VBA重複チェック
-
EXCELで2つの数値のうち大きい...
-
エクセルVBA、別ブックへ転記す...
-
PowerPointで表の1つの列だけ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
エクセルで、2種類のデータを...
-
エクセルでオートフィルタのボ...
-
SUMIFS関数で絶対値で合...
-
エクセル(勝手に太字になる)
-
2つのエクセルのデータを同じよ...
-
エクセルのオートフィルタで最...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
エクセルの表から正の数、負の...
-
エクセルで時刻(8:00~20:00)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
Excel VBAのComboboxのRemoveItem
-
Gメールの内容をスプレッドシ...
-
EXCEL(エクセル)で0.001以下...
-
エクセルの関数を連続コピー
-
エクセルで重複するセルを削除...
-
エクセルのIF関数がうまくいき...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報