1/31/2017

Access。意外と知られていない「スナップショット」でクエリでの更新を阻止

Access。意外と知られていない「スナップショット」でクエリでの更新を阻止

<Access クエリ スナップショット>


Accessで一番活躍するのは、【クエリ/Query】ですね。

条件によって、データを抽出しれくれますし、
そのクエリをExcelファイルにエキスポートすれば、
Excelを使った資料作りも容易になります。

さて、そのクエリなのですが、テーブルを元にして作成していきます。

そこで、あまり、Accessになれていない人。

特にExcelで慣れている人が陥りやすいのですが、
Accessはデータベースソフトなので、データは基本的に、
上書きされて常時保存されるわけですね。

ですので、テーブルを開いて、何気なく、悪気も無く、
データを触って改編しちゃうと、データが上書きされてしまって、
取り返しの付かないことが発生してしまうかもしれません。

ですので、
フォームでは、データを見せるだけで触らせないという設定をすることができます。

となると、このテーブルを元に作成するクエリですが、
当然、テーブルのデータを条件で抽出してくるわけですので、
クエリであっても、何気なく、悪気がなくったって、
データを改編しちゃう恐れがあるわけです。

そこで、フォームのようにクエリでも、データを閲覧だけ出来るようにする。

すなわち、触れない改編出来ないようにする方法。
それが、

【スナップショット】

なのです。

意外と知られていないようですので、
Accessに不慣れなスタッフさんがいる場合などに、
設定してあげると、
Accessに不慣れなスタッフさんを不幸にしないですみますので、
お勧めの設定の一つです。

設定も簡単なので、是非使ってみてください。

ということで、早速ご紹介していきましょう。

まず、該当するクエリをデザインビューで開きます。

そして、デザインタブのプロパティシートをクリックします。

この時、フィールド名などクリックしていると、
そのプロパティがプロパティシートで表示されてしまいますので、
どこも触らずに、プロパティシートをクリックするようにしましょう。

プロパティシートの作業ウィンドウが開きましたら、
選択の種類が、クエリプロパティになっていることを確認して、
レコードセットがダイナセットになっていますので、
▼をクリックして、その中にある、【スナップショット】をクリックしましょう。

たったコレだけです。

では、データシートビューで表示して、
データを修正してみようとするとステータスバーに、
「このレコードセットは更新出来ません。」

と表示されて、修正出来ないことが確認出来ます。

このように、クエリを表示することが多いけど、
閲覧だけの場合には、【スナップショット】を設定するといいかもしれませんね。

1/28/2017

Excel。AND条件で合致していないはずなのに、判定結果がおかしいのでどうしたらいい?

Excel。AND条件で合致していないはずなのに、判定結果がおかしいのでどうしたらいい?

<IF+AND+ISNUMBER関数>


Excel関数を勉強している過程で、
IF関数→IF+IF関数→IF+AND関数のような流れになるかと思いますが、

次のような判定表で判定する際に、
IF+AND関数を使うケースがよく説明されているのですが、
実務実践でのケースのようにすると、判定結果がおかしい

ということが起こるので、その回避方法をご紹介したいと思います。

まずは、下記の表があります。

D列の判定には、1回目・2回目ともに60点より大きい場合には、○。
そうでなければ、空白という判定結果を算出したいとします。

1回目・2回目ともにということですから、IF+AND関数を使うと算出しやすいですね。

それでは、D2をクリックして、IF関数ダイアログボックスを表示します。

IF+AND関数の場合、真の場合と偽の場合を先に作成しておくと便利でしたね。
真の場合には、”○”
偽の場合には、””

そして、論理式には、AND関数をネストしますので、
名前ボックスの▼をクリックしてAND関数を選択して、
AND関数ダイアログボックスを表示します。

論理式1には、B2>60
論理式2には、C2>60
と入力してOKボタンをクリックします。

そして、オートフィルを使って数式をコピーしましょう。

D2の数式は、

