2025/08/05
【Excel】指定したセルを瞬時に選択!名前ボックスの活用術

【Excel】指定したセルを瞬時に選択!名前ボックスの活用術

同じシートを再利用する際に、毎回、手入力のセルを1つ1つ選択してDeleteキーで削除するのは面倒ですし、削除する必要がないセル(固定値や数式など)を誤って削除してしまうリスクもあります。

そんな時に便利な名前ボックスを活用した予め指定したセルを瞬時に選択する方法について解説していきます。


対象のセルに名前を付ける

まずは、Ctrlキーを押しながら対象のセルを全て選択します。

次に、左上の名前ボックスを選択し、好みの名前を入力します。
こちらでは「入力項目」と入力しています。

名前の入力後、Enterキーで確定することで、名前を付けることができます。

ExcelVBAレベル確認

名前を活用する

付けた名前は、名前ボックスのリストに表示されます。

名前ボックスのリストから、先ほど付けた名前を選択することで、指定したセルを瞬時に選択することができます。
※セルが結合されている範囲は、一部のセルだけが選択されることがあります。

選択された範囲の値を削除したい場合は、Deleteキーを押すことで、一括で削除することができます。
以下のような警告が表示される場合は、一度[OK]で確定し、再度Deleteキーを押すことで削除できます。

ExcelVBAレベル確認

警告を表示させないコツ

セルが結合されている範囲を単体で選択すると、先ほどのような警告が表示されることがあります。
警告を表示したくない場合は、セルが結合されている範囲を単体ではなく、複数の範囲に広げて選択して、名前を設定するとよいです。
※セルの値を削除する目的の場合は、削除されても問題ない範囲を選択してください。

ExcelVBAレベル確認

名前を削除する

付けた名前は、[数式]タブの中の[名前の管理]にて管理されます。
不要になった際は、[名前の管理]から削除することができます。

不要になった名前は、放置せずに削除するようにしてください。


まとめ

繰り返し使用するシートの場合は、テンプレート用のシートを用意して、毎回シートをコピーするという方法もあります。
ただ、編集後のシートを毎回残す必要がない場合(印刷のみを行う場合など)は、今回の名前を付けるという方法もおすすめになります。

本来、名前を付ける目的は、参照範囲を分かりやすくするためですが、対象のセルを選択しやすくするためにも活用できると覚えておくとよいです。

2025/08/01
【ExcelVBA】保存時に自動でバックアップファイルを作成

【ExcelVBA】保存時に自動でバックアップファイルを作成

一部を修正して上書き保存した後に、「やらかした!」と気づいた経験はないですか?
ローカル上に保存しているファイルの場合、上書き保存する前のデータに戻すことは困難になります。

そこで今回は、保存時にバックアップファイルを自動で作成する仕組みの実現方法について解説していきます。

※こちらで実現したファイルは記事の最後にて配布しています。


1. 開発手順

今回は、対象のファイルを上書き保存すると同時に、予め指定したフォルダ内にバックアップファイルを作成するという仕組みを実現します。
対象のファイルを保存すると同時に何かしらの処理を実行するには、「ブックモジュール」を活用します。

ブックモジュールは、[開発]タブから[Visual Basic]を選択し、表示された画面(VBE)のプロジェクトエクスプローラーから[ThisWorkbook]を選択することで表示することができます。

[開発]タブが表示されていない場合は、「Alt + F11」でもVBEの画面を開くことができます。
また、プロジェクトエクスプローラーが表示されていない場合は、「Ctrl + R」で表示することができます。

次に、ファイルを保存したときに、保存される前に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、ブックモジュールの左上のリストから[Workbook]を選択します。

[Workbook]を選択すると、自動で「Workbook_Open」というプロシージャが表示されます。
このプロシージャは、Excelファイルの立ち上げ時に自動で実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、ファイルを保存したときに、保存される前に処理が実行されるものになります。
そのため、右上のリストから[BeforeSave]を選択します。

表示された「Workbook_BeforeSave」というプロシージャを活用します。
「Workbook_Open」というプロシージャに関しては削除して問題ないです。


2. コードの記述

以下のコードを記述します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    Dim fP As String
    fP = Me.Path & "\_bk"
    Dim fN As String
    fN = Format(Now, "yyyymmdd_hhnn") & ".xlsm"
    
    Me.SaveCopyAs fP & "\" & fN
    
