2024/11/08
【ExcelVBA】項目名をクリックするだけで並べ替え

【ExcelVBA】項目名をクリックするだけで並べ替え

以下の表に対し、「項目名(見出し)をクリックするだけで、その項目を基準に並べ替えを行う」という機能の開発方法について解説していきます。

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

ExcelVBAレベル確認

開発準備

「特定のセルを選択すると同時に、何かしら処理を実行する」という仕組みは、該当するシートモジュールイベントプロシージャを活用することで実現できます。

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

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

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

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

まずは、表示された「Worksheet_SelectionChange」というプロシージャ内にコードを記述していきますが、他のイベントプロシージャを表示したい場合は、右上のリストから表示することができます。

左上のリストで「Worksheet」を選択すると、右上のリストに関しては、自動で「SelectionChange」が選択され、「Worksheet_SelectionChange」というプロシージャが表示されます。

ExcelVBAレベル確認

項目名をクリックするだけで昇順にする

では、項目名をクリックするだけで、その項目を基準に表を昇順にする機能を開発していきます。

まずは、以下のコードを「Worksheet_SelectionChange」というプロシージャ内に記述します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Row = 2 And _
        Target.Column >= 2 And Target.Column <= 5 Then
        
        Dim rng As Range
        Set rng = Range("B2").CurrentRegion
        rng.Sort _
            Key1:=Target, _
            Order1:=xlAscending, _
            Header:=xlYes
        
    End If
    
End Sub

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

    If Target.Row = 2 And _
        Target.Column >= 2 And Target.Column <= 5 Then  End If

「Worksheet_SelectionChange」プロシージャの引数「Target」に、トリガーとなったセルの情報が渡されます。
そのTargetを活用し、そのTargetの情報が「行番号が2、尚且つ、列番号が2以上、5以下」であるかどうかを確認しています。
その条件を満たしている時、要するに、以下の項目名の範囲内が選択された時に、Ifの中の処理が実行されます。

        Dim rng As Range
        Set rng = Range("B2").CurrentRegion
        rng.Sort _
            Key1:=Target, _
            Order1:=xlAscending, _
            Header:=xlYes

こちらで「rng」というRange型の変数を用意し、その変数に対象の表の範囲を割り当てています。
「Range(“B2”).CurrentRegion」で、セルB2周囲に連続しているデータ範囲全体を指定しています。

その「rng」に対し「Sort」で並べ替えを行っています。
「Key1:=Target」でTargetの属する列を並べ替えの基準の列として指定し、「Order1:=xlAscending」で昇順を指定、「Header:=xlYes」でrngが項目名を含む範囲ということを指定しています。

以上の内容で実現できます。
該当する項目名を選択することで、以下のように並べ替えを行うことができます。


項目名を右クリックするだけで降順にする

では次に、項目名を右クリックすることで、その項目を基準に表を降順にする機能を開発していきます。

先ほどと同様に、シートモジュール上にコードを記述していきます。
ただ、先ほどとは別のイベントプロシージャを使用する必要があります。

そのプロシージャとは、該当するシート上のいずれかのセルの上で右クリックした時に処理が実行されるというイベントプロシージャです。
シートモジュールの右上のリストから「BeforeRightClick」を選択することで表示することができます。

表示された「Worksheet_BeforeRightClick」というプロシージャ内にコードを記述していきます。

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

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    
    If Target.Row = 2 And _
        Target.Column >= 2 And Target.Column <= 5 Then
        
        Cancel = True
        Dim rng As Range
        Set rng = Range("B2").CurrentRegion
        rng.Sort _
            Key1:=Target, _
            Order1:=xlDescending, _
            Header:=xlYes
        
    End If
    
End Sub

コードの内容は、先ほどの内容とほぼ同じになります。
そのため、異なる点のみを解説します。

        Cancel = True

「Cancel」に対し、Trueを指定することで、右クリック時にメニューが表示されないようにすることができます。

        rng.Sort _
            Key1:=Target, _
            Order1:=xlDescending, _
            Header:=xlYes

先ほどの内容とは異なり、こちらでは「Order1:=xlDescending」として降順にしています。

以上の内容で実現できます。
該当する項目名の上で右クリックすることで、以下のように並べ替えを行うことができます。

▼サンプルファイル▼

2024/11/06
【Excel】基準日から指定した日数分の日付を表示

【Excel】基準日から指定した日数分の日付を表示