=IF(AND(B2>60,C2>60),"○","")


これで完成。

と通常ならそれで終わるのですが、
例えば、C5の秋葉さんの2回目。

これがTRYしていなかったとします。要するに結果がない。

TRYしていないので、「-」(ハイフン)を入力してみましょう。

アレレ?D5の判定結果に○が表示されましたね。

1回目2回目ともに60点より大きいときに○なのに、
一つだけなのに○が表示されてしまいましたね。

これが、今回どうしたらいい?ということなのです。

現場実践において、このように「-」(ハイフン)にすることはありますよね。

では、どうしたらいいのでしょうか?

入力規則を使ったところで、結局「-」(ハイフン)は使いたいわけですから、
入力できないとするわけにはいきません。

かといって、空白にすれば?と考えますが、これも同じですよね。空白にはしたくない。

そこで、数値かどうかを確認する関数。

ISNUMBER関数の登場となるわけです。

では、D2の数式を次のように修正していきましょう。

論理式を追加していきます。
論理式3には、ISNUMBER(B2)
論理式4には、ISNUMBER(C2)

このISNUMBER関数は、数値だったらTRUEを返してきます。
これで、数値かどうかを判定してくれます。

修正後のD2の数式は、

=IF(AND(B2>60,C2>60,ISNUMBER(B2),ISNUMBER(C2)),"○","")


では、オートフィルで数式をコピーしましょう。

これで、「-」(ハイフン)を入力しても、
希望通りの判定結果を表示してくれるようになりましたね。

1/25/2017

Excel。Graph。アンケートのグラフを一つに合体させてわかりやすくしたい

Excel。アンケートのグラフを一つに合体させてわかりやすくしたい

<左右対称横棒グラフ>


様々なグラフを紹介してきましたが、
今回は、次のようなアンケート結果を表示している横棒グラフが二つありまして、
この2つのグラフを合体させてわかりやすくしていきたいと思います。

最終的には、

左右対称横棒グラフというようなグラフを作成していくのが目標です。

このような左右対称横棒グラフを作っていく場合でも、
他のグラフ同様に、グラフを作成するためのデータとデータの範囲選択が大切になります。

では、次のようなデータを用意します。

A3:B6とD3:D6を範囲選択して、横棒グラフの集合横棒を挿入しましょう。

凡例は削除しておきます。

赤色の横棒グラフを第2軸で表示しますので、
赤色の横棒グラフをクリックして、
データ系列の書式設定ダイアログボックスを表示しましょう。

使用する軸を「第2軸」に変更して閉じるボタンをクリックします。

第2軸の縦軸を表示しますので、
軸の第2軸縦軸から「既定の軸を表示」をクリックします。

作業しやすいようにグラフの大きさを調整しておいて、
第2軸横軸をアレンジしていきます。

第2軸横軸を選択して、「軸の書式設定」ダイアログボックスを表示します。

軸のオプションにある、
最小値を固定 -100
最大値を固定 100
目盛間隔を固定 50
軸を反転するにチェックマーク
縦軸との交点を
軸の値 0
にします。

そのまま、表示形式に移動します。

新しく作成しますので、ユーザー設定にして、
0;;0;
と入力して、追加ボタンをクリックします。そして、閉じるボタンをクリックします。

グラフはここまで完成しております。

同じように今度は、横軸を設定しますので、
横軸の「軸の書式設定」ダイアログボックスを表示しましょう。

軸のオプションにある、
最小値を固定 -100
最大値を固定 100
目盛間隔を固定 50
縦軸との交点を
軸の値 0
にします。

そのまま、表示形式に移動します。

0;;0;
をユーザー設定から選択して、
追加ボタンをクリックします。そして、閉じるボタンをクリックします。

グラフはここまで完成しております。

目盛ラベルが両方とも、味がいい とか 商品名が良い とかになっていますので、
もう一方の目盛ラベルを設定していきますので、デザインタブのデータの選択をクリックして、
データソースの選択ダイアログボックスを表示しましょう。

