[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタのイベント?』(純丸)
データが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.