以下のように、開始日と日数の項目に値を入力するだけで、連続した日付が自動で表示される仕組みの作成方法について解説していきます。


連続した値を表示する

数式を入力したセルから連続した値を表示する際は、SEQUENCE関数を使用します。
この関数は、Excel2021以降のバージョンで使用することができます。

SEQUENCE関数の使い方は、以下になります。

=SEQUENCE(行, 列, 開始, 目盛り)
// 行:連番を表示する行範囲(省略時は1)
// 列:連番を表示する列範囲(省略時は1)
// 開始:連番の開始数値(省略時は1)
// 目盛り:連番の間隔(省略時は1)

実際に、2から10を表示させる場合は、以下の数式になります。

=SEQUENCE(9,,2)
// 9:表示する行数
// 列は省略 → 1列
// 2:連番は2から開始

連続した日付を表示する

では次に、連続した日付を表示させていきます。
日付は、「2024/7/1」などといった見た目ではありますが、Excelでは「シリアル値」という数値で管理されています。
そのため、連続した日付に関しても、SEQUENCE関数を使用することで、表示させることができます。

>シリアル値とは

以下の表の場合は、連番を表示する行数をセルC3の値、連番を表示する開始をセルC2の値にすることで実現することができます。

そのため、以下の数式になります。

=SEQUENCE(C3,,C2)
// C3:表示する行数(日数)
// 列は省略 → 1列
// C2:連番は開始日から開始

数式を入力した結果、上記のように日付ではなく数値が表示されてしまうことがあります。
これは日付の実体であるシリアル値になります。
そのため、表示形式を日付形式にすることで、日付で表示することができます。

2024/11/04
【Excel】「今日の予定」を表から抽出

【Excel】「今日の予定」を表から抽出

以下のような表から、「今日の予定」を自動で抽出する方法について解説していきます。


VLOOKUP関数で抽出

表の先頭列の日付を基準に、その表から値を抽出する場合は、VLOOKUP関数が便利です。
VLOOKUP関数の使い方は、以下になります。

=VLOOKUP(検索値, 範囲, 列番号, [検索方法])
// 検索値:検索対象の値
// 範囲:検索対象の表(検索対象の列を一番左に配置した表)
// 列番号:範囲に指定した表の先頭列を1とした抽出したい項目までの列番号
// [検索方法]:検索方法をTRUE(近似一致)もしくはFALSE(完全一致)で指定
// ※[検索方法]を省略した場合は近似一致が指定される

また検索値に関しては、今回は、「今日の日付」である必要があります。
「今日の日付」とは、毎日変わる値になります。
自動で「今日の日付」の情報を取得できる関数にTODAY関数があります。
TODAY関数の使い方は、以下になります。

=TODAY()
// 引数(設定値)なし

実際に、VLOOKUP関数とTODAY関数を組み合わせて、「今日の予定」を抽出すると、以下のような数式になります。

=VLOOKUP(TODAY(),A:B,2,FALSE)
// TODAY():「今日の日付」で検索
// A:B:対象の予定表の範囲を指定
// 2:指定した範囲の先頭から2列目の予定を抽出
// FALSE:完全一致で検索(検索値と完全一致する行の値を抽出する検索方法)

※VLOOKUP関数で抽出する際は、範囲(A:B)の先頭列(一番左)に、必ず検索対象の項目を配置する必要があります。

ExcelVBAレベル確認

補足

「今日の予定」が空の場合は、以下のように「0」と表示されてしまいます。

Excelでは、空のセルが「0」として扱われてしまうため、上記のように「0」と表示されてしまいました。

予定に数値ではなく文字を入力するという前提であれば、以下のように、空白「””」を加えることで「0」が表示しないようにすることができます。

=VLOOKUP(TODAY(),A:B,2,FALSE)&""

ただ、この方法の場合は、予定に数値が入力されている場合に関しても、文字列として表示されてしまいます。
文字列の数字の場合、SUM関数などの集計関数では正しく集計することができなくなります。

そのため、抽出した数字を集計に使う可能性がある場合は、以下のようにIF関数を用いて予定を抽出した方が良いです。
※IF関数の使い方についての解説は省略します。

=IF(VLOOKUP(TODAY(),A:B,2,FALSE)="","",VLOOKUP(TODAY(),A:B,2,FALSE))
2024/11/02
【2-数式19】GROUPBY関数の使い方

【2-数式19】GROUPBY関数の使い方

#GROUPBY #FILTER #SORT #フィルター #集計 #抽出