End Sub

では、コードについて解説していきます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    '省略
    
End Sub

「Workbook_BeforeSave」というプロシージャは、対象のファイルを保存したときに、保存される前に実行されます。
処理が完了すると同時に、対象のファイルは保存されます。
今回は使用しませんが、引数の「Cancel」を処理内でTrue(Cancel = True)にすると、処理が完了した後に保存されなくなります。

    Dim fP As String
    fP = Me.Path & "\_bk"

変数「fP」にバックアップファイルを保存する先のフォルダのパスを格納しています。
こちらでは、対象のExcelファイルが保存されているフォルダ内の「_bk」というフォルダのパスを指定しています。

「Me.Path」で自分自身(コードを記述しているファイル)が格納されているフォルダのパスを取得し、「&」で「_bk」フォルダのパスを加えています。

    Dim fN As String
    fN = Format(Now, "yyyymmdd_hhnn") & ".xlsm"

変数「fN」にバックアップファイルを保存する際のファイル名を格納しています。
ファイル名は、「現在の日付_現在の時刻.xlsm」となるように指定しています。

    Me.SaveCopyAs fP & "\" & fN

自分自身(コードを記述しているファイル) のコピーを保存しています。
保存先やファイル名は、変数「fP」と「fN」を活用して指定しています。

ExcelVBAレベル確認

3. 完成

以上の内容で実現できます。
開発したファイル(以下の画像では「お問い合わせ管理.xlsm」)を開いて上書き保存すると同時に、同じ配下の「_bk」フォルダ内にバックアップファイルが作成されます。

ファイルは1分単位の名前で保存されるので、1分以内に繰り返し保存した場合は、バックアップファイルの同じ名前のファイルが上書きされます。

▼サンプルファイル▼

2025/07/29
【Excel】リンク更新の警告が表示されないようにする

【Excel】リンク更新の警告が表示されないようにする

Excelファイルを他の人に共有する際に、毎回、以下のような警告が表示されて困った経験はないですか?

これは、数式で外部のデータ(そのファイル以外の値)を参照しているときに発生する現象になります。

今回は、ファイルを外部に共有する際(メールで送る際など)に、上記のような警告が表示されないようにする対策方法について紹介していきます。


対策方法

警告が表示されないようにする最も効果的なのは、「共有用のファイルから数式を全て取り除き、値のみに変換する」という方法です。

共有前のファイルにて、以下の手順を行うことで、ほとんどの場合で警告が表示されなくなります。


① 全シートを選択

対象ファイルの先頭のシートを選択してから、Shiftキーを押しながら末尾のシートを選択

② シートの左上の角を選択し、シート全体を選択

③ 全体を選択している状態でコピーし、値のみを貼り付ける

・Ctrl + C:コピー
・Ctrl + Shift + V:値のみ貼り付け
※使えない場合は右クリックメニューから値のみを貼り付ける

④ セルA1を選択して、セルの複数選択を解除する

⑤ いずれかのシートを選択して、シートの複数選択を解除する


以上の手順で、ファイル内の数式を全て取り除くことができます。


まとめ

数式による自動計算の仕組みが無効になるため、データのみを共有する際に有効です。
こちらの手順を行う際は、原本ファイルを上書き保存しないように注意してください。

2025/07/25
【Excel】表から自動で請求書を作成する方法

【Excel】表から自動で請求書を作成する方法

数式を使うことで、請求書の作成をある程度自動化することができます。
今回は、請求日と顧客名を入力するだけで、自動で請求書が作成される仕組みを紹介していきます。

今回は、以下の請求書を目標にした手順を解説していきます。

【条件】
・請求日には1日の日付を入力する
・入力した顧客名の住所を「顧客情報」シートから数式で抽出
・請求日に入力した日付を基準に、先月の対象顧客の請求データを「請求一覧」シートから数式で抽出
・他の項目(各金額、小計、消費税、合計金額)にはあらかじめ数式を入力

※こちらで実現したファイルは、記事の最後にて配布しています。


1. 準備

今回は、以下の3つのシートを含むファイルを活用して実現していきます。

・「請求書」シート

黄色のセルにはあらかじめ数式を入力しています。
これらの数式についての解説は、こちらでは省略します。
※配布ファイルには入力済みです。

