プロが教えるわが家の防犯対策術!

VBAでオートフィルター状態から一番左上のセルのすぐ下のセルを選択するコードはどのように書けばよいでしょうか?Offsetを使用しているのですが、見えないセルを選択してしまいます。

A 回答 (3件)

こんな風に書いてみました。



Sub sample()
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Item(1).Select
End Sub
    • good
    • 2
この回答へのお礼

まさにこれです!

助かりました。本当にありがとうございます。

お礼日時:2018/08/18 18:13

#1の回答者です。



>ただ見える場所にカーソルを移動させたいだけなのですが、もう少し簡単な表現方法はございますでしょうか?

失礼しました。質問を読み違えてしまったようです。

見えるセルに移動する、というのは、簡単ではあっても、めったに出会わないマクロだと思います。Sendkeys を使う方法があります。

'//
Sub TestFilterMoveCell()
With ActiveSheet
.Range("A1").Select '左端上のオートフィルタに移動
Do
  Selection.Offset(1).Select
 Loop Until ActiveCell.EntireRow.Hidden = False
End With
End Sub

'Sendkeys を使った方法
'これは、他のWindow画面を開いていると、うまくいきません。
'//あまりお勧めしません。

Sub TestFilterMoveCell2()
With ActiveSheet
.Range("A1").Select '左端上のオートフィルタに移動
Application.SendKeys "{DOWN}"
End With
End Sub
    • good
    • 0

一般的には、以下のように、そのままコピーすれば、見えないセルは選択しないはずです。


もしかしたら、バージョンの違いがあると思います。
その場合は、**の印の部分に替えてください。


Sub TestFilter()
Dim FilRange As Range
With ActiveSheet
'オートフィルターの状態の確認
 If .AutoFilterMode = False Then
  .Range("A1").AutoFilter
 ElseIf .FilterMode Then
 'フィルターで見えない行がある場合は一度全部だす。
  .AutoFilter.ShowAllData
 End If
 'オートフィルターの範囲を設定 オートフィルターの選択
 Set FilRange = .AutoFilter.Range
 FilRange.AutoFilter _
  Field:=1, _
  Criteria1:="0"
  '一列目のフィルターを使う
 With FilRange
 'Offset を使って1行下げて、行を縮める
  .Resize(.Rows.Count - 1).Offset(1).Copy Worksheets("Sheet2").Range("A2")
  ''**.Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy _
  Worksheets("Sheet2").Range("A2")
 End With
End With
End Sub

添付画像は、そのオートフィルターの状態
「VBA オートフィルター状態から見えるセ」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ただ見える場所にカーソルを移動させたいだけなのですが、もう少し簡単な表現方法はございますでしょうか?

お礼日時:2018/08/15 11:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A