YouTubeで開く

集計表を瞬時に作成することができる『GROUPBY関数』について解説しています。

00:00 挨拶
00:20 基本的な使い方
02:31 ①複数列のグループ化
03:44 ②複数列の集計
04:28 ③様々な関数の指定
05:17 ④表の見出しの表示・非表示
08:33 ⑤総計と小計の表示・非表示
09:49 ⑥昇順や降順で並べ替え
12:40 ⑦絞り込み
14:43 ⑧各項目の関係性の指定
15:40 まとめ
16:27 プレゼントについて

▼準備ファイル▼

2024/11/01
【ExcelVBA】空白を上に詰める

【ExcelVBA】空白を上に詰める

以下のような表で、空白行を除外して上に詰める場合、並べ替え機能を活用すると、書式の設定位置や要素の順番に関しても変わってしまいます。

今回は、書式の設定位置や要素の順番を変えずに、そのままの状態で上詰めする機能をVBAで開発する方法について解説していきます。
※こちらで開発したファイルは、記事に最後にて配布しています。


開発

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

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

[作成]を選択すると表示される以下のエディタ画面の「Sub 上詰め()」から「End Sub」の間にコードを記述していきます。
「Option Explicit」は、エディタの設定次第では表示されません。

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

Sub 上詰め()

    Dim inData As Variant, outData As Variant
    inData = Range("B3:B11").Value
    ReDim outData(1 To UBound(inData), 1 To 1) 
    
    Dim d As Variant, i As Long: i = 1
    For Each d In inData
        If d <> "" Then 
            outData(i, 1) = d
            i = i + 1
        End If
    Next d
    
    Range("B3:B11").Value = outData
    
End Sub

解説

このコードについて、簡単に解説していきます。

    Dim inData As Variant, outData As Variant
    inData = Range("B3:B11").Value

ここで、inDataとoutDataという変数を用意し、inDataには上詰めする対象のセル範囲B3~B11の値のみを格納しています。
具体的には、inDataにセルB3~B11の値を1列の2次元配列として取得しています。

    ReDim outData(1 To UBound(inData), 1 To 1) 

outDataに関しては、inDataと同じ行数、列数の2次元配列になるように変換しています。
inDataのようにセルの範囲を格納すると、添字が1からの2次元配列になるため、outDataに関しても同様に、添字を1からとした2次元配列を用意しています。
行に関しては、UBoundを用いてinDataの行数を取得し、列に関しては、1列のみの範囲になるため、「1 To 1」と1列のみを用意しています。

    Dim d As Variant, i As Long: i = 1
    For Each d In inData
        If d <> "" Then 
            outData(i, 1) = d
            i = i + 1
        End If
    Next d

次に、必要な変数を用意し、For EachでinDataの値を先頭から1つずつ繰り返してdに渡しています。
この繰り返し処理の中で、dの値が空でない場合に、outDataのi行目に加えていくようにしています。
この「i」に関しては、初期値は1で、outDataに加えられた後に、「i」自身に1を加えています。
これにより、outDataには、inDataの空の値を除外した値のみが上詰めで格納されます。

    Range("B3:B11").Value = outData

最後に、outDataの値を対象の表に貼り付けています。
outDataの配列の要素で、値が格納されなかった要素に関しては、初期値として空が渡されます。

ExcelVBAレベル確認

ボタン作成

後は、開発した機能をボタンに割り当てることで完成です。
ボタンに関しては、[開発]タブの中の[挿入]から作成することができます。

[挿入]から[フォームコントロール]の中の[ボタン]を選択し、図形を作成する時と同様に、好みの位置にボタンを作成します。
ボタンを作成すると、[マクロの登録]という画面が表示されるため、開発した機能の名前(上詰め)を選択して確定します。

これだけで、開発した機能を割り当てたボタンを作成することができます。
必要に応じて、ボタンの名前を変更すると良いです。
※一度作成したボタンを選択すると、機能が実行されてしまいます。作成後に編集する際は、右クリック、もしくはCtrlキーを押しながらクリックすることで編集することができます。

▼サンプルファイル▼

2024/10/30
【Excel】各シートのタスク件数を求める

【Excel】各シートのタスク件数を求める

以下のようなタスク表が複数シート(202401、202402、…)用意されています。

今回は、各シートのタスク件数を「一覧」シートに表示する方法について解説していきます。


先頭シートのタスク件数を求める

