• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA 配列処理後の動作について)

Excel VBA 配列処理後の動作について

このQ&Aのポイント
  • 配列を使用して処理する際、配列処理の後の動作がうまくいかない問題があります。
  • セルを最終行に移動させる処理で、Do Loop 内で Selection が常にセルA2 として認識されてしまい、期待通りの動作ができません。
  • 解決策として、If文の条件式で Selection を Selection.Address とすることで期待通りの動作ができることがわかりました。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

まず、Selection も Range("A2") もそのセルの内容を表します。 ●If Selection.Address = Range("A2") Then としたらうまくいくとのことですが、このIf文ではセルA2に「$A$2」と入力されていない限り成立しません。たぶん成立しないでしょうから、このIf文の次の処理と「Exit Do」は実行されません。  Else文の方で上に進みDo Until で抜けます。これでうまくいっているように見えるのではないですか?2つの処理が同じならうまくいっている可能性が高いですが、何のためのIf文かわかりません。 ●If Selection = Range("A2") Then の場合は、セルA2でIf文の方に入りますが、「Exit Do」で抜けるためセルA1は選択状態になりません。  完全には行いたいことがわかりませんが、   If Selection = Range("A2") Then     処理     Selection.End(xlUp).Select   Else   とすればいいような気もします。   「Selection.End(xlUp).Select」がIf文の外に出せそうですが、これは処理が何なのかわからないので参考程度にしてください。     

YYJJPPP
質問者

お礼

ご回答ありがとうございました。 私の勉強不足でした・・・ >Selection も Range("A2") もそのセルの内容を表します。 Selection = Range("A2") はそれぞれのアドレスを比較しているものだと勘違いしておりました。 ご指摘どおり Selection.Address = Range("A2") では動作せず、 Selection.Address = Range("A2").Address で期待通りの結果を得ることができました。 Selection が Range("A2")に移動してきたときの処理の中にSelection.End(xlUp).Selectの記述を忘れていたため Exit Do を記述しておりました。 2013だから ということが関係しているかわかりませんが、間違った記述でも期待通りの動作をすることがあるので、何が悪いのか発見するのが難しいです・・・(単なる勉強不足ですが) ご協力ありがとうございました。

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

まず、質問なのですが、 「Do~Loop」は Do Until Loop Do Loop Until Do While Loop Do Loop While で使うものです。 「Do~Loop」の中に「If~」を入れて、 処理回数を決めるものではありません。 「Do~Loop」の繰り返し処理は「Until」か「While」によって 条件付けするものですが、 「Do~Loop」だけで、動いているのですか?

YYJJPPP
質問者

補足

記載漏れ申し訳ありません。 Do Until Selection = Range("A1") と記述しております。 最終行から上へ移動して処理をしています。 実際のデータは Ragne("A2") までです。 *Office 2013 を使用しております。

関連するQ&A