![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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も見ています
-
"I love you" をかっこよく翻訳してみてください
あなたが考えるいちばんかっこいい "I love you"の訳を教えてください。
-
vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい
Visual Basic(VBA)
-
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
-
4
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
5
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
6
RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
エクセルのマクロでアクティブ...
-
VBAで同じシート名のコピー時は...
-
Access エクセルシート名変更
-
エクセル VBA シートのコピー
-
ExcelのVBAのマクロで他のシー...
-
ユーザーフォームに入力したデ...
-
【エクセル】オプションボタン...
-
VBAで指定シート以外の選択
-
Excel チェックボックスにチェ...
-
【VBA】特定の文字で改行(次の...
-
Worksheet_Changeの内容を標準...
-
【Excel VBA】Worksheets().Act...
-
VBA 存在しないシートを選...
-
エクセル VBA 特定文字がある行...
-
特定の文字を含むシートだけマ...
-
VBAでオブジェクト変数にsetし...
-
エクセルの絶対参照の一括操作...
-
エクセルのマクロで条件一致の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
別のシートから値を取得するとき
-
ブック名、シート名を他のモジ...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
-
実行時エラー1004「Select メソ...
-
VBAで同じシート名のコピー時は...
-
エクセルで通し番号を入れてチ...
-
同じ作業を複数のシートに実行...
-
Excel VBA リンク先をシート...
-
ExcelのVBAのマクロで他のシー...
-
Vba UserformからExcelシートの...
-
【Excel VBA】Worksheets().Act...
-
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)
↑
こちらです