- ベストアンサー
エクセルVBA ヒントを下さい
バージョンはエクセル2000です。 セルの値を判定し条件分岐する、というありふれた処理です。 A1を判定⇒A2を判定・・・のようにオフセットなり変数を使うなりで 次のセルをアクティブにしていっているのですが、 当然セルの数だけ処理時間は増えていきます。 アクティブセル範囲がA1:Z1000みたいなかんじであったとして、 これをRangeオブジェクトとして定義し一気にその中身を処理する (セルの値が1ならば0にする、のような)ことは出来るのでしょうか。 配列を使えばいいのかとも一瞬思ったのですが、それでも一つ一つ処理することに変わりはなさそうだし・・。 何かヒントをいただければと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1例です。 Sub MACRO() Dim RG As Range For Each RG In Selection If RG.Value = 1 Then RG.Value = 0 Next End Sub
その他の回答 (2)
- TTak
- ベストアンサー率52% (206/389)
面倒な条件分岐がたくさんある場合は、ワークシート関数で計算して、数値のみカット&ペーストする処理をマクロで実行してみるなどもあります。
お礼
たとえば別シートに数式の入ったものを用意しておいて、という感じでしょうか。 勝手にそのように解釈いたしまして、なるほど、参考にさせていただきます。 ありがとうございます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>セルの値を判定し条件分岐する、というありふれた処理です。 と書かれた割には、内容が理解できません。 >アクティブセル範囲がA1:Z1000みたいなかんじであったとして、 これをRangeオブジェクトとして定義し一気にその中身を処理する と言うのは、どのような意味でしょうか? この範囲のセルから任意の値のセルを探すのですか?(検索) それとも、どこかに何らか値が入って居るのを探すのでしょうか?(ワークシート関数の応用) 指定範囲のセルに対して同一の処理が必用なら、For Each で処理するのが最速です。
お礼
>For Each で処理するのが最速です。 これだけで充分です。ありがとうございます。
お礼
忘れてました For Each。 早速やってみます。