系列1を選択して、横(項目)軸ラベルの編集ボタンをクリックします。

軸ラベルダイアログボックスが表示されますので、軸ラベルの範囲を、
=アンケートグラフ!$C$3:$C$6

として、OKボタンをクリックします。

データソースの選択ダイアログボックスにもどりますので、OKボタンをクリックします。

グラフ完成まであと一息ですね。

目盛ラベルが横棒グラフと合わさってしまっていますので、表示場所を変更していきます。

第2軸縦(項目)軸を選び、「軸の書式設定」ダイアログボックスを表示しましょう。

軸ラベルを 下端/左端にして、閉じるボタンをクリックします。


同様に、縦(項目)軸も、軸ラベルを 下端/左端に設定します。

あとは、グラフタイトルを設定しましょう。

これで完成しました。


このようにアレンジすると、
このような、左右対称横棒グラフも作ることが出来ますよ。

機会があれば、是非。

1/22/2017

Excel。NAME。苗字と名前で分割したいけど、名前の抽出がわかりにくいので、どうにかならない?

Excel。苗字と名前で分割したいけど、名前の抽出がわかりにくいので、どうにかならない?

<SUBSTITUTE関数・RIGHT+LEN+FIND関数>


次のような表を作りたいということなのですが…

氏名があって、苗字と名前に分けたいという、
文字列操作系の関数でお馴染みのパターンですね。

LEFT関数とRIGHT関数をはじめ、LEN関数やスペースを見つけて、
そこまでの文字数を数えるFIND関数など、
文字列操作としては非常にいい練習になりますが、
実務において、「関数をどう組み合わせましたっけ?」ということをよく耳にします。

特に、苗字の方は、
比較的数式を作ることは出来るようなのですが、
名前の方が苦手な方が多いようです。

そこで、実は、今回のように、後半を抽出するにあたり、
関数を複数使わなくても、抽出することが出来るので、その方法をご紹介していきます。

なお、苗字のC列はどのような数式が設定されているかというと、

C3の数式は、

=LEFT(B3,FIND(" ",B3)-1)

半角スペースを見つけて、
その前までが苗字に該当するので、-1(マイナス1)する方法で抽出しております。

では、RIGHT関数を使った、オーソドックスな手法で、
D列の名前を算出した場合の数式は、次の通り。

=RIGHT(B3,LEN(B3)-FIND(" ",B3))

これは、全体の文字数をLEN関数で算出して、
半角スペースの場所を減算した数字が、名前の文字数と合致するので、
このような、RIGHT関数とLEN関数とFIND関数を使って算出する必要があるわけです。

ところが、実は、もっとシンプルで簡単に抽出することが出来るので、
その方法を今からご紹介していきます。

ただし、条件があって、今回のように苗字が先に抽出してあるようにして、
抽出したいものが「あまりもの」というようにしておく必要があります。

で、登場する関数は、【SUBSTITUTE関数】だけ。

この関数は、文字を置換してくれる関数ですね。

とりあえず、数式を作ってから、ご説明したいと思います。
直接、数式を作ってもいいのですが、ダイアログボックスで作っていきます。

D3をクリックして、SUBSTITUTE関数ダイアログボックスを表示しましょう。

文字列は、B3。

検索文字列には、C3&” “。
これは、苗字と半角スペースという意味ですね。

置換文字列には、””。
空白ということですね。

置換対象は、そのままでOKです。

あとは、OKボタンをクリックしましょう。
そして、数式をオートフィルで数式をコピーしましょう。

完成したD3の数式は、

=SUBSTITUTE(B3,C3&" ","")

ですね。

けど、結果は、

きちんと、名前が抽出されていますよね。

では、数式の説明をしますが、
先程も、「あまりもの」と書きましたが、考え方はいたってシンプルで、
苗字はすでに抽出済みなので、
その苗字に半角スペースまで含めた文字列を空白に置換してしまえば、「あまりもの」。

