• ベストアンサー

【excelマクロ】重複データをチェックしてその行を削除・表を集計して整頓するマクロ

MC28SP 会社で資材の在庫管理表を作成しているのですが、大変困っております。 マクロ初心者で技術不足なのでどうかご教授願います。 「資材受け入れシート」として、下の表があります。    1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 これを2列目「品名」をキーとして「Lot」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは(1)2列目「品名」の重複確認のみで行削除ではなく、3列目「Lot」も確認する必要があることと、(2)削除してからその「品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えているのですが・・・。   1   2   3  4  受入日 品名  Lot  数量   7/8   A  BNR32  15   7/10   B  SW200  14   7/7   B  AE860  4   7/9   C  GD300  11   7/7   C  DC200  7 「受入日」の所はできれば最終日になれば良いかなと思っています。 会社で期限を決められているのですが、手こずってしまい前へ進みません。説明が分かりづらいかもしれませんが、どうか宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

ご参考までにという事で。。。 標準モジュールで実行してみてください。 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0         Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub

MC28SP
質問者

お礼

ありがとうございます。試してみましたが、完璧に実行できました。 参考どころか、こちらの希望どうりに動いてくれて感動しております。 これからこちらのプログラムを元にさらに改造していこうと思います。 本当にありがとうございました。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

#2 ですが、コードの一部訂正を。   ' // Dictionary キーはテキスト比較する   dic.CompareMode = TextCompare        ↓   ' // Dictionary キーはテキスト比較する   dic.CompareMode = 1 ' TextCompare

MC28SP
質問者

お礼

詳しいご説明、ありがとうございました。マクロを実行させて頂きましたがちゃんと動きました。当方、初心者ですので大変勉強になりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 今、読んでいて、少しご説明が分かりにくいのですが、 >今回の在庫表作成のキーポイントは資材の「Lotと数量」を正確に管理することでした。 (加筆「...」) 「製品名のロットごとの数量の集計」ではないのでしょうか? >品名(実際は漢字・カナなど)+Lotを1つのセルにくっつけて書き出して(方法がわかりません)、 D列に、仮の名前「Lot@」を挿入して、 * = 品名 &","& Lot で、Lot@ の下にコピーします。   A列  B列  C列  D列  E列  受入日 品名  Lot Lot@  数量              *(数式):D2 で、 [フィルターオプション]で、一覧表を出せばよいと思います。 (ただし、末尾に半角空白などが入っていることがありますから、置換などで、取り去ってから、数式で二つの文字をあわせてください) 後は、ほぼ手順は同じです。 Lot@ A,BNR32 A,DC200 B,SW200 B,AE860 B,BNR32 C,GD300 C,DC200 このように出てきますから、これで、[統合]を掛けて、 Lot@   数量 A,BNR32  15 A,DC200  3 B,SW200  15 B,AE860  4 B,BNR32  1 C,GD300  11 C,DC200  7 と出てきたら、    一列 [挿入]して Lot@ V  数量 データ-[区切り位置] -コンマで、 A,BNR32 (右隣を一列あける) A,DC200 B,SW200 B,AE860 B,BNR32 C,GD300 C,DC200   ↓ A  BNR32  15 A  DC200  3 B  SW200  15 B  AE860  4 B  BNR32  1 C  GD300  11 C  DC200  7 とすれば、それぞれの品名とロットが別けられます。 そこで、前回の数式をそのまま利用して、 例えば、このように、J列にロット番号があるなら、 ** =SUMPRODUCT(MAX(($C$2:$C$12=J2)*($A$2:$A$12)))   H     I    J    K 受入日   品名  Lot  数量 **(数式)  A  BNR32  15 とすればよいわけです。

MC28SP
質問者

お礼

簡潔かつご丁寧なご説明、ありがとうございます。 当方のイメージどおりに解説して頂いて本当に嬉しかったです。 マクロや関数に詳しくない当方にとって「助け舟」となりました。 本当にお世話になりました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

