10/31/2017

Excel。マクロ016。条件分岐 If Then Else End If

Excel。マクロ016。条件分岐 「If Then Else End If」

<VBA>

事務職でも、少しExcel VBAを知っていると、
確かに作業効率は改善されるようですが、
難しいと感じている人も多いようです。

とはいえ、少しずつでいいので、慣れていくといいですね。

今回は、条件分岐処理の基本
If Then Else End If 
をご紹介していきます。

If Then Else End Ifは、
「もしこの条件を満たしていたら、実行。そうでなければ、こっちを実行」
という処理を行うことができます。

IF関数と同じですね。
真の場合は、こうして。偽の場合は、こうして。というイメージ。

ステートメントとしては、
If 条件式 Then
   処理内容1
Else
   処理内容2
End If
です。

では、次の表を使って

数量が5以上だったら、文字の色を赤色にして、
それ以外だったら、文字の色を青色にするというマクロVBAを作っていきましょう。

Sub 条件分岐()
    Dim i As Long
    For i = 2 To 18
        If Cells(i, 6).Value >= 5 Then
         Cells(i, 6).Font.Color = vbRed
        Else
         Cells(i, 6).Font.Color = vbBlue
        End If
    Next
End Sub

If 条件式 Then
   処理内容1
Else
   処理内容2
End If
というステートメントだけだと、アクティブのセルのみで、
一度しか動いてくれません。

ですから、For to Nextを組み合わせて使うことで、範囲全体を処理してくれます。

それでは、実行してみましょう。

数量が5以上だったら、文字の色が赤色で、
それ以外は文字の色が青色に設定されていますね。

注意しないといけない点は、
IF関数になれていると、どうしても、偽の場合は、何もしない。

例えば、空白のままとしたら、””(ダブルコーテーション×2)で表現しますが、

マクロVBAのIf Then Else End Ifを使うのではなくて、
Elseを必要としません。

その点を注意して、
If Then End IfとIf Then Else End Ifを使い分ける必要があります。

また、このIf Then Else End Ifの利点ですが、
Excelの条件付き書式を使っても同じことが出来ますが、
ファイルサイズが大きくなる問題と、コピーした時に、
条件付き書式がセルに残ったまま貼り付いてしまう点など問題を
回避することが出来ますし、
If Then Else End Ifだけで、
ExcelのIF関数と条件付き書式を合わせて実行出来る点からも、
マクロVBAになれると作業効率自体でも改善を図ることができます。

例えば、H列に、判定という列を作って、
支店が東京だったら、本店という文字を表示して、文字の色は赤色
支店が東京以外だったら、支店という文字を表示して、文字の色は青色
というように設定してみましょう。

Sub 条件分岐アレンジ()
    Dim i As Long
    For i = 2 To 18
        If Cells(i, 3).Value = "東京" Then
         Cells(i, 8).Value = "本店"
         Cells(i, 8).Font.Color = vbRed
        Else
         Cells(i, 8).Value = "支店"
         Cells(i, 8).Font.Color = vbBlue
        End If
    Next
End Sub

では実行してみましょう。

H列に指示どおりの結果が算出されましたね。

このように、通常のExcelでも出来るのですが、
マクロVBAでも出来る・作れるというカードを持っていると、
いいのかもしれませんね。

10/30/2017

Officeソフトのスキルアップに追加しました。2017/10/29

Officeソフトのスキルアップに追加しました。

<目次サイト>

このBLOGの記事を、
目次サイトの【Officeソフトのスキルアップ】に追加しました。

【Access】


単価×数量の結果に【桁区切りのカンマ】を設定したいけどどうしたらいいの?
https://infoyandssblog.blogspot.jp/2017/02/access.html


意外と知られていない「スナップショット」でクエリでの更新を阻止
https://infoyandssblog.blogspot.jp/2017/01/access_31.html

【Excel】


データがある時には罫線を無い時には、罫線なしにってことできませんか?
https://infoyandssblog.blogspot.jp/2017/02/exceldata.html


アレレ!関数でセル参照に比較演算子を付けた条件で算出してくれない
https://infoyandssblog.blogspot.jp/2017/02/excelcell.html


アレレ?VLOOKUP関数の弱点!このような範囲では太刀打ちできない
https://infoyandssblog.blogspot.jp/2017/02/excelvlookup.html


AND条件で合致していないはずなのに、判定結果がおかしいのでどうしたらいい?
https://infoyandssblog.blogspot.jp/2017/01/exceland.html

【マクロVBA】


