Excelの全てのブックに対してフィルハンドルを無効化しつつ、ドラッグアンドドロップを有効にする方法は、**個々のワークブックではなく、Excelの「個人用マクロブック」**にVBAコードを保存することで可能です。この方法では、すべてのブックでフィルハンドル無効化が適用され、さらに保存時に拡張子を .xlsx
に保つこともできます。
個人用マクロブックは、すべてのブックで利用可能なマクロを保存する特別なブックです。
-
Excelで個人用マクロブックを開く
- Excelを開き、
Alt + F11
キーを押してVBAエディタを開きます。 - 「VBAプロジェクト」ウィンドウで、
PERSONAL.XLSB
(個人用マクロブック)が表示されているか確認します。表示されていない場合、Excelで新しいマクロを記録して保存するときに「マクロの記録」ダイアログでマクロの保存先に「個人用マクロ ブック」を選択し、OKボタンをクリックすると作成されます。
- Excelを開き、
-
個人用マクロブックにコードを追加
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
VBAコードを使用する場合、通常 .xlsm
拡張子で保存する必要がありますが、コードを「個人用マクロブック」に保存しておけば、通常のワークブックを.xlsx
形式で保存することが可能です。次の手順で .xlsx
ファイルを維持できます。
- マクロを個人用マクロブックに保存し、Excelを閉じる際に、個人用マクロブックを保存します。
- 通常のワークブックを編集した後は、通常通り
.xlsx
形式で保存してください。
個人用マクロブックに保存されたマクロは、すべての新しいブックや既存のブックに自動的に適用されるため、.xlsm
に変換せずに .xlsx
形式を維持できます。