Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Microsoft 365)
連続入力機能を無効化したい
投稿日時: 24/01/17 13:31:26
投稿者: S.Kos

みなさま、こんにちは
 
ある値が入ったセルを選択(左クリック)し、右下のポチを掴んで引っ張れば、その値を連続入力できます。
この機能を、特定のシートだけ無効にしたい、と思っています。
 
該当セルにキ−ボ−ドから入力することはありませんが、左ダブクリを検出し、入力フォームを開く必要があります。
 
なにかしらの解決策をご教示いただければ幸いです

回答
投稿日時: 24/01/17 14:57:25
投稿者: Suzu

ドラッグアンドドロップも オートフィル と共に 無効にして良いなら
Application.CellDragAndDrop = False
とします。
 
これを、シートのアクティブイベント、と、非アクティブ イベントで制御する事になろうかと。
念のため、WorkBook の Open と Close あたりにも仕込めば良いかと。
 
ただ、あくまで Application なので、
そのシート操作中に、Excelが落ちる様な事になり、
そのブックではなく、他のブックを開いた際には、False のまま になるのでその場合の
対応は必要になるでしょう。
 
 
でも、コピペや、フラッシュフィル等は有効なのでは?
あくまで、フォームで編集させたいなら、シート保護の方がよっぽど簡単ではないでしょうか。

回答
投稿日時: 24/01/17 17:29:00
投稿者: QooApp

役所のシートみたいであまりお勧めできないのですが、
シートの保護で入力禁止・入力可のセルをそれぞれ定義する前提で
 
・オートフィルをしてほしくないセルの上下(または左右)に1行(または1列)の空白を挟みます
・入力可のセルだけセルの書式から保護のタブのロックのチェックボックスを外します
・シートを保護します
 
結果、オートフィルしたい方向に入力可能なセルが連続で配置されていない(間に保護セルが挟まる)ので
オートフィルをブロックできるんですけど、
 
・セルの配置がずれたり
・再レイアウトする必要があったり
・罫線とセルの塗りつぶし(と幅調整)の変更かけたり
と手間がかかる可能性はあります。
 
パワープレイなのでオススメしません。

投稿日時: 24/01/17 20:57:23
投稿者: S.Kos

Suzuさん、ご教示感謝です。
>シート保護の方がよっぽど簡単では
>
これ、やってみました。
 
シートの保護で「ロックされていないセル範囲の選択」のチェックを外しました。
でもこれだと、該当セルの「左ダブクリ」もできなくなる・・・
なにか、勘違いしてますか?
 
 
QooAppさん、ご教示感謝です。
>・オートフィルをしてほしくないセルの上下(または左右)に1行(または1列)の空白を・・
>
確かにパワープレイ、これには気づきませんでした。
ただ、今回のシートは練り込んだ(笑)レイアウトで、これを再構成するってのは、難ありです。

回答
投稿日時: 24/01/18 10:26:25
投稿者: Suzu

引用:
シートの保護で「ロックされていないセル範囲の選択」のチェックを外しました。
でもこれだと、該当セルの「左ダブクリ」もできなくなる・・・
なにか、勘違いしてますか?

 
外さなくて良いです。
 
そもそも、そこまでやる必要があるのかどうなのか
質問文だけでは、判断できません。
 
オートフィルで入力されるのを ダメ とするなら
コピペ等で入力されるのも ダメ なのでは? と推測したからです。
 
Application.CellDragAndDrop = False で済むなら それだけでも良いでしょうし。

回答
投稿日時: 24/01/20 10:57:30
投稿者: MMYS

S.Kos さんの引用:

該当セルにキ−ボ−ドから入力することはありませんが、左ダブクリを検出し、入力フォームを開く必要があります。

S.Kos さんの引用:

シートの保護で「ロックされていないセル範囲の選択」のチェックを外しました。
でもこれだと、該当セルの「左ダブクリ」もできなくなる・・・

シートの保護しても、「ダブルクリック」イベントは発生しますが。
シートでの直接入力禁止。入力フォームでのみで入力なら、全セルを保護にして、シート保護すれば十分と思うのですが。
 
標準モジール
Sub ProtectAllCells()
    With ActiveSheet
        .Unprotect
        .Cells.Locked = True
        .Protect
    End With
End Sub

シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    UserForm1.Show
    Cancel = Not Cancel
End Sub

投稿日時: 24/01/21 13:38:34
投稿者: S.Kos

ご教示いただいたみなさま、ありがとうございました。
 
最終的に以下の方法を採りました。
・シートの
  Worksheet_Activate に Application.CellDragAndDrop = False を置き、
  Worksheet_Deactivateに Application.CellDragAndDrop = True を置く
・シートを閉じずにブックを閉じられたときのために、
  Workbook_BeforeCloseにも Application.CellDragAndDrop = True を置く
 
いまのところ、要望に沿って動いています。
 
 
MMYSさん
>シートの保護しても、「ダブルクリック」イベントは発生しますが。
>
確かにそうなのですが、ダブルクリックしたセルの位置、が取得できませんでした。
手が空いたとき、改めて試行するとし、当面は上記手法で凌ぎます。
 
ここで閉じます。