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):抽出対象の範囲から抽出する位置情報(行番号)

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


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

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

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

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

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

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

ExcelVBAレベル確認

方法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:抽出対象の範囲(他のセルにコピーした際にも位置が移動しないように「$」で固定)
// "":検索結果が存在しない場合に表示する値(空)

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


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

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

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

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

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

2024/10/17
【便利】リストの選択肢に補足を表示

【便利】リストの選択肢に補足を表示

#データの入力規則 #プルダウン #トリガー #if #for #indexOf #setDataValidation

YouTubeで開く

リスト(プルダウン)に表示する選択肢に、それぞれの値の補足(説明文)を表示させる仕組みになります。
また、選択後は補足を除いた値のみがセルに入力されます。

00:00 挨拶
00:22 完成イメージ
02:24 準備
02:53 作成(サンプルのリスト)
04:18 作成(リストの切り替え)
14:33 作成(トリガー設定)
15:14 完成
16:03 プログラムの全体
18:09 プレゼントについて

▼準備ファイル▼

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

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

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

ExcelVBAレベル確認

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

条件付き書式の条件設定

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

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

表示された以下の画面にて、[ルールの種類]を[指定の値を含むセルだけを書式設定]にし、[ルールの内容]を「[セルの値]→[次の値より小さい]→”=$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/12
【番外-043】表示形式で改行

【番外-043】表示形式で改行

#表示形式 #日付 #曜日 #検索 #置換 #書式記号

YouTubeで開く

表示形式で改行する方法について解説しています。
こちらでは、日付が入力されているセルに対し、表示形式で曜日を改行して表示させています。

00:00 挨拶
00:20 表示形式で改行する
02:42 別の活用例
03:28 プレゼントについて

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

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

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

ExcelVBAレベル確認

乱数の入力

指定した範囲内の乱数を入力する場合は、『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/10
【便利】リストの選択肢に補足を表示

【便利】リストの選択肢に補足を表示

#リスト #シートモジュール #Worksheet_Change #If #データの入力規則

YouTubeで開く

ドロップダウンリストに表示する選択肢に、それぞれの値の補足(説明文)を表示させる仕組みになります。
また、選択後は補足を除いた値のみがセルに入力されます。

00:00 挨拶
00:21 完成イメージ
02:00 準備
02:24 作成(説明文付きのリスト)
02:54 作成(選択時に説明文を削除)
07:28 完成
08:00 プログラムの全体
09:24 プレゼントについて

▼準備ファイル▼

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】指定項目の要素別の表を瞬時に作成

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


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

表の中から特定の条件を満たした要素のみを抽出する場合は、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/05
【1-入門08|ex1】選択範囲内で中央の活用

【1-入門08|ex1】選択範囲内で中央の活用

#セル結合 #選択範囲内で中央 #予定表 #スケジュール表

YouTubeで開く

セル結合せずにセル結合したような見た目にすることができる「選択範囲内で中央」という設定の「悪い活用例」と「良い活用例」について解説しています。

00:00 挨拶
00:22 悪い活用例
02:29 良い活用例
03:56 まとめ
04:09 プレゼントについて

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を追加しています。

ExcelVBAレベル確認

補足

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

// 引数の違い
=NETWORKDAYS.INTL(開始日, 終了日, [週末], [祭日])
=NETWORKDAYS(開始日, 終了日, [祭日])
2024/10/03
【業務】クリックで移動できる「タスク管理表」

【業務】クリックで移動できる「タスク管理表」

#シートモジュール #Worksheet_BeforeRightClick #If #Resize #PasteSpecial

YouTubeで開く

各ステータス単位で表を分けたタスク管理シートで、右クリックだけで表を移動できる機能を開発しています。
該当するタスクを右クリックすることで「未着手→着手中→完了」と順に表を移動できます。

00:00 挨拶
00:25 完成イメージ
02:16 準備
02:46 作成(ウィンドウ枠の固定)
03:18 作成(データ移動機能)
09:37 完成
10:32 プログラムの全体
12:53 プレゼントについて

▼準備ファイル▼