『2つの表をスクロールで移動する方法』(Excel BVA初心者)
どなたか教えていただけますでしょうか。Excelシート1枚に表を2つ縦に配置します。VBAを活用して表の左端のセルににカーソルを置きコマンドボタン2個を使用してカーソルが上下にスクロールするようにしたいのですが。表1つならそれぞれのコマンドボタンにOffSetコードを入力して上下に移動させますが。表2つの場合カーソルを上の表の最終行から下の表へジャンプする、また下の表の最初の行から上の表へジャンプして表中においてはスクロールさせることは可能でしょうか。
< 使用 Excel:Excel2013、使用 OS:Windows11 >
直接的な回答ではありません。なんらかの参考になればと思います。
VBAをわざわざ作らなくても、以下のような方法で対応できませんか? ・二つの表の間でウインドウを固定し、上下にウインドウを「分割」します。 ・それぞれのウインドウ(ペインというんでしょうか)のスクロールは、 スクロールバーでいくらも上下できるのではないですか?
ボタン二つで上下させる方法との比較で言えば、
(1)一回のクリックで動く量は固定的になりませんか? スクロールバーは可変です。
(2)行き過ぎを戻すとき、違うボタンを押す必要がありますが、
スクロールバーでは直感的に対応でき比較的容易です。
如何でしょうか。
(xyz) 2026/05/18(月) 21:05:24
>表の左端のセルににカーソルを置き とあるので、
A1:A5とA11:A15をCtrlキーを押しながら選択。
Enterキーを押すと下方へ移動、Shift+Enterキーで上方へ移動。
この動作をコマンドボタンで行いたいということで合ってますか?
(冷やし中華) 2026/05/19(火) 08:18:08
2つの表の間の行を非表示にしてしまえばいいのでは? (´・ω・`) 2026/05/19(火) 08:39:29
どうも外していたようで失礼しました。
「カーソルをスクロールする」というのがよくわからないのですが、 「カーソルを移動する」ということでしょうか。 単にCtrl+↓やCtrl+↑でジャンプしていくということではなく、 ・カーソルが自動で下に(上に)規則的に移動していく動作を実現したい、 ・なおかつ、ふたつの表の間は自動でジャンプするように。 ということですか?
そもそも、「どんな点に不便を感じて」とか、「こういう特別な目的のために」という 説明を補足してもらうと、皆さんに明確に伝わるのではないかと思います。
(xyz) 2026/05/19(火) 08:54:27
というUIがホバーしてスクロールに応じて追尾しているっていうイメージですかね
UIイメージがつかめておりませんが >表1つならそれぞれのコマンドボタンにOffSetコードを入力して上下に移動させますが。 >表2つの場合カーソルを上の表の最終行から下の表へジャンプする、 >また下の表の最初の行から上の表へジャンプして表中においてはスクロールさせることは可能でしょうか。
ということなので表1つの場合はできていて 表が複数増えたときに表の一番下から次の一番下に飛ぶような機能を追加したいのかなと思いました。
その場合は既存の下方向に移動するコマンドボタンに
'下方向のコマンドボタンの処理に追加 currentRow = ActiveCell.Row nextRow = ActiveCell.End(xlDown).Row
'表間に1行以上の隙間が開いていると仮定
If (nextRow - currentRow >= 2) And (nextRow <> Rows.Count) Then
Cells(ActiveCell.End(xlDown).Row, ActiveCell.Column).Select
Else
'元の移動処理
End If
を差し込めばいいのではないでしょうか。 全然違ったらごめんなさい (ちくわ) 2026/05/19(火) 09:36:27
ひとつずつ移動していく意味が見出せませんが、こういうことですか?
Sub testDown()
Dim rng As Range
Dim tmp As Range
Set rng = ActiveCell
Set tmp = rng.Offset(1)
If tmp = "" Then
Set rng = rng.End(xlDown)
Else
Set rng = tmp
End If
rng.Select
End Sub
でも、普通は ↓ や ctrl+↓ で済む話なので、マクロにする必要も乏しい気がします。 (xyz) 2026/05/19(火) 11:59:04
空白セルをジャンプして次の行を選択するのではどうでしょう
Sub DownActiveCell()
ActiveCell.EntireColumn.Find("*", After:=ActiveCell).Select
End Sub
Sub UPActiveCell()
ActiveCell.EntireColumn.Find("*", After:=ActiveCell, SearchDirection:=xlPrevious).Select
End Sub
(´・ω・`) 2026/05/19(火) 12:01:04
【仕様】
表1つならそれぞれのコマンドボタンにOffSetコードを入力して上下のセルを選択させます。
上記を応用して
表2つの場合カーソルを上の表の最終行から下の表の(1行目)へジャンプする、
また下の表の最初の行から上の表(の最終行)へジャンプ
というように改造する
Sub 下移動()
Dim 表範囲1 As Range, 表範囲2 As Range
Set 表範囲1 = Worksheets("Sheet1").Range("B2:E5")
Set 表範囲2 = Worksheets("Sheet1").Range("B9:E12")
If Intersect(ActiveCell, 表範囲1.Rows(表範囲1.Rows.Count)) Is Nothing Then
ActiveCell.Offset(1).Select
Else
ActiveSheet.Cells(表範囲2.Row, ActiveCell.Column).Select
End If
End Sub
----------------------------------------------------------------
Sub 上移動()
Dim 表範囲1 As Range, 表範囲2 As Range
Set 表範囲1 = Worksheets("Sheet1").Range("B2:E5")
Set 表範囲2 = Worksheets("Sheet1").Range("B9:E12")
If Intersect(ActiveCell, 表範囲2.Rows(1)) Is Nothing Then
ActiveCell.Offset(-1).Select
Else
ActiveSheet.Cells(表範囲1.Row + 表範囲1.Rows.Count - 1, ActiveCell.Column).Select
End If
End Sub
(もこな2) 2026/05/19(火) 12:57:00
(もこな2) 2026/05/20(水) 19:00:26
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.