dポイントプレゼントキャンペーン実施中!

Excel VBAについて教えてください!

シート1とシート2があります。
シート1とシート2を比べ、シート1のA列にないものがあったら、シート2の行を消去するという記述内容にしたいです。

※下記の例だとシート1にはスイカがないので、シート2のスイカの行が消える事になります。

何方か教えて下さい…m(__)m


※シート1
A列
1 みかん
2なす
3りんご

※シート2
A列
1みかん
2なす
3スイカ

A 回答 (4件)

こんばんは



知りたいところがどこなのか不明なので、大雑把な回答になりますが・・

シート2の各セルについて、『「シート1に同じものが存在するか」を調べて存在しなければ消去する』を繰り返せば実現できるでしょう。
ご例示のように、各行が対応しているのであれば、検索などしなくても「同じ行の値を比較する」ことで足りますね。

処理を繰り返すのには
 For ~~ Next や
 For Each ~~ Next
などの構文を利用することで可能です。

同じ値が存在するかを調べるには、シート関数のCOUNTIFやMATCHなどを利用するか、FINDメソッドを利用することで可能です。


対象行数が多くて、処理時間が問題になるような場合には、別の工夫が必要になります。
VBAの場合、シートへのアクセスに時間が掛かりますので、その回数を減らすことで処理時間を短縮することができます。
具体的には、セルの値をまとめて配列等に読み込んで、メモリ上で処理を行い、結果をまとめて書き込むなどです。

また、上に挙げたFINDメソッドは1回だけなら速いですが、繰り返し行う場合には必ずしも速いとは言えません。
Dictionaryオブジェクトを利用するなどの方法の方が、検索の回数が多い場合には圧倒的に速くなります。
    • good
    • 0

学校の課題か何かでしょうか?


とりあえず、できるところまで自分で書いてみて、それを投稿して添削を依頼するようにしてみてはどうでしょうか?

テキストを見たりインターネットで調べたりすれば、解説はもちろん類似のサンプルコードがのっていると思います。やってみたらゴールまで到達できるように思いますが。
    • good
    • 0

マクロはめんどくさいんで、自分なら空いている列を作業列として


COUNTIF関数で対象の文字列の数を調べ、
0になったデータを選んで削除。
その後、作業列の数式を削除。

シート2のB1セルに
 =COUNTIF(シート1!A:A,A1)
と入力して、必要な行まで複製する。
そんだけですね。
※ 範囲を明示的に設定するなら
  =COUNTIF(シート1!$A$1:$A$3,A1)
 のように絶対参照させます。

自分は余計なデータを残したくないので、こんなやり方になります。
    • good
    • 1

なさりたい事は分かりましたが、何を教えてほしいのか分かりません


コードを書いてほしいのでしょうか?
貴方は使う人ですか 作る人ですか?
使う人なら時間コストを考えた場合、プロに制作依頼をされるのが良いと思います

作る人なら ご自身のスキルを示す為にも 
制作途中のコードや調べたことなどを示してください
良くある処理なので此処のサイトにも同じような質問回答が沢山ありますね

処理の手順はざっくり5パターン以上あります
何万行もあった場合、処理時間なども考慮する必要がありますね
どの方法を示すのが良いか・・・データー数などでも変わりますし
ご質問内容はダミーで自身で改修されるかもしれないので分かり易いものが良いのか・・・
分からないものを書いて使うだけなら回答者は空しいですね・・
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!