VBAで重複しないデータを縦に並べる方法

このQ&Aのポイント
  • VBAを使用して、特定の列に重複しないデータを縦に並べる方法について教えてください。
  • 詳しい説明が難しいですが、横に並んでいるデータから重複しないデータや数字を取得し、指定した列に縦に並べる処理をVBAで行いたいです。
  • 変更される可能性があるデータから重複を排除し、縦に並べる処理をVBAで実行するための方法を教えてください。
回答を見る
  • ベストアンサー

VBAで重複しないデータを1列縦に並べたいです。

下記の様にC,E,G,Iに文字(主に地名)を入力した後にVBAでA列に重複しない文字だけ縦に並べて行きたいのですがご教授頂けませんでしょうか。 B,D,F,H,Iは備考として自由記入したいので対象外にしたいです。 説明が難しいのですがA1から横に検索し重複しない文字や数字のみA列上から詰めて転記するイメージとなります。度々入力値が変更される事もあるので実行ボタンを設置してVBAで処理出来たら助かります。どうぞ宜しくお願い致します。 A, B, C, D, E, F, G, H, I, j 111 111 222 111 333 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 666 555 777 999 888

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

参照設定で以下の設定をしてから実行してください。 VBEの画面で「ツール」メニューから「参照設定」をクリックします。 「Microsoft Scripting Runtime」にチェックします。 Sub Test() Dim mDic As New Scripting.Dictionary Dim c As Range, mVar As Variant Dim i As Long: i = 1 Range("A:A").ClearContents For Each c In Range(Cells(1, "C"), Cells(Rows.Count, "I").End(xlUp)) If c.Column Mod 2 <> 0 Then If mDic.Exists(c.Value) = False Then mDic.Add c.Value, c.Value End If End If Next For Each mVar In mDic Cells(i, "A").Value = mDic.Item(mVar) i = i + 1 Next End Sub

twiceexid
質問者

お礼

お早いご対応大変感謝致します 問題なく動作致しました 本当にありがとうございました

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

すでに回答は出ているが、少し違ったやり方で。 COUNTIF関数利用法。 ーー 例データ A1:G10 A, B C D F G 111 111 222 111 333 1112 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 666 555 777 999 888 ーーー 標準モジュールに Sub test01() Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") sh2.Columns("A:A").Clear Set Rng = sh1.Range("A2").CurrentRegion Set Rng = Rng.Offset(1, 0) '1行下から対象にする Rng.Select MsgBox "A" '確認のため For Each cl In Rng If cl <> "" Then If WorksheetFunction.CountIf(sh2.Columns("A:A"), cl) = 0 Then MsgBox cl '確認のため。本番では削除 lr = sh2.Range("A100000").End(xlUp).Row sh2.Cells(lr + 1, "A") = cl End If End If Next End Sub -- 実行結果 111 222 333 1112 444 666 555 777 999 888 上記質問例+αではOKのようだが、データにもっと多様性があるとき、うまくゆくとよいが。 例えばCurrentRegionが使えないデータのあり様の場合は、要修正。 あと氏名によるソートは必要かもしれないが、上記では略。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.1

重複なしのリストは縦方向でないとできません。 マクロの記録を開始。 該当データ範囲をコピー。 シートの空いた場所か、別のシートに行列入れ替えで貼り付け。 リスト化したいデータを空いた1列にコピぺ。 コピペした列から重複なしリストを作成。 作業に使った不要なセルのデータを削除。 マクロの記録終了。 記録が終わったらシートにボタンを貼り付け、記録したマクロをボタンに登録。

