• ベストアンサー

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

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

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答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

  • VBA アクティブセルに対しての作業に関して

    -質問内容-VBA作成2つ- ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate アクティブセルを指定した段階で オフセット(縦下方向にO1991のセルに入れた数値分下に、ヨコに0) 移動しアクティブセルにする ------------------------------------------------------ ------------------------------------------------------ 別々のVBAでやりたいこと (1)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下にペースト(貼り付け) したい 例)     A    1 成功  ←アクティブセルをコピー   3 成功  ← ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate  アクティブセル~オフセットしたセルまでを最初にアクティブセルからコピーし →アクティブセル~オフセットしたセルまでペーストする ----------------------------------------- (2)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下に アクティブセル~オフセットされたセル位置まで フィルダウンさせたい 例)     A    1 1 ←アクティブセルをコピー   5  ←オフセットセル 2つのVBAのやり方/プログラムの表記/組み合わせ方を 無知で愚かな私ですが どうかご教授のほど 宜しくお願い致します (>_<)謝↓ペコッ --------------------------------------- --------------------------------------- 変数を使うのでしょうか? セル範囲を指定するとして Range("ActiveCell:ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Active") となるのでしょうか? 又変数の使い方として Dim a As Range 又は Dim a As Objectになるのでしょうか この際代入として使うには a = ActiveCell b = ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate になるのでしょうか 本当に度々申し訳ないのですが 宜しくお願いします (:>_<:)ペコリ Range(ActiveCell).copy ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0)ActiveCell.PasteSpecial End Sub

  • VBA アクティブセルに対しての作業に関して

    -質問内容-VBA作成2つ- ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate アクティブセルを指定した段階で オフセット(縦下方向にO1991のセルに入れた数値分下に、ヨコに0) 移動しアクティブセルにする ------------------------------------------------------ ------------------------------------------------------ 別々のVBAでやりたいこと (1)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下にペースト(貼り付け) したい 例)     A    1 成功  ←アクティブセルをコピー   3 成功  ← ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate  アクティブセル~オフセットしたセルまでを最初にアクティブセルからコピーし →アクティブセル~オフセットしたセルまでペーストする ----------------------------------------- (2)これを、アクティブセルを指定した段階で セルの値をコピーして オフセット縦下にO1991.ヨコ0分下に アクティブセル~オフセットされたセル位置まで フィルダウンさせたい 例)     A    1 1 ←アクティブセルをコピー   5  ←オフセットセル 2つのVBAのやり方/プログラムの表記/組み合わせ方を 無知で愚かな私ですが どうかご教授のほど 宜しくお願い致します (>_<)謝↓ペコッ --------------------------------------- --------------------------------------- 変数を使うのでしょうか? セル範囲を指定するとして Range("ActiveCell:ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Active") となるのでしょうか? 又変数の使い方として Dim a As Range 又は Dim a As Objectになるのでしょうか この際代入として使うには a = ActiveCell b = ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0).Activate になるのでしょうか 本当に度々申し訳ないのですが 宜しくお願いします (:>_<:)ペコリ Range(ActiveCell).copy ActiveCell.Offset(RowOffset:=[O1991], Columnoffset:=0)ActiveCell.PasteSpecial End Sub

  • Excel VBA セル値の配列代入について

    Excel VBAで、セルの値を配列に代入する処理を、よくやります。 arr=Range("$A1:$C1000").value とかですね。これに関して、オートフィルタで絞り込んだ結果の可視セルだけを、配列に代入するということは、やっぱり出来ないのでしょうか。

  • 配列について(VBA)

    ExcelもVBAも初心者です。 配列を使ってセルの値を取得したいです。 Range(A1:A5).Value=a は出来るようですが、 dim a(4) as date a = Range(A1:A5).Value は出来ないみたいです?(謎 明日までには完成しなければならないので、 どなたかヒントだけでもいただけませんでしょうか? よろしくお願いします。

  • エクセルVBAのヒントをください

    エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す  ・行挿入   ・最初のカンマの位置を調べる   ・先頭からカンマまでを切り取る   ・上記の値をセルに入力  ・行挿入   ・2番目のカンマの位置を調べる   ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る   ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。

  • Excel 2010 VBAで教えてください。

    Excel 2010 VBAで教えてください。 Doubleの配列 Dim A(100) as double に ワークシート "Sheet1" セル A1:A100 の値を一発(For loop等を利用しない) で読み込むにはどうすればよいのでしょうか。 同じく、 Doubleの配列 A(100)を ワークシート "Sheet2" セル B1:B100 に一発で書き出すのはどうすればよいのでしょうか。  Variantにて Dim A as Variant では  A = Sheets("Sheet1").Range("A1:A100") で 読み込めました。 また Sheets("Sheet2").Range("B1:B100")で書き込みできましたが、double等でどうすれば良いのか知りたいです。

  • excel vba 名前付きセルが存在しないとき

    あるワークシートのセルに、"_1", "_2","_3","_10"のように名前をつけています。 "_8"が見つからなかったら、ループで番号を上げていき、"_10"にたどりつくようにしたいんですが、"_8"というセルが見つからなかった時の判定方法がわかりません。 On error ではない処理を使いたいのですが、 If Range("_8") = Empty Then では実行時エラー1004 "アプリケーション定義またはオブジェクト定義のエラーです" と出ます。 Rangeオブジェクトがemptyになるわけではないんでしょうか? よい方法があれば、教えてください。

  • エクセルVBA:範囲選択について

    初歩的な質問ですが、よろしくお願いします。 Excel2000です。 グラフを描くための範囲選択をしたいのですが、うまくいきません。 状況は、 ・列A、列Bにデータが入っている。(データの数はAB同じで2行以上) ・開始点は一定。(ここでは、行10と仮定します) ・終了点が変化する。(但し、終了点は常に一番下のデータ) これだけです。 一番下のデータを参照するので、 Range("A10 : Range("B10").End(xlDown)").Select Range("A10 : Range("B65536").End(xlUp)").Select Range("A10 : Cells(ActiveSheet.Rows.Count, 2).End(xlUp)").Select と書きましたが、全てダメでした。 直接書くのがダメなら変数を使おうと思い、 Dim StopCell as Range Set StopCell = Range("B65536").End(xlUp) Range("A10 : StopCell").Select と書きましたが、ダメでした。 このとき、変数StopCellには「セル」ではなく、「セルの値」が代入されているようです。 Valueと書いていないのに値が代入されていること、オブジェクト変数なのに数値が代入されていることが納得できません。 どこをどのように間違えているのでしょうか。 また、目的のマクロはどのようになるのでしょうか。 大村あつし著「かんたんプログラミングExcel2000VBA基礎編」および「同 コントロール・関数編」で勉強していますが解決しません。 ご教授ください。

  • VBAのRangeオブジェクトについて

    いつもお世話になっております。 VBAのRangeオブジェクトについてご教示下さい。 例えば下記のPGを組みます。 Sub test() Dim r As Excel.Range Set r = Me.Range("A1") Debug.Print r.Cells.Count End Sub この時、Debug.Printには"1"と表示されます。 Debug.Printでブレイクを置き、ここでA列を削除するとDebug.printでエラーが出てしまいます。 Rangeオブジェクト生成後、もしも参照先のセルが削除してしまった場合、条件分岐の処理を入れたいのですが、どのように処理をいれればよろしいでしょうか? セル削除後、Rangeのプロパティを参照した時点でエラーが発生してしまいます。 Typeで確認するとRangeがちゃんと取れるのですが・・・。 "参照先のセルが消されたかどうか"を判別する方法はあるのでしょうか?

  • エクセル VBA セル範囲の一部解除

    rangeオブジェクト型変数にセル範囲を代入した後、一部のセルを解除したいのです。 グラフを描くためにc列とE列をデータに散布図を描こうとしてます。セル範囲の選択はrange型変数に代入しました。しかしゼロ以下の値のセルは削除したいのです。 for each c in datacell if c.value <0 then c.value="" next c 上記のようにすると目的は達しますが、ワークシート上の値も削除されてしまい、好ましくありません。良い方法はないでしょうか?

専門家に質問してみよう