まずは、COUNTA関数を用いて、先頭シート(202401)のタスク件数を求めていきます。
COUNTA関数の使い方は、以下になります。

=COUNTA(値1, [値2], [値3], …)
// 値:空でないセルの数を数える際の対象の範囲

実際に求めると、以下のようになります。

=COUNTA('202401'!B:B)-1
// B列の空でないセルの数を求めてから見出しのセル分の1を引く
ExcelVBAレベル確認

全シートのタスク件数を求める

先ほどの数式と同じにように、それぞれのシートに関しても、同じような数式を入力していくのは大変になります。
そこで、数式のシート名(=COUNTA(‘202401‘!B:B)-1)に関しては、隣のセル(B列)の値を参照するように修正していきます。

そのためには、INDIRECT関数を活用します。
INDIRECT関数の使い方は、以下になります。

=INDIRECT(参照文字列)
// 参照文字列:参照したい範囲を表す文字列

実際に、INDIRECT関数を用いて、以下のように修正します。

=COUNTA(INDIRECT("'202401'!B:B"))-1
// セルへの範囲を文字列にする

次に、参照範囲の文字列のシート名を、隣のセルのシート名を参照した、以下のような数式に修正します。

=COUNTA(INDIRECT("'"&B3&"'!B:B"))-1
// 「&」でシート名を結合

最後に、入力した数式を最終行までコピーすることで、他全てのシートのタスク件数を求めることができます。

新しいタスク表のシートを追加した場合は、そのシート名を表の最後に追加して、同じ数式を隣のセルに入力(上記の表の場合は、オートフィルを活用)します。
この手順だけで、新しいシートのタスク件数を表に追加することができます。

2024/10/28
【Excel】8桁の数値の日付を日付形式に変換

【Excel】8桁の数値の日付を日付形式に変換

外部から出力したファイルなどで、以下のように日付が8桁の数値で出力されている場合があります。

ただ、このままですと、日付として扱うことができません。
そのため、集計には不向きになります。

今回は、上記のような8桁の数値の日付を日付形式に変換する方法について解説していきます。

ExcelVBAレベル確認

見た目のみを日付形式にする

まずは、表示形式を用いて、見た目のみを日付形式にしてみます。

8桁の数値が入力されている範囲を選択し、表示形式の設定から[その他の表示形式]を選択します。

以下の画面にて、[ユーザー定義]を選択し、「#-00-00」と入力します。

「#」は数値を表し、「0」は0埋めの数値を表します。
そのため、元の8桁の数値の先頭から2つは0埋めで表示し、次に「-」、そして、次の2つを0埋めで表示し、また「-」、後は残りの数値を「#」で表示しています。
この設定内容で確定することで、以下のように「-」区切りに日付形式の見た目にすることができます。

※「-」ではなく「/」にする場合は、「#”/”00″/”00」と「/」を「”」で囲む必要があります。


値を日付形式に変換する

前半の手順ですと、あくまで見た目のみの対応になります。
そのため、集計には向いていません。

集計がしやすいようにするため、次は、見た目ではなく実際の値を日付形式にしていきます。

まずは、先ほど設定した表示形式を「標準」に戻します。

※実際の値が分かりづらいため、元の8桁の数値に戻しています。

では、隣のセル(C列)に日付形式にした値を表示していきます。

初めに、TEXT関数を用いて、日付形式にする表示形式(前半に設定した内容)を適用した文字列を取得します。
TEXT関数の使い方は、以下になります。

=TEXT(値, 表示形式)
// 値:対象の値
// 表示形式:対象の値に対し、適用したい表示形式

実際に以下のように入力して、表示形式を適用した文字列を取得します。

=TEXT(B2,"#-00-00")

文字列として取得できましたら、次は、この文字列を日付に変換する必要があります。
日付を表す文字列から日付に変換する場合は、DATEVALUE関数、もしくはVALUE関数を活用します。
これらの使い方は、以下になります。

=DATEVALUE(日付文字列)
// 日付文字列:日付を表す文字列
=VALUE(文字列)
// 文字列:数値や日付などを表す文字列

こちらでは、VALUE関数を用いて、以下のように入力します。

=VALUE(TEXT(B2,"#-00-00"))

上記のように、日付を表す数値(シリアル値)を取得できましたら、表示形式を日付形式にすることで完成です。

他の行のセルには、先頭の数式をコピーするだけで変換できます。


補足

