ダウンロード

各種小技集

ワークシートをスクロール
 指定位置のセルを左上端に表示
 アクティブセルを左上端に表示
[切り取り/貼り付け]を禁止
リンクリスト
サンプルファイルのダウンロード



ワークシートのスクロール

指定位置のセルを左上端に表示

指定セルをシートの左上端に表示したい場合があります。
結果を表示するセル位置が、表示領域の外、または下端になる場合など。
このような場合、scrollRow/scrollColumnプロパティを使うことにより、指定位置をシート左上にスクロールすることができます。


Window.ScrollRow プロパティ (Excel) - ヘルプより

ウィンドウ枠 (ペイン) 内またはウィンドウ内で上端に表示される行の番号を取得または設定します。
長整数型 (Long) の値を使用。
構文
式.ScrollRow
式 Window オブジェクトを表す変数です。
注釈
ウィンドウを分割表示している場合、Window オブジェクトの ScrollRow プロパティは左上のウィンドウ枠を対象とします。
ウィンドウ枠を固定している場合、Window オブジェクトの ScrollRow プロパティは固定領域を対象外とします。

Window.ScrollColumn プロパティ (Excel)

ウィンドウ枠 (ペイン) 内またはウィンドウ内で左端に表示される列の番号を取得または設定します。
使用方法は、ScrollRow と同一

VBAコード

次の例は、行 3上端になるようにウィンドウをスクロールします。
Private Sub CommandButton1_Click()
    ActiveWindow.ScrollRow = 3
End Sub
セルB3先頭に表示するには、下記のようにします。
Private Sub CommandButton1_Click()
    ActiveWindow.ScrollRow = Range("B3").Row
End Sub
    
セルB3左端に表示するには、下記のようにします。
Private Sub CommandButton1_Click()
    ActiveWindow.ScrollRow = Range("").Column
End Sub
    
セルB3左上端に表示するには、下記のようにします。
Private Sub CommandButton1_Click()
    ActiveWindow.ScrollRow = Range("B3").Row
    ActiveWindow.ScrollColumn = Range("B3").Column
End Sub
    

アクティブセルを左上端に表示

アクティブセルを左上端に表示(移動)するには、ActiveCellプロパティを使用します。
下図は、現在のアクティブ(選択されている)セルを左上端に表示(移動)する例。


VBAコード

次の例は、アクティブセル(選択されているセル) が上左端になるようにウィンドウをスクロールします。
Private Sub CommandButton1_Click()
    ActiveWindow.ScrollRow = ActiveCell.Row
    ActiveWindow.ScrollColumn = ActiveCell.Column
End Sub
    

[切り取り/貼り付け]を禁止

不具合現象 - 貼り付け先で参照エラー#REF発生

切り取り」の後「貼り付け」を行う場合、「貼り付けに在ったデータが消去されます。
セル内の文字や数値が消えるだけなら良いのですが、そのセルが他のセルから参照されたいる場合、
「切り取り」の後「貼り付け」を行った瞬間、参照先のセルに#REF(参照エラー)が発生してしまいます。

例:再現実験

C4のデータを判定して評価を算出する式をC5に設定しています。
(成績が「A」であれば「〇」、以外は空白)
同様に、D4の評価式をD5に設定


ここで、セルC4を「切り取り」、セルD4に「貼り付け」ます。
この瞬間に、セルC5の式は、セルD4を参照するように変更されます。
これは問題ありません。元データが移動したのだから、それを参照しているセルの式も変化します。

ところが、元々D4を参照している式(D5)がある場合は問題が生じます。
セルD4にセルC4が上書きされたため、D4消滅した状態になっています。
これにより、D4を参照していたD5では参照不可となり#REFが発生。
(どのような論理でこのような動作をするのか、いまいち不明)



「貼り付け」は「シート保護」を行っても防止できません。
(「セル選択」自体を禁止すれば「貼り付け」は出来ませんが・・・)

対処方法 - 「貼り付け」を禁止

セルの選択(Worksheet_SelectionChange)イベント発生時に、
コピー状態が「切り取りモード」(Application.CutCopyMode = xlCut)であれば、強制的に
コピー状態を解除(Application.CutCopyMode = False)してしまいます。



これにより、「切り取り」操作操作自体が無かったことになり、「貼り付け」が出来なくなります。
下図で「貼り付け」が灰色になり、選択できなくなっています。
「コピー」後の「貼り付け」は可。

使用したVBAコード

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '切り取り/貼り付け禁止 2019/07/03
    If Application.CutCopyMode = xlCut Then '「切り取り」モードだったら
        Application.CutCopyMode = False '貼り付け禁止
    End If
End Sub



×
PageTop