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

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

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

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

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


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

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

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/25
【Excel】マトリックス表からリスト形式の表に変換

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

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

ExcelVBAレベル確認

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

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


ピボットテーブルの作成

「ピボットテーブル/ピボットグラフ ウィザード」という機能を立ち上げるには、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)

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

ExcelVBAレベル確認

条件付き書式の設定

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

先ほど作成した条件式はセル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/18
【Excel】軸の異なる表を瞬時に作成

【Excel】軸の異なる表を瞬時に作成

以下のように、軸の異なる表を数式で作成する方法について2通り解説していきます。

こちらでは、「担当(A、B、C)と曜日別に担当者(田中、斎藤、井上、村上)を表した表」を元に、「担当者と曜日別に担当を表した表」に数式で抽出してきます。

ExcelVBAレベル確認

方法1

1つ目の方法は、INDEX関数とMATCH関数を組み合わせた抽出方法になります。

まずは、以下のように、抽出先の表の見出しのみを用意します。

では、抽出先の表の左上のセルC8から該当する担当を抽出していきます。

抽出方法は、該当する担当者(田中)が存在するのかどうかを判断し、存在する場合は、該当する曜日(月)の上から何番目に位置するのかを取得し、その行の担当(C)を抽出するという方法になります。

何番目に位置するのかを取得するには、MATCH関数を活用します。
この関数の使い方は、以下になります。

=MATCH(検査値, 検査範囲, [照合の種類])
// 検査値:検索対象の文字
// 検査範囲:検索対象の範囲
// [照合の種類]:検索方法(0:完全一致、1:以下、-1:以上)
// ※[照合の種類]を省略した場合は、「1:以下」が指定される

この関数を用いて、セルC8に対し、該当する担当者(田中)が同じ曜日(月)に存在する位置情報(3)を取得します。
取得する際の数式は、以下になります。

=MATCH($B8,C$3:C$5,0)
// $B8:検査する担当者のセル(数式を他の列にコピーした際にも位置が移動しないように、B列のみを「$」で固定)
// C$3:C$5:検査範囲(数式を他の行にコピーした際にも位置が移動しないように、3と5の行番号のみを「$」で固定)
// 0:検査値が検査範囲で完全一致する位置の情報を取得

これだけで、以下のように該当する担当者が存在する場合は、位置情報を取得することができます。

存在しない場合は、「#N/A」というエラーになりますが、エラー対策に関しては、後に解説します。


次に、該当する位置に存在する担当(A、B、C)を抽出していきます。
指定した範囲の○番目のデータを抽出する際は、INDEX関数を活用します。
この関数の使い方は、以下になります。

=INDEX(配列, 行番号, [列番号])
// 配列:対象の範囲
// 行番号:対象の範囲の何行目のデータを抽出するのかを指定
// [列番号]:対象の範囲の何列目のデータを抽出するのかを指定
// ※配列に指定した範囲が1列の場合は[列番号]を省略できる

実際に先ほどのMATCH関数に、INDEX関数を以下のように組み合わせます。

=INDEX($B$3:$B$5,MATCH($B8,C$3:C$5,0))
// $B$3:$B$5:抽出対象の範囲(他のセルにコピーした際にも位置が移動しないように「$」で固定)
// MATCH($B8,C$3:C$5,0):抽出対象の範囲から抽出する位置情報(行番号)

これだけで、以下のように該当する担当を抽出することができます。

ExcelVBAレベル確認

ただ、この数式ですと、他のセルにコピーした際に該当する担当が存在しない場合に、以下のようにエラーになってしまいます。

そのため、先ほどの数式にエラー対策を行います。
エラーになった場合に何も表示しないという設定を行う場合は、IFERROR関数を組み合わせます。
この関数の使い方は、以下になります。

=IFERROR(値, エラーの場合の値)
// 値:エラーを検証する値
// エラーの場合の値:値がエラーの時に表示する値

実際に先ほどの数式に組み合わせると、以下のようになります。

=IFERROR(INDEX($B$3:$B$5,MATCH($B8,C$3:C$5,0)),"")
// INDEX(…):エラーを検証する値
// "":エラーの時に表示する値(空)

この数式を他のセルにコピーすることで、以下のように、全ての担当を抽出することができます。


方法2(Excel2021以降対応)

2つ目の方法は、1つ目に比べて短い数式で抽出することができます。
ただ、こちらの方法は、Excelのバージョンが2021以降、もしくは365でないと対応していません。

