• ベストアンサー

複数の検索文字を列から集めるエクセルマクロ

ある特定の名前が混在して大量にある下のようなリストがあります。   A    B   C  D 1 山田太郎 08/30 もも 桃太郎 2 桜井花子 08/09 苺  栃乙女 3 山田太郎 08/08 苺  あまおう 4 山田太郎 08/07 ナシ 20世紀 5 佐藤純一 07/20 林檎 青森の 2 桜井花子 07/09 ナシ 20世紀 現在、このA列の名前を選択してボタンをクリックすると  その名前がある行を集計して  テキスト出力するマクロを使っています。 ただ、なにせ大量の名前があり、  定期的に更新され名前も増えます。  名前順に並べ替えをしてから、出力するにしても非常にたいへんです。 そこで、 (1)A列を検索して、名前のリストを作る  (同姓同名はいないので、   A列に複数同じ名前があっても1つだけ表示させる) (2)そのリストを、順に選択し既存のマクロを動かす。 という(1)(2)の手順を自動化するマクロが作りたいのですが 色々検索したりして調べても  文字を指定して検出する例は結構あるのですが  検索文字を列から集める方法は見つかりませんでした。 もしかしたら、VBAでは非常に難しいのかもしれませんが 私は、その判断もまったくつかないほど無知ですので 何か解決法がありましたら どなたか、ご指導して頂けると幸いです。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

リスト表示が目的ではなく集計だけなら Sub Test2()   Dim myDic As Object   Dim c As Range, d As Variant   Set myDic = CreateObject("Scripting.Dictionary")   For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))     myDic(c.Value) = Empty   Next   For Each d In myDic.keys     MsgBox "ここで " & d & " の名前で、既存のマクロを動かす。"     'その名前がある行を集計してテキスト出力するマクロを使っています。     'Call 集計マクロ   Next d End Sub

akaizou
質問者

お礼

再びのご回答 重ねてありがとうございます!! 少し、言葉足らずで、お手間をとらせてしまい 大変申し訳ありませんでした。。 まさに、集計だけが目的です。 分からない事などがまだあるかもしれませんが 早速試してみたいと思います。

その他の回答 (2)

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

>検索文字を列から集める方法 データメニューのフィルタから「フィルタオプションの設定」という機能で一意のリストを書き出させたり データメニューの統合で一意のリストの書き出しと数値データの集計まで一気にやらせたり データメニューのピボットテーブルレポートで一意のリストの書き出しと各種複雑な集計までやらせたり といった事がエクセルに出来ます。自動記録マクロで録れば,それをマクロに翻訳するとどの命令になるのかもすぐ判ります。 「集計」とは具体的に何をしているのかご質問に書いてありませんが,Advancedfilter辺りがお薦めかなと思います。 それと >(2)そのリストを、順に選択し既存のマクロを動かす。 マクロの連携ですから,できれば選択して動かすとかやめて sub macro1() dim h as range for each h in range("F1:F10") macro2 h next end sub sub macro2(x as range) msgbox x.address end sub とかなんとかの具合で,セレクトしないマクロにも挑戦してみてください。

akaizou
質問者

お礼

なるほどー。ありがとうございます。 ぜひ、挑戦してみようと思います! でも現状、セレクトするマクロでもかなり怪しいほど 私は、基礎が抜けてます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>(1)A列を検索して、名前のリストを作る >(同姓同名はいないので、 >A列に複数同じ名前があっても1つだけ表示させる) ユーザーフォームにリストボックスを設け 重複のないリスを表示すれば良いでしょう Sub Test()   Dim myDic As Object   Dim c As Range   Set myDic = CreateObject("Scripting.Dictionary")   For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))     myDic(c.Value) = Empty   Next   With UserForm1     .ListBox1.List = myDic.keys     .Show   End With End Sub

akaizou
質問者

お礼

早速のご返答 ありがとうございます! 私、全くこの機能をを知りませんでした。。 超初心者です。。。 今、リストからフォームでA列のリストボックスを 作成してみたりと少し試してみたのですが、 使えるようになるのに、ちょっと時間がかかりそうです。  

