エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Offsetで可視セルだけを移動したい。
Excel(エクセル)
-
vba の Selection.PasteSpecial で非表示行の扱い
Excel(エクセル)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
-
4
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
5
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
6
非表示の列をすべて削除するマクロ
Excel(エクセル)
-
7
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
8
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
9
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルVBAでコピーして順...
-
【Excel】指定したセルの名前で...
-
【Excel VBA】指定行以降をクリ...
-
特定の文字を条件に行挿入とそ...
-
Excelのプルダウンで2列分の情...
-
【EXCEL VBA】Range("A:A").Fi...
-
TODAY()で設定したセルの日付...
-
セル色なしの行一括削除
-
マクロ セルの値に応じてセルに...
-
エクセルVBAで、非表示にし...
-
screenupdatingが機能しなくて...
-
”戻り値”が変化したときに、マ...
-
VBからEXCELのセルの値を取得す...
-
EXCELで変数をペーストしたい
-
Excel VBAで、 ヘッダーへのセ...
-
VBAでセルをクリックする回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
TODAY()で設定したセルの日付...
-
EXCELで変数をペーストしたい
-
Excel VBA、 別ブックの最終行...
-
Excelのプルダウンで2列分の情...
-
VBA コピーして次の値まで貼り...
-
screenupdatingが機能しなくて...
-
エクセルVBAでコピーして順...
-
VBA初心者です。結合セルを保持...
-
セル色なしの行一括削除
-
VBAでセルをクリックする回...
-
Excel vbaで特定の文字以外が入...
-
DataGridViewの各セル幅を自由...
-
特定の文字を条件に行挿入とそ...
-
【VBA】指定したセルと同じ値で...
おすすめ情報