・「請求一覧」シート

「日付、顧客名、摘要、数量、単価」の項目で成り立つ表を用意しています。
こちらの表の「日付」と「顧客名」を基準に、請求データを抽出する数式を作成していきます。

・「顧客情報」シート

「顧客名、住所」の項目で成り立つ表を用意しています。
こちらの表の「顧客名」を基準に、顧客の住所を抽出する数式を作成していきます。


2. 顧客住所の抽出

顧客名を入力すると同時に、顧客の住所を自動で表示させます。
XLOOKUP関数を使用して表示します。

顧客名から顧客の住所を抽出する数式は、以下になります。

=XLOOKUP(B6,顧客情報!A:A,顧客情報!B:B,"")
// B6:検索値(顧客名が入力されたセル)
// 顧客情報!A:A:検索範囲(顧客情報シートのA列全体)
// 顧客情報!B:B:戻り範囲(顧客情報シートのB列全体)
// "":見つからない場合は空白を表示

上記の数式をセルB4に入力するだけで、顧客の住所を表示することができます。


3. 請求データの抽出

次に、請求日と顧客名を入力すると同時に、対象期間の請求データを自動で表示させます。
FILTER関数を使用して表示します。
請求日には、各月の1日の日付が入力させる前提で作成していきます。

請求日と顧客名から請求データを抽出する数式は、以下になります。

=FILTER(請求一覧!C:E,
(請求一覧!B:B=請求書!B6)*
(請求一覧!A:A>=EDATE(請求書!E4,-1))*
(請求一覧!A:A<=請求書!E4-1),"")
// 請求一覧!C:E:請求一覧シートの摘要、数量、単価の列を抽出
// 請求一覧!A:A>=EDATE(請求書!E4,-1):請求日1か月前以降
// EDATE(請求書!E4,-1):請求日の1か月前の日付
// 請求一覧!A:A<=請求書!E4-1:請求日の前日以前
※FILTER関数で複数条件を指定するときは「*」(And)または「+」(Or)で条件式を並べる

上記の数式をセルB11に入力するだけで、請求データを表示することができます。※数式の改行はなくても問題ないです。
請求データが表示されると同時に、他の項目(各金額、小計、消費税、合計金額)の数式が計算され、請求書が完成します。


4. 完成

以上の内容で完成です。
今後は、「請求一覧」シートに請求データを登録し、請求書を発行するときに、請求日(対象月の1日)と顧客名を入力するだけで、請求書(先月の請求データ)を作成することができます。


まとめ

今回の仕組みを使えば、毎月の請求書を作成する時間を短縮できます。
ぜひ試してみてください。

▼サンプルファイル▼

2025/07/22
【Excel】文字列の数字のままで正しく集計する裏技

【Excel】文字列の数字のままで正しく集計する裏技

外部システムからコピーして貼り付けたデータや、CSV形式のファイルを開いた際に、数字が文字列として認識されてしまうことがあります。
見た目は数字なのに、実際は文字列として扱われているため、SUM関数などの計算で正しい結果が得られないという問題が発生します。

例えば、以下のようなデータがあるとします。

この場合、数量の列に入力されている一部の数字は文字列として認識されており、「=SUM(C3:C7)」で集計しても、本来1200になるべきところが700になってしまいます。

正しく集計するためには、一部の文字列として入力されている数字を数値に戻す必要がありますが、毎回修正するのは面倒です。
特に複数人で扱うファイルの場合に、このような問題が発生します。

そこで今回は、文字列の数字は文字列のままで、SUM関数を使って正しく集計する方法について紹介していきます。


演算による数値変換

文字列の数字を数値に変換する最も簡単な方法は、演算を行うことです。
文字列の数字に対して数学的な演算(掛け算、足し算など)を行うと、Excelが自動的に数値として認識してくれます。

最も一般的なのは、「1を掛ける」という方法です。

=C3*1

以下のように、1を掛けた列を用意することで、すべてが数値に変換されて
表示されます。
そのため、SUM関数でも正しく集計できるようになります。

1を掛けた列を追加したくないという場合は、次の方法がおすすめです。


SUM関数での応用

先ほどの「1を掛ける」という理屈を活用して、SUM関数の引数内で演算を行うことで、文字列の数字を含む範囲でも正しく集計できるようになります。

=SUM(C3:C7*1)