残ったのは、名前。ということになりますよね。

ということで、右側の文字を抽出するには、
RIGHT関数というアイディアもいいのですが、

SUBSTITUTE関数という方法も知っていると、いいかもしれませんね。

1/19/2017

Excel。関数のネストの基本の基本、IF+IF関数を改めて確認。さらにIF+AND関数も

Excel。関数のネストの基本の基本、IF+IF関数を改めて確認。さらにIF+AND関数も

<IF+IF関数 IF+AND関数>


初心者さんの研修や、新人研修において、当然関数。
とりわけIF関数がひとつの分水嶺になるわけですが、
IF関数になれてきたあとに、いよいよ、ネストを紹介していくわけですが、
そのネストの基本の基本になるのは、IF+IF関数だと思われます。

そこで、改めて、IF+IF関数を確認して見ましょう。

次の表があります。

E列の判定には、B列の売場面積が、80以上ならA。50以上ならB。
それ以外はC。と算出するように数式を作っていきましょう。

さて、なれていない方は、まず作り始める前に、
やりたい事を図にしてから、作成するといいでしょう。

このように、流れ図を作ってあげれば、あとは数式を作るだけですね。

今回は関数ダイアログボックスを使って行きますが、手入力でもOKですよ。

では、E3をクリックして、IF関数ダイアログボックスを表示しましょう。

論理式には、B3>=80
以上ですので、>=ですね。

真の場合、つまりYESの場合なので、”A”と入力します。

そして、いよいよ、ここがわかりにくいところですが、ネストのIFを作りますので、
偽の場合のボックスをクリックして、名前ボックスの▼をクリックして、IF関数をクリックします。

ネストの作り方になれていない時は、
ダイアログボックスが新しく表示されたのがわからなくて、消えちゃったように、
見間違える方もいるようですが、数式バーをみれば、
まだ数式を作っている途中というのがわかります。

それでは、ネストのIF関数を作っていきます。
論理式は、B3>=50
真の場合には、”B”
偽の場合には、”C”

あとは、OKボタンをクリックして、オートフィルで数式をコピーしてみましょう。

なお、E3の数式は、

=IF(B3>=80,"A",IF(B3>=50,"B","C"))


このように、ネストの関数を挿入するところを間違えなければ次第に慣れてくると思います。

では、折角の機会なので、IF+AND関数も紹介しておきましょう。

AND関数は、双方の条件が満たされる場合ということになります。

例えば、F列に、AND判定という列を作り、C列の売上が400以上で、
アイテム数が200以上のものを○、それ以外のものを×と表示する数式を作っていきましょう。

まずは、F3にIF関数ダイアログボックスを表示しましょう。

このIF+AND関数や、
IF+OR関数を関数の引数ダイアログボックスで作成していく場合のコツなのですが、

まずは、真の場合と、偽の場合に判定結果を入力しておきます。
今回は、
真の場合には、”○”
偽の場合には、”×”

なぜ、先に入力しておくのかというと、慣れれば、問題はないのと、
手入力でも、問題は無いのですが、
論理式でAND関数ダイアログボックスにて作成後に、
IF関数ダイアログボックスに戻ってくる必要があるということを、
忘れてしまうと、エラーになってしまうからなのです。

論理式に、ネストでAND関数を挿入した後、数式を作った後に、
そのダイアログボックスでOKボタンをクリックしてしまうと、
まだ、IF関数のダイアログボックスの真の場合と、
偽の場合のボックスが未入力なので、エラーになってしまうのです。

では、改めて、論理式にAND関数ダイアログボックスを作っていきます。

論理式1には、C3>=400
論理式2には、D3>=200
IF関数で、すでに、真の場合・偽の場合に入力が終わっていますので、
OKボタンをクリックして、オートフィルを使って数式をコピーしましょう。

F3の数式は、

=IF(AND(C3>=400,D3>=200),"○","×")