関連するQ&A

  • エクセルで列の削除

    久しぶりに利用いたします。 ファイル毎に決まった行数(5列だとして)を削除出来る方法ってないでしょうか。 例えばAというファイルがあってそこには 名前 サイズ 日付 画像 プロパティ 説明 ----------- ------ ---------------- ------- ------------ ---- 山田太郎 49kb 2006/9/9・・・ 山田花子 102KB 2006/5/8・・・ このようなファイルが50ほどあります。。 これを 山田太郎 49KB  2006/9/9・・・ 山田花子 102KB 2006/5/8・・・       ・       ・       ・ という感じでして1つのシートにまとめたいのですが・・・マクロ等でやったら 手っ取り早いとは思ったのですが、久しぶりにマクロ等をさわったのでどう記述していいか分からなくなってしまいました。 なんかいい方法があったら教えてください。お願いします。

  • Excel マクロ 特定の列のみカット&ペースト

    Excel マクロ初心者です。IF文を使用しているのですが上手くいきません。 A列が「次郎」の時、1つ上の行のB~E列をカットし次郎の行へペースト、B列が空白の行削除・A列に山田を追加する。 例 A列|B列|C列|D列|E列 花子|a|あ|か|g 太郎|c|う|き|g 次郎| | た | | 三郎|e|お|く|g マクロ後 A列|B列|C列|D列|E列 山田花子|a|あ|か|g 山田次郎|c|う|き|g 山田三郎|e|お|く|g 色々と調べて試してみたのですが知識不足の為、上手くいかず・・・全文載せていただけると、とても助かります。

  • エクセルで、1列に羅列されたデータを複数の列で並び変えたいのですが。

    具体的には、現状A列に、 103-0001 東京都中央区日本橋茅場町1-1-1 (株)○○商事 山田 太郎 103-0002 東京都中央区日本橋茅場町2-2-2 (株)○○物産 山田 花子 という4行ごとのデータが400近く並んでいます。 これを、A列に郵便番号、B列に住所、C列に社名、D列に名前という風に並び替えたいのですが、1件ずつコピペするわけにもいかず、困っています。 どなたか、簡単な方法をご教示頂ければ幸いです。VBAは使用できませんが、簡単な関数なら指示通り使うことができます。私の検索方法がわるかったのか、同様の質問が見つけられませんでした。 よろしくお願いいたします。

  • EXCELで条件を満たす時コピー挿入したい

    EXCEL2002ですが、以下のようなデータがあるとします。      A      B 1    山田太郎 100 2    山田花子 100,200,300 3    鈴木一郎 300 B列にカンマ区切りで入力しているデータがある場合、      A      B 1    山田太郎 100 2    山田花子 100 3    山田花子 200 4    山田花子 300 5    鈴木一郎 300 上記のように、B列のカンマ区切り分を振り分けたレコードを新たに 挿入したいのです。 尚参考までに、A列は名前などでデータ内容は多様になり、B列は ある程度決まった選択肢(20~30通り)になります。 一般の関数では無理なような気がするのですが、VBAなどでは可能でしょうか? もし可能であれば、マクロなども組んだことがないものですから、 やさしくご教授いただければ幸いです。 よろしくお願いいたします。

  • Excelで集計の方法

    A列に名前が入っています。 B列に数字(個数)が入っています。 A列にある名前は重複しています。(同じ名前が何回も出現します。) このA列にあるリストを同じシートのD列に表示し、更にE列に名前ごとの合計を出したいのですが、どうすればよいでしょうか? つまり A列   B列 太郎   50 一郎   20 花子   30 太郎   40 花子   50 一郎   50 太郎   20 これを 太郎=110 一郎=70 花子=80 としたいのです。 よろしくお願いします。

  • エクセル:複数行のセル値を、対応した項目に従って一つのセルにまとめたい

    いつもお世話になっています。 早速ですが、下記のようなことをしたいのですが、 関数でできるでしょうか?  │ A     │ B ----------------------- 1│日本太郎 │ ばら ----------------------- 2│日本太郎 │ さば ----------------------- 3│山田花子 │ キリン ----------------------- 4│山田花子 │ 米 ----------------------- 5│日本太郎 │ イス ----------------------- 6│山田花子 │ インク ----------------------- ↓  │  A   │ B -----------------------  │       │ ばら 1 │日本太郎│ さば  │       │ イス -----------------------  │       │ キリン 2 │山田花子│ 米  │       │ インク ----------------------- A列に人物名、B列に品物を入力します。 誰かが何かを入手した際、その順に入力していきますので、 同一の人物が複数の行に亘って入力された表(上の表)があります。 これを基に「誰が何を持っているか」をまとめる表(下の表)を作りたいのですが、 上の表を基に下の表が自動的に出来上がるような関数はあるでしょうか? VLOOKUPを使っても上手く出来ず、しかし他に思い浮かびません。 何か良い知恵がございましたら、お教え下さい。

  • エクセル:マクロでこんなことはできますか?

    【シート1】に名簿があります。 1 山田太郎 | ○○市○○町 | 電話 ・・・・ 2 山田花子 | ○△市  |・・・ といった一般的なものです。 【シート2】は、データ入力用としています。 A2~A4の3つを結合し、シート1から”山田太郎”を参照(INDIRECT関数使用) A5~A7の3つを結合し、同様に山田花子を参照 B2,B3.B4、C2,C3,C4は必要データを入力しています。 ★やりたいこと 【シート1】の山田太郎(1行すべて)を削除したときに、 【シート2】の2~4行に入っている山田太郎さんに関するシートを自動的に削除したい。 以上です、よろしくお願いします。

  • エクセル 2列に並べた氏名のチェック

        A列       B列      C列 1 山田 太郎   山田 太郎   2 山田 花子   吉本 喜劇 3 吉本 喜劇   挟間 寛餅 4 挟間 寛餅   池野 めだ シート(1)にシート(2)からコピーしてきた氏名をB列に貼り付け、 AとBの氏名が同じかどうかC列に結果を出して確認したい。 C列に =IF(A1=B1,"○","×")と入れてみても 見た目は同じ「山田 太郎」でも×と出てしまいます。 (1)何が間違って「×」と表示されるのか? (2)C列に結果を出す方法は? わかりづらい説明かもしれませんが、よろしくお願いします。

  • ExcelVBA 2列ずつ取り出し1列に

    お世話になります。 Excelで、あるデータを整理せねばならないのですが、 A列にID番号、B列に人名、 C列にID番号、D列に人名、というようなデータがあり このような状態です。 0001 山田花子      0002 田中太郎 これをA列に縦1列、つまりこのような状態にしたいのです。 0001  山田花子 0002 田中太郎 量が多くて、手で処理できないので、VBAでやりたいのですが、 この場合どのようなコードになるでしょうか。 教えていただければ幸いです。

  • EXCELでの検索マクロを作りたいのですが

    マクロの初心者です。氏名の検索マクロを作成したいのですが分かりません。 A列:名前 B列:郵便番号 C列:住所 と 名前等のデータを(ランダムに)入力したシート1を作成し、 シート2にシート1の「A列:名前」から性(たとえば青木)で検索して検索ボタン(マクロボタン)を押して該当データを表示させるようにしたいのですが。

専門家に質問してみよう