関連するQ&A

  • VBAで重複データは最後のみ反映し並び替え

    下記の様にE,F,G,H,I,J,K,L,M,Nに文字(主に地名)を入力した後VBAで横に検索していきA列に重複は最後の文字を抽出し縦に並べて行きたいのですがご教授頂けませんでしょうか。 説明が難しいのですがE5から横に検索し重複する文字は最後のみ反映し空白のセルは反映させずA1上から詰めて転記するイメージとなります。度々入力値が変更される事もあるので実行ボタンを設置してVBAで処理出来たら助かります。どうぞ宜しくお願い致します。(下記イメージです) E  F G H  I  J  K  L  M  N 111 111 222 111 333 111    222 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 888 666   999 333 333 666 555 666 666 666 ⇓ A 111 777 444 222 888 999 333 555 666

  • Excel2列の重複チェック(左右逆も)

    1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 7 A B 8 Z N 9 A C ExcelのA列B列に上記のようにアルファベットが記載されているとします。 このときに列ごとに重複が無いかをチェックする関数をご教授頂きたく思います。 単純な重複だけではなく、 ABもBAも同じとして認識するような関数を希望しております。 データの結果として 1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 重複 7 A B 重複 8 Z N 9 A C このように記載されるか 1 A B 2 C D 3 E F 4 G H 5 D H 6 7 8 Z N 9 A C このようにデータが消えるかのどちらかのデータがでる形だと助かります。 関数で実現できるのかどうか色々調べましたがまったくわからず、こちらの 方々に助けていただければ幸いです。

  • 質問:VBAでデータを転記したい

    ExcelのVBAで給与支払管理表と源泉徴収表作成用のとりまとめシートを作っております。で、この2表の間でデータをやりとりしたいのです。 表の関係は以下の通りです。それぞれの項目を、仮に(A-a)(A表のaという項目)というように表記します。 【支払内訳表】(仮にA表) A4に氏名(A-a) B4に日額(A-b) C4に勤務日数(A-c) D4に税引き前支給額(A-d) E4に税額(A-e) F4に交通費(A-f) G4に税引き後支給額(A-g) A2に支払件名(cf.例えば営業課など)(A-h-a) e2に何月分かの情報(A-h-e) を入れています。 【支払額個人管理表】(仮にB表) A列に税引き前支給額(B-d) B列に税額(B-e) C列に税引き後支給額(B-g) D列に交通費(B-f) E列に支払内容(B-h) を入れています。 この二つにおいて、A表を開いたときに、 1)(A-a)の文字列で、B表の該当のシートを検索(シートに支払対象者の名前をつけています) 2)(A-d)を(B-d)に転記 3)(A-e)を(B-e)に転記 4)(A-f)を(B-f)に転記 5)(A-g)を(B-g)に転記 6)(A-h-a)と(A-h-e)の文字列を統合して、(B-h)に入れる。 (ただし、(A-h-a)と(A-h-e)の間には、半角スペースを設ける) という作業をさせたいのです。また、A表はいくつもあるのですが、B表は一つだけですので、データが入っている行の下にA表のデータが自動的に入るように設定したいのです。(End(xlUp).でも使うのでしょうか) 複雑で申しわけございません。 ご教授頂けましたら幸いです。

  • 期間内での重複の確認

    いつもお世話なります。 WINDOWS7 EXCELL2010です。 下図を参考に A列 ユーザ定義 mm/dd B列 ユーザ定義 mm/dd 各列の数式は E2 =A2&C2&D2 F2 =B2&C2&D2 G2 =IF(D2="","",IF(COUNTIF($E$2:E2,E2)>1,"重複","")) H2 =IF(D2="","",IF(COUNTIF($F$2:F2,F2)>1,"重複","")) I2 =IF(D2="","",IF(COUNTIF($E$2:F2,E2)>1,"重複","")) 条件付書式 範囲はA2:B10 =$I2=”重複” 紫 =$G2=”重複” 薄青 =$H2=”重複” 薄ピンク という具合に「入所(A列)、退所(B列)」日での重複はセルの色で確認できますが 6の行は「入所、出所」日は対象にはなりません。 重複のチェックから漏れます。 この期間内の重複を防止したいのですが何かいい方法をご教示いただけませんでしょうか。 よろしくお願いします。

  • エクセルVBA/抽出・貼付け

    下記を行いたいのですが、どのようなコードになるのでしょうか? シート001(入力用) (1)A1~A50、B1~B50、C1~C50、D1~D50  に数値、E1~E50に文字列 (2)F1~F50、G1~G50、H1~H50、I1~I50  に数値、J1~J50に文字列 ※空白行混在 シート002(計算用) シート001に作ったコマンドボタン:クリックにより、 シート002を表示させ、A1~E100に、 シート(1)のA1~E50とF1~J50の空白行以外を連続して 反映させたい。並べ替え用など別シートを用いずに、 VBAコード内で処理したい。

  • VBA

    1 a;b;c;d; 2 e;f;g;h; 3 i;j;k;l; をVBAで   1 a;   2 e;   3 i;   1 b;   2 f;    3 j;   1 c;   2 g;   3 k;   1 d;   2 h;   3 l; としたいのですが、どうしたらいいですか?

  • Excelで飛び飛びのセル(列)を参照したいのですが…その2

     ある「sheet1」で、G1="A",H1="B",I1="C",J1="D",K1="E",L1="F",M1="G",N1="H",O1="I",P1="J",Q1="K",・・というように文字が入力されているとすると、5列飛びの値A,F,K・・・(G1,L1,Q1・・・)が欲しいのです。そして、その値が「sheet2」に、C5=A,D5=F,E5=K,F5=P・・・となるようにしたいのです。ただ数値が5ずつ増加するのではなく、そのセルに入力されている文字列を参照したいのです。  それをまた、「sheet1」の、G2="A",H2="B",I2="C",J2="D"・・・の値でも同じ事をしたいのですが・・・。  よろしくお願いします。

  • 重複するデータの抽出について(エクセル)

    エクセル2003にて重複するデータの取り出しをしたいのですが、 わからないので教えてください。 例えば   A列   B列   C列    D列    E列・・・ 1  色  1回目  2回目  3回目   4回目 2  赤   あ    a      A       0 3  白   い    b      B       1 4  黄   う    c      C       2 5  黄   え    d      D       3 6  黒   お    e      E       4 7  赤   か    f      F       5 : このデータの中から、別のシートのA1に 赤と入力したら、B1にD列のA・Fを抽出 黄と入力したら、B1にD列のC・Dを抽出をしたいです。 VLOOKUP関数を使用してみたのですが、 赤と入力すると、D列のA(1番上のデータ)のみしか抽出出来ず、Fが抽出されません。 重複するデータがあるのはA列のみで、D列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • 【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の文字列の操作について

    A列、C列、E列、G列・・・の1行目にはタイトルが入力されており、 B列、D列、F列、H列・・・には不特定の文字列が入力されており、それぞれ行数も不特定です。 A列、C列、E列、G列・・・の1行目のタイトルはA列にまとめ、B列、D列、F列、H列・・・の文字列はB列にまとめたいです。 下の例の場合だと、C列の1行目のタイトルをB列の下端の左下にあたる(A7)に移動させ、 D列の2行目から入力された文字列を右となりの(B7)に移動させたいです。これの繰り返しです。     A列     B列     C列     D列 1    あ       A       い       2             B                a   3            C                b 4              D               c 5             E                6              F                            ↓     A列     B列     C列     D列 1    あ       A              2             B                   3            C                 4              D                5             E                6              F      7      い      a 8             b 9             c よろしくお願いします。

専門家に質問してみよう