では、その方法について解説していきます。

その方法とは、XLOOKUP関数を活用するという方法です。
この関数の使い方は、以下になります。

=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
// 検索値:検索対象の値
// 検索範囲:検索して位置情報を取得する範囲
// 戻り範囲:取得した位置情報から抽出する範囲
// [見つからない場合]:検索結果が存在しない場合に表示する値 ※省略時は「#N/A」になる
// [一致モード]:検索方法(0:完全一致、-1:以下、1:以上、2:ワイルドカード文字との一致)※省略時は「0:完全一致」が指定される
// [検索モード]:検索順序(1:先頭から末尾へ検索、-1:末尾から先頭へ検索、2:バイナリ検索(昇順で並べ替え)、-2:バイナリ検索(降順で並べ替え))※省略時は「1:先頭から末尾へ検索」が指定される

実際に抽出先の表の左上のセルC8に、XLOOKUP関数を用いた数式を入力していきます。
入力する数式は、以下になります。

=XLOOKUP($B8,C$3:C$5,$B$3:$B$5,"")
// $B8:検索する担当者のセル(数式を他の列にコピーした際にも位置が移動しないように、B列のみを「$」で固定)
// C$3:C$5:検索する担当者の範囲(数式を他の行にコピーした際にも位置が移動しないように、3と5の行番号のみを「$」で固定)
// $B$3:$B$5:抽出対象の範囲(他のセルにコピーした際にも位置が移動しないように「$」で固定)
// "":検索結果が存在しない場合に表示する値(空)

この数式を他のセルにコピーすることで、以下のように、全ての担当を抽出することができます。

ExcelVBAレベル確認

ちなみに、XLOOKUP関数が使える環境では、スピルという機能が使えます。
スピルとは、数式を入力したセルから溢れて結果を表示するという機能です。

今回の数式の場合は、以下のように、検索値の範囲を複数行指定するだけで、1列分表示することができます。

=XLOOKUP($B8:$B11,C$3:C$5,$B$3:$B$5,"")

これだけで、以下のように、該当する担当を1列分抽出することができます。

そのため、他のセルにコピーする際は、行方向にコピーするだけで全てを抽出することができます。

2024/10/16
【Excel】在庫数が指定値未満の場合に自動色付け

【Excel】在庫数が指定値未満の場合に自動色付け

以下の表のように、それぞれの商品の在庫数が、それぞれに設定した安全在庫数未満になった場合に、その在庫数の文字の色を自動で赤色にする方法について解説していきます。


特定の条件を満たしたセルに対して、特定の書式を設定する場合は、『条件付き書式』を活用します。

条件付き書式の条件設定

まず初めに、文字の色を赤色にする可能性のある範囲(在庫数の範囲)を全選択します。

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

表示された以下の画面にて、[ルールの種類]を[指定の値を含むセルだけを書式設定]にし、[ルールの内容]を「[セルの値]→[次の値より小さい]→”=$D3″」と指定します。
“=$D3″に関しては、テキストボックス内を選択した後に、セルD3を選択し、F4キーを2回押すことで簡単に入力することができます。
※こちらでは、アクティブセルがC3だったため、同じ行の安全在庫数のセルD3を指定しています。アクティブセルが異なる場合は、アクティブセルに対する安全在庫数のセルを指定する必要があります。

テキストボックス内に指定した”=$D3″に関しては、他の選択範囲にも行番号が相対参照で反映されます。
F4キーを押さないと”=$D$3″と行番号が絶対参照のままになってしまうため、今回はF4キーを2回押して”=$D3″にすることで、安全在庫数を参照する位置が行ごとに相対的に変わるようにしています。


条件付き書式の書式設定

最後に、条件を満たした時に反映させる書式を設定します。
こちらでは、[書式]を選択し、表示された[セルの書式設定]の[フォント]タブから色を赤色にしています。

以上の設定で[OK]を選択し、設定画面を閉じることで設定完了です。
各商品に対し、在庫数が安全在庫数を満たしていない場合に、文字の色が自動で赤色になります。

2024/10/14
【Excel】グラフにデータを瞬時に追加(離れている範囲でもOK)

【Excel】グラフにデータを瞬時に追加(離れている範囲でもOK)

以下のグラフは、以下の表のAグループの値(担当A、B)を参照したものになります。

