
vbaエクセルマクロ
RemoveDuplicatesについて
RemoveDuplicatesを使って重複する行を削除するマクロを組んで、あるデータを作成します。
シート1のA1セルに、シート2のA1セルを、
シート1のA2セルに、シート2のA2セルを、
・
・
・
シート1のB1セルに、シート2のB1セルを、
シート1のB2セルに、シート2のB2セルを、
・
・
・
というように、シート1にシート2の値をもってくるように、シート1のセルにINDEX関数を入れています。
マクロでRemoveDuplicatesメソッドで
シート1のA列とB列ともが、他の行と重複している場合は行削除を行い、
最後にシート1の全体をコピーして値の貼り付けをして
マクロ終了でデータ作成完了としています。
そこで質問なのですが、
シート1のセルに
INDEX関数を設定しているのに、
値の貼り付けをする前にRemoveDuplicatesメソッドで重複行の削除を行うと
おかしくならないでしょうか。
No.3ベストアンサー
- 回答日時:
INDEX関数を使用している場合でも、RemoveDuplicatesメソッドで重複行の削除を行っても、問題はありません。
RemoveDuplicatesメソッドは、重複する行を削除するだけで、その行に対応するセルの値は削除しません。つまり、削除された行に対応するセルの値は、シート上にそのまま残ります。
そのため、RemoveDuplicatesメソッドを使用しても、INDEX関数によって取得された値が失われることはありません。削除された行に対応するセルには、INDEX関数によって取得された値が残るため、その後のコピー&貼り付け操作によって、正しいデータが作成されます。
ただし、注意点として、RemoveDuplicatesメソッドは元の範囲内で重複行を削除するため、INDEX関数によって取得される値の範囲と、RemoveDuplicatesメソッドが適用される範囲が異なる場合は、意図しない結果になる可能性があります。そのため、RemoveDuplicatesメソッドを使用する前に、適切な範囲を指定しておくことが重要です。
回答ありがとうございます_(._.)_
私の理解力がなくて申し訳ありません。
回答いただいた内容からしますと、
設定されている関数の内容に依存せず
=INDEX
で参照していたとしても、問題なく重複行が削除されるということでしょうか。
たとえばシート1のセルが下のようになっています。
A1 =INDEX(Sheet2!A:A,1)
A2 =INDEX(Sheet2!A:A,2)
A3 =INDEX(Sheet2!A:A,3)
B1 =INDEX(Sheet2!B:B,1)
B2 =INDEX(Sheet2!B:B,2)
B3 =INDEX(Sheet2!B:B,3)
A1とA2が重複しているので
RemoveDuplicatesメソッドで2行目が削除されたとします。
削除された直後、A2セルには
A2 =INDEX(Sheet2!A:A,2)、もしくは
A3 =INDEX(Sheet2!A:A,3)
のどちらが入っているのでしょう。。
他のかたに回答いただいた内容とは違うということですよね?
追加の質問で申し訳ありませんが教えていただけますとたすかります_(._.)_
ちなみに、実際は
WorkSheet(1).Range("A:Z").RemoveDuplicates Columns:=Array(1, 3),Header:=xlYes
としていて、
1行目から最終行までを対象に、A列とC列ともに重複している場合、重複行を削除、としています。
範囲を正しく選択していないといけないというのは、最終行までを対象にしているので
あまり関係ないでしょうか。
長々とすみません_(._.)_
No.2
- 回答日時:
No1です。
>値で貼り付けをした後にRemoveDuplicatesを実行すると回避できるということになりますでしょうか。
どのような形で結果を得たいのかによります。
関数を残す必要がないのなら、値(=固定値)にしてから、処理するのが簡単でしょう。
>=INDEX(A:A,ROW())の関数で参照しておりました。
もしもそうなら、単にシートをコピーしているだけなので、関数を設定する必要もなく、最初から元シートの必要範囲をVBAで転記すれば済む話ではないでしょうか?
転記部分の処理は1行でよいので、
転記先セル範囲.Value = 転記元セル範囲.Value
転記先セル範囲.RemoveDuplicates ~~~
程度で済みそうな気がします。
No.1
- 回答日時:
こんばんは
>重複行の削除を行うとおかしくならないでしょうか。
聞くまでもなく、試してみればすぐにわかることと思います。
設定されている関数の内容に依存します。
実際にどのような関数を入力してあるのか不明ですが、
=INDEX(A:A,ROW())
みたいな関数で参照していると、重複を削除した後で参照するセル位置が変わります。
(結果的に値も変わります)
OFFSET、INDIRECTなどでも同様のことは発生すると考えられます。
一方で、
=シート2!A1
のような参照式であれば、元の参照が保持されることを期待できます。
要は、(重複している)行を削除した際に、エクセルが自動で関数式のアドレスの調整を行いますが、そのロジックに合致しているか否かの違いかと。
普通に関数式を設定する際に、フィルコピーできる式とできない式の違いのようなことが、別の基準ですが、同じように発生します。
こんばんは
いつもありがとうございます_(._.)_
=INDEX(A:A,ROW())の関数で参照しておりました。。
ということは、値で貼り付けをした後にRemoveDuplicatesを実行すると回避できるということになりますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】全シートのセルの...
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
VBA 検索して一致したセル...
-
VBAで指定シート以外の選択
-
excelのマクロで該当処理できな...
-
Excel VBA リンク先をシート...
-
実行時エラー1004「Select メソ...
-
エクセルで通し番号を入れてチ...
-
セルの値によって、シート見出...
-
ExcelのVBAを使い、複数シート...
-
エクセルVBA ListBoxの並び...
-
シートが保護されている状態で...
-
エクセル VBA シートのコピー
-
ブック名、シート名を他のモジ...
-
別のシートから値を取得するとき
-
シート名でファイル検索する
-
【Excel VBA】Worksheets().Act...
-
VBA 入力月で該当シートを選択...
-
同じ作業を複数のシートに実行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報
kantansi様
追加質問の内容に誤りがありました
削除された直後、A2セルには
A2 =INDEX(Sheet2!A:A,2)、もしくは
A3 =INDEX(Sheet2!A:A,3)
のどちらが入っているのでしょう。。
A2 =INDEX(Sheet2!A:A,2)
A3 =INDEX(Sheet2!A:A,3)
↑
誤り
=INDEX(Sheet2!A:A,2)
=INDEX(Sheet2!A:A,3)
↑
こちらです