この手のものは仕様変更があった場合、ご自分でメンテできないと 大変ですよ。。 簡単な入力チェックは入れておきましたが、データの整合性、例えば  ・日付欄に文字列があるなど不適切なデータの存在  ・Lot で全角・半角が混在する などのチェックも必要かもしれません。それが原因となって、集計値が 変わってしまう恐れがあるからです。 なるべくコメントを入れましたが、動作確認はろくにしてません^^; あと考え方ですが、VBA は基本的に UNDO できません。したがって、 ソースデータを直接削除。。というのは乱暴で、新規シートなどに結果 出力し、ソースデータの削除はユーザーに任せた方が安全です。 Sub Sample()   Const SEPARATOR = "_$$_"   Dim dic   As Object   Dim Sh    As Worksheet   Dim lLastRow As Long   Dim n    As Long   Dim i    As Long   Dim sKey   As String   Dim sItm   As String   Dim vTmp1  As Variant   Dim vTmp2  As Variant   Dim vKey   As Variant     ' // データシート   Set Sh = Worksheets("資材受け入れシート")      ' // エラー発生時にはラベル[Err_]の行に飛ばす   On Error GoTo Err_   ' // Dictionary オブジェクトを用意   Set dic = CreateObject("Scripting.Dictionary")   ' // Dictionary キーはテキスト比較する   dic.CompareMode = TextCompare      ' // データの最終セル行番号を調べる(A列で判定)   lLastRow = Sh.Cells(Rows.Count, "A").End(xlUp).Row   ' // 2行目から順に最終行まで集計していく   For i = 2 To lLastRow     ' // A~D 列の4項目に入力漏れがあれば、エラーを発生させて中止     n = Application.CountA(Range(Sh.Cells(i, "A"), _                    Sh.Cells(i, "D")))     If n <> 4 Then       Application.Goto Reference:=Sh.Rows(i)       Err.Raise 1000, , CStr(i) & "行目にデータ入力漏れがあります"     End If     ' // キーとなる文字列を生成     sKey = Trim$(Sh.Cells(i, "B").Value) & SEPARATOR & _         Trim$(Sh.Cells(i, "C").Value)     ' // 集計値となる文字列を生成     ' // 日付に時間があれば比較の障害となるのでカット     sItm = CStr(Int(Sh.Cells(i, "A").Value) & SEPARATOR & _             Sh.Cells(i, "D").Value)     ' // Dictionary オブジェクトに登録済みか判定     If Not dic.Exists(sKey) Then       ' // 登録がない=初めての項目の場合       dic.Add Key:=sKey, Item:=sItm     Else       ' // 登録がある=既出項目の場合       ' // キーを分解-->品名、Lot の配列となる       vTmp1 = Split(dic(sKey), SEPARATOR)       ' // 集計値を分解-->日付、数量の配列となる       vTmp2 = Split(sItm, SEPARATOR)       ' // 日付を比較し、直近の日付に更新       If CDate(vTmp1(0)) < CDate(vTmp2(0)) Then         vTmp1(0) = CStr(vTmp2(0))       End If       '// 値はそのまま加算する       vTmp1(1) = CStr(CDbl(vTmp1(1)) + CDbl(vTmp2(1)))       ' // Dictionary オブジェクトの値を更新       dic(sKey) = vTmp1(0) & SEPARATOR & vTmp1(1)       ' // 不要となった配列を消去する       Erase vTmp1       Erase vTmp2     End If   Next i   ' // 出力処理   If dic.Count > 0 Then     Application.ScreenUpdating = False     Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))     i = 1     For Each vKey In dic.Keys       vTmp1 = Split(vKey, SEPARATOR)       vTmp2 = Split(dic(vKey), SEPARATOR)       Sh.Cells(i, "A").Value = vTmp2(0)       Sh.Cells(i, "B").Value = vTmp1(0)       Sh.Cells(i, "C").Value = vTmp1(1)       Sh.Cells(i, "D").Value = vTmp2(1)       i = i + 1     Next     Sh.Columns("A:D").AutoFit     Application.ScreenUpdating = True     MsgBox "Done.", vbInformation   End If Bye_:   Set Sh = Nothing   Set dic = Nothing   Exit Sub Err_:   MsgBox Err.Description, vbInformation   Resume Bye_ End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 今、調べてみましたが、それは、マクロでなくても順序よくやれば、コマンドだけで出来ますね。 今回のマクロで解決するための問題点は、最後に書きました。 カーソルを何も書かれていないところ、 例: F1 に置く メニュー-データ-フィルタオプションの設定  リスト範囲 (Lot の列)  指定した範囲 にチェック  抽出範囲 F1 をクリック  重複するレコードは無視 にチェック   カーソルを何も書かれていないところ、  H1 に置く メニュー-データ-統合  集計の方法「合計」  統合元範囲 (Lot と数量の範囲)->追加  統合元範囲 (F1かに出力した列の範囲)->追加  統合基準 左端列 にチェック  OK をクリック --------------------- H    I Lot  数量 BNR32  15 SW200  14 AE860  4 GD300  11 DC200  7 --------------------- 後は数式だけです。 G列 品名 G2:~ =INDEX($B$1:$B$9,MATCH(H2,$C$1:$C$9,0),1) (範囲は適宜変更してください) F列 受注日 F2:~ =SUMPRODUCT(MAX(($C$2:$C$9=H2)*($A$2:$A$9))) (範囲は適宜変更してください) *数字になって出ますから、日付の書式に直してください。 約5500件以上に場合、Excelの下位バージョン(2000)などの場合は、うまく行かない恐れがあります。 完成図: 受注日  品名  Lot 数量 7/8   A  BNR32   15 7/10  B  SW200   14 7/7   B  AE860   4 7/9   C  GD300   11 7/7   C  DC200   7 マクロも基本的な設計方法は同じというか、よほどExcel自体を知らない人出ない限りは、記録マクロを利用するのが便利です。(プログラム的に、その方法-メソッドを越えないからです。) マクロの場合のネックは、後戻りが利かないので、最初のデータの並びが正しくなっているか、などのチェック要素が必要なのと、受入日の最終日というのは、しょせん、この配列のワークシートの関数ほど簡単には出てこないのではないか、と思っています。 逆にいうと、この受入日の最終日の出力は、マクロではややこしいような気がします。それは、並びが昇順に並んでいないからです。

