セルの列幅に収まらない値が入力されている場合、その値はセルからはみ出してしまいます。
右隣りのセルにも値が入力されている場合は、はみ出した値が見えなくなってしまいます。
その対策として、セル内の値を[折り返して表示する]や、セルの列幅を広げるといった方法がありますが、以下のような予定表などの場合は、見た目が悪くなってしまいます。

そのため今回は、選択したセルの列幅を自動で調整し、他のセルを選択すると同時に列幅が元に戻る仕組みを、VBAを用いて実現していきます。

※こちらで解説したファイルは記事の最後にて配布しています。
仕組み
今回の仕組みは以下のようになります。
①セルを選択すると同時に、選択しているセルを基準に列幅を自動調整
②他のセルを選択すると同時に、列幅を元に戻す
「①」に関しては、予定表の中が選択された時のみに適用します。

「②」に関しては、曜日の列を基準に列幅を調整することで、元の状態に戻していきます。

特定のシート上のセルを選択すると同時に何かしらの処理を実行するには、シートモジュールを活用します。
1. 開発準備
シートモジュールを開くには、対象のシートタブの上で右クリックし、[コードの表示]を選択します。

表示された画面がシートモジュールの編集画面になります。
次に、編集画面の上部にあるリストから[Worksheet]を選択します。

選択すると「Worksheet_SelectionChange」というイベントプロシージャが表示されます。
万が一、異なるイベントプロシージャが表示された場合は、先ほどのリストの右隣りのリストから「SelectionChange」を選択してください。
※「Option Explicit」は環境設定によっては表示されません。

このイベントプロシージャは、該当するシートのセルの選択位置が変更されると同時に実行されるものになります。
2. コードの記述
SubからEnd Subの間に、以下のコードを記述します。

では、このコードの意味について解説していきます。
「Worksheet_SelectionChange」の引数である「Target」には、選択されたセルの情報が渡されます。
先頭行の「If Target.CountLarge = 1 Then」から末尾の「End If」の中に関しては、「Target.CountLargr = 1」の条件を満たしている時のみ、要するに選択しているセルが複数ではなく1つの時のみに実行されます。
先ほどの条件を満たしている場合は、「Range(“C4:AF4”).Columns.AutoFit」が実行されます。
この処理は、「Range(“C4:AF4”)」を基準に列幅を自動調整するというものです。
「Range(“C4:AF4”)」は曜日が入力されているセルのため、この処理で、予定表全体が曜日のセルを基準とした列幅で自動調整されます。

次に、以下のIFの処理です。

こちらの内容は、以下の条件が書かれています。
・選択されたセルの行番号が5以上、かつ、19以下、かつ、列番号が3(C列)以上、かつ32(AF列)以下
つまり、予定を入力する範囲の中になります。

この範囲の中のセルが選択された場合に関してのみ、Ifの中の「Target.Columns.AutoFit」が実行されます。
「Target.Columns.AutoFit」は選択したセルを基準に列幅を自動調整するというものです。
3. 完成
以上の内容をシートモジュールに記述することで、機能としては完成です。
こちらの内容を実装したサンプルファイルは以下になります。
▼サンプルファイル▼









































































































