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/12
【業務】複数のExcelファイルを同時に更新

【業務】複数のExcelファイルを同時に更新

#With #For #If #InStr #スケジュール #予定表

YouTubeで開く

複数のExcelファイル(ブック)を同時に更新する仕組みの開発方法について解説しています。
こちらでは、各従業員の予定表ファイル(ブック)に、特定の予定を同時に入力する作業を例にしています。

00:00 挨拶
00:50 完成イメージ
01:57 準備
02:44 作成(1つの従業員ファイルを更新)
12:55 作成(引数の設定)
13:23 作成(複数の従業員ファイルを更新)
17:56 作成(実行ボタン)
18:31 完成
19:41 プログラムの全体
23:00 プレゼントについて

▼準備ファイル▼

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】実は数式内にコメントを残せます

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

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

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

ExcelVBAレベル確認

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

数式の中にコメントを直接残す際は、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が加算されるだけなので、結果は変わりません。


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

次は、「計算結果が文字列の場合」について解説していきます。
例えば、以下の数式に「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/05
【ex54】セル結合された表から数式で値を抽出

【ex54】セル結合された表から数式で値を抽出

#XLOOKUP #FILTER #TEXTJOIN #TRANSPOSE

YouTubeで開く

結合されたセルを含む表から、表の中の特定の値を数式のみで抽出する方法について解説しています。

00:00 挨拶
00:49 イベント名の抽出
03:00 担当者名の抽出
08:37 まとめ
09:04 プレゼントについて

▼準備ファイル▼

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列の値を入力しています。


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/29
【業務】進捗別でシート見出しの色を自動変更

【業務】進捗別でシート見出しの色を自動変更

#条件付き書式 #データの入力規則 #リスト #シートモジュール #Worksheet_Change #If

※サイト内の限定動画です。

シート内のタスクの進捗が完了になった時に、自動でシート見出しの色を変更(更新)する仕組みについて解説しています。

00:00 挨拶
00:20 完成イメージ
02:58 準備
03:19 作成(ステータスのリスト)
04:23 作成(セルの色変更)
07:33 作成(シート見出しの色変更)
14:03 完成
15:17 プログラムの全体
16:26 プレゼントについて

▼準備ファイル▼

2025/06/28
【業務】数式のみの本格的な検索機能

【業務】数式のみの本格的な検索機能

#FILTER #BYROW #ISNUMBER #FIND #IFERROR #INDEX #TEXTSPLIT #LAMBDA #OR

YouTubeで開く

数式のみで本格的な検索機能を実現する方法になります。
検索欄にカンマ区切りで複数ワードを指定することで、複数ワードでの検索も可能です。

00:00 挨拶
00:41 完成イメージ
01:25 準備
02:06 作成(テーブル化)
03:20 作成(FILTER関数の基本)
05:58 作成(全ての項目に対して抽出)
10:10 作成(FILTER関数に反映)
10:54 作成(複数ワード検索:応用)
14:43 作成(検索機能のデザイン変更)
16:29 完成
18:22 プレゼントについて

▼準備ファイル▼

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

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

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

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

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

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


① 東京以外で絞り込み

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

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


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

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

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


1. 開発準備

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

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

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


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. 完成

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

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

▼サンプルファイル▼

2025/06/24
【Excel】VLOOKUPで「見つかった一番下の値」を抽出する方法

【Excel】VLOOKUPで「見つかった一番下の値」を抽出する方法

表からデータを検索して抽出する際に便利な関数に「VLOOKUP関数」があります。
しかし、この関数では、重複する値が存在する場合に、「上から順に最初に見つかった値」しか取得できません。

そこで今回は、VLOOKUP関数で「見つかった一番下の値」を抽出する方法について解説していきます。


1. 行番号を取得する補助列を追加

まずは、検索対象の表の左側に新しい列を追加し、以下の数式を入力します。

=IF(B3=$B$16,ROW(),"")

この数式は、「表の顧客IDが検索値(顧客ID)と一致する場合、その行の行番号を表示する」という内容です。
検索値(顧客ID)の参照は「$」を加えて絶対参照にしています。

この数式を、表の最後の行までコピーします。

これで該当する行のみ行番号を表示することができました。


2. 最大の行番号を使ってVLOOKUPで抽出

次に、検索結果を抽出するセルに、以下の数式を入力します。

=VLOOKUP(MAX(A3:A12),A3:D12,3,FALSE)

この数式は、「先ほど抽出した行番号の最大値の行にある3列目(購入日)を抽出する」という内容です。
これで一番下にある該当データを抽出することができます。


Excel2021以降なら「XLOOKUP」が便利

Excel2021以降の環境の場合、XLOOKUP関数が使えます。
XLOOKUP関数は、VLOOKUP関数をさらに快適にした関数で、以下の数式1つで「見つかった一番下の値」を抽出することができます。

=XLOOKUP(B16,B3:B12,C3:C12,"",0,-1)

XLOOKUP関数についての詳しい解説は、以下の記事にて解説しています。
>VLOOKUP / INDEX・MATCH / XLOOKUP


まとめ

VLOOKUP関数単体では実現できないことでも、複数の関数を組み合わせることで解決できるケースは多くあります。

今回解説した「見つかった一番下の値を抽出する」方法もその一つです。
このテクニックを覚えておけば、実務でのデータ処理や分析の幅がぐっと広がります。

ぜひ、日々のExcel作業に取り入れてみてください。

2025/06/21
【1-20】シートを完全に非表示にする

【1-20】シートを完全に非表示にする

#シートモジュール #プロパティ

YouTubeで開く

再表示からでも表示することができないように、シートを完全に非表示にする方法について解説しています。
触られたくない設定用シートや計算用シートなどに活用できます。

00:00 挨拶
01:47 完全に非表示にする方法
04:26 表示する方法
05:34 複数のシートを一括で切り替える方法
08:19 プレゼントについて