日付の文字列を数値に変換する際に、先ほどはVALUE関数を活用しましたが、数値による計算を行うことでも変換することができます。
例えば、以下のような方法があります。

=0+TEXT(B2,"#-00-00")
=1*TEXT(B2,"#-00-00")
=--TEXT(B2,"#-00-00") 
// 「--」は-1×-1×[値]という意味になる
// ※「++」では変換できないので注意
2024/10/26
【便利】セルを選択した瞬間に列幅を自動調整

【便利】セルを選択した瞬間に列幅を自動調整

#シートモジュール #Worksheet_SelectionChange #If #AutoFit #条件付き書式 #CELL

YouTubeで開く

予め指定した範囲内のセルを選択すると同時に、その列の幅を自動で調整し、列の要素を太字にする仕組みになります。
また、他のセルを選択すると同時に、列幅と書式が元に戻ります。

こちらでは、スケジュール表を例に解説しています。

00:00 挨拶
00:37 完成イメージ
02:20 準備
02:56 作成(文字を太字にする)
07:18 作成(列幅の自動調整)
12:26 作成(ウィンドウ枠の固定)
13:47 完成
14:42 プログラムの全体
15:41 プレゼントについて

▼準備ファイル▼

2024/10/25
【Excel】マトリックス表からリスト形式の表に変換

【Excel】マトリックス表からリスト形式の表に変換

以下のように、マトリックス表からリスト形式の表に、数式を使わずに変換する方法について解説していきます。


実は、ピボットテーブルを活用することで、簡単にリスト形式の表に変換することができます。
ただ、マトリックス表からピボットテーブルを作成する場合は、[挿入]タブの[ピボットテーブル]から作成するのではなく、少し特殊な方法になります。

その方法とは、「ピボットテーブル/ピボットグラフ ウィザード」という機能を活用するという方法です。


ピボットテーブルの作成

「ピボットテーブル/ピボットグラフ ウィザード」という機能を立ち上げるには、Altキー、Dキー、Pキーと順番にキーを入力します。
キーを順番に入力すると、以下のような画面が表示されます。

こちらの画面にて、[複数のワークシート範囲]と[ピボットテーブル]を選択し、[次へ]を選択します。

次に表示された画面にて、[指定]を選択し、[次へ]を選択します。

以下の画面が表示されましたら、[範囲]に対象のマトリックス表の範囲を指定し、[次へ]を選択します。

最後に、以下の画面にて[新規ワークシート]を選択して[完了]を選択することで、マトリックス表からピボットテーブルを作成することができます。

以下のように、マトリックス表の横軸の「色」に関しても、[列]という1つのフィールドとして作成されていることが確認できます。


リスト形式の表の作成

先ほどの手順で作成したピボットテーブルからリスト形式の表を作成します。

作成方法は簡単です。
ピボットテーブルの右下の総計セルをダブルクリックするだけで、瞬時に、別シートにリスト形式の表を作成することができます。

ダブルクリックすると、新しいシートとして、以下のようなリスト形式に変換された表が表示されます。

こちらの表は「テーブル」になっています。
必要に応じて、項目名を変更したり、テーブルを標準の範囲に戻したりとカスタマイズしてください。

テーブルを標準の範囲に戻す際は、対象のテーブルを選択し、[テーブルデザイン]タブから[範囲に変換]を選択することで、戻すことができます。

テーブルのまま活用される場合は、テーブル名を好みの名前に変更すると良いです。
テーブル名は、[テーブルデザイン]タブから変更できます。

以上の手順によって、以下のように、マトリックス表からリスト形式の表に変換することができます。

2024/10/23
【Excel】未割当の行を自動で色付け

【Excel】未割当の行を自動で色付け

以下の表で、氏名が入力されている行に対し、未割当(役割A~Eのいずれも値が入力されていない)の行の全体を自動で色付けする方法について解説していきます。


条件式の作成

まずは、色付けする条件式を作成していきます。
例えば、以下のセルB3を色付けする場合の条件について考えていきます。

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

・B列(氏名)に値が入力されていて、同じ行のC~G列(役割A~E)が全て空の場合

これを数式で求めていきます。

①B列に値が入力されているかどうかの条件式は、以下になります。

=B3<>""
// セルB3が空でない場合

②特定のセルに値が入力されているかどうかは、『COUNTA関数』で求めることができます。
COUNTA関数の使い方は、以下になります。

=COUNTA(値1, [値2], [値3], …)
// 指定したセルの中で、空でないセルの数を返す
// 値:対象のセルの範囲([値2]以降は省略可能)

