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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 11:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
別のシートから値を取得するとき
-
別のシートを参照して計算する方法
-
同じ作業を複数のシートに実行...
-
実行時エラー1004「Select メソ...
-
XL:BeforeDoubleClickが動かない
-
ユーザーフォームに入力したデ...
-
ブック名、シート名を他のモジ...
-
IFステートの中にWithステート...
-
【VBA】シート名に特定文字が入...
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
エクセルのシート名変更で重複...
-
シートが保護されている状態で...
-
Excelマクロのエラーを解決した...
-
VB6.0でEXCELにシートを追加したい
-
エクセル VBA シートのコピー
-
VBAです。ユーザーフォームの表...
-
指定文字が含まれるシートを削...
-
【Excel VBA】Worksheets().Act...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
同じ作業を複数のシートに実行...
-
ブック名、シート名を他のモジ...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
実行時エラー1004「Select メソ...
-
【Excel VBA】Worksheets().Act...
-
Excelマクロのエラーを解決した...
-
エクセル・マクロ シートの非...
-
VBAで同じシート名のコピー時は...
-
ExcelのVBAのマクロで他のシー...
-
【VBA】色のついたシート名を取得
おすすめ情報
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)
↑
こちらです