このグラフにBグループの値(担当C、D、E)を追加する場合、グラフを選択してから参照範囲をドラッグして拡張すると、以下のように、余分なデータ(Bグループというタイトル行)が含まれてしまいます。

こちらでは、余分なデータを含まずに、必要なデータのみを瞬時に追加する方法について解説していきます。


データの追加

グラフにデータを追加する場合、ドラッグ操作以外にも[グラフのデザイン]タブの[データの選択]から追加する方法もありますが、若干手間になります。

実は、「コピー&ペースト」を使うことで、効率的にデータを追加することができます。

まずは、追加したい範囲を以下のように選択し、Ctrlキーを押しながらCキーを押してコピーします。

次に、データを追加したい対象のグラフを選択し、Ctrlキーを押しながらVを押して貼り付けます。
これだけで、グラフにデータを追加することができます。

元々の参照範囲から離れているデータを追加する際に、より効率的に追加することができます。


データの削除

一部のデータを削除する場合は、対象の系列を選択してDeleteキーを押すだけで、簡単に削除することができます。

2024/10/11
【Excel】テスト用の数値データを瞬時に入力

【Excel】テスト用の数値データを瞬時に入力

表を作成する際などに動作確認するため、以下のような適当な数値データを手入力している方いませんか?
こちらでは、適当な数値データを瞬時に入力する方法について解説していきます。


乱数の入力

指定した範囲内の乱数を入力する場合は、『RADNBETWEEN関数』が便利です。
この関数の使い方は、以下になります。

=RANDBETWEEN(最小値, 最大値)
// 最小値:乱数を発生させる際の最小値の整数
// 最大値:乱数を発生させる際の最大値の整数

実際に、以下の表に対し、0~100の乱数を入力していきます。

まずは、一括で入力したい対象のセルをまとめて選択し、以下の数式を入力します。

=RANDBETWEEN(0,100)

次に、Ctrlキーを押しながらEnterキーを押して確定します。
これだけで以下のように、選択範囲内全てにRANDBETWEEN関数を入力することができます。


数式を結果の値のみに変換

ただ、この状態ですと、セルを編集する度、乱数が更新されてしまいます。

そのため、数式の状態から値に変換する必要があります。
その際は、RANDBETWEEN関数を入力したセルを選択している状態で、コピーして値のみを貼り付けます。

コピーと値のみの貼り付けは、右クリックのメニューからでも行えますが、以下のショートカットを活用した方が効率的です。

・コピー:Ctrl + C
・値のみ貼り付け:Ctrl + Shift + V
 ※「Ctrl + Shift + V」が使えない場合は以下でも行えます。
  Ctrl + Alt + V → V → Enter

以下のように値のみを貼り付けることによって、数値が更新されることがなくなります。


応用

小数を含む乱数を発生させたい場合は、以下のようにRANDBETWEEN関数に加え、好みの数値で割ると良いです。

・10.0~30.0の範囲
=RANDBETWEEN(100,300)/10

・0.00~100.00の範囲
=RANDBETWEEN(0,10000)/100

他にも、発生した乱数に特定の数値を加えたい場合は、加算貼り付けをすると良いです。
例えば以下の表の「鈴木 次郎」さんの点数に対し、全体に10点を加えたい場合は、以下の手順を行います。

①適当なセルに「10」と入力
②入力したセルをコピー
③加えたい範囲を選択し右クリック
④[形式を選択して貼り付け]から[貼り付け]を[値]に、[演算]を[加算]にして確定
⑤手順①で入力した値を削除

2024/10/09
【Excel】「Ctrl+A」の別の活用例

【Excel】「Ctrl+A」の別の活用例

表の中を選択して、Ctrlキーを押しながらAキーを押すことで、表を全選択することができます。

上記の内容は、一般的な活用例になります。
こちらでは、「Ctrl+A」の別の活用例を紹介していきます。


検索画面での活用

別の活用例とは、『検索画面』での活用になります。
実は、検索画面に表示された検索結果を全て選択する際にも活用できます。

例えば、以下の表から「着手中」という文字を全て選択する場合、検索画面を開き(Ctrl+F)、「着手中」という文字を入力して、[すべて検索]のボタンを押します。

※予め指定した範囲の中から検索したい場合は、検索対象のセルを選択している状態で、検索画面を操作します。

以下のように、検索結果に複数件が表示されている場合は、Ctrlキーを押しながらAキーを押すことで、検索結果の全てのセルを選択することができます。

