
エクセルVBAで、非表示にした行は飛ばしてスクロールさせる方法を教えて下さい。
下記の画像のようなエクセルの表があったとします。
A2セルに設置した「下へ」ボタンを押す度に、(ウィンドウ枠の固定をA2セルの下でやっているので)現在のA3セルがある場所に、最初にA17セル、次にA28セル、と、各会社の一番上の行が来るようなマクロを作りたいと思いました。
ただし、もう取引のない会社等の理由で、非表示にしてある会社は飛ばしてスクロールさせたいのえすが、飛ばすことが出来ません。
画像で説明しますと、A社が一番上に表示してある状態で、「下へ」ボタンを1回押すと、C社が一番上に来るようにしたいのですがうまくいきません。
どうしたらよいのでしょうか?
Sub 下スクロール()
s = Selection.Row '現在選択されているセルの行番号をs変数として表現
Cells(s, 1).Select '選択されているセルのA列を選択(A列以外の列が選択されていた時の為)
au = Selection.Row '選択されている結合セルの一番上の行番号をau変数と表現
'ad3 = Selection.Offset(3, 0).Row
'ad3 = Cells(au + Range("A" & au).MergeArea.Count - 1, 1).Offset(3, 0).Row
ad3 = Cells(au + Range("A" & au).MergeArea.Count - 1, 1).Row + 3 '結合セルの一番下の行から3行下の行をad3変数で表現
ActiveWindow.ScrollRow = ad3 'ad3行が一番上に来るようスクロール
Cells(ad3, 1).Select 'A列を選択
End Sub
よろしくお願い致します。

No.3ベストアンサー
- 回答日時:
>エクセルVBAで、非表示にした行は飛ばしてスクロールさせる方法を教えて下さい。
たぶん、質問内容が間違いだと思います。コードを見る限りは、そのようにはなっていないので、どちらかが間違っていると思います。「次の会社」に飛ぶなら、Merge セルを探すのであって、非表示行を飛ばすことではありません。
そして、この手の質問は、プロの人でない限りは見ただけでは、分からないと思います。
私も以前作ったことがありますが、個人的には、いくら作っても、何かが足りないような気がしてなりません。たぶん、本来は、Do ~ Loop の扱いのコードのような気がします。なお、画面の動きが大きいので、イベントで、SelectionChange で、ボタンそのものを画面に連動させたほうがよいかもしれません。
今回は、データ行を探すのに、UsedRange.Columns(1)を使っていますが、Range("A1", Cells(Rows.Count, 1).End(xlUp)) をしても良いと思います。
'//
Sub NextDownJump()
'下スクロール
Dim i As Long, j As Long, n As Long
With ActiveSheet.UsedRange.Columns(1)
j = ActiveCell.EntireRow.Cells(1, 1).MergeArea.Row
For i = j To .Cells.Count
n = .Cells(i).MergeArea.Rows.Count
i = i + n
If .Cells(i).MergeCells Then Exit For
Next
.Cells(i).Select
End With
End Sub
Sub BeforeUpJump()
'上スクロール
Dim i As Long, j As Long, n As Long
With ActiveSheet.UsedRange.Columns(1)
j = ActiveCell.EntireRow.Cells(1, 1).MergeArea.Row
j = j - 1
If j = 1 Then Exit Sub
For i = j To 1 Step -1
If .Cells(i).MergeCells Then Exit For
Next
.Cells(i).Select
End With
End Sub
ボタンの移動:ボタンの列は空白のほうがよいです。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
WinTop = ActiveWindow.VisibleRange.Top
Sheet1.Shapes("ボタン 1").Top = WinTop + 3
Sheet1.Shapes("ボタン 2").Top = WinTop + 8 '←調整してください。
End Sub
詳しくありがとうございます。
私も初心者ながらdo~loopにたどりつきました。
Sub 上スクロール()
s = Selection.Row '現在選択されているセルの行番号をs変数として表現
Cells(s, 1).Select '選択されているセルのA列を選択(A列以外の列が選択されていた時の為)
Do While hihyouji < 1 'hihyouji変数が1より大きくなるまで繰り返す
au3 = Selection.Row - 3 '選択されているセルの3つ上のセルの行番号をau3変数で表現
Cells(au3, 1).Select '3つ上のセルのA列を選択
au = Selection.Row '選択されている結合セルの一番上の行番号をau変数と表現
ActiveWindow.ScrollRow = au 'au行が一番上に来るようスクロール
Cells(au, 1).Select 'A列を選択
If Rows(au).Hidden = True Then '非表示行かどうか判断
hihyouji = 0 '非表示行だった場合、hihyouji変数に「0」を代入
Else
hihyouji = 1 '非表示行ではない場合、hihyouji変数に「1」を代入
End If
Loop
End Sub
本当にありがとうございます。
No.2
- 回答日時:
Rows(ad3).Hidden
を調べて、Trueだったらその行は非表示なので、その場合はその次の会社を見つけるようにしましょう。
出来ました!
感謝です!
Sub 下スクロール()
s = Selection.Row '現在選択されているセルの行番号をs変数として表現
Cells(s, 1).Select '選択されているセルのA列を選択(A列以外の列が選択されていた時の為)
Do While hihyouji < 1 'hihyouji変数が1より大きくなるまで繰り返す
au = Selection.Row '選択されている結合セルの一番上の行番号をau変数と表現
ad3 = Cells(au + Range("A" & au).MergeArea.Count - 1, 1).Row + 3 '結合セルの一番下の行から3行下の行をad3変数で表現
ActiveWindow.ScrollRow = ad3 'ad3行が一番上に来るようスクロール
Cells(ad3, 1).Select 'A列を選択
If Rows(ad3).Hidden = True Then '非表示行かどうか判断
hihyouji = 0 '非表示行だった場合、hihyouji変数に「0」を代入
Else
hihyouji = 1 '非表示行ではない場合、hihyouji変数に「1」を代入
End If
Loop
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
DataGridViewのセル編集完了後...
-
任意フォルダから画像をすべて...
-
VBAでセルをクリックする回...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
VBAでセル同士を比較して色付け
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
Excel vbaで特定の文字以外が入...
-
VBA ユーザーフォーム ボタンク...
-
VBAコマンドボタンを押すたびに...
-
Application.Matchで特定行の検索
-
EXCELのVBA-フィルタ抽出後の...
-
EXCEL VBA For to
-
”戻り値”が変化したときに、マ...
-
Excelのプルダウンで2列分の情...
-
VBA実行後に元のセルに戻りたい
-
VBA初心者です。結合セルを保持...
-
Excel VBA 一時退避用のセルオ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
特定行の色を変えたい(FlexGrid)
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
VBA実行後に元のセルに戻りたい
-
Application.Matchで特定行の検索
-
”戻り値”が変化したときに、マ...
-
VBAでセルをクリックする回...
-
任意フォルダから画像をすべて...
-
Excel VBAで、 ヘッダーへのセ...
-
TODAY()で設定したセルの日付...
-
【Excel VBA】指定行以降をクリ...
-
Excel vbaで特定の文字以外が入...
-
ExcelのVBAで数字と文字列をマ...
-
Excel VBA、 別ブックの最終行...
-
DataGridViewの各セル幅を自由...
-
VBA ユーザーフォーム ボタンク...
-
連続する複数のセル値がすべて0...
おすすめ情報