古いバージョンのExcelでの注意点

Excel 2019以前のバージョンを使用している場合は、先ほどの数式を配列数式として入力する必要があります。
配列数式として入力するには、数式を入力後、「Ctrl + Shift + Enter」を同時に押して確定します。

{=SUM(C3:C7*1)}
// 「{}」は自動入力(直接入力しても機能しない)

他の活用例

演算することで数値に変換するという方法は、LEFT関数などでも活用できます。
例えば、LEFT関数で抽出した文字列の数字を数値として扱いたい場合は、以下のような数式になります。

=LEFT(B2,3)*1

その他の演算方法

1を掛ける以外にも、以下の方法での数値変換も可能です。

=C3+0:+0を付ける
=--C3:--(マイナスを2回)を付ける
=C3/1:/1を付ける

まとめ

文字列として保存された数字は、Excelでの計算において予期しない結果を生む原因となります。
そのため、数値の項目に、文字列の数字を入力しないというルールが重要にはなるのですが、複数人で扱っているファイルだと、一部の方が文字列の数字で入力(外部からの貼り付け)されることがあります。
そのような際に、この方法を覚えておけば、毎回文字列の数字を数値に変換する手間なく集計することができるようになります。

2025/07/18
【Excel】タスク管理表で自分のタスクを自動色付け

【Excel】タスク管理表で自分のタスクを自動色付け

プロジェクトの進行管理では、区分ごとの工程に順序があるタスク管理表がよく使われます。
しかし、このような表を使う際に以下のような問題が発生することがあります:

・絞り込みを使用した場合:自分のタスクのみを表示できるが、全体の流れが分からなくなる

・絞り込みを使用しない場合:全体の流れは把握できるが、自分のタスクが分かりづらく、見落としてしまう可能性がある

この問題を解決するために、現在編集中のタスクの担当者と同じ担当者のセルを自動で色付けする仕組みを作成していきます。

※こちらで実現したファイルは、記事の最後にて配布しています。


設定
1. 対象セルの選択

1.担当者列(D列)全体を選択

2.不要なセル(ヘッダー行など)を、Ctrlキーを押しながらクリックして選択解除
→ 最終的にセルD3以降が選択された状態にする

ExcelVBAレベル確認

2. 条件付き書式の設定

1.[ホーム]タブから[条件付き書式]の[新しいルール]をクリック

2.[ルールの種類]で[数式を使用して、書式設定するセルを決定]を選択

3.以下の数式を入力

=AND(D3<>"",D3=INDIRECT("D"&CELL("row")))
// D3<>"":D3セルが空でない
// D3=INDIRECT("D"&CELL("row")):D3の値が現在アクティブな行のD列の値と同じ
// CELL("row"):現在アクティブなセルの行番号を取得
// INDIRECT(…):指定したアドレスのセルの値を取得

4.[書式]をクリックし、[塗りつぶし]タブから好みの色を選択


完成

以上の手順で、完成です。
設定後は、以下の操作で色付けが自動更新されます:

・タスクのいずれかの項目を編集する

・F9キーを押して数式を再計算する

この設定により、タスク管理表の全体を表示したまま、操作した担当者のタスクが一目で分かるようになります。
そのため、全体の流れを把握しながら、自分のタスクを効率的に管理できるようになります。


まとめ

条件付き書式を活用することで、タスク管理表の使い勝手を大幅に向上させることができます。
ぜひお試しください。

▼サンプルファイル▼

2025/07/15
【Excel】点数を5段階の星マーク(★)で表示する

【Excel】点数を5段階の星マーク(★)で表示する

数値データを視覚的に分かりやすく表現したい時、星マーク(★)を使った評価表示は非常に効果的です。

今回は、0点から100点の点数を5段階の星(★)評価で表示する方法をご紹介します。


基本的な考え方

5段階で表現するには、点数が5段階のどの位置にあるのかを求める必要があります。
そのため、0点から100点の101通りの点数を5段階に分割し、その段階に応じて★の数を決定します。


1. 点数を5段階評価の数値に変換

まず、評価を表示する先頭のセルを選択し、以下の数式を入力します。

=C3/101*5
// C3:点数が入力されているセル
// 101:0~100点の101通りで割る
// 5:5段階評価にするため5倍する

