
表題の質問をさせていただきます。よろしくお願いいたします。
A列には商品名 B列には販売数があるとします。
商品には一回しか出てこない物や何度も出てくるものがあります。
そこで、販売数が最大値のみの重複しない商品データにする方法をお聞きしたいのです。
できれば非表示的な処理ではなく不要行削除が望ましいです。
例 下の場合
りんご 3(重複商品の最大値)
みかん 5(単独商品)
りんご 1
バナナ 6(単独商品)
りんご 2
イチゴ 2(重複商品の最大値)
イチゴ 1
↓にしたいのです。
りんご 3
みかん 5
バナナ 6
イチゴ 2
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
No2 merlionXXです。
myDic自身が配列だったのでもっと簡潔な書き方が出来ました。
ご参考のため各コードにコメントも付けておきました。
Sub test02()
Dim myDic As Object '変数宣言
Dim c As Range '変数宣言
Set myDic = CreateObject("Scripting.Dictionary") 'myDicを用意
For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)) 'A列の各データについて
If Not myDic.exists(c.Value) Then 'myDicになければ
myDic.Add c.Value, c.Offset(0, 1).Value '追加しB列データを結びつける
Else 'myDicにあれば
myDic(c.Value) = IIf(myDic(c.Value) < c.Offset(0, 1).Value, c.Offset(0, 1).Value, myDic(c.Value)) 'B列データの大きい方を結びつける
End If
Next c '繰り返し
Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加
ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) 'A列にデータ
ns.Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items) 'B列に結びつけデータ
Set myDic = Nothing
Set ns = Nothing
End Sub
お返事ありがとうございます。
前日のお礼時に書いた内容までは、まだ解決できていないのですが、当初質問させていただいた内容については無事に解決いたしております。
時間が掛かると申し訳ないので、いちど締め切らせていただこうと思います。
この度は本当にありがとうございました。
No.2
- 回答日時:
VBAで行う一例です。
別シートを作成し、そこに抽出します。
Sub test02()
Dim myDic As Object
Dim c As Range
Dim myKey(), myItem()
Set myDic = CreateObject("Scripting.Dictionary")
For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp))
If Not myDic.exists(c.Value) Then
myDic.Add c.Value, c.Offset(0, 1).Value
Else
myDic(c.Value) = IIf(myDic(c.Value) < c.Offset(0, 1).Value, c.Offset(0, 1).Value, myDic(c.Value))
End If
Next c
myKey() = myDic.Keys
myItem() = myDic.Items
' MsgBox Join(myKey()) & Join(myItem())
Set ns = Worksheets.Add(After:=ActiveSheet)
ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myKey())
ns.Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myItem())
Set ns = Nothing
End Sub
お返事ありがとうございます。
早速 試させていただき無事に動作が出来まして、今は勉強しながら既存シートへの上書きへの変更や商品名がA列に無いときなどの場合の実験をしているところでした。(ともに うまくできました)
するとお礼をする前に次のお返事が入っており感激しているところです。
しかも、コードの解説付きで大感謝です。
さらに、参考にさせていただきながら改造をしてみようと思っております。
のちほど追加の質問をさせていただこうと思いますので もしよろしければご教授の程よろしくお願いいたします。
ちなみに現在、格闘中の部分は 実際には列がたくさんあるので A・B以上の列の場合と 最大値がB列に無い場合への改造を試しております。
No.1
- 回答日時:
案1
フィルタオプションの設定で重複レコードを削除し
配列数式で計算
=MAX(IF($A$2:$A$8=D2,$B$2:$B$8))
コピー&値の貼り付け
案2
ピボットテーブル案の最大値
案3
並べ替えて 集計を最大値で
は非表示なので没ですね

お返事いただきありがとうございます。
全て試させていただいたところ、案1が良さそうだったのですけど なかなか同じ動作が出来ずに いろいろと やっていたところ ご提案を参考にさせていただきながら以下の方法で解決できました。
商品名を第一優先で販売数を降順で並べ替えておく。
フィルタオプションの設定を選択範囲にしました。
すると どうにか思っていた結果に結びつけることが出来ました。
この度はありがとうございました、今後ともよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】【画像あり】4つの...
-
5単位で繰り上げしたい
-
Dir関数のDo Whileステートメン...
-
【マクロ】【画像あり】ファイ...
-
【マクロ】【画像あり】4つの...
-
9月17日でサービス終了らし...
-
【マクロ】エラー【#DIV/0!】が...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのリストについて
-
エクセルのdatedif関数を使って...
-
オートフィルターの絞込みをし...
-
【マクロ】数式を入力したい。...
-
【関数】同じ関数なのに、エラ...
-
空白のはずがSUBTOTAL関数でカ...
-
セルにぴったし写真を挿入
-
EXCELのVBAで複数のシートを追...
-
【マクロ】【画像あり】関数が...
-
エクセルシートの見出しの文字...
-
エクセルの関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報