[[20050127100243]] 『オートフィルタのイベント?』(純丸) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタのイベント?』(純丸)

 データが1000行以上あって、すべての行に VLOOKUP関数とSUMPRODUCT関数が
 入っているシートがあります。 データ検索のためにオートフィルタで行を
 抽出すると、再計算に時間がかかるので、オートフィルタをONにしたら
 計算を「手動」に変えるマクロを組めたらいいなと思ったのですが、イベントに
 オートフィルタが見つかりませんでした。オートフィルタの抽出そのものを
 マクロ化するより他に手はないのでしょうか?
 (純丸)
 ※ 超忙で回答に参加出来ないのに質問はしっかり。


 自分でイベントを作ればよいかと思います。
  (INA)


 INAさん、こんにちは。「自分でイベントを作る」ってことがどういう作業になるのか
 ちょっとわからないのですが、私でも出来そうであればやってみたいので、やり方を
 教えていただけますでしょうか?
 (純丸)

 >オートフィルタをONにしたら
 これはどのような方法ですか?

 メニューのデータ、フィルタ、オートフィルタ ですか?
 それ以外の方法も使っていますか? 

  (INA)


 オートフィルタは「メニューのデータ、フィルタ、オートフィルタ」です。
 「オートフィルタをON」という書き方がまずかったようですが、初めからA列〜L列 に
 設定されています。データを抽出するのは基本的に、A列〜E列のどれか又は複数ですが、
 そのデータの「抽出を実行」すると再計算に時間がかかるので、その時には計算方法を手動に
 したいのです。「すべて表示」に戻したら計算方法も自動に戻したいとも思っています。
 (この時、時間がかかるのはやむを得ない。)
 以上です。よろしくお願い致します。
 (純丸)

 残念ながら▼マークのイベント取得は無理です。(ActiveXオブジェクトではないので)
  (INA)


 そうですか、残念です。抽出のマクロを作って、▼マークではなくボタンで実行するようにしてみます。
 INAさん、ありがとうございました。BeforeAutofilter とかあればいいのに、、、。
 (純丸)

 あきらめついでの思いつき。。。
 >「すべて表示」に戻したら計算方法も自動に戻したいとも思っています。
 抽出してる時は手動、、つまり、、行数が違う時は手動、、、
あぁぁっぁなんて勝手な解釈なんでしょう。。許してたもれ。。。
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyRow As Long
Dim MyFilterRow As Long
If Me.AutoFilterMode = False Then Exit Sub
    MyRow = Me.Range("A65536").End(xlUp).Row
    MyFilterRow = Me.AutoFilter.Range.Rows.Count
    If MyRow <> MyFilterRow Then
        Application.Calculation = xlManual
    Else
        Application.Calculation = xlAutomatic
    End If
End Sub
(SoulMan)


 Manさん、ごめんなさい。昼間返信したつもりだったのに更新してなかったようです。
 それで、せっかく書いてもらったコードですが、残念ながら希望する動きにはなりません。
 何をしても計算が手動に切り替わり自動に戻りません。
 しかしちょっとヒントをいただいたので、自分で工夫してみます。ありがとうございました。
 (純丸)

 自分でもちょっとなぁ、、っと思いました。
A列のA65536から上にアップした行と
MyRow = Me.Range("A65536").End(xlUp).Row
A1からフィルターの掛かった行とを見比べているので
MyFilterRow = Me.AutoFilter.Range.Rows.Count
そのへんの調整が必要なんだと思います。
新規のBOOKでA1から適当なリストを作って見てください。
変わると思います。
あっ、SelectionChangeだから少しはセルを移動させなきゃだめですよ。
でも、このコードを計算のイベントにも入れる必要があるような?ないような??
(SoulMan)


 失礼します。
 該当のファイルは純丸さん個人で使われるものでしょうか。
 それとも他の方も使うもの?
 もし個人でお使いのものであれば、どこかのセルにSelectionChangeイベントで
 手動計算、自動計算の切り替えをするようにしてはいかがでしょうか。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
    If .Address(0, 0) <> "E1" Then Exit Sub
        If Application.Calculation = xlManual Then
            Application.Calculation = xlAutomatic
            .Value = "自動計算"
        Else
            Application.Calculation = xlManual
            .Value = "手動計算"
        End If
End With
End Sub

 ※オートフィルタを押した瞬間のイベントが無いってことは、行の数を数える時点では
 計算が自動になっているから、計算に時間がかかる問題は解決しませんよね。
 (川野鮎太郎)

 >計算に時間がかかる問題は
 それ、それ、で、計算のイベントにも入れようかと思ったけど、
 計算が手動だからイベントが起きない><
 でも、
 >「すべて表示」に戻したら計算方法も自動に戻したいとも思っています。
 ぐらいは、役にたつかな?と甘い考えでした。。。失礼!
(SoulMan)


 鮎さん、Manさん、すみません。本日体調不良で寝込んでまして、今やっとパソコンの前に
 座りました。鮎さんに提案いただいた「自動−手動」の切り替えですが、イベントよりも
 むしろボタンでやろうかと考えてます。切り替えだけにするか、MsgBoxを使ってフィルタの
 抽出までしてしまうか、思案中です。ブックは私よりむしろ他人が使うことの方が多いのですが
 スペックが低いパソコンが多いので、なるべく負荷の少ない方法にしたいという理由もあります。
 マクロはいろいろ考え始めるとおもしろいですね。欲も出てしょうがないです。
 いずれにしてもご提案ありがとうございました。返答が遅くなって失礼しました。
 (純丸)

 オートフィルタの抽出パターンが決まっているならトグルボタン。
 多いならコンボボックスでフィルタのドロップダウンリストと
 同じような項目を表示させて処理すればよいかと思います。
  (INA)


 なるほどINAさんのご提案が、最初にやりたかった事に近いことをやれるような
 気がしますね。とにかく自分でちょっと試してみて、またわからなかったら
 質問させていただきます。ありがとうございました。
 (純丸)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.