確定後、表の最後までコピーすると、整数部分が0から4の5段階評価になります。


2. 整数部分を1から5に変換

星の数を1~5個で表現するために、先ほど求めた数値の整数部分を1から5にします。
そのため、先ほどの数式に1を加えて、再度全体にコピーします。

=C3/101*5+1

これで整数部分が1から5になります。


3. REPT関数で「★」を表示

この整数部分の数だけ★を並べるには、REPT関数を使用します。

=REPT("★",C3/101*5+1)
// "★":繰り返す文字列
// C3/101*5+1:繰り返す回数(小数部分は切り捨てられる)

この数式を先頭に入力して全体にコピーすることで、「★」に置き換えることができます。


4. 「☆」で埋めて5つの星にする

5つの星を表示にするために、「☆」を追加します。
「☆」の数は、5から表示されている「★」の数を引いた数になります。

=REPT("★",C3/101*5+1)&REPT("☆",5-INT(C3/101*5+1))
// &:文字結合(★と☆をつなげる)
// INT(…):小数点以下を切り捨てる
// 5-INT(C3/101*5+1):「☆」の数

この数式を先頭に入力して全体にコピーすることで、完成です。


まとめ

この方法を使えば、数値データを一目で理解できる「★」評価に変換できます。
レポートや資料作成時などに、データを可視化する際に活用してみてください。

数式が複雑に見えますが、理屈を理解すれば覚える必要もありません。
ぜひ試してみてください。

2025/07/11
【ExcelVBA】誤操作防止!実行ボタンを押したときに確認画面を表示する

【ExcelVBA】誤操作防止!実行ボタンを押したときに確認画面を表示する

マクロの実行ボタンが配置されたExcelファイルを使っている際に、「実行ボタンをうっかり押してしまった…」という経験、ありませんか?
特に重要な処理を含むマクロでは、誤操作が思わぬトラブルにつながることもあります。

そんな時におすすめなのが、「確認画面」を実行時に表示する方法です。
実行ボタンを押した際に、ユーザーに実行してよいのか確認を求めることで、誤操作を防ぐことができます。

※こちらで実現したファイルは、記事の最後にて配布しています。


1. 設定

まずは、「確認画面」を表示したい対象の実行ボタンの上で右クリックし、[マクロの登録]を選択します。

[マクロの登録]画面が表示されましたら、[編集]を選択します。

[編集]を選択すると、対象のプロシージャ(Sub~End Sub)が表示されます。
こちらでは、以下の処理が表示されたとします。

Sub UpdateData()
    
    Range("C4:C23").Value = Range("D4:D23").Value
    Range("D4:D23").ClearContents
    
End Sub

後は、このプロシージャ内に「確認画面」を表示する処理を記述します。
具体的には、元々の処理の先頭に、以下のコードを記述します。