オブジェクト?プロパティ?メソッド?カタカナが苦手な人へ
https://infoyandssblog.blogspot.jp/2017/02/excelvba.html

Officeソフトのスキルアップ
https://sites.google.com/view/infoyandss/ホーム

10/29/2017

今週のFacebookページの投稿 2017/10/23-2017/10/29

今週のFacebookページの投稿 2017/10/23-2017/10/29

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

10月23日
PowerPointショートカット。Ctrl + Iで斜体の書式を適用する。

10月24日
PowerPointショートカット。
Ctrl + プラス (+)で下付き文字を適用する (間隔は自動調整)。

10月25日
PowerPointショートカット。
Ctrl + Shift + プラス(+)で上付き文字を適用する (間隔は自動調整)。

10月26日
PowerPointショートカット。
Ctrl + Spaceで下付きおよび上付きなどの手動で設定した文字書式を解除する。

10月27日
PowerPointショートカット。
Ctrl + Kでハイパーリンクを挿入する。

10月28日
PowerPointショートカット。
Ctrl + Eで段落を中央揃えにします。

10月29日
PowerPointショートカット。
Ctrl + Jで段落を両端揃えにする。

Excelテクニック and  MS-Office recommended by PC training
https://www.facebook.com/exceltechniqueandmsoffice/

Excelのショートカット一覧はこちらで書いております。
http://yandss.p2.weblife.me/shortcutkey.html

10/28/2017

Excel。途中省略してある縦棒グラフを作ってみよう。【bar graph】

Excel。途中省略してある縦棒グラフを作ってみよう。

<集合縦棒グラフ>

グラフで異なる単位やデータで差が全体的にある時などには、
縦棒グラフと折れ線グラフを使った、複合グラフで表現しますが、
一つのデータだけ突出しているときには、
途中を省略した棒グラフを作りますよね。

今回は、次のような途中省略型縦棒グラフを作っていきます。

今回の数値は、神奈川県統計センターさんのデータを使いまして、
神奈川県の市区町村の人口データを使って、縦棒グラフを作ってみました。

なお、神奈川県には、平成29年時点で、33市区町村ありますので、ごく一部です。

では、次の表を使って作成してきましょう。

A1:B10を範囲選択して、集合縦棒グラフを挿入しましょう。

グラフタイトルと凡例は削除して、グラフを横に大きくしてみます。

さすがは、横浜市ですね。370万人を越えて圧倒的ですね。

この横浜市の棒グラフを省略して全体的にわかりやすいグラフにしたいのですが、
このデータだけを第2軸にすることはできません。

そこで、表を次のように修正します。

別にした理由は、第2軸で表示するためです。

では、改めて、A1:C10を範囲選択して、集合縦棒グラフを挿入して、
先程と同じように、グラフタイトルと凡例を削除して、横に大きくしましょう。

このようなグラフになっています。横浜市の棒グラフだけを選択して、
第2軸にしていきますので、横浜市のデータのみをダブルクリックするか、
横浜市のデータのみをクリックして、
書式タブの選択対象の書式設定をクリックして、

データ系列のダイアログボックスを表示しましょう。

系列のオプションの「使用する軸」を第2軸にして閉じるボタンをクリックします。

グラフに第2軸が表示されましたね。

第1縦軸と第2縦軸をアレンジしてきます。ここがポイントです。

では、左側の第1縦軸をダブルクリックするか、
クリックして、書式タブの選択対象の書式設定をクリックしましょう。

軸の書式設定ダイアログボックスを表示します。

軸のオプションにある。
最小値を固定で0
最大値を固定で、2500000
目盛間隔を固定で500000
閉じるボタンをクリックします。

第1縦軸の目盛の数に合わせるように、第2縦軸の目盛間隔を調整しますので、
今度は、右側の第2縦軸の軸の書式設定ダイアログボックスを表示しましょう。

軸のオプションにある。
最小値を固定で2000000
最大値を固定で、4000000
目盛間隔を固定で400000
閉じるボタンをクリックします。

再び、第1縦軸の軸の書式設定ダイアログボックスを表示しましょう。
表示形式を使って、途中省略を演出します。

表示形式の表示形式コードに
[=2500000]"4,000,000";[=2000000]"3,600,000";#,##0

と入力して、追加ボタンをクリックして、閉じるボタンをクリックしましょう。

第1縦軸の表示が変更することが出来ましたね。

右側の第2縦軸はこれで、不要になりましたので、非表示にしますので、
第2縦軸の軸の書式設定ダイアログボックスを表示しましょう。