関数のネストになれていない方は、機会があれば少しずつ慣れていくと、
Excel力がアップしますよ。

1/16/2017

Excel。Macro。テーブルにしないで、一行おきに塗りつぶししたい。

Excel。テーブルにしないで、一行おきに塗りつぶししたい。

<VBA 塗りつぶし>


わかりやすいように、一行おきに塗りつぶしをしたいけど、データが少なければ、
書式のコピーとか使って、塗りつぶしていくとか、
オートフィルの連続コピーの書式のみでコピーするとか、
条件付き書式にMOD+ROW関数を使ってもいいのですが、
とても、大きな表だったりすると、時間も掛かるし、面倒です。

そこで、マクロ。
VBAを使ってみると結構簡単に、一行おきに塗りつぶしを設定することが出来ます。

ということで、
今回は、一行おきに塗るつぶしをするマクロ。
VBAを紹介していきましょう。

次の表があります。

ボタン一発フルオートで作成するのもいいのですが、
煩雑になり、プログラムになれていない方には、一気に難しく感じられてしまうので、
セル番地を使いながら、作成していく事にしましょう。

それでは、開発タブのVisual Basicをクリックして、VBAのエディターを表示します。

なお、紹介は割愛しますが、マクロ。VBAを使う場合は、
マクロ有効ブックで保存しなおす必要がありますので、
マクロ有効ブックで保存しておきます。


また、標準モジュールが表示されていないようでしたら、挿入しておきます。

では、作成してきます。

Sub 一行おき塗りつぶし()
    Dim i As Long
    Dim 最終行 As Long

    最終行 = Range("a1").CurrentRegion.Rows.Count
   
    Range("a2:h" & 最終行).Interior.ColorIndex = xlNone
   
    For i = 2 To 最終行 Step 2
        Range("a" & i).Resize(1, 8).Interior.ThemeColor = xlThemeColorAccent6
        Range("a" & i).Resize(1, 8).Interior.TintAndShade = 0.4
    Next
End Sub

と入力して保存します。
説明は後ほどとしまして、マクロを実行してみましょう。

開発タブのマクロをクリックして、
マクロダイアログボックスが表示されます。

マクロを選択して実行ボタンをクリックしてみましょう。

このように、一行おきに塗りつぶしを設定することが出来ましたね。

では、簡単な解説。

最終行 = Range("a1").CurrentRegion.Rows.Count
これは、a1からの表の最終行の行番号を算出させています。

Range("a2:h" & 最終行).Interior.ColorIndex = xlNone
これは、念のため、データ範囲の塗りつぶしを解除させています。

Interiorは、セルの背景色などセル自身の色などに関する情報を管理しているオブジェクトです。

For i = 2 To 最終行 Step 2
Range("a" & i).Resize(1, 8).Interior.ThemeColor = xlThemeColorAccent6
Range("a" & i).Resize(1, 8).Interior.TintAndShade = 0.4
Next

For~Next は、その間のことを繰り返します。今回は、2~最終行までStep2。
つまり、1つおきに実施します。

そして、
Interior.ThemeColor = xlThemeColorAccent6
テーマの色合いは、アクセント6

Interior.TintAndShade = 0.4
テーマの明るさを0.4

という設定なのですが、カラーパレットをみると、意味がわかります。

テーマの色は、左側から、
xlThemeColorDark1
xlThemeColorLight1
xlThemeColorDark2
xlThemeColorLight2
xlThemeColorAccent1
xlThemeColorAccent2
xlThemeColorAccent3
xlThemeColorAccent4
xlThemeColorAccent5
xlThemeColorAccent6

テーマの明るさは、上から
TintAndShade = 0
TintAndShade = 0.8
TintAndShade = 0.6
TintAndShade = 0.4
TintAndShade = -0.25
TintAndShade = 0.5

というようになっていますので、
この組み合わせでカラーパレットの色を使うことが出来ます。

1/15/2017