Sub UpdateData()
    
    If MsgBox("本当に実行しますか?", _
        vbExclamation + _
        vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub
    
    Range("C4:C23").Value = Range("D4:D23").Value
    Range("D4:D23").ClearContents
    
End Sub

「If」の処理は、「Then」の後に1つの処理を記述することで、「End If」を省略することができます。
複数の処理を記述する場合は、「Then」の後で改行して、処理を「End If」で囲む必要があります。
「□_」(□は半角スペース)は、本来改行しない位置で改行する場合に入力します。
こちらでは、コードの全体が見やすいように改行しています。

メッセージボックスを表示する処理を追記しています。
それぞれの設定値は、以下のような意味です。

以下のコードにて、表示されたメッセージボックスで「はい」を選択した場合は「vbYes」、「いいえ」を選択した場合は「vbNo」の値が返されます。

MsgBox("本当に実行しますか?", vbExclamation + vbYesNo + vbDefaultButton2)

そのため、その結果が「vbNo」の場合に、処理を終了する旨を記述しています。

If MsgBox(…) = vbNo Then Exit Sub

2. 完成

以上の手順で完成です。
実行ボタンを押すと、警告音付きの確認画面が表示されます。
また、「いいえ」がデフォルト選択なので、Enterキーを誤って押しても実行されません。
「はい」を選択したときのみ、マクロが実行されます。


3. まとめ

既存のコードの先頭に追記するだけで、マクロの誤操作を防止できます。
そのため、誤操作に悩まされている場合は、ぜひ取り入れてほしいテクニックです。

▼サンプルファイル▼

2025/07/08
【Excel】実は数式内にコメントを残せます

【Excel】実は数式内にコメントを残せます

複雑な数式を扱っていると、「ここ部分、後で見返したときに分かるようにコメントを残しておきたい」と思うことがありますよね。
しかし、セルにメモ(コメント)を追加すると、以下のように、赤いマークが表示されてしまいます。

この赤いマークは、人によっては気になります。

そのため今回は、赤いマークを表示させない数式の中にコメントを残す方法について解説していきます。


数式の中にコメントを残す

数式の中にコメントを直接残す際は、N関数T関数を使う方法がおすすめです。
これから解説する方法では、数式の計算結果には一切影響しません。

数式の結果が「数値」なのか「文字列」なのかによって、コメントの残し方が少し異なるので、順番に解説していきます。


計算結果が「数値」の場合

まずは、「計算結果が数値の場合」について解説していきます。
例えば、以下の数式に「科目Dのみ1.5倍して合計」というコメントを残したいと思います。

=SUM(C7:C9,C10*1.5,C11)

その際は、N関数を活用して、以下のようにコメントを残します。

=SUM(C7:C9,C10*1.5,C11)+N("科目Dのみ1.5倍して合計")

このように、「+N(“コメント”)」を数式の末尾に追加するだけです。

N関数は「指定した値が数値の場合はその数値、文字列の場合は0を返す関数」です。

そのため、N関数でコメントを追加した場合、数式の結果に0が加算されるだけなので、結果は変わりません。

ExcelVBAレベル確認

計算結果が「文字列」の場合

次は、「計算結果が文字列の場合」について解説していきます。
例えば、以下の数式に「400以上の場合に合格」というコメントを残したいと思います。

=IF(C4>=400,"合","否")

その際は、T関数N関数を活用して、以下のようにコメントを残します。

=IF(C4>=400,"合","否")&T(N("400以上の場合に合格"))

このように、「&T(N(“コメント”))」を数式の末尾に追加するだけです。

N関数は「指定した値が数値の場合はその数値、文字列の場合は0を返す関数」でした。
T関数は、その逆で「指定した値が文字列の場合はその文字列、数値の場合は空を返す関数」です。

数式の結果が文字列の場合、以下のように「+N(“コメント”)」とコメントを追加してしまうと、「文字列+0」になり、正しく計算ができずにエラーになってしまいます。

=IF(C4>=400,"合","否")+N("400以上の場合に合格")

そのため、数式の結果が文字列の場合は、N関数でコメントを0にし、T関数で空にして、その空文字を加えます。
そのようにすることで、「文字列+空文字」となり、結果を変えずに表示させることができます。


まとめ

数式の中にコメントを残す際は、その数式の結果が数値の場合は「+N(“コメント”)」、文字列の場合は「&T(N(“コメント”))」を数式の末尾に追加します。

ただし、コメントを加えることで数式が長くなり、見づらく感じる場合もあります。
チームで使用する際は、コメントの追記ルールをあらかじめ資料などで共有しておくことをおすすめします。

2025/07/04
【ExcelVBA】選択するだけでテンプレ入力

【ExcelVBA】選択するだけでテンプレ入力

以下は、従業員を管理するための表です。

「勤務形態」によって、ある程度決まった入力パターンが存在します。
毎回同じような内容を手入力するのは、正直かなり手間です。
とはいえ、勤務形態ごとに例外が発生することもあるため、VLOOKUP関数などの数式だけでは柔軟に対応できません。

そこで今回は、「勤務形態」に応じたテンプレートデータを自動で入力する仕組みを実現する方法について解説していきます。

※こちらで実現したファイルは記事の最後にて配布しています。


1. 開発準備

今回は、上のテンプレート一覧の表の各行に入力ボタンを設けます。
そして、ボタンを押すと同時に、下の表の最終行に値のみが入力されるといった仕組みを開発します。

ただ、テンプレートの数が多い場合などは、ボタンを複数配置するのは大変です。
そのため今回は、実際のボタンではなく、ボタン風にデザインしたセルの上を選択すると同時に、処理が実行されるといった仕組みにしていきます。

ボタン風のデザインは、罫線や背景色などの書式設定を活用して実現しています。

今回のように、「特定のシートの特定のセルを選択すると同時に、何かしら処理を実行する」、そのような仕組みを実現するには、「シートモジュール」を活用します。

シートモジュールは、該当するシートのタブ上で右クリックし、[コードの表示]を選択することで表示することができます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、該当するシートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、該当するシートのセルを選択すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャが、該当するシート上のいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャになります。


2. コードの記述

以下のコードを記述します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.CountLarge= 1 Then
        If Target.Row >= 3 And _
            Target.Row <= 5 And _
            Target.Column = 1 Then
            
            Dim tR As Long, lR As Long
            tR = Target.Row
            lR = Cells(Rows.Count, "A").End(xlUp).Row + 1
            
            Range(Cells(lR, "B"), Cells(lR, "D")).Value = _
                Range(Cells(tR, "B"), Cells(tR, "D")).Value
            
        End If
    End If
    
End Sub

では、コードについて解説していきます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.CountLarge= 1 Then
        '省略
    End If
    
End Sub

「Worksheet_SelectionChange」というプロシージャの引数の「Target」に、選択されたセルの情報が渡されるため、そのセルの情報から、表の対象のセルが選択されたかどうかを確認しています。
こちらでは、選択されたセルが1つのみであることを確認しています。

        If Target.Row >= 3 And _
            Target.Row <= 5 And _
            Target.Column = 1 Then
            
            '省略
            
        End If

次に、選択されたセルの行番号が3以上、5以下、列番号が1であることを確認しています。
これは、ボタン風のデザインがされたセルの範囲内を指しています。

            Dim tR As Long, lR As Long
            tR = Target.Row
            lR = Cells(Rows.Count, "A").End(xlUp).Row + 1

以上の条件を満たしたときに、変数(tR)に選択されたセルの行番号、変数(lR)に下の表の最終行に1を加えた数値を格納しています。
変数(lR)に関しては、「Cells(Rows.Count, “A”)」でシートの末尾のA列のセルを指定し、「.End(xlUp)」で「Ctrl+↑」と同じように移動し、その止まった位置の行番号(.Row)に1を加えています。

            Range(Cells(lR, "B"), Cells(lR, "D")).Value = _
                Range(Cells(tR, "B"), Cells(tR, "D")).Value

最後に、先ほど取得した変数(tR、lR)を活用し、下の表の、最終行の1つ下の行のB列からD列に、選択された行のテンプレート一覧の表のB列からD列の値を入力しています。

ExcelVBAレベル確認

3. 完成

以上の内容で完成です。
テンプレート一覧表の隣の「入力」と書かれたセルを選択すると同時に、下の表の末尾に自動で反映されます。

また、数式ではなく直接値が入力されるため、必要に応じて直接修正することもできます。

テンプレート一覧表を更新したとしても、既存の登録データには影響ありません。

▼サンプルファイル▼

2025/07/01
【Excel】選択したセルと同じ値のセルを自動色付け

【Excel】選択したセルと同じ値のセルを自動色付け

以下の表は、各役割の責任者と役割の氏名を割り当てたものです。

このような表だと、特定の氏名の役割のみを確認するのが大変です。
フィルター機能では、各項目で絞りなおす必要がありますし、毎回、検索機能を使うもの手間になります。

そのため今回は、『条件付き書式』のみを活用して、選択したセルと同じ値のセルを自動で色付けする方法について紹介していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。


1. 条件付き書式に設定する条件式の作成

特定の条件を満たしたセルのみを色付けする場合、「条件付き書式」を活用します。
まずは、その条件付き書式に設定する「セルを色付けする条件式」を作成していきます。

セルを色付けする条件は以下になります。

該当するセルの値が、現在アクティブになっているセルの値と同じ場合

セルC3に対しての色付けする条件を考えると以下になります。

セルC3の値が、現在アクティブになっているセルの値と同じ場合

この条件を数式で表現するためには、「現在アクティブになっているセルの値」を取得する必要があります。
直接「現在アクティブになっているセルの値」を取得することはできないので、CELL関数INDIRECR関数を組み合わせて取得します。
具体的には、以下のような数式で「現在アクティブになっているセルの値」を取得します。

=INDIRECT(CELL("address"))
// CELL("address"):「$A$1」などとアクティブセルのアドレスを取得
// INDIRECT(アドレス):そのアドレスのセルの値を取得

セルC3に対しての条件式を考えると、上記の数式を活用した以下のような条件式なります。

=C3=INDIRECT(CELL("address"))

このように条件式を作成することができましたら、後は条件付き書式に設定してきます。


2. 条件付き書式の設定

次に、色付けする対象の範囲を選択します。
先ほどの条件式がそのまま使えるように、セルC3を基準として範囲全体を選択します。

選択できましたら、[ホーム]タブの中の[条件付き書式]から[新しいルール]を選択します。

条件付き書式の設定画面が表示されましたら、[ルールの種類]を[数式を使用して、書式設定するセルを決定]にし、表示されたテキストボックスに、先ほどの条件式を入力します。

上記の設定ができたら、[書式]を選択し、[塗りつぶし]タブから好みの色を選択して確定するだけです。


3. 完成

以上の手順で完成です。
選択しているセルと同じ値のセルが自動で色付けされます。

ただ、条件付き書式に設定した条件式のCELL関数の値を更新するには、数式を再計算する必要があります。
数式を再計算する際は、セルを編集するか、[数式]タブの中の[再計算実行]を選択、もしくはF9キー(再計算のショートカット)を押すなどとする必要があります。

ぜひ試してみてください。

▼サンプルファイル▼

2025/06/27
【ExcelVBA】非表示の行を一括で削除

【ExcelVBA】非表示の行を一括で削除

「表の中の特定のデータのみを残したい」

そのような場面、ありますよね。
特に、特定のデータのみを他の方に共有するときなどです。

ただ、標準機能には、「特定のデータ以外を一括で削除する」という機能はありません。
そのため、「特定のデータ以外で絞って、残ったデータ行を削除してから絞り込みを解除する」といった手順を行う必要があります。

例えば、以下の表から「地域が東京のデータのみ」を残したい場合、以下の手順になります。


① 東京以外で絞り込み

② 表示されたデータ行を削除

③ 絞り込みを解除(フィルターの解除)


ただ、「削除したいデータで絞り込みする」というのが直観的じゃないです。

そこで今回は、「残したいデータ」で絞り込んでから非表示のデータ行を一括削除できるように、非表示の行を一括削除する機能の開発方法について解説していきます。

※こちらで開発したファイルは、記事の最後にて配布しています。

ExcelVBAレベル確認

1. 開発準備

まず初めに、[開発]タブを選択し、[マクロ]を選択します。

表示された以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「DeleteHiddenRows」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。

ExcelVBAレベル確認

2. コードの記述

以下のコードを記述します。

Sub DeleteHiddenRows()
    
    Dim r As Long
    For r = 100000 To 3 Step -1
        If Rows(r).Hidden Then
            Rows(r).Delete
        End If
    Next r
    
End Sub

では、コードについて解説していきます。

    Dim r As Long
    For r = 100000 To 3 Step -1
        '省略
    Next r

100000から3までを-1ずつ変数「r」に渡して、ForからNextの間を繰り返しています。
100000から3というのは、表の最終行(仮)から先頭行までを表しており、最終行の100000は、「100000行目まではデータがない」という前提の仮の値になります。

        If Rows(r).Hidden Then
            Rows(r).Delete
        End If

繰り返し処理で受け取る変数「r」の値を活用して、「r」行目が非表示の場合に「r」行目を行ごと削除しています。


3. ショートカットの割り当て

開発した機能が簡単に実行できるように、ショートカットを割り当てていきます。
まず、[開発]タブを選択し、[マクロ]を選択します。

マクロの画面から先ほどの開発したマクロ名を選択し、[オプション]を選択します。

表示された以下の画面にて、[ショートカットキー]のテキストボックスを選択し、好みのキーを入力します。
※「Ctrl+Shift+○」のようにShiftを加えたい場合は、「Shift+好みのキー」を入力します。

こちらでは、「Ctrl+Shift+D」に割り当てました。
ショートカットキーの入力後は、確定して画面を閉じます。


4. 完成

以上の手順で完成です。
抽出したいデータのみに絞り込みし、割り当てたショートカットキーを入力することで、非表示の行がすべて削除されます。

必要に応じて、フィルター機能を解除していただいて問題ございません。
また、今回の機能は、フィルター機能による絞り込みでなくても、非表示の行があれば、削除対象となります。

▼サンプルファイル▼