• ベストアンサー

エクセルVBA ヒントを下さい

バージョンはエクセル2000です。 セルの値を判定し条件分岐する、というありふれた処理です。 A1を判定⇒A2を判定・・・のようにオフセットなり変数を使うなりで 次のセルをアクティブにしていっているのですが、 当然セルの数だけ処理時間は増えていきます。 アクティブセル範囲がA1:Z1000みたいなかんじであったとして、 これをRangeオブジェクトとして定義し一気にその中身を処理する (セルの値が1ならば0にする、のような)ことは出来るのでしょうか。 配列を使えばいいのかとも一瞬思ったのですが、それでも一つ一つ処理することに変わりはなさそうだし・・。 何かヒントをいただければと思います。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

1例です。 Sub MACRO() Dim RG As Range For Each RG In Selection If RG.Value = 1 Then RG.Value = 0 Next End Sub

noname#91725
質問者

お礼

忘れてました For Each。 早速やってみます。

その他の回答 (2)

  • TTak
  • ベストアンサー率52% (206/389)
回答No.3

面倒な条件分岐がたくさんある場合は、ワークシート関数で計算して、数値のみカット&ペーストする処理をマクロで実行してみるなどもあります。

noname#91725
質問者

お礼

たとえば別シートに数式の入ったものを用意しておいて、という感じでしょうか。 勝手にそのように解釈いたしまして、なるほど、参考にさせていただきます。 ありがとうございます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>セルの値を判定し条件分岐する、というありふれた処理です。 と書かれた割には、内容が理解できません。 >アクティブセル範囲がA1:Z1000みたいなかんじであったとして、 これをRangeオブジェクトとして定義し一気にその中身を処理する と言うのは、どのような意味でしょうか? この範囲のセルから任意の値のセルを探すのですか?(検索) それとも、どこかに何らか値が入って居るのを探すのでしょうか?(ワークシート関数の応用) 指定範囲のセルに対して同一の処理が必用なら、For Each で処理するのが最速です。

noname#91725
質問者

お礼

>For Each で処理するのが最速です。 これだけで充分です。ありがとうございます。

関連するQ&A