下記の表でA列(店名)とB列(品物)が同一の時にまとめてD列に品名、E列に合計金額を記入したいと思っています。D,E列はA列_各店名の最初の行から、B列の品物順で記入したいです。
現在はフィルタで絞って重複削除し、D列へ貼り付け、E列はSUMIFで計算しています。
Unique関数は使用できません。VBAも少し理解しています。
店名、品物が多いため、効率的なやり方を教えていただけないでしょうか。
どうぞよろしくお願いいたします。
A B C D E
店名 品物 金額 品物別合計 金額
A店 みかん 110 みかん 330
A店 りんご 150 りんご 280
A店 みかん 100
A店 みかん 120
A店 りんご 130
B店 いちご 300 いちご 700
B店 りんご 150 りんご 150
B店 みかん 120 みかん 220
B店 いちご 400
B店 みかん 100
No.8ベストアンサー
- 回答日時:
No2です。
以下のようにしてください。
Option Explicit
Public Sub 店別品物別合計()
Dim dicT As Object
Dim sh As Worksheet
Dim prev As String
Dim maxrow As Long
Dim wrow As Long
Dim srow As Long
Dim grow As Long
Dim key As String
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh = ActiveSheet
maxrow = sh.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet A列最終行を求める
sh.Range("D2:E" & maxrow).Value = "" 'D、E列クリア
prev = ""
srow = 2
For wrow = 2 To maxrow
If prev <> sh.Cells(wrow, "A").Value Then
dicT.RemoveAll
srow = wrow
End If
key = sh.Cells(wrow, "B").Value
If dicT.exists(key) = False Then
dicT(key) = srow
sh.Cells(srow, "D").Value = sh.Cells(wrow, "B").Value '品物設定
srow = srow + 1
End If
grow = dicT(key)
sh.Cells(grow, "E").Value = sh.Cells(grow, "E").Value + sh.Cells(wrow, "C").Value '金額加算
prev = sh.Cells(wrow, "A").Value
Next
MsgBox ("完了")
End Sub
No.6
- 回答日時:
[No.3お礼]へのコメント、
》 さらにD,E列は店舗ごとに上段から
》 詰めて入力したいと思っています
此処の添附圖の樣にね。實は、其れが私好みなんだけど、ハナレバナレ愛する貴方は風變はりな人と思ってました。(^_^)
K2: =SMALL(IF($J$2:$J$11=1,ROW(J$2:J$11)),ROW(A1))
 ̄ ̄【御斷はり】上式は必ず配列數式として入力の事
本当にありがとうございます!とても参考になります。関数自体はわかっているつもりなのに、なくなかなか自分で応用出来るようになりません。。もっと勉強します!
No.5
- 回答日時:
>D、E列は各店ごとに上段から詰めて入力したいのですが、
>下記の右図のようにする方法があれば教えていただけないでしょうか。
各店は、必ずひとかたまりになっていますか?
つまり、
A2=A店
A3=A店
A4=A店
A5=B店
A6=B店
A7=A店・・・・このようなケース
は絶対ないのでしょうか。
No.4
- 回答日時:
こんにちは
D列が求められれば、E列の式はそのままでもよさそうに思いましたので、D列のみの回答です。
>効率的なやり方を教えていただけないでしょうか。
関数で直接求める方式なので、必ずしも「効率がよい」とは言えませんが、行数がそれほど大きくなければ気にならないと思います。
D2セルに
=IF(ISERROR(MATCH(ROW(A2),INDEX(ROW(A$2:A$999)/(COUNTIFS(OFFSET(A$1,,,ROW(A$2:A$999)),A$2:A$999,OFFSET(B$1,,,ROW(A$2:A$999)),B$2:B$999)=1),),0)),"",B2)
の式を入力して、下方に必要な範囲までフィルコピーではいかがでしょうか?
No.3
- 回答日時:
セル G2、H2 に夫々式 =A2&"_"&B2、=COUNTIF(G$2:G2,G2) を
入力⇒範圍 G2:H2 を下方にズズーッと(11行目迄)オートフィル⇒
セル D2、E2 に夫々式
=IF(H2=1,B2,"")
=IF(D2="","",SUMIFS(C$2:C$11,A$2:A$11,A2,B$2:B$11,B2))
を入力⇒範圍 D2:E2 を下方にズズーッと(11行目迄)オートフィル
オ・シ・マ・イ
G列にこのように表記すればよいのですね。とても参考になりました。
ありがとうございます。
私の例文が悪かったのですが、さらにD,E列は店舗ごとに上段から詰めて入力したいと思っています。同一の品物が続いた時に、空白をとらないようにする方法をさらに考えてみたいと思います。本当にありがとうございました。
No.2
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 店別品物別合計()
Dim dicT As Object
Dim sh As Worksheet
Dim maxrow As Long
Dim wrow As Long
Dim grow As Long
Dim key As String
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh = ActiveSheet
maxrow = sh.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet A列最終行を求める
sh.Range("D2:E" & maxrow).Value = "" 'D、E列クリア
For wrow = 2 To maxrow
key = sh.Cells(wrow, "A").Value & "|" & sh.Cells(wrow, "B").Value
If dicT.exists(key) = False Then
dicT(key) = wrow
sh.Cells(wrow, "D").Value = sh.Cells(wrow, "B").Value '品物設定
End If
grow = dicT(key)
sh.Cells(grow, "E").Value = sh.Cells(grow, "E").Value + sh.Cells(wrow, "C").Value '金額加算
Next
MsgBox ("完了")
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Excel(エクセル) SUBTOTAL SUMIF?? 2 2023/03/16 11:25
- Excel(エクセル) 【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。 3 2023/03/23 17:30
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Excel(エクセル) Xlookupの結果がうまくいきません。(excel2013) 2 2023/06/18 17:32
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelはなんで先頭の0を消すん...
-
Excel元に戻す方法を教えてくだ...
-
【Microsoft Office Excel Comp...
-
Excelが固まってしまった。
-
西暦や和暦の表示をyyyymmdd表...
-
Excel 2019 のピボットテーブル...
-
【関数】スペースがいくつ入っ...
-
【Excel】セル内の時間帯が特定...
-
excelの不要な行の削除ができな...
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excelのセルを飛ばして入力する
-
Excel初心者です。 詳しい方、...
-
エクセルの行の抽出について質...
-
Excel初心者です。 詳しい方、...
-
【マクロ】エクセルにかいてあ...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシート クエリ関数 1...
-
エクセルで指定した日付、店舗...
-
Excelのグラフ軸について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
マクロ勉強中のため、大変勉強になります。ありがとうございます!
D、E列は各店ごとに上段から詰めて入力したいのですが、
下記の右図のようにする方法があれば教えていただけないでしょうか。
説明不足で申し訳ありません。各店は必ずひとかたまりになっています。