軸のオプションの、「目盛の種類」と
「補助目盛の種類」と「軸ラベル」を”なし”にして、
閉じるボタンをクリックしましょう。

あとは、区切りの線を引くだけなのですが…

本当は、波線を描きたいところですが、波線がないので、
ここは、直線で代用します。

グラフをアクティブにして、直線を描きましょう。
Shiftキーで直線を描けますので、あとは、太さや色を調整します。

ついでに、データラベルも表示しましょう。

これで完成ですね。

10/27/2017

Officeソフトのスキルアップに追加しました。

Officeソフトのスキルアップに追加しました。

<目次サイト>

このBLOGの記事を、目次サイトの【Officeソフトのスキルアップ】に追加しました。


条件付き書式で文字を含む場合行単位で塗りつぶしを設定するには?
https://infoyandssblog.blogspot.jp/2017/02/excelformat.html


並び替えを行方向ではなくて、列方向で実施したいけど出来るの?
https://infoyandssblog.blogspot.jp/2017/02/excelsort.html


退勤-出勤で勤務時間を算出。翌日の深夜退勤でも簡単に算出する方法はないの?
https://infoyandssblog.blogspot.jp/2017/02/exceltime.html

Officeソフトのスキルアップ
https://sites.google.com/view/infoyandss/ホーム

10/25/2017

Excel。MAXIF関数はないけれど、条件付き最大値を算出してみたい【AGGREGATE】

Excel。MAXIFS関数はないけれど、条件付き最大値を算出してみたい

<AGGREGATE関数>

Office365版のExcel2016に加わった関数に、
MAXIFS関数という条件付き最大値を算出できる関数が登場したそうですが、
それ以外のバージョンのExcelを使っていても、
条件付き最大値を算出できるので、その方法をご紹介していきます。

ただ、Excel2010以降ということで紹介していきます。

Excel2010にAGGREGATE関数というのが加わり、
その関数を使うことで条件付き最大値を算出することが出来ます。

AGGREGATE関数は、SUBTOTAL関数に似ている関数ですが、
計算種類が増えましたので、
条件付き最大値を算出することが出来るようになりました。

では、次の表があります。

A1からの表がありまして、
支店名が東京の売上金額の最高値をJ2に算出していきます。

J2をクリックして、
AGGREGATE関数ダイアログボックスを表示したいところですが、
計算種類を選択する都合、手入力をお勧めします。

=AGGREGATEと手入力していきます。

続いて、計算種類が聞かれますので、14のLARGEを選択します。

「,」カンマを入力すると、今度はオプションを選択します。

今回は、4の「すべてを検索対象とします」を選んて、
「,」カンマを入力すると、配列。つまり範囲選択をしていき、
最後の順位は、最高値なので、1を設定して、
最終的に、次の数式を完成させます。

=AGGREGATE(14,4,($C$2:$C$128=I2)*$G$2:$G$128,1)

これで完成しました。

数式の説明は後にして、本当に東京の最高売上金額があっているのかを、
表を並び替えして確認してみましょう。

A1をクリックして、データタブの並び替えをクリックします。

最優先されるキーは、支店で順序は昇順。
次に優先されるキーは、売上金額で順序は降順。

設定したら、OKボタンをクリックしましょう。

並び替えを行うと、東京の売上金額の最高値は、
算出した値と同じになっているのが確認できますね。

表をNoの昇順に戻しておきましょう。

では、数式を改めて確認してみましょう。

=AGGREGATE(14,4,($C$2:$C$128=I2)*$G$2:$G$128,1)

引数の($C$2:$C$128=I2)*$G$2:$G$128が何なのか?を説明していきます。

H2に
=C2="東京"
という数式を作成して、オートフィルで数式をコピーしてみましょう。

東京ならば、TRUE。そうでなければ、FALSEが算出されました。

Excelでは、TRUEが1でFALSEが0と設定されていることを使っていきます。

要するに次のようになっているわけです。

I2には、
=H2*G2

という計算式を作ることで、
TRUEだったら、売上金額を表示という結果を求めることが出来ました。

TRUE。
すなわち、これで東京のみの売上金額を【抽出】することが出来たわけです。

あとは、このI列の最高値を算出すれば、
東京都の売上金額の最高値を算出することが出来るわけです。

DMAX関数を使用する方法もありますが、
事前にセルに条件枠を準備する必要があるので、
AGGREGATE関数を使った条件付き最大値を算出する方法をご紹介しました。

