• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCLEのマクロ データの絞り込み)

【Excelマクロ】データ絞り込み方法をご教授ください

このQ&Aのポイント
  • Excelのマクロを使用して、特定の条件でデータを絞り込む方法を教えてください。
  • A列とB列が異なる行をまとめ、D列にC列の数値データをカンマで結合したいです。
  • 具体的には、A列に同じデータがあり、B列が異なる場合に、その行を1つにまとめてD列にC列の数値データをカンマで連結したいです。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

#3です。 改良しました。 Sub test02()   Dim myLastRow As Long   Dim i As Long   Range("A1").CurrentRegion.Sort _     Key1:=Range("A1"), Order1:=xlAscending, _     Header:=xlGuess   myLastRow = Cells(Rows.Count, "A").End(xlUp).Row   For i = myLastRow To 2 Step -1     If Cells(i, "A").Value = Cells(i - 1, "A").Value Then        Cells(i - 1, "C").Value = Cells(i - 1, "C").Value & _                    " , " & Cells(i, "C").Value        Cells(i - 1, "D").Value = Cells(i - 1, "C").Value        Rows(i).Delete     Else       Cells(i, "D").Value = Cells(i, "C").Value     End If   Next i   Columns("B:C").Clear End Sub

tomo0117
質問者

お礼

ありがとうございます。 大変感謝しています。 ばっちりうまくいきました。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

元のデータが並べ替え済みであるのかとか,そういった細かい実際の姿によって如何様にも効率が変わりそうですね。 とりあえず全然バラバラを想定して。 Sub macro1()  Dim h As Range  Dim i As Long  Dim res As Long  '結合  For i = 1 To Range("A65536").End(xlUp).Row   res = Application.Match(Cells(i, "A"), Range("A:A"), 0)   Cells(res, "D") = Cells(res, "D") & "," & Cells(i, "C")  Next i  '清掃  For Each h In Range("D:D").SpecialCells(xlCellTypeConstants)   h = Mid(h, 2, 999)  Next  'もし要るなら  Range("1:1").Insert  Range("D1") = "head"  Range("D:D").AutoFilter field:=1, Criteria1:="="  Range("D:D").EntireRow.Delete  range("B:C").clearcontents End Sub

tomo0117
質問者

お礼

回答ありがとうございます。 試してみたのですが、うまくいきませんでした。 私の説明が悪かったのかと思います。 結果はD列に数値データがまとまって表示されたのですが、 0表示とか4.90272700458249E+38という風に表示されてしまいました。 こちらの設定の問題でしょうか。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

こんばんは。 一例です。 Sub test01()   Dim myLastRow As Long   Dim i As Long   Range("A1").CurrentRegion.Sort _     Key1:=Range("A1"), Order1:=xlAscending, _     Header:=xlGuess   myLastRow = Cells(Rows.Count, "A").End(xlUp).Row   For i = myLastRow To 2 Step -1     If Cells(i, "A").Value = Cells(i - 1, "A").Value Then        Cells(i - 1, "C").Value = Cells(i - 1, "C").Value & _                    " , " & Cells(i, "C").Value        Cells(i - 1, "D").Value = Cells(i - 1, "C").Value        Rows(i).Delete     End If   Next i   Columns("B:C").Clear End Sub

tomo0117
質問者

補足

ありがとうございます。 早速、アドバイスいただいたマクロを実行したところほぼ出来たのですが、1点説明が悪かったのか、A列が複数無いデータはそのままC列にある数値データを残したかったのです。 結果 A列 同じデータがない場合はc列のデータはD列に移行したい おかげさまで、いただいたマクロを実行したところA列に複数あるデータのC列の数値データは、D列に,区切りで合体できました。 可能でしょうか。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

誤記訂正! 誤:D2には =C21 正:D2には =C2

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

あまりスマートではありませんが……。 添付の図を見てください。 最終的にオートフィルタを使いたいので1行目には適当に項目名を付けます。 D2には =C21 D3に =IF(COUNTIF(A$2:A2,A3)=0,C3,INDEX(D:D,SUMPRODUCT(MAX((A$2:A2=A3)*ROW(A$2:A2))))&","&C3) と、入れて下方向にコピー E2に =(COUNTIF(A3:A$100,A2)=0) と入れて下方向にコピー #データが100行以上ある場合はA100を書き換えてください。 あとはオートフィルタでE列が「TRUE」の物だけを表示し、A列を昇順で並び替えれば出来上がり

tomo0117
質問者

お礼

回答ありがとうございます。 試してみたのですが、うまくいかず申し訳ございません。 うまくいかないと言うよりは、C列の数値データをAが同じ場合には 一つのセルにまとめたかったのですが、うまくいかなかったのです。 やり方が悪かったのかもしれません。 他の方の回答で今回は試しみてます。

関連するQ&A