商品名 年月日 売り上げ
りんご 7月7日 123,000 4 5 6 7
みかん 5月2日 123,000 りんご
みかん 5月3日 123,000 みかん
りんご 5月4日 123,000 バナナ
バナナ 6月5日 123,000
バナナ 7月5日 123,000
りんご 5月7日 123,000
りんご 4月5日 123,000
上の表に商品ごと売り上げ年月日ごとに売り上げ金額があります。
これをもとに右表に集計したいと思います。
Sub t()
Dim g As Double
Dim i As Long
For i = 15 To 22
If Cells(i, 6).Value >= DateSerial(2017, 5, 1) And Cells(i, 6).Value <= DateSerial(2017, 5, 31) Then
g = g + Cells(i, 7).Value
End If
Next i
Cells(16, 12).Value = g
End Sub
ここまでやれましたが りんごをどうやって処理したらよいか
また、うまく一度に処理できないのか考えています。
よい方法があれば教えてくれませんでしょぅか
No.3ベストアンサー
- 回答日時:
こちらでも作ってみました。
-----------------------------------------------------------------------------------------
Sub test()
Const 元 As String = "E14"
Const 先 As String = "J15"
Dim 元列 As Long
Dim 元行 As Long
Dim 先列 As Long
Dim 先行 As Long
Dim 元始 As Long
Dim 元終 As Long
Dim 先始 As Long
Dim 月 As Date
Dim 位置 As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
元始 = Range(元).Row + 1
元列 = Range(元).Column
元終 = Cells(Rows.Count, 元列).End(xlUp).Row
先始 = Range(先).Row
先列 = Range(先).Column
Range(Cells(先始, 先列 + 1), Cells(Rows.Count, 先列 + 13)).ClearContents
Range(Cells(先始, 先列 + 1), Cells(先始, 先列 + 13)).NumberFormatLocal = "m""月"""
Range(Cells(先始 + 1, 先列), Cells(Rows.Count, 先列)).ClearContents
Range(Cells(先始 + 1, 先列 + 1), Cells(Rows.Count, 先列 + 13)).NumberFormatLocal = "#,##0"
月 = Application.Min(Range(Cells(元始, 元列 + 1), Cells(元終, 元列 + 1)))
月 = CDate(Format(月, "yyyy/mm") & "/01")
For 位置 = 先列 To 先列 + 11
Cells(先始, 位置 + 1).Value = 月
月 = DateAdd("m", 1, 月)
Next
For 元行 = 元始 To 元終
For 先行 = 先始 + 1 To Rows.Count
位置 = DateDiff("m", Cells(先始, 先列 + 1).Value, Cells(元行, 元列 + 1).Value) + 先列 + 1
If Cells(先行, 先列).Value = "" Then
Cells(先行, 先列).Value = Cells(元行, 元列).Value
Cells(先行, 位置).Value = Cells(元行, 元列 + 2).Value
Exit For
Else
If Cells(先行, 先列).Value = Cells(元行, 元列).Value Then
Cells(先行, 位置).Value = Cells(先行, 位置).Value + Cells(元行, 元列 + 2).Value
Exit For
End If
End If
Next
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
-----------------------------------------------------------------------------------------
位置など決まっていないというので、簡単に変更出来るようにしたので少し見にくいコードになってしまったかもしれません。
「Const 元 As String = "E14"」と「Const 先 As String = "J15"」だけ変更すれば後は自動で処理します。
もちろん商品が増えれば、勝手に処理します。
一番古いデータの月から1年間分を処理するように作成しています。
No.5
- 回答日時:
一応念の為の注意です。
年月日の欄ですが、例えば「2017/12/30」のデータを年をまたいで1月に「12/30」とか入力してしまうと「2018/12/30」になってしまうので、年をまたいだ時は、年の入力を忘れないで行ってください。(書式設定の関係上、年が違っていても同じに見えるので、集計されない時などは年が合っているか最初に確認してください)
実はこの辺も、セルの書式設定を「@(文字列)」にして「yyyy/m/d」や「m/d」形式で入力し、マクロ(VBA)を使えば回避出来たりしますけど必要でしょうか?(なぜ書式設定を文字列にするかというと、文字列にしていないと意識的に年を入れているかの判断が出来ない為です。判断後は自動で書式設定を「m"月"d"日"」に変更する事ももちろん可能です)
No.4
- 回答日時:
No.3 の訂正
すみません。添付した図はテストでデータなどを動かしたものを載せてしまいました。
No.3 の場合は下図のようなデータの時の物です。
ちなみに No.3 の図の場合は、もちろん「Const 元 As String = "B5"」「Const 先 As String = "I3"」になります。
No.2
- 回答日時:
それでしたら、もういくつか質問させていただきます。
① 年月日の列は表示形式が「m"月"d"日"」になっているだけで、実は年も持っていますか?(数式バーには「2017/7/7」のように表示されている)
② 行の最後は22行目と固定するよりも15行目以降最後までの方が良いでしょうか?
③ K列以降の15行目は「4」などの数字単独ではなく「4月」のようにした方が良いでしょうか?
④ 売り上げの無い欄は空欄で良いですか?
⑤ 集計は最大12ヶ月でで良いでしょうか?それともデータが有る限り集計した方が良いでしょうか?その場合は「年」表示も必要だと思いますがどうしたらいいでしょうか?
⑥ 念の為の確認ですが、位置などのレイアウトは先ほどの図で間違いないでしょうか?
No.1
- 回答日時:
何をやりたいのかよく判らないし、レイアウトもよく判りません。
もしかして下図のような月ごとの商品別の集計を行いたいのでしょうか?
なお売り上げの数値は検証しやすいように変えてあります。
お時間いただき有難うございました。
自分なりに解決しました。
ただこれで大丈夫か心配です。
また、コードをうまくまとめられることが
できないんでしょぅか。
Sub test31()
Dim i, l As Long
For i = 15 To 17
Cells(i, 12).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/5/1", Range("f15:f22"), "<=2017/5/31")
Cells(i, 13).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/6/1", Range("f15:f22"), "<=2017/6/30")
Cells(i, 14).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/7/1", Range("f15:f22"), "<=2017/7/31")
Cells(i, 15).Value = Application. _
SumIfs(Range("g15:g22"), Range("e15:e22"), Range("k" & i), Range("f15:f22"), ">=2017/8/1", Range("f15:f22"), "<=2017/8/31")
Range("l15:o17").NumberFormatLocal = "#,##0"
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
夏が終わったと感じる瞬間って、どんな時?
まだまだ暑い今日この頃。 しかしながら、もう夏は終わっている!……はず。 あなたが思う「夏が終わった!」エピソードを教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
VBA 得意先ごと且つ日付ごとに数値を集計したい
その他(Microsoft Office)
-
EXCELのVBAでRange(A1:C4")を変数にする方法を教え"
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
【Excel VBA】 B列に特定の文字...
-
データグリッドビューの一番最...
-
vba 2つの条件が一致したら...
-
VBAで指定範囲内の空白セルを左...
-
VBAで、特定の文字より後を削除...
-
マクロについて。S列の途中から...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
rowsとcolsの意味
-
【Excel VBA】カンマと改行コー...
-
Changeイベントでの複数セルの...
-
Excel VBA:エクセルのマクロで...
-
ExcelVBAでテキストルーレット...
-
VBAコンボボックスで選択した値...
-
VBscriptでExcel sheetの並び替...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【Excel VBA】 B列に特定の文字...
-
IIF関数の使い方
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
Changeイベントでの複数セルの...
-
VBAを使って検索したセルをコピ...
-
VBA 何かしら文字が入っていたら
-
エクセルVBA intersect colu...
-
VBAでのリスト不一致抽出について
-
マクロ 最終列をコピーして最終...
-
VBAコンボボックスで選択した値...
-
複数の列の値を結合して別の列...
おすすめ情報
はい、その通りです。
説明不足でもうしわけございませんでした。
宜しくお願い致します。
① 数式バーには2017/7/7になっています。
② 行は固定しないほうがいいです。
③ 4月でお願いします。
④ ハイ空欄です。
⑤ 12か月です。
⑥ 位置などは特にきまっていません。
宜しくお願い致します