top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(28)

開発事例(25)

シート・セル操作(20)

図形操作(15)

講座実施報告(12)

設計思想(11)

ユーザーフォーム(10)

コード自動生成(10)

数学(8)

文字列操作(8)

開発効率化(6)

GAS(5)

アニメーション(5)

技術解説(4)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

Webアプリ(4)

OneDrive(3)

イベントプロシージャ(3)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

公開ツール(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

Antigravity(2)

デスクトップアプリ(2)

ステータスバー(1)

コード解析(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

カーソル操作(1)

チェックボックス(1)

PowerShell(1)

python(1)

EventDblClickShowCalendarNumberFormatIsDate|表示形式が日付のセルをダブルクリックだけでカレンダーが起動するようにする|Excel VBA

概要(ダブルクリックするだけでカレンダーが出てくる)

今回は、Excelのワークシート上で 表示形式が「日付」になっているセルをダブルクリックするだけで、カレンダー(UserForm)を起動できる ようにする実装例を紹介します。


Googleスプレッドシートには、入力規則で日付を指定するとカレンダーが表示される標準機能がありますが、Excelには同等の機能が標準では用意されていません。そこでVBAを使い、セルの表示形式を日付にしておくだけで、ダブルクリック時にカレンダーを表示できる仕組みを実現します。


通常の日付入力は、数字やスラッシュを手入力する必要があり、入力ミスや表記ゆれが起きやすいのが難点です。カレンダー入力にすることで、直感的に日付を選べるようになり、入力の手間とミスを減らせます。

EventDblClickShowCalendarNumberFormatIsDate|表示形式が日付のセルをダブルクリックだけでカレンダーが起動するようにする|Excel VBA


実際の実装例

実際の動作は、下の動画のとおりです。対象のセル範囲の表示形式を「日付」に設定しておくと、そのセルを ダブルクリックしたタイミングでカレンダーが起動し、日付を選択して入力できるようになります。


「日付列だけ入力を簡単にしたい」「入力ミスを防ぎたい」といった場面で、特に効果が出やすいUI改善です。




実装手順


動画にも実際のコードを掲載していますが、ここでは実装手順を文章で整理します。本機能は、シートのダブルクリックイベント(Worksheet_BeforeDoubleClick)から、汎用プロシージャ EventDblClickShowCalendarNumberFormatIsDate を呼び出す構成です。


1. シート側にダブルクリックイベントを記述する

まず、対象シートのコードモジュール(例:Sheet1)に、ダブルクリック時のイベントを記述します。ここでは Target(クリックされたセル)と Cancel(既定動作のキャンセル)を引数として、汎用プロシージャへ渡すだけでOKです。


2. 汎用プロシージャ側で「表示形式が日付か」を判定する

次に、汎用プロシージャ EventDblClickShowCalendarNumberFormatIsDate を標準モジュールに用意します。ダブルクリックしたセルは Target(Rangeオブジェクト)として渡されるため、まず Target.NumberFormatLocal から表示形式を取得し、日付形式かどうかを判定します。


判定方法はシンプルで、表示形式の文字列に y / m / d が含まれているかどうかを確認します。日付形式と判定できた場合は Cancel = True としてセル編集を止め、カレンダー(UserForm)を表示します。


3. カレンダー(UserForm)はパッケージをインポートして準備する

カレンダー本体は、下記のZIPパッケージとして用意しています。ダウンロード後、VBE(Visual Basic Editor)のプロジェクトエクスプローラーに ドラッグ&ドロップ でインポートしてください。



ZIPの中には、以下のファイルが入っています。

  • clsBtnDay.bas(日付ボタン関連のクラス)

  • frmCalendar.bas(UserForm本体のコード)

  • frmCalendar.frx(UserFormのフォーム定義)

この3点が取り込めれば、カレンダーフォームは利用できる状態になります。


カレンダー入力フォームの中身
カレンダー入力フォーム.zipの中身

4. フォーム表示位置をセルの近くに合わせる(任意)

カレンダーは frmCalendar.Show vbModeless で表示していますが、さらに使い勝手を上げるため、選択セルの近く(右上など)にフォームを配置しています。配置処理には SetFormNearCell を利用します。


Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

softex-celwareロゴ 透過 横長.png

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page