MC28SP
質問者

補足

早速のご回答、ありがとうございます。 なるほど、確かにWendy02様のやり方で整頓できますね。参考になりました。 ただ、私の「資材受け入れシート」の例が悪かったのですが、   A列  B列  C列  D列  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/9   A  DC200  3   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/5   B  BNR32  1   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7   7/8   B  SW200  1 のような場合、つまり「Lot」が全く同じで別の商品があった場合、 正確に集計できない(品名-Lotが関連付けされない)のではないでしょうか? もしそうであればデータ統合のところで、 品名(実際は漢字・カナなど)+Lotを1つのセルにくっつけて書き出して(方法がわかりません)、   ABNR32  10   ABNR32  5   ADC200  3   BSW200  2 の様にしてから集計すれば良いのでしょうか? 実際、品名は違いますがLotが同じ商品も沢山あります。 私事ですが、今回の在庫表作成のキーポイントは資材のLotと数量を正確に管理することでした。 他に簡単な方法がございましたら、具体的にお教え頂けませんか? 初心者で度々ご迷惑をお掛けしますが、宜しくお願いします。

関連するQ&A

  • 【excelマクロ】重複をチェックしてその行を削除・表を整頓するマクロ

    会社で資材の在庫表を作成しているのですが、大変困っております。 マクロ初心者で技術不足なのでどうかご教授願います。 「資材受け入れシート」として、下の表があります。    1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 これを2列目「品名」をキーとして「Lot」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは2列目「品名」の重複確認のみで行削除ではなく、3列目「Lot」も確認する必要があることと、削除してからその「品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えております。   1   2   3  4  受入日 品名  Lot  数量   7/8   A  BNR32  15   7/10   B  SW200  14   7/7   B  AE860  4   7/9   C  GD300  11   7/7   C  DC200  7 「受入日」の所はできれば最終日になれば良いかなと思っています。 会社で期限を決められているのですが、手こずってしまい前へ進みません。説明が分かりづらいかもしれませんが、どうか宜しくお願いいたします。

  • 【excelマクロVBA】表の集計・転記マクロの改造点について

    以前、こちらのカテゴリーで重複をチェックしてその行を削除し表を整頓するマクロとしてプログラムを教えて頂きました。    (資材受け入れシート)  →   (Sheet2) 受入日 品名  Lot  数量   受入日 品名  Lot  数量   7/7   A  BNR32  10    7/8   A  BNR32  15   7/8   A  BNR32  5    7/10   B  SW200  14   7/10   B  SW200  2 →  7/7   B  AE860  4   7/7   B  AE860  4    7/9   C  GD300  11   7/8   B  SW200  12    7/7   C  DC200  7   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 プログラムの内容は、 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0        Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub と記述されており、正常に動作いたしました。 ところが、会社から受入日,品名,Lot,数量だけでなく、納入業者,賞味期限,担当者の項目(列)を追加し転記できるように欲しいと命じられました。業務の都合上、列の順番は受入日,<納入業者>,品名,Lot,<賞味期限>,数量,<担当者>の順番で挿入し、追加した3項目については計算させる必要は無く、転記だけさせたいと考えています。上のプログラムを元に改造を試みたのですが、転記が上手くできません。どこの部分にどのように記述・変更したら良いのかが分りません。どなたかご存知の方、お教え願えませんでしょうか?表の作成までにもう少しというところで躓いてしまい頭を悩ませております。初歩的な質問かもしれませんが、宜しくお願い致します。

  • エクセル VBA SQL 開始行の指定

    namatyu MC285Pさんの質問からの解答を利用させていただいて、会社の履歴表を作成しましたが、訳あって、(資材受け入れシート)側の開始行をA1からA2に変えた所、「パラメータがすくなすぎます。14を指定してください」と出てしまいます。 Sheets("資材受け入れシート").Range("A1:D1").Copyを Sheets("資材受け入れシート").Range("A2:D2").Copyに変えても解決しません… SQL文が勉強不足で、変更場所が分かりません   1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0         Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub 色々、試したのですが、分かりません… すいませんが、どたたか教えてください、お願いします。

  • Excel2010で行ごとの重複削除

    Excel2010です。 A行目 1 3 5 5 2 2 3 B行目 2 3 5 5 4 4 C行目 1 9 7 9 9 ↓ A行目 1 3 5 2 B行目 2 3 4 5 C行目 1 7 9 というように、行ごとに重複の削除をしたいと思っています。 データタブに重複の削除があるのですが、列ごとにやるようなので、一度シート全体を 行と列を入れ替えて別シートにコピーして、 1列目全体を選択して、1列目で重複の削除を実行 2列目全体を選択して、2列目で重複の削除を実行 ・・・ というやり方もあるのですが、今扱っているエクセルは197行197列あります。 列選択、重複の削除アイコンをクリックするのを197回繰り返すのは大変です。 自動化する方法はないものでしょうか?

  • Excel2003での行重複削除

     Excel2003で、列のセル内容が同一の場合を削除・抽出することは可能でしょうか。例えば、次のようなイメージです。 行番号 A列 B列 行1 A1県 B1市 行2 A1県 B2市 行3 A1県 B3市 行4 A1県 B4市 行5 A2県 B5市 行6 A2県 B6市  ここから、A列が同一の行の重複を削除したいのです。上記では、行1から行4までは「A1県」で同一なので、1つの行だけ残し後の行は削除したい。B列の内容は重複削除で一部消えますが構いません。上記の場合、抽出結果は次のようになります(先頭行だけ残した場合ですが)。 行番号 A列 B列 行1 A1県 B1市 行5 A2県 B5市  データベースが大きいため、手作業で削除して行くのは大変です。適当な方法がありましたら、是非、ご教示ください。  どうぞ宜しくお願いします。  

  • 重複行を削除

    重複する行をVBAコードで削除したいのですが A列 B列 C列 あ  1  a あ  1  a あ  2  a い  1  a い  2  c い  2  c A列 B列 C列 あ  1  a あ  2  a い  1  a い  2  c のようにABC列同一文字は1行にしたいのですがVBAコード、関数の解る方ご教授願います。

  • Excel2003で重複したデータを削除したい

    Excel2003で重複したデータを削除する方法を教えて下さい。 A・B・C・Dの列の全てが重複するデータを削除したいのですが、可能ですか?AとB列は重複するけど、CやDのデータは重複していなければ、残しておきたいです。 以下イメージです。 行/列  A   B    C    D 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2 3    なす  商店  200円  3/2 ------------------------------------- 以下、重複データ削除後のイメージ。 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • 【Excel VBA】条件つき行削除

    Excel2003を使用しています。 システムからCSVで落としたデータで、データの並び方に規則性があるので、それを利用して、不要部分のデータをマクロで削除できないかと思い、質問させていただきます。 A列に『累計』を含む文字があった場合、その行のD列が0だったら、その行より上の行のA列に『計上日』と入力されている行までを削除するということをしたいです。 下記でいうと、2~5行までを削除したいです。    A     B     C     D 1 2 計上日 3 4 5 累計                0 6 7 計上日 8 9 累計              1000 上記では、B列、C列には何も書いていませんが、実際はデータが入力されていたり、空欄だったりです。 D列が0の行を削除するコードはわかるのですが、さらに、条件が加わっても同じように処理は可能でしょうか? よろしくお願いします。

  • マクロで重複データの削除

    過去ログを使っていろいろ試したのですが、うまくいかなかったので助言お願いします。 データ的には B列 C列 AAA 50 AAA 50 BBB 70 BBB 70 BBB 72 CCC 25 のようなデータあります。 これを「AAA」でC列のデータが同じやつはひとつにするということをやりたいのです。 B列 C列 AAA 50 BBB 70 BBB 72 CCC 25 のようになります。 B列第一優先にC列第二で並べ替えをして、過去ログ参照より、下のデータからループしてくというのを試したのですが、全部削除されてしまいます。 しかし、これでは並べ替えの場合によってはCの重複がおかしくなると思うので、B列参照したほうがいいのかな? 別シートに書き出しタイプでないやり方をしたいと思っています。お助けくださいよろしくお願いします。

専門家に質問してみよう