全てのセルを選択した後は、Enterキー、もしくはTabキーを押して、対象のデータを1件ずつ確認することが出来ますし、編集が必要な場合は、そのまま編集することができます。
選択しているセルの値を完全に書き換える場合は、直接、値を入力すればよいですし、値の一部を編集する場合は、F2キーを押すことで、セル内にカーソルを表示させ編集することができます。

2024/10/07
【Excel】指定項目の要素別の表を瞬時に作成

【Excel】指定項目の要素別の表を瞬時に作成

指定した項目の要素別の表を瞬時に作成する方法について解説していきます。
こちらでは、以下の氏名と部署で構成された表から部署単位の表を作成する方法を例に解説します。

ExcelVBAレベル確認

氏名と部署で構成された表から部署単位の表を作成する

表の中から特定の条件を満たした要素のみを抽出する場合は、FILTER関数が便利です。
FILTER関数は、Microsoft365もしくはExcel2021以降で対応している関数になります。

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

=FILTER(配列, 含む, [空の場合])
// 配列:抽出対象の表
// 含む:抽出条件
// [空の場合]:抽出対象が存在しない場合に表示する値(省略可能)

実際に、以下の表から部署が「営業部」の氏名のみを抽出してきます。

そのような場合は、以下のような数式になります。

=FILTER(B:B,C:C="営業部","")
// B:B:抽出対象の氏名の列全体を指定
// C:C="営業部":部署の項目で「営業部」が入力されているデータのみが抽出対象
// "":データが存在しない場合は何も表示しない

また、「営業部」に関しては、セルの値を参照して以下のように表現することもできます。

=FILTER(B:B,C:C=E2,"")

こちらの数式を隣のセルにコピーするだけで、他の部署に関しても抽出できるようにしてきます。
その際は、抽出対象の範囲(氏名の項目)抽出条件の範囲(部署の項目)が相対的に移動しないように、以下のように「$」で固定します。

=FILTER($B:$B,$C:$C=E2,"")

後は、この数式を一番左の「総務部」までコピーします。

これだけで、2行目(セルE2~G2)の「営業部、人事部、総務部」を抽出条件とし、瞬時に、対象の氏名のみを抽出することができます。

コピーすることでセルG3までに入力された数式は、以下になります。

E3:=FILTER($B:$B,$C:$C=E2,"")
F3:=FILTER($B:$B,$C:$C=F2,"")
G3:=FILTER($B:$B,$C:$C=G2,"")
2024/10/04
【Excel】カレンダーに「休」を表示(祝日などを考慮)

【Excel】カレンダーに「休」を表示(祝日などを考慮)

以下のカレンダーのように、「休」を自動で表示する方法について解説していきます。
反映される「休」は、固定の曜日と休日一覧に登録した日付になります。
※以下の例では土日を固定の休みとしています。


カレンダーに「休」を表示する

固定の曜日の休みと休日一覧に登録した日付を考慮して「休」と表示させる場合は、『NETWORKDAYS.INTL関数』が便利です。

この関数では、対象期間の営業日数を求めることができます。

例えば、2024/7/5が休みはどうかを判定したい場合、NETWORKDAYS.INTL関数を用いて2024/7/5から2024/7/5の期間(1日間)の営業日数を求めます。
その日数が0の場合が休みになります。

まずは、カレンダーに各日付(1日間)の営業日数を表示させます。
NETWORKDAYS.INTL関数の使い方は、以下になります。

=NETWORKDAYS.INTL(開始日, 終了日, [週末], [祭日])
// 開始日:対象期間の開始日
// 終了日:対象期間の終了日
// [週末]:固定の休みとする曜日を指定(省略時は土日休み)
// [祭日]:固定以外の休日をまとめた一覧を指定(省略時は対象なし)

引数の[週末]に関しては、以下の候補から簡単に指定することができます。

実際に、以下のカレンダーの先頭(セルC3)にNETWORKDAYS.INTL関数を用いて営業日数を求めていきます。
その際の数式は以下になります。

=NETWORKDAYS.INTL(B3,B3,1,$F$3:$F$20)
// 固定の休みを土日とする場合は、引数の[週末]に1を指定する
// 他のセル(C列全体)にコピーした際に休日一覧の参照位置が移動しないように、引数の[祭日]に関しては絶対参照($)にする

入力できたら該当する列(C列)の最終行までコピーします。
この時、「0」が表示された日付が休みになります。


