エクセル97です。
9行目から732行までの大きな表があります。一定の条件のとき、U列がaaaでなくV列もbbbではない行を非表示とするために下記のマクロを作ってみました。
一応思ったとおりには動くのですが行数が多いため、開始してから終了するまで5分以上かかってしまいます。このマクロのように9行目から732行まで順にやっていくのではなく、一度に非表示にするような方法はないでしょうか?
Sub TEST()
Sheets("TEST").Activate
For i = 9 To 732
If Cells(i, "U") <> "aaa" And Cells(i, "V") <> "bbb" Then
Cells(i, "V").EntireRow.Hidden = True
Else
Cells(i, "V").EntireRow.Hidden = False
End If
Next i
End Sub
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
#2です。
> tmp = "=IF(OR(U9=""eee"",V9=""fff""),1,"""")"
> としてもダメでした。これはOR条件は使えないのでしょうか?
動くハズですよ、セルに入れる時は =IF(OR(U9="eee",V9="fff"),1,"") というただの条件式ですから。
VBAで文字列に " を使うときは "" としてやらねばならないためちょっと変に見えるだけです。セルにこの関数を入れて 1 が立てば、例のマクロで非表示対象になります。
思い通りにならないとしたら条件を勘違いされているのではないでしょうか?
仕組みの説明
1.テンポラリィ範囲を取あえず表示(条件を変えて実行した場合に必要?)
2.テンポラリィ範囲に関数を一気に代入
3.テンポラリィ範囲の数値セル(行)を非表示
4.テンポラリィ範囲の関数をクリア
3 はExcelの操作でやると、テンポラリィ範囲を選択し、編集-ジャンプ-セル選択の選択オプションで「数式」の「数値」のみにチェックを入れた場合に選択される範囲です。
条件式を入れる列を追加出来るならマクロでやらなくてもオートフィルタで出来る内容ですね。
No.3
- 回答日時:
Sub test02()
For i = 1 To 732
If i Mod 10 = 1 Or i Mod 10 = 6 Then
Cells(i, "U") = ""
Cells(i, "V") = ""
End If
Next i
End Sub
を実行し、A1:T732に(同じ)データを入れ
Cells(i, "V").EntireRow.Hidden = False を省き
●(注!)不要のようです。
Sub TEST()
Sheets("sheet1").Activate
For i = 9 To 732
If Cells(i, "U") <> "aaa" And Cells(i, "V") <> "bbb" Then
Cells(i, "V").EntireRow.Hidden = True
End If
Next i
End Sub
を実行してみたところ、2秒ぐらいで終了しました。
Application.ScreenUpdating = TRUE,False も入れていません.
入れると一瞬にして終わります。当方98seでエクセル2000で数年前のCPUです。
ですからなにか別の要因で遅くなるのだと思います。
Cells(i, "V").EntireRow.Hidden = Trueを
Rows(i).EntireRow.Hidden = Trueにしてみたりしましたが変りありませんでした。
ありがとうございました。
Cells(i, "V").EntireRow.Hidden = False を省きましたらかなり早くなりましたが、数秒というわけにはいきませんでした。
No.2
- 回答日時:
5分は掛かりすぎですね。
こちらの環境ではそのままのコードで実行しても、3~4秒でした。
#1さんの回答にある Application.ScreenUpdating = False でだいぶ改善されると思いますが、、、
例は空いていそうなセルに判定用関数を入れて一気に非表示にしてます。
複雑な計算式を多用している場合はかえって遅くなるかもしれません。
Sub TEST1()
Dim tmp As Range
Sheets("TEST").Activate
Set tmp = Range("IV9:IV732")
tmp.EntireRow.Hidden = False
tmp = "=IF(AND(U9<>""aaa"",V9<>""bbb""),1,"""")"
On Error Resume Next
tmp.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden = True
tmp.Clear
End Sub
この回答への補足
本来は別の質問としなければいけないのかも知れませんが・・・・。
上記でU列が"eee"、またはV列が"fff"のときのみ、その行を非表示とする場合、
tmp = "=IF(OR(U9=""eee"",V9=""fff""),1,"""")"
としてもダメでした。これはOR条件は使えないのでしょうか?
ありがとうございました!
一瞬でできました!!
ただ、理屈がよくわからないのです。
U9<>"aaa"かつV9<>"bbb"のとき、そのIV列に1をいれてるのはわかりましたが・・・・。
理屈がよくわからないので別な表のOR条件に応用できませんでした。
ANDをORにかえてもだめなんですね?
No.1
- 回答日時:
行単位で表示非表示の判別をせざるを得ない以上、一度にする方法はないでしょうが、まぁアルゴリズムを見直すなら。
最初にソートさせて、U列がaaa、V列もbbbの行をまとめてしまい、それ以外を非表示させるというのが早そうかなと思います。
まず行番号を振っていつでも元に戻せるようにしておく必要がありますが。
でそれ以外の最適化のコツとしては
・メモリリソースを節約
各変数は必ず最適な型で宣言しましょう。
dim i as Long
・描画の省略
その手の作業をする場合は真っ先に
Application.ScreenUpdating = False
と画面表示を更新させないようにします。最後に
Application.ScreenUpdating = true
としておくのを忘れないように。
・分岐の最適化
IF文よりはSELECT文の方が多少効率が良いので、判定はSELECT文でネストさせたらどうかなと。
・With...End With 構文による高速化
同じオブジェクトの処理が続く場合
With Cells(i, "V")
End With
と包みましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAマクロ非表示が遅いので早くしたい
Excel(エクセル)
-
特定のセルが空白だったら、その行を非表示にしたい。。。
Visual Basic(VBA)
-
指定した条件で行セルを非表示にするVBAについて
Visual Basic(VBA)
-
-
4
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
5
エクセルの保護で、列の表示や非表示が加納にするには
Excel(エクセル)
-
6
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
9
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
12
Excelで数式内の文字色を一部だけ変更したい
Excel(エクセル)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
15
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
16
EXCEL VBA 指定範囲内で特定の列に空白セルを含む行を非表示
Excel(エクセル)
-
17
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
18
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
19
エクセルVBA 罫線 処理時間短縮
Word(ワード)
-
20
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
特定の文字がある行以外を削除...
-
Excel グラフのプロットからデ...
-
Excelのフィルター後の一番上の...
-
エクセル 上下で列幅を変えるには
-
エクセル マクロ オートフィ...
-
AのセルとB行を比較して、一致...
-
excel 小さすぎて見えないセル...
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
excelのデータで色つき行の抽出...
-
結合されたセルをプルダウンの...
-
excel 同じ番号のデーターを横...
-
エクセルマクロで偶数行(又は...
-
Excelで結合されたセルの間に列...
-
エクセルVBAのEntireRow.Hidden...
-
直近の5個の平均を求めたい
-
エクセルで昨日までの日付デー...
-
エクセル マクロで数値が変っ...
-
Excel ウインドウ枠の固定をす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
VBAで色の付いているセルの行削除
-
Excel グラフのプロットからデ...
-
エクセル マクロ オートフィ...
-
エクセル マクロで数値が変っ...
-
エクセルのセルに指定画像(.jpg...
-
結合されたセルをプルダウンの...
-
AのセルとB行を比較して、一致...
-
罫線の斜線を自動で引くマクロ
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
Excel2007で、指定範囲の行高さ...
-
サイズの違うセル 並べ変え
-
エクセル 時間の表示形式AM/PM...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報