COUNTA関数の引数に設定するセルは、該当する行のC~G列(役割A~E)になります。
そして、その範囲が空の場合という条件になるため、COUNTA関数の結果が「0」であることを確認します。
実際に数式で表現すると、以下になります。

=COUNTA(C3:G3)=0

①と②の式を組み合わせると、以下になります。

=AND(B3<>"", COUNTA(C3:G3)=0)
// AND関数を用いて「尚且つ」という条件式にする

この数式を他のセルにコピーしても反映できるように、「$」を加えて一部の参照を固定します。
今回の表の場合、どのセルに関しても、氏名はA列、役割はC~G列を参照する必要があります。
そのため、以下のように列を固定します。

=AND($B3<>"", COUNTA($C3:$G3)=0)

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


条件付き書式の設定

まずは、色付けする可能性のある対象の範囲を全選択します。

先ほど作成した条件式はセルB3に対する条件式であったため、選択基準のセル(アクティブセル)をセルB3にしています。

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

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

条件式の入力ができましたら、[書式]を選択し、好みの書式を設定します。
こちらでは、書式設定の画面にて、[塗りつぶし]から黄色を設定します。

上記のように設定して確定することで、以下のように、氏名が入力されていて、尚且つ、未割当(役割A~Eのいずれも値が入力されていない)の行全体の色を変更することができます。

2024/10/21
【Excel】スケジュール表の今日の日付を自動で色付け

【Excel】スケジュール表の今日の日付を自動で色付け

以下のような、横向きの年月日が別々のセルに入力されているスケジュール表で、ファイルを開く度に、今日の日付の列を自動で色付けする方法について解説していきます。


条件式の作成

まずは、色付けする条件式を作成していきます。
例えば、以下のセルD5を色付けする場合の条件について考えます。

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

・今日の日付が2024/10/1の場合

これを数式で求めていきます。

今日の日付は『TODAY関数』で求めることができ、2024/10/1という日付は『DATE関数』で求めることができます。
それぞれの関数の使い方は、以下になります。

=TODAY()
// 今日の日付を返す
=DATE(年, 月, 日)
// 指定した年月日から該当する日付を返す

DATE関数の引数に設定する年月日に関しては、それぞれ以下のセルになります。

年:B2
月:D2
日:D3

実際に条件を数式で表現すると、以下になります。

=TODAY()=DATE(B2,D2,D3)

この数式を他のセルにコピーしても反映できるように、「$」を加えて一部の参照を固定します。
今回の表の場合、年のセルはB2、月のセルは2行目、日のセルは3行目で固定になります。
それを数式で表現すると、以下になります。

=TODAY()=DATE($B$2,D$2,D$3)

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


条件付き書式の設定

まずは、色付けする可能性のある対象の範囲を全選択します。

先ほど作成した条件式は、セルD5に対する条件式であったため、選択した後に、セルD5をアクティブセルにします。
アクティブセルを移動する場合は、EnterキーとTabキーを活用します。

・下へ移動:Enter
・上へ移動:Shift + Enter
・右へ移動:Tab
・左へ移動:Shift + Tab

以下のように、セルD5をアクティブセルにしてから、条件付き書式を設定していきます。

アクティブセルの変更ができましたら、[ホーム]タブの中の[条件付き書式]から[新しいルール]を選択します。

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

条件式の入力ができましたら、[書式]を選択し、好みの書式を設定します。
こちらでは、書式設定の画面にて、[塗りつぶし]から薄い青色を設定します。

以上のように設定して確定することで、以下のように、今日の日付(2024/10/16)の列の色を変更することができます。

2024/10/19
【番外-044】カレンダーの固定曜日と指定日に「休」を表示

【番外-044】カレンダーの固定曜日と指定日に「休」を表示

#NETWORKDAYS.INTL #NETWORKDAYS #祝日 #休日 #カレンダー #スケジュール

YouTubeで開く

カレンダー(スケジュール表)に対し、固定の曜日と指定した日付に「休」という文字を自動で表示させる方法について解説しています。
固定の曜日とは「土曜日と日曜日」などといった固定の休日で、指定した日付とは祝日や会社独自に設定した休日などを指します。

00:00 挨拶
00:20 準備
00:57 曜日を表示する
02:14 休日かどうかを判定する
05:40 「休」と表示させる
06:44 まとめ
07:07 プレゼントについて

▼準備ファイル▼