後は、「0」が表示されたセルを「休」という文字に、それ以外のセルを空にすることで完成です。
条件に応じて表示させる内容を変える場合は、『IF関数』を活用します。
この関数の使い方は、以下になります。

=IF(論理式, 値が真の場合, 値が偽の場合)
// 論理式:条件を指定
// 値が真の場合:条件を満たした場合に表示する値を指定
// 値が偽の場合:条件を満たしていない場合に表示する値を指定

実際に、先ほどのNETWORKDAYS.INTL関数と組み合わせると、以下のようになります。

=IF(NETWORKDAYS.INTL(B3,B3,1,$F$3:$F$20)=0,"休","")

入力できたら該当する列(C列)の最終行までコピーします。
これだけで、「休」という文字を表示させることができます。


候補にない曜日を休みにする

次は、以下の候補([週末]に指定する曜日)の中に理想的な曜日の組み合わせが存在しない場合の指定方法について解説していきます。

この候補の中だと、「土日、日月、月火、…」のように2日間連続した曜日、もしくは「日、月、火、…」のように単体の曜日でしか指定することができません。
そのため、「月水」や「金土日」のような曜日を固定の休みとする場合は、別の方法で指定する必要があります。
そのような際は、以下のように指定します。

・月水の場合
=NETWORKDAYS.INTL(開始日, 終了日, ”1010000”, [祭日])
・金土日の場合
=NETWORKDAYS.INTL(開始日, 終了日, ”0000111”, [祭日])
// 月曜始まりで休みの曜日を「1」として、数字を7文字並べて指定します

試しに、月水を休みとしてカレンダーに反映させてみます。
反映させる場合の数式は、以下になります。

=IF(NETWORKDAYS.INTL(B3,B3,"1010000",$F$3:$F$20)=0,"休","")

※曜日の確認がしやすいように曜日をA列に加えています。

こちらを最終行までコピーすると以下のようになります。

※休日一覧が月水と被っていたため、休日一覧に2024/7/16を追加しています。


補足

NETWORKDAYS.INTL関数と似た関数でNETWORKDAYS関数があります。
NETWORKDAYS関数では土日以外を指定することができないので、NETWORKDAYS.INTL関数の方を覚えておくと良いです。

// 引数の違い
=NETWORKDAYS.INTL(開始日, 終了日, [週末], [祭日])
=NETWORKDAYS(開始日, 終了日, [祭日])
2024/10/02
【Excel】請求書などの摘要欄を抽出

【Excel】請求書などの摘要欄を抽出

以下のような請求書のフォーマットに対し、セルF2の請求書Noを入力すると同時に、摘要欄の内容を別シート(請求管理)から抽出し表示する方法について解説していきます。


摘要欄の抽出

実現するためには、『FILTER関数』を活用します。
FILTER関数は、Excel2021以降で対応している関数になります。

FILTER関数は、指定した表から指定した条件を満たしたデータのみを抽出する関数になります。
この関数の使い方は以下の通りです。

=FILTER(配列, 含む, [空の場合])
// 配列:抽出対象の表
// 含む:抽出する条件
// [空の場合]:抽出対象が存在しない場合に表示する値(省略可能)

こちらの場合、「請求管理」シートから該当する「商品名、数量、単位、単価」を抽出します。

抽出条件は、「「No」が請求書Noと一致する場合」になります。

では、「FILTER関数」を活用して抽出していきます。

抽出する際は、抽出したい位置の先頭のセルに数式を入力します。
こちらでは、摘要欄の先頭のセルB15に数式を入力していきます。

入力する数式は、以下になります。

=FILTER(請求管理!D:G,請求管理!B:B=F2,"")
// 抽出対象の表:請求管理!D:G(今後データが追加されることを考慮し列全体を指定)
// 抽出する条件:請求管理!B:B=F2(請求管理シートのB列のNoが請求書Noと一致する場合)
// 見つからない場合:""(何も表示しない)

これだけで、今後は、セルF2の請求書Noを変更するだけで摘要欄を抽出することができます。
他の項目(請求日、宛名、件名、支払期日、振込先)に関しても別のシートで管理している場合は、請求書Noと紐づけて、今回のFILTER関数や他にもVLOOKUP関数、XLOOKUP関数などを用いて抽出することで、請求書の入力を効率化することができます。

他の書類に関しても、同様に活用できます。