Excel。動画で紹介。数える関数のCOUNTA関数は空白は数えないはずでは?どう解決するの。
<Youtube>
数値を数えてくれるのが、COUNT関数。
数値も文字は数えて、空白は除いて数えてくれるのが、COUNTA関数。
ところが、ある状況での空白は、除いてくれません。
つまり、数える対象になってしまうのです。
そのため、正しい件数を算出できない場合があります。
その対応方法だけではなく、空白を数える方法も併せて、ご紹介しております。
【Excel・Word・PowerPoint・Access】あなたの「困った」を解決!10年以上の経験が詰まった、現場の疑問から生まれた実践テクニック集。作業効率を劇的に上げるOffice活用術をお届けします。
数値を数えてくれるのが、COUNT関数。
数値も文字は数えて、空白は除いて数えてくれるのが、COUNTA関数。
ところが、ある状況での空白は、除いてくれません。
つまり、数える対象になってしまうのです。
そのため、正しい件数を算出できない場合があります。
その対応方法だけではなく、空白を数える方法も併せて、ご紹介しております。
NORM.S.DIST関数
読み方: ノーマル・スタンダード・ディスト
読み方: ノーマル・スタンダード・ディストリビューション
分類: 統計
NORM.S.DIST(z,関数形式)
標準正規分布の累積確率を算出します
範囲選択内で別々の色で塗りつぶされているセル。
オートフィルターを使う方法で件数を求めることはできますが、色の数が増えれば増えるほど、大変です。
そこで、今回は、Excel VBAをつかって、範囲選択内の塗りつぶした色ごとに何件あるのかを求めるプログラム文をつくってみました。
Sub 三色を数える()
Dim kinmuhani As Range
Dim yasumi As Range
Dim SampleCell As Range
Dim Cell As Range
Dim i As Integer
Dim OutputCell As Range
Set kinmuhani = Range("B2:D5")
Set yasumi = Range("A7:A9")
Set OutputCell = Range("B7")
For Each SampleCell In yasumi
i = 0
For Each Cell In kinmuhani
If Cell.Interior.Color = SampleCell.Interior.Color Then
i = i + 1
End If
Next Cell
OutputCell.Value = i
Set OutputCell = OutputCell.Offset(1, 0)
Next SampleCell
End Sub
まずは、実行してみましょう。
では、プログラム文を説明します。
変数宣言以降です。
Set kinmuhani = Range("B2:D5") B2:D5の色を数えいたので、B2:D5を代入しています。
Set yasumi = Range("A7:A9") 数えたい色のサンプルが入力されている範囲のA7:A9を代入します。
Set OutputCell = Range("B7") 最初の色の件数を表示するセルを代入しています。
For Each文をつかった繰り返し処理です。
1色ではないので、For Each文の中に、For Each文が設定されています。
各基準セルについてループ処理
For Each SampleCell In yasumi A7:A9のサンプルが終わるまで繰り返し処理
i = 0 色の件数の変数を初期化します。
For Each Cell In kinmuhani
サンプルの塗りつぶした色を同じだったら、カウントさせます。
If Cell.Interior.Color = SampleCell.Interior.Color Then
i = i + 1
End If
Next Cell
OutputCell.Value = i カウントした結果を代入
Set OutputCell = OutputCell.Offset(1, 0)
結果を表示させる、2件目から次の行にしたいので、Offsetを使用しています。
Next SampleCell
このような方法で、塗りつぶしている色ごとの件数を求めることができます。
Facebookページに書いた、Excelの豆知識(Trivia)です。
6月22日
Excel。エラー。
#NAME?
ネーム
正式は、Unrecognized Name (アンリコグナイズド・ネイム)です。
関数名やセル範囲名などの名前が正しくない時に登場します。
6月23日
Excel。エラー。
#NUM!
ナム
正式は、An Invalid Number (アン・インヴァリッド・ナンバー)です。
数値が大きすぎる。または、小さすぎると登場します。
6月24日
Excel。エラー。
#N/A
エヌエー
正式は、No Assign (ノー・アサイン)です。
値がない時に登場します。Vlookup関数の時によく見かけますね。
6月25日
Excel。
エラーじゃないのですが、表示が#######となると、桁あふれしているだけなので、列幅を広げれば大丈夫ですね。
6月26日
Excel。
オートSUMボタンの▼で、平均を選べば簡単に平均が算出できますね。
6月27日
Excel。
オートSUMボタンの▼で、最大値を選べば簡単にその範囲の中での最大値が算出できますね。
6月28日
Excel。
オートSUMボタンの▼で、最小値を選べば簡単にその範囲の中での最小値が算出できますね。
NORM.INV関数
読み方: ノーマル・インバース
分類: 統計
NORM.INV(確率,平均,標準偏差)
累積確立から正規分布の数値を逆算する
遠方の事務所は会議に参加するのにオンラインで参加OKという表をつくりました。
D列のオンラインというフィールドには、C列の地域が、東北・四国・九州だったらば、オンラインで会議に参加。
それ以外は、リアルで参加するという表です。
D列のオンラインには、東北・四国・九州ならば、○と判断する数式を設定したいわけです。
C2が東北だったら、四国だったら、九州だったらと判断したいわけです。
判断となれば、IF関数をつかうわけですが、IF関数だけだと、ネストだらけになってしまいま
す。
そこで、OR関数をつかうことで、可読しやすい数式にすることができます。
D2に設定した数式は、
=IF(OR(C2="東北",C2="四国",C2="九州"),"○","")
この数式でも可読性はいいのですが、OR関数の引数を「C2=」が多く繰り返される傾向にあります。
今回は、3つで済んでいますが、10あれば、「C2=」が10も作る必要があります。
これでは、可読性が悪化してしまいます。
そこで、OR関数の引数に、配列定数をつかうことで、改善することができます。
D2の数式を修正します。
配列定数をつかうことで、OR関数は、
C2={"東北","四国","九州"}
と、とてもわかりやすくなりました。
これならば、10件だったとしても、「C2=」は一つだけですみます。
Excelに新しく追加した機能。
スピル(spill)
あふれる という意味です。
わかりやすくいえば、オートフィルをしなくても数式が自動的に広がってくれる便利な機能です。
スピルで作られた数式は、数式バーで確認すると、グレーで表示されています。
この数式を、「ゴースト」といいます。
このスピル機能は便利なのですが、関数によっては、なんでもかんでも、スピル機能によって、ゴーストが発生し、余計なことをすることがあります。
場合によっては、スピル機能にならないように数式を作りたい場合、どのようにしたらいいのでしょうか。
実は、数式にあるものを追加すると、
スピルさせない数式をつくることができます。
その方法をご紹介しております。
NORM.DIST関数
読み方: ノーマル・ディスト
読み方: ノーマル・ディストリビューション
分類: 統計
NORM.DIST(x,平均,標準偏差,関数形式)
平均と標準偏差に対する正規分布の確率を算出する
顧客管理のテーブルがあります。
これを10歳代ごとに何人いるのかという、年齢分布の集計を求めたい。
Excelにエクスポートして求めたらと思うかもしれませんが、Excelでは、度数分布を求めるのは、少々面倒です。
そこで、今回は、Accessのクエリで、10歳単位の度数分布を作ってみます。
作成タブのクエリデザインをつかいます。
区分: Partition([年齢],10,100,10)
そして、件数が必要なので、NOフィールドを設定したら、集計行を表示しますので、クエリデザインタブの集計ボタンをクリックします。
NOフィールドの集計方法は、「カウント」とします。
では、実行して確認してみましょう。
今回のテーブルには20歳以下の人はいなかったので、20:29からになっています。
このように、Partition関数をつかうことで、度数分布をAccessのクエリで手早く求めることができます。
作業効率もUPする、知っていると便利なショートカットキー。
Ctrl+R
左のセルの内容を右にコピーする
Ctrl+S
ファイルを保存する
Ctrl+T
[ テーブルの作成 ] ダイアログ ボックスを表示
Ctrl+U
下線を引く
Ctrl+V
貼り付ける
NOMINAL関数
読み方: ノミナル
分類: 財務
NOMINAL(実行利率,複利計算期間)
名目年利率を算出します
大きな表から必要な列だけを抽出した別表をつくるとなると、コピーで貼り付けという作業は、ただただ、面倒な作業だといえます。
この表から、売上だけを抽出したA7:E11までの表をつくりたいわけです。
この程度の列数ならば、コピー&ペーストで解決できますが、列数が増えれば面倒です。
また、数式だった場合は、#REF!というエラーが表示される場合もあります。
値で貼り付けをつかうとしても、元の表で数値が変わった場合、抽出先のデータは、変わっていませんので、再度コピーする必要があります。
そこで、CHOOSECOLS関数をつかうことで、手早く抽出することができます。
=CHOOSECOLS(A2:H5,1,2,4,6,8)
これで、売上の列だけを抽出した別表をつくることができました。
では、数式を確認しておきましょう。
CHOOSECOLS関数は、範囲から必要な列を抽出することができる関数です。
最初の引数が、array。
範囲選択なので、A2:H5を範囲選択します。
残りの引数は、範囲選択した中で、左から必要な列番号を設定するだけです。
これで、必要な列だけの別表をつくることができます。
Facebookページに書いた、Excelの豆知識(Trivia)です。
6月15日
Excel。
Σ
オートSUMボタンをクリックして、範囲を決定するだけで合計を求めることができます。
6月16日
Excel。
オートSUMボタンで、合計するときに離れている所を計算したい時は、Ctrlキーでクリックすれば、算出できますね。
6月17日
Excel。
エラーが表示されるとビックリしますよね。
けど、ちょっと知っていると、ビックリしなくなります。
6月18日
Excel。
エラー。
#NULL!
ヌル
正式は、Null Intersection (ナル・インターセクション)です。
セル指定の「:(コロン)」や「,(カンマ)」がない時や、セル範囲に共通部分がないと登場します。
6月19日
Excel。
エラー。
#DIV/0!
ディブゼロ
正式は、DIVided by 0(ディヴァイディッド・バイ・ゼロ)です。
0で割り算をしちゃうと、登場しますね。
6月20日
Excel。
エラー。
#VALUE!
バリュー
正式は、Wrong Type Value (ローング・タイプ・バリュー)です。
不適切なデータが入っている時に登場しますね。
6月21日
Excel。
エラー。
#REF!
レフ
正式は、A REFerence to a cell that does not exit (ア・リファレンス・トゥ・ア・コール・ザット・ダズ・ノット・イグジット)です。
セルが参照できない時に登場します。
例えば、住所に横浜市という文字が含まれていたら○と判断したい。
このような場合、IF関数をつかえば、対応できるように思えます。
含まれるということで「*横浜市*」と
ワイルドカードをつかって、論理式をつくってみると…
判断の結果が!?
では、どのようにしたら、解決することができるのか。
その方法をご紹介しています。
連続する項目を表引きしたい場合、VLOOKUP関数だと何度も数式を作る必要があります。
例えば、次のような表。
VLOOKUP関数の場合、B12に設定した数式を、オートフィルで数式をコピーする場合、まず、検索値を列固定の複合参照にした上で、3番目の引数の「列番号」をコピー後に一つずつ修正する。
あるいは、COLUMN関数をつかって列番号に対応する必要があります。
慣れれば特に問題はないかもしれませんが、少々面倒です。
そこで、XLOOKUP関数をつかってみたらどうなるのか、確認をしてみましょう。
B12にXLOOKUP関数をつかった数式を設定します。
スピル機能によって、行方向には、数式をコピーする必要はありません。
列方向には、オートフィルで数式をコピーする必要があります。
これで、連続する複数項目の表引きを行うことができました。
COLUMN関数をつかわなくても大丈夫です。
では、XLOOKUP関数の数式を確認しておきましょう。
=XLOOKUP(A12,$A$2:$A$9,$B$2:$F$9,"",0,1)
最初の引数は、検索値。NOなのでA12を設定します。
2つ目の引数は、検索範囲。
検索値のある列なので、$A$2:$A$9。
オートフィルで数式をコピーする必要があるので、絶対参照を忘れずに設定します。
3つ目の引数は、戻り範囲。抽出したい列です。
連続する列なので、$B$2:$F$9。
オートフィルで数式をコピーする必要があるので、絶対参照を設定します。
ここをまとめて設定することができるので、VLOOKUP関数よりもわかりやすいかと思われます。
4つ目の引数は、見つからない場合。
見つからない場合は「””(ダブルコーテーション×2)」で空白とします。
5つ目の引数は、一致モード。
完全一致なので「0」を設定します。
最後の引数は、検索モード。
上から検索しますので、「1」と設定します。
NETWORKDAYS.INTL関数
読み方: ネットワークデイズ・インターナショナル
分類: 日付時刻
NETWORKDAYS.INTL(開始日,終了日,[週末],[祭日])
週末(曜日指定OK)と祝日を除いた日付間の日数を算出する
Facebookページに書いた、Excelの豆知識(Trivia)です。
6月8日
Excel。
範囲選択で、広い範囲の列を選択する場合は、最初の列番号をクリックして、最後の列番号のところで、Shiftキーを押しながらクリックすると選択できますね。
6月9日
Excel。
範囲選択で、広い範囲の行を選択する場合は、最初の行番号をクリックして、最後の行番号のところで、Shiftキーを押しながらクリックすると選択できますね。
6月10日
Excel。
シートの全部のセルを選択するのは、全選択ボタンをクリックします。
A列の左側と1行目の上の四角のボタンです。
6月11日
Excel。
足し算を使う記号は+。
引き算は-。
掛け算は×でなく*。
割り算は÷でなく/ですね。
6月12日
Excel。
2乗3乗のべき乗の記号は^(キャレット)ですね。
6月13日
Excel。
数学・算数のルールと同じで、()カッコの中が先に計算されます。
6月14日
Excel。
文字と文字も足す(合体)することもできます。
&を使うと、簡単にできますね。
A1:H5には、四半期の売上表があります。
このような表引きをするならば、VLOOKUP関数をつかうと対応できそうです。
しかし、B8:E8までにVLOOKUP関数をつかって、設定する場合、列番号が異なるので複数のVLOOKUP関数を設定する必要があります。
また、連続していれば、列番号に、COLUMN関数をつかうことで、対応することもできますが、今回は、表引きしたいデータが離れています。
これでは、COLUMN関数をつかうことができません。
そこで、VLOOKUP関数の列番号に配列数式をつかうことで、対応することができます。
B8にVLOOKUP関数の数式を設定します。
今回は、検索値が空欄時に発生する、#N/Aは考慮しておりませんので、考慮する場合には、IF関数かIFERROR関数で対応します。
またスピル機能によって、オートフィルで数式をコピーする必要はありません。
これで、複数の離れた列から表引きすることができました。
では、VLOOKUP関数を確認しておきましょう
最初の引数は、検索値です。A8を設定します。
この番号を変えることで、該当するデータを表引きします。
2つ目の引数は、範囲です。
A2:H5。
表引きの件数が1件なので、絶対参照は不要です。
3つ目の引数は、列番号です。
2つ目の引数で設定した範囲の左側から何列目のデータを抽出するのかという数値なのですが、離れた列になります。
そこで、
{2,4,6,8}
という配列数式にすることで、表引きすることができます。
通常の「()」ではなくて「{}」で囲むことで、配列数式にすることができます。
旧来は、先に表引きをすべて範囲選択して、数式の確定時にCtrl+Shift+Enterをすることで配列数式にすることができましたが、スピル機能によって、不要になりました。
数式の作成は、最初から「{}」で表引きしたい列番号を囲うだけです。
表引きしたい列は、2,4,6,8列です。
最後の引数は、検索方法です。
完全一致なので、FALSEを設定します。
NETWORKDAYS関数
読み方: ネットワークデイズ
分類: 日付時刻
NETWORKDAYS(開始日,終了日,[祭日])
日付の間の稼働日数を算出します
Excelは、時間計算が苦手だったりします。
例えば、夜勤とかで、21:00出勤で翌朝5:00に退勤した場合の勤務時間を算出したい場合は、「引き算」をつかえばいいはず。
ところが、結果は「#######」って。
なんで、どうして?
列幅を広げても、変わらない。
よく見るとメッセージが表示さている。
「負であるか、大きすぎる日付および時間は、######」って?
このようなケースのトラブルを回避する方法をご紹介しております。
積み上げ横棒グラフをつくるのは、簡単なのですが、出来そうで出来ないものがあります。
それは、合計値です。
それ以外にも、横棒グラフならではの縦軸を反転しないとグラフの元表と同じ順番になりません。
この2点を含めて、積み上げ横棒グラフに合計値を表示させるには、どうしたらいいのかを紹介いたします。
積み上げ横棒グラフ用に用意した表です。
E2の数式は、
=SUM(B2:D2)
といういたってシンプルな数式です。
E4までオートフィルで数式をコピーしています。
積み上げ横棒グラフをつくりますので、A1:E4を範囲選択します。
E列の合計列も忘れずに含めます。
挿入タブのグラフブロックにあり、積み上げ横棒グラフをつかって、積み上げ横棒グラフを挿入します。
4月売上から6月売上は、「積み上げ横棒」で、第2軸にチェックをいれます。
合計は、「集合縦棒」にして、第2軸は、何もしません。
第2軸が前面に、通常の第1軸が背面に設定されるので、4月から6月を前面にしたいので、第2軸にします。
合計はあくまでも、データラベルのためだけなので、背面の方がむしろ都合がいいというわけです。
OKボタンをクリックします。
右側に第2縦軸を表示させる理由は、左側の縦軸が、上から立川・渋谷・新宿の順番になっています。
グラフの元表と順番が上下逆です。
グラフの元表と同じようにする作業をするために必要になります。
これで、縦軸の順番は表と同じ、新宿・渋谷・立川になりました。
ただ、右側の第2縦軸はそのままなので、第2縦軸をクリックします。
第2縦軸は、横軸との交点を「自動」にします。
ここがわかりにくいので、注意ポイントです。
軸位置は、「軸を反転する」にチェックマークをいれます。
ここまでで、縦軸を表と同じ順番にすることができました。
合計の集合横棒グラフは、背面あるので、さわることができません。
そこで、書式タブのグラフの要素を「系列 "合計"」にします。