10/24/2017

Excel関数一覧表にアイテムを追加しました。【function】

Excel関数一覧表にアイテムを追加しました。【function】

<Excel関数一覧>

「Excelテクニック and MS-Office recommended by PC training」の目次サイト
Officeソフトのスキルアップサイト」のExcel関数一覧表に次のアイテムを追加しました。

DEVSQ ディブスクウェア
数値の偏差平方和を算出

SKEW スキュー
データセットの歪度(わいど)を算出

SKEW.P スキュー・ピー
データセットの歪度(わいど)を算出(一般的な方式)

KURT カート
データセットの尖度(せんど)を算出

PERMUT パーミュテーション
順序を区別して抜き出すときの順列を算出

PERMUTATIONA パーミュテーション・エー
重複許可の順序を区分して抜き出すときの順列を算出

PROB プロブ(プロバビリティ)
範囲内の確率値を算出

今回は統計関係の関数を7個追加しました。

Officeソフトのスキルアップサイト
https://sites.google.com/view/infoyandss/ホーム

10/23/2017

今週のFacebookページの投稿 2017/10/16-2017/10/22

今週のFacebookページの投稿 2017/10/16-2017/10/22

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

10月16日
PowerPointショートカット。
Ctrl + Shift + Fで[フォント] ダイアログ ボックスを開いて、
フォントを変更する。

10月17日
PowerPointショートカット。
Ctrl + Shift + 右角かっこ (>)でフォントのサイズを大きくする。

10月18日
PowerPointショートカット。
Ctrl + Shift + 左角かっこ (<)でフォントのサイズを小さくする。

10月19日
PowerPointショートカット。
Ctrl + Tで[フォント] ダイアログ ボックスを開き、
文字の書式を変更する。

10月20日
PowerPointショートカット。
Shift + F3で文章の大文字または小文字を切り替える。

10月21日
PowerPointショートカット。
Ctrl + Bで太字の設定を適用する。

10月22日
PowerPointショートカット。Ctrl + Uで下線を付ける。

Excelテクニック and  MS-Office recommended by PC training
https://www.facebook.com/exceltechniqueandmsoffice/

Excelのショートカット一覧はこちらで書いております。
http://yandss.p2.weblife.me/shortcutkey.html

10/22/2017

Access。クエリで氏名から苗字と名前を抽出する。Excelと少しやり方が違うのです。【Left関数&Right関数】

Access。クエリで氏名から苗字と名前を抽出する。Excelと少しやり方が違うのです。

<クエリ Left関数&Right関数>

ExcelのLEFTとRIGHTとLENとFIND関数を使って、
氏名から苗字と名前を抽出する方法と言うのは、
お馴染みなのですが、これと同じ事をAccessのクエリでやってみましょう。

次のクエリがあります。まだ、氏名フィールドだけです。

データシートビューで確認してみましょう。

氏名フィールドのデータは、苗字と名前の間に、
半角スペースが挿入されています。

この点は、AccessでもExcelでも同じですね。

分割されているポイントがわからないと、判断出来ませんからね。

最初は、苗字フィールドを作っていきます。

Excelでは、半角スペースを見つけるのに、
FIND関数を使いますが、

Accessでは、InStr(インストリング)関数というのがありまして、
この関数を使っていきます。

InStr関数は、文字列の中の文字を検索して、文字位置を返す関数です。

苗字: Left([顧客名],InStr([顧客名]," ")-1)

このように新しく苗字フィールドを作成してみましょう。

まずは、データシートビューにして確認してみましょう。

このように、苗字を抽出することができましたね。

苗字: Left([顧客名],InStr([顧客名]," ")-1)
を説明しておきましょう。

顧客名フィールドの半角スペースがある文字位置をInStr関数で見つけます。
内藤 美里さんのば場合は、3文字目に半角スペースがあります。

このままLeft関数を使って左からの文字数を3文字分で抽出すると、
半角スペースも含めて抽出してしまうので、
-1して、左から2文字分を抽出するようにしています。
左からの文字を抽出するのが、Left関数でしたね。

続いて名前フィールドを作成していきます。
Excelでは、このような数式を作って抽出することが多いと思います。

=RIGHT(B2,LEN(B2)-FIND(“ “,B2,1))

半角スペースを見つけて、
その文字数を数えて、全体の文字数から半角スペースまでの
文字数を除算した数値を使って、
右側から除算した数値分を抽出するというやり方ですよね。

しかし、Accessでは、次のように名前フィールドを作ります。

