Skip to content

Instantly share code, notes, and snippets.

@hidao80
Last active September 5, 2024 06:47
Show Gist options
  • Save hidao80/eb75a6a7b3ad17e2c8481caffde97946 to your computer and use it in GitHub Desktop.
Save hidao80/eb75a6a7b3ad17e2c8481caffde97946 to your computer and use it in GitHub Desktop.
Excelのセルの枠をダブルクリックしてもアクティブセルが移動しないマクロ

Excelの全てのブックに対してフィルハンドルを無効化しつつ、ドラッグアンドドロップを有効にする方法は、**個々のワークブックではなく、Excelの「個人用マクロブック」**にVBAコードを保存することで可能です。この方法では、すべてのブックでフィルハンドル無効化が適用され、さらに保存時に拡張子を .xlsx に保つこともできます。

手順

1. 個人用マクロブックにコードを追加

個人用マクロブックは、すべてのブックで利用可能なマクロを保存する特別なブックです。

  1. Excelで個人用マクロブックを開く

    • Excelを開き、Alt + F11キーを押してVBAエディタを開きます。
    • 「VBAプロジェクト」ウィンドウで、PERSONAL.XLSB(個人用マクロブック)が表示されているか確認します。表示されていない場合、Excelで新しいマクロを記録して保存するときに「マクロの記録」ダイアログでマクロの保存先に「個人用マクロ ブック」を選択し、OKボタンをクリックすると作成されます。
  2. 個人用マクロブックにコードを追加

    • PERSONAL.XLSBの「ThisWorkbook」をダブルクリックし、以下のコードを貼り付けます。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Application.CellDragAndDrop = True ' ドラッグアンドドロップを有効にする
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Application.CellDragAndDrop = True ' 右クリックの際にもドラッグアンドドロップを有効にする
End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Application.CellDragAndDrop = False ' フィルハンドルの操作を無効にする
    Cancel = True
End Sub

macOS版Excelでは、発火するイベントが異なるようなので、一番上の関数を以下の内容に書き換えて下さい。

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' ドラッグアンドドロップを有効化
    Application.CellDragAndDrop = True
    
    ' 対象セルが範囲内かどうかをチェックしてフィルハンドルを無効にする
    If Target.Address = Selection.Address Then
        Application.CellDragAndDrop = False ' フィルハンドルの代わりに無効化
    End If
End Sub

2. 保存時に拡張子を.xlsxのままにする

VBAコードを使用する場合、通常 .xlsm 拡張子で保存する必要がありますが、コードを「個人用マクロブック」に保存しておけば、通常のワークブックを.xlsx形式で保存することが可能です。次の手順で .xlsx ファイルを維持できます。

  1. マクロを個人用マクロブックに保存し、Excelを閉じる際に、個人用マクロブックを保存します。
  2. 通常のワークブックを編集した後は、通常通り .xlsx 形式で保存してください。

個人用マクロブックに保存されたマクロは、すべての新しいブックや既存のブックに自動的に適用されるため、.xlsm に変換せずに .xlsx 形式を維持できます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment