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

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

EXCLEのマクロ データの絞り込み

下記のようなことは可能でしょうか。 ご教授いただけますと幸いです。 A列 B列 C列 あああ いいい 1234 あああ ううう 1235 あああ えええ 1236 のデータを A列 D列 あああ 1234,1235,1236 の用にしたいのです。 A列が同じデータでB列が違う行をまとめて 1行にする。しかし、B列とC列は不要だが、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/7940)
回答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

  • EXCLEのマクロ データの絞り込み

    EXCELのマクロについてご教授願います。 数百件のデータで、C列は同じデータは複数あるが、A列に関して別のデータが入っている。B列もほぼ同じデータ ここで条件として C列が同じデータで、A列に特定のワードが入っているデータだけを残し、他のデータを削除するというマクロを組むことは可能でしょうか。 例えば下記のようなデータで、「abcd」だけ残し 他のデータは削除する    A         B        C 1  abcd      AAAAAA      BBBBBB 2  EFGA      AAAAAA      BBBBBB 3  hijk      AAAAAA      BBBBBB 4  lnms      AAAAAA      BBBBBB 5  abGG      PPPPPP      WWWWWW 6  EFTT      PPPPPP      WWWWWW 7  POII      PPPPPP      WWWWWW 2行目から4行目と6行目委から7行目を削除し以下のような データにする。常にA列のデータに ab というキーワードが 入っていて、Cが同じデータは、abが入っているデータのみ 残し他を削除する    A         B        C 1  abcd      AAAAAA      BBBBBB 5  abGG      PPPPPP      WWWWWW のみにする

  • EXCLEのマクロ 2つのシートを統合する方法

    下記のことを行いたいのです。 教えていただけないでしょうか。 下記2つのシートをA列をキーにして sheet1のあ、b、c列のデータに sheet2のc、d列を 統合して、sheet1のdれつ e列に統合して5列のデータを作りたい a列とb列のデータは基本同じですが、スペースが入っていたり 違う場合もある。B列はsheet1のデータを採用 sheet2は不要 ・sheet1 a列 b列 C列 123 ああ 123456 456 いい 125456 789 うう 12344556 1234 ええ 12345678 4567 おお 123456456 8945 かか 1234567844 ------------------- ・sheet2 a列 B列 C列 D列 123 ああ 03-5212-0000 東京都○ 456 いい 06-5212-0000 大阪府○ 789 うう 044-5212-0000 神奈川県○ 1234 ええ 045-512-0000 横浜市○ 4567 おお 043-212-0000 埼玉県○ 8945 かか 03-5212-0000 東京都○

  • エクセルのマクロ記述について

    下記の処理をエクセルのマクロで行いたいのですが、どのように記述したよいか教えてください。 4行目から入力されている行まで下記の処理をマクロで行う。 1.J列のセル入力がCIRCLEの行で、B~E列の数値が同じセル間を結合する。 2.K列のセル入力がCIRCLEの行で、F~I列の数値が同じセル間を結合する。 3.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じ場合、B列をB列の数値XC列の数値とし、B~E列のセルを結合する。 4.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じ場合、F列をF列の数値XG列の数値とし、F~I列のセルを結合する。 5.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じでない場合、B列をB列の数値XC列の数値とし、B,C列のセルを結合する。又、D列をD列の数値XE列の数値とし、D,E列のセルを結合する。 6.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じでない場合、F列をF列の数値XG列の数値とし、F,G列のセルを結合する。又、H列をH列の数値XI列の数値とし、H,I列のセルを結合する。 7.J列のセル入力がSHAPEの行で、B~E列は何もしない 8.K列のセル入力がSHAPEの行で、F~I列は何もしない

  • EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか?

    EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか? 下記のようにならんだDATAがあります。   A列   B列  C列  D列  E列 (1行)2002/12/17 15240 15280 15220 15220 (2行) (3行) (4行) (5行)2002/12/18 15250 15250 15210 15210 (6行) (7行) (8行) (9行)2002/12/19 15220 15310 15220 15310 (10行) (11行) (12行) (13行)2002/12/20 15220 15260 15210 15230 (14行) (15行) (16行) (17行)2002/12/24 15300 15310 15270 15310 (18行) (19行) (20行) (21行)2002/12/25 15300 15340 15300 15600  . . . . . . . . . . . . . . . . . . . . . . . と,このようにDATAは日付の横に数値が4つずつ横に並んでおりますが、この4つの数値をその4つ目の数値の真横のF列から縦に4つ並べたいのですが、一気にできるマクロがないものでしょうか?下記のようにです。   A列   B列 C列 D列 E列  F列 2002/12/17            15240                  15280                  15220                  15220 2002/12/18            15250                  15250                  15210                  15210 2002/12/19            15220 15310 15220 15310                   . . .                    といった感じに一気にマクロで処理してしまいたいのです。DATAはかなりの行数あり、すべて3行の間隔があります。日付の横に4つの数値が規則的に並んでいるというものです。何回でもマクロボタン一発で4つの横に並んだ数値のみを縦に並べた4つの数値にしたいのです。つたない説明で大変申し訳ありませんが、どなたかわかる方お教えくださいませ。

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • 【マクロ】クリックすると空白を含む列を非表示に

    上司にExcelのデータが見づらいと言われて困っています。 下記のようなマクロやVBAを教えていただけないでしょうか? 例えば、 A2のセルをクリックすると、その行(2行目)から空白セルを検索して、そのセルを含む列を非表示にして、データが入っている列だけを表するようなマクロってないでしょうか? (要は、C2とE2が空白セルのとき、A2をクリックして、A/B/D/F~の列だけ表示されるようになるマクロです。 同様に3行目でも、空白セルがB3、C3なら、A3をクリックした時、A/D/E…列だけ表示されて、B・C列が非常時になるような。) 似たような機能があれば、A2クリックでなく別にボタン等を作っても構いません。 ややこしくて、申し訳ございませんが、本当に困っているので、 どうかよろしくお願いいたします。

  • エクセルのマクロで

    エクセルのマクロでこんな処理はできるでしょうか? 元データ表に A列からC列まである数値が5000行にわたって入っています。 例     A B C 1行目 1 4 6 2行目 4 7 8 3行目 5 6 4 4行目 7 8 2 ・ ・ 今、1行目と2行目の間に新たな行を挿入し、 C1セルの値を新たに挿入した行のA列からC列に貼り付けたい。 同様に現時点での2行目と3行目の間に新たな行を挿入し 今度はC2セルの値をその行に貼り付けます。 上の例で言うとこうなります。これを最後の行まで繰り返します。     A B C 1行目 1 4 6 2行目 6 6 6 3行目 4 7 8 4行目 8 8 8 5行目 5 6 4 6行目 4 4 4 7行目 7 8 2 8行目 2 2 2 ・ ・ 元データは5000行あるので、都合1万行になるということです。 このような処理はできるでしょうか? お教えいただけたら幸いです。よろしくお願いします。

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • マクロで可能ですか。

    1ヶ月の売上表があり、下記のように 日付毎の合計を、その日付の最終行に表示するのはマクロなどで可能でしょうか。 関数をセルにコピーしていたのですが、 最終行を探し、31日分コピーするのが不評です。 (下記では簡略化しておりますが、1日分の行数が何十行とあります。) もっと簡単に出来ないのかと言われ、ご教授いただけると幸いです。 Excel2010です。 誰でも使用可能なように、シート名に依存しない仕様だと有難いです。 ご協力宜しくお願い致します。 A列       B列    C列   D列 2014/11/01  商品A  \1000 2014/11/01  商品B  \1200  \2200 ←11/1の合計  2014/11/02  商品A  \1000  \1000 ←11/2の合計 2014/11/03  商品C  \1500  2014/11/03  商品B  \1200  \2700 ←11/3の合計 : : 2014/11/30  商品A  \1000 2014/11/30  商品A  \1000  \2000 ←11/30の合計

  • エクセルのマクロでデータを左につめていく

    お世話になります。エクセル2002でマクロを作成しようと思っています。 毎回同じ処理をしているので、良いサンプルがあったら教えてください。 やりたいこと  A列からF列にランダムにデータが入力されています。  このデータをA列、B列、C列と、左に詰め表示させたいです。  ※G列以降にもデータが入力されていますが、処理したい列範囲はA列~F列です。  ※行数は、都度変わります。(UsedRange.Rows.Countで値を取得) イメージ(処理前)  -  : 空白セル  *** : データが入力されているセル     A列   B列  C列  D列  E列   F列 1行目 項目1 項目2 項目3 項目4 項目5 項目6 2行目 ***  ***  -   ***  *** - 3行目 - -   -  *** *** *** 4行目 ***  -   -   -   -   -  5行目 *** *** -   *** -   -  イメージ(処理後)     A列  B列  C列   D列  E列  F列 1行目 項目1 項目2 項目3 項目4 項目5 項目6 2行目 ***  ***  -   ***  *** - 3行目 *** *** *** - -   - 4行目 ***  -   -   -   -   -  5行目 *** *** *** -   -  -

専門家に質問してみよう