教室でMOS Excel 2016 スペシャリストの受験のため、仕上げをしている受講生の方がいらっしゃいます。
ここ一週間ほど、関数のことで、壁にぶちあたって苦労されていたのですが(^-^;
昨日のレッスンでは、ちゃんと「〇」がとれるようになりました!!
ご本人も、インストラクターも、よかったよかった、と胸をなでおろしているところです。
→そして本番試験も、関数の部分は満点!! もちろん合格されました!!
そのスランプを乗り越えた方から、何度も出てきた言葉がこちら。
「あのたまご焼きの話がよかった」
そう、エクセルの関数を使えるようになるために、
なぜか「たまご焼き」の話がよかった、とおっしゃるんです。
というわけで、今日はこの、「たまご焼きの話」をしていきたいと思います。
エクセルだけでなく、まあ「プログラミング全般」の入り口として、たぶん役立つのではないかなぁ? と思います。
「ちょっとさ、たまご焼き、焼いてくれない?」
あなたなら、たぶん焼けますよね?
例えば、誰かがあなたにこう言ったとします。
「ちょっとさ、たまご焼き、焼いてくれない?」
いかがですか?
きっとあなたは、フライパンを手にキッチンに向かい、たまご焼きを作ることができると思います。
エクセルは、それじゃたまご焼き、焼けないんです!
ところが、エクセルにはそんなことできません。
「ちょっとさ、エクセルちゃん、たまご焼き、焼いてくれない?」
そうだよねぇ……君にはちょっと難しかったかな……
そう、エクセルは有能で高速で、すごいことができるように言われてますけど、
あなたには簡単にできることが、まったくできないのです。
じゃあどうやったら、エクセルにたまご焼きが焼けるか。
エクセルにたまご焼きを焼かせるには、こんなふうに指示するんです。
=フライパン(置く,コンロ(右側))
=コンロ(右側,火をつける)
=たまご(冷蔵庫,上の段,出す,1個)
=たまご(割る,フライパンの中)
=コンロ(右側,中火,30秒)
=コンロ(右側,弱火,止めるまで)
こんなふうに、「たまごの個数」から「コンロのどっち側」まで、手取り足取り指示しないと、エクセルって動かないんです。
実際のエクセルではこんな感じです
実際はこんな感じです。例えばこの問題。
エクセルなら、合計点のところをまとめてバッと判断して、合格・不合格を一気に表示できるんじゃない?
なんかそんな、まとめて一気にできる関数なかったっけ??
ほら、「たまご焼き、焼いといて!」みたいな!
といって、「範囲」が指定できるCOUNTIFとか、AVERAGEIFとか、そういった関数ばかり想像していると、この問題はいつまでたっても正解になりません。
実際にエクセルにやらせる作業は、もっともっと細かくて、
F4セルの「327」→280以上→G4セルは「合格」
F5セルの「265」→280未満→G5セルは「不合格」
・・・以下、いちばん下までくり返し
ということで、一個一個の合計点を、ちまちまちまちまちま……IF関数で判断していかなくちゃならないんです。
ということで、正解はこちらです。
「パッとたまご焼きを焼く関数」なんて、ないんです。
このように、
「たまご焼き焼いといて!」ってエクセルに伝えようとして、
「たまご焼きを焼く関数を必死で探す」
という「落とし穴」にはまってしまう人が、とても多いのです。
これは、パソコンスクールやテキストの「教え方」にも問題があります。
関数を使えるようになるために、「この関数はこういう関数だよ」ということばかり考えさせるレッスンが、とても多いのです。
すると、学んだ方は、
「エクセルには、作業ごとに適した関数が用意されていて、それを選べばいい」という大きな誤解をしてしまうことがあります。
エクセルにたまご焼きを作らせる、「考え方」を身に付けよう
このような誤解から抜け出す学習法を、別記事で詳しく解説しています。
【MOS対策のヒント】IF関数とか、COUNTIF関数とか、もう何がなんだか分からなくなっちゃった時の学習法
なんだか、勉強してもしても関数が使えるようにならない、という気がしている方は、ぜひご一読ください!
コメント
ご教授ありがとうございます。
マクロの解説までありがとうございました。
変更後のコードでは、シートがいくつ増えてもマクロは変更しないで対応できるのは
ありがたいです。
Excel2021以降では、FILTER関数があるのですね、
残念ながら使用しているのは2019版です。
お忙しい中、時間を取って頂いて感謝いたします。
本当にありがとうございました。
こんばんわ、
いつもお世話になってます。
エクセルの
1番目のシートに一覧表を作成し、
2番目、3番目、、、のシートにコピーして2番目からの一覧表は
フィルターをかけて表示を変える場合、
例えば
1番目の一覧表には売上商品の列がり、
2番目の表から売上商品の種類でフィルターをかけていく場合、
(2番目の表はりんごで、3番目の表はみかんでフィルター、4番目はメロンで言った具合で整理している場合)
もとの原本を修正して各シートに反映させたい場合に
全てのシートのフィルターを解除して
全てのシートを選択して1番目のシートを修正して全部のシートに修正を反映させてから
又、2番目のシートから順番にフィルターをかえる作業がかなり手間なのですが、
同じ列の場合の
すべてのシートのフィルターができて、
又、フィルターを解除する方法はマクロ以外ではあるのでしょうか?
今はマクロの記録をとり、(フィルターをかける時と解除する時)
そのマクロでしてますが、
シートがふえるとうまくいかないことがあります。
何かいい方法があればご教授お願いします。
お忙しい中、ご迷惑おかけします。
宜しくお願い致します。
こんにちは、コメントありがとうございます。
■複数シートのフィルターをひとつの操作で操作するには、マクロを使うしかありません。
■ただシートを増やしただけで、解除がうまくいかない場合は、記録したマクロに問題があると思います。
同じ操作を規則的にすべてのシートに行う場合、記録したコードも全シートについて規則的な同じコードになると思いますが、操作にわずかに違いがあるとコードが乱れます。
それを見つけて、手動で修正していただくとよいと思います。
■たとえフィルターがかかっていても、セルは消えておらず非表示になっているだけです。
このため、全シートを「グループ化」して一気に編集すると、フィルターがかかったままで、データが修正できます。
グループ化は、最初のシート見出しをクリック→Shiftキーを押しながら最後のシート見出しをクリック で行うことができます。
■記録をするとこういうマクロになると思いますが
Sub フィルターかける()
Sheets(“りんご”).Select
ActiveSheet.Range(“$A$1:$B$4″).AutoFilter Field:=1, Criteria1:=”りんご”
Sheets(“みかん”).Select
ActiveSheet.Range(“$A$1:$B$4″).AutoFilter Field:=1, Criteria1:=”みかん”
Sheets(“メロン”).Select
ActiveSheet.Range(“$A$1:$B$4″).AutoFilter Field:=1, Criteria1:=”メロン”
Sheets(“データ”).Select
End Sub
Sub フィルター解除()
Sheets(“りんご”).Select
ActiveSheet.ShowAllData
Sheets(“みかん”).Select
Range(“A1”).Select
ActiveSheet.ShowAllData
Sheets(“メロン”).Select
Range(“A1”).Select
ActiveSheet.ShowAllData
Sheets(“データ”).Select
End Sub
例えば、いまの例では、シート名がそのまま絞り込むべき商品名になっています。こういう作り方をしておくと、コードは次のように短縮できます。
Sub フィルターかける2()
Dim sheet As Worksheet
For Each sheet In Worksheets
If Not (sheet Is Sheets(1)) Then
sheet.Range(“A1”).CurrentRegion.AutoFilter 1, sheet.Name
End If
Next
Sheets(“データ”).Select
End Sub
Sub フィルター解除2()
Dim sheet As Worksheet
For Each sheet In Worksheets
If Not (sheet Is Sheets(1)) Then
sheet.ShowAllData
End If
Next
Sheets(“データ”).Select
End Sub
変更後のコードでは、シートがいくつ増えてもマクロは変更しないで対応できます。
■Excel2021以降では、FILTER関数を使うことで、マクロを使わずに対応できます。
データは1シート目だけに置いておき、絞込みを行うシートには、FILTER関数だけを配置します。
すると、修正じたいが1シート目のみで完結でき、他のシートは自動的に変更後のデータで絞込みが行われます。