名前: Mid([顧客名],InStr([顧客名]," ")+1)

このように新しく名前フィールドを作成してみましょう。

データシートビューでも確認してみましょう。

このように、氏名を抽出することができましたね。

名前: Mid([顧客名],InStr([顧客名]," ")+1)

Excelと全く異なっていますよね。

そもそも、右側からという考えがない。
Right関数がAccessに無いわけではありません。
使うと面倒だから使わないのです。

説明すると、
Mid関数は、Mid(文字列,開始位置,文字数)という引数で構成されています。

文字列があって、その中の開始位置を指示して、
そこから指示されている文字数を抽出する関数なのは、
Excelと同じなのですが、
AccessのMid関数は、引数の「文字数」を省略すると、
なんと!指定した位置以降のすべての文字列を抽出することが出来るのです。

つまり、
半角スペース以降が2文字でも、4文字でも、かまわないので、
右から何文字という情報を必要としないのです。

なので、Right関数を使わないで、
Mid+InStr関数で抽出することが出来ちゃうのです。

最後の+1は、半角スペースの文字位置を求めていますので、
そのままだと、半角スペースの位置以降ということになり、
半角スペースも抽出されてしまうので、+1して名前だけを抽出しています。

ExcelとAccessで似ているようで、少し違う方法の一例ですので、
Excelだけ知っていても、Accessではそうでないケースもありますので、
ExcelもAccessも両方とも使いこなせるようになるといいですね。

10/19/2017

Excel。改めてRANK.EQ関数とRANK.AVG関数の違いを確認してみよう。Excel2013版

Excel。改めてRANK.EQ関数とRANK.AVG関数の違いを確認してみよう。Excel2013版

<RANK.EQ&RANK.AVG関数>

Excel2007からRANK関数からRANK.EQ関数とRANK.AVG関数
の2種類の関数になりましたが、どのように違うのか?

EQはイコールで、AVGはアベレージ、
つまり平均ということはわかるけど…どのように使いわけるの?

とよくご質問がありますので、
改めて、RANK.EQ関数とRANK.AVG関数を確認してみましょう。

次の表を作りましょう。

A列には通し番号を入力設定しております。

B列には成績として、-15~-5までのデータを入力してあります。
イメージとしてはゴルフ大会の成績ですね。

B2:B11のように同じデータが続いているデータが
説明するときのポイントになります。

C列にはRANK.EQ関数を使ったB列のデータの順位を算出しております。
C2のRANK.EQ関数を使った数式を確認しておきましょう。

数値には、B2。

参照には、$B$2:$B$26。オートフィルで数式をコピーしますので、絶対参照を忘れずに設定しておきましょう。

順序には、1。今回は、数値が小さい方が、
いい順位になるケースですので、昇順での順位を算出するために1ですね。

C2の数式は、
=RANK.EQ(B2,$B$2:$B$26,1)
です。

D列にはRANK.AVG関数を使ったB列のデータの順位を算出しております。

D2の数式は、
=RANK.AVG(B2,$B$2:$B$26,1)
関数名が違うだけで、引数(カッコの中の情報)は同じですね。

では、RANK.EQ関数の結果ですが、
成績が-10の人が9件ありますが、
成績は全員2位なので、2が算出されています。

そして、次の-9の成績の人は、一気に11位と算出されていますね。

つまり、RANK.EQ関数は、
あくまで、純粋に【順位】で使う関数なのです。

仮に、同じデータが100件あるとしたら、
次の順位は一気に、跳ね上がってしまいます。

試しに、-10を19件まで同じにしてみましょう。

2位の次が20位になっていますよね。

ですが、あくまでも、【順位】なので、これでいいわけですね。

では、RANK.AVG関数は、1位の次が6位と算出されていますね。

これは、2位~10位までの平均が6なので
6位と算出されているわけなのですが、

どちらかというと、順位というよりも、データそのもの、
すなわち数値という側面で算出されています。

2件目から19件目の成績を-10にすると、10.5と算出されて、
中央値のような形なるのがわかります。

RANK.EQ関数は、【順位】を求める関数
RANK.AVG関数は、数値としてどのように【分布】しているのかを確認する関数
とすれば、使い方がわかりやすくなるのではないでしょうか?

折れ線グラフにすれば、よりわかりやすくなります。

関数がわかれたということは、
意味があるから、わかれたわけなので、
どちらのケースを使ったらいいのかを確認して、
RANK.EQ&RANK.AVG関数を使っていくといいですね。