- ベストアンサー
エクセルVBAで非表示にした行を飛ばしてスクロールさせる方法
- エクセルVBAで非表示にした行をスクロールさせる方法について教えてください。
- エクセルのセルに配置した「下へ」ボタンを押すと、非表示にした行を飛ばしてスクロールするマクロを作りたいです。
- 現在のセルの下に、非表示の行を飛ばして表示させる方法を教えてください。
- みんなの回答 (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
その他の回答 (2)
- nattocurry
- ベストアンサー率31% (587/1853)
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
- TNKK7800
- ベストアンサー率18% (7/38)
基本的に、データベースとして扱うにはセルの結合はやめましょう また空白行もやめましょう そこからスタートしてください
お礼
知りたい事をこちらに聞くためにデータベースっぽいものを例として挙げましたが、実際にはまったく別ものでして。 よって実際にはデータベースとか取引先会社に関する云々ファイルではまったくないのですよ^^; でも、データベースをもし今後作る機会が合った時には、よくその事を考えます。 ありがとうございました。
お礼
詳しくありがとうございます。 私も初心者ながら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 本当にありがとうございます。