アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel vbaについて知恵もしくは、コード教えて下さいm(__)m

① 表にあるデータをコピー、隣シートのセル入力の最終行下へ貼り付け。ここまではマクロが出来ているのですが、表にあるデータから隣のシートへコピペする際に、同じものがないかを調べた上で貼り付けを行いたいのですが(同じものがあった場合はペーストしない)、どのような方法がありますか?
一度貼り付けを行って、その後に重複削除する方法しかないですか?

②G列の4行目〜セルに値が入ったら、エンター後、Worksheet_Changeが起動し、その行にそれぞれ値が入るようになっています。
やりたい事は、G列 4行目セルに値が入ったら、3つ先下の何も入ってないセルに移動したい。(繰り返し行いたい)
どのようなコードを書けばよろしいのでしょうか、、?

ご教授のほどよろしくお願いします。

A 回答 (2件)

こんにちは



>① 同じものがないかを調べた上で貼り付けを行いたいのですが~
「同じ値」があるかをチェックしたいのでしょうか?
複数のセル範囲の値なのか、単体セルの値なのかもよくわかりませんが・・

例えば、「ある値と同じ値が、あるセル範囲にあるかどうか」を調べたければ、対象範囲のセルをFor Eachなどでループして、同じ値かどうかをチェックすれば良いのでは?
ループなどしなくても存在チェックだけなら、 調査範囲.Find チェック値 で該当するセルが返されるかどうかでもチェック可能と思います。
 If Not (調査範囲.Find チェック値) Is Nothing Then ~~
また、WorksheetFunction の Countif を利用することでもチェック可能と思われます。


>②G列 4行目セルに値が入ったら、3つ先下の何も入ってないセル
> に移動したい。(繰り返し行いたい)
3つ下のセルに値が入っていたらどうするのか不明ですが・・

G4セル固定の処理なら、「3つ下」はG7セルなので、
If IsEmpty(Range("G7")) Then Range("G7").Value = Range("G4").Value
などとしておくとか。
一般化したいのなら、Changeイベントの場合は、Targetに対象セルが取得できていると思いますので、「3つ下」のセルは、Target.Offset(3) とすることで指定可能です。

※ セルの値を変更する場合は、処理中にイベントが再発生しないように、イベント処理を一時停止しておく必要があるでしょう。
    • good
    • 0
この回答へのお礼

がんばります

ありがとうございました。

お礼日時:2022/09/14 08:52

(´・ω・`)


処理が重くなるから、普通に貼り付けた後
 「重複の削除」 
で良いんじゃないかな。

VBAでどうやるか分からなければ、
リボンの「データ」の「データツール」に「重複の削除」があるので
 「マクロの記録」 
を使って挙動を記録して確認しましょう。
    • good
    • 0

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