今週のFacebookページの投稿 2017/01/09-2017/01/15

今週のFacebookページの投稿 2017/01/09-2017/01/15

<Facebookページ>

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

1月9日
Excel。置換をした後に続けて実行すると直前の設定が残っているので、
削除してから使いましょう。

1月10日
Excel。検索で条件に書式を設定できますね。

1月11日
Excel。置換で条件に書式を設定できますね。

1月12日
Excel。
検索の条件にある書式設定を削除するには書式検索のクリアをクリックしましょう。

1月13日
Excel。
置換の条件にある書式設定を削除するには書式検索のクリアをクリックしましょう。

1月14日
Excel。日付データをもとにしてオートフィルを行うと、
連続データの単位が日・週・月・年で選択できますね

1月15日
Excel。表示形式を解除するには、標準に設定する必要がありますね。

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

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

1/13/2017

Excel。AVERAGE。事務職のデータ分析その1。平均値は数種類ある?

Excel。事務職のデータ分析その1。平均値は数種類ある?

<AVERAGE関数とGEOMEAN関数とHARMEAN関数>


様々な分析手法はわからなくても、一般職や事務職でも、
会議資料の一つとして、データ分析用の資料作りをすることもあるようです。

そこで、事務職のデータ分析と題して、ご紹介していきたいと思っております。

そして、今回は、【平均値】について改めてご紹介していきます。

次のような表があります。

従業員の平均値を求めたいとしたら、お馴染みのAVERAGE関数で簡単に算出することには、
なんら問題はありませんよね。

C10の数式は、

=AVERAGE(C3:C9)


単なる平均でしょう。と思うかもしれませんが、データ分析の資料としては、基本の基本。

バカにしてはいけません。平均も大切なデータの一つです。

さて、このAVERAGE関数の平均ですが、実は、「相加平均」といいまして、
対象のグループに含まれる数値の合計を数値の個数で除算して求めますが、
データによっては、いわゆる「相加平均」では、
適切な平均を算出することが出来ない場合があります。

それは、次のケースです。

2012年から2017年までの出荷数と、
対前年の出荷数の比を求めた表なのですが、
この表から、対前年比の平均値を求めてみたいと思います。

H9の数式は、通常のAVERAGE関数を使ったもので、

=AVERAGE(H4:H8)


なんら問題はないように思えますが、検証してみましょう。

平均値なので、2012年の出荷数である1478に、
今求めた、103.36%を5回乗算すれば、2017年の出荷数になるはずです。

G9に次の数式を作成してみましょう。

=G3*H9^5

すると、次のように算出されました。

2017年の出荷数と異なった数値が算出されていますね。

実は比率における平均の計算には、「相加平均」ではなくて、
「相乗平均」で算出させる必要があるのです。

では、AVERAGE関数で求めようとしても
AVERAGE関数は「相加平均」なので求めることは出来ません。

そこで、【GEOMEAN関数】を使って算出させます。

GEOMEAN関数は、「相乗平均」を求めることが出来る関数なのです。

では、H10をクリックして、GEOMEAN関数ダイアログボックスを表示しましょう。

数値1に、範囲である、H4:H8を入力して、OKボタンをクリックしましょう。

H10の数式は、

=GEOMEAN(H4:H8)

では、先ほどと同じように、検証してみましょう。
G10に

=G3*H10^5

という数式を作成してみましょう。2017年の数値と合致したのが確認できましたね。

このように、AVERAGE関数で算出できないものもあります。

さらに、もう一つあります。それは、「調和平均」。

調和平均は、【HARMEAN関数】で算出することができます。

調和平均を使うケースは、「平均時速」を求めるケースです。


今回は、データ分析の基本の基本である。平均値を紹介しました。
そして、平均には、

「相和平均」AVERAGE関数

「相乗平均」GEOMEAN関数

「調和平均」HARMEAN関数

というのがあるんですね。

用途によって、使い分ける必要があります。