ハードウェアエンジニアさん向けシリーズ第一回「タイミングチャートをExcelで描く」

先日、このようなGIFをTwitterにあげたところ、かなりな反響がありまして、そうか、ハードウェア屋さんもExcel使えば楽になることたくさんあるなって思ったので(僕も数年HWをやっていたので)、とりあえずこの動作をする設定の方法を紹介したいなと思いました。

ぜひぜひ、この記事でExcelのポテンシャルに気付いていただき、興味を持っていただけますと幸いです。
タイミングチャート自体はハードウェア屋さんがよく使うと思うのですが、RPAのルールを考える上でも使うと思うので、興味のある方はぜひ最後までご覧ください。

Excelのキホン

もうExcelなんてわかってるよ、という方もいらっしゃると思うのですが、タイミングチャートの動作を理解するには、Excelの計算式の原理を知っておく必要がありますので、そこをまず説明します。
知ってる方は読み飛ばしてください、ということは私は言いません。
読んだら読んだで、何かの気づきがあるかもしれないので、ほんとさらっとでいいので読んでくださいね。
まず、Excelの計算式は、位置関係を計算しているということ。これ重要です。
この表では、1行目に1から8の数値が入力されています。
さらに、2行目のB列には=A1+B1という計算式が入っています。

このセルB2を横にコピーすれば、すべての計算がされます。
セルH2の計算式を確認してみると、セルB2では=A1+B1だったものが=G1+H1になっています。

このようにコピーした時に位置をずらしてくれるからExcelは計算が早いわけです。
というか、Excelの計算式は。あ、ここ大事ですよ。
「Excelの計算式は、位置関係で計算している」

セルB2に入力した時点で、「一つ上の一つ左のセル+一つ上のセル」という計算式を作ったので、その計算式をどこに何個コピーしても、位置関係は変わらないのです。
これ、Excelのスゴイ所その1です。こういうこと、情報が少なすぎます。拡散しましょう。
このように位置関係を記憶してるもんですから、どこまで行っても相対的に計算してくれるので、このことを「相対参照」と呼ぶのですね。

ハードウェアのタイミングチャート

ハードウェアのタイミングチャートで扱われる信号は全部で4種類、Low、High、Hi-Z、Don’t Careですね。
このブログはハードウェアに詳しくないExcelに興味のある方も数多く読んでいらっしゃるので、すこしこれも解説しておきます。
Lowは電圧が0の状態、いわゆる信号なしの状態です。デジタルで言う0の状態です。

Highは信号のある状態、デジタルで言う1の状態です。

Hi-Z、これ、信号の線が繋がっていない状態です。これ0と違うんですね。あ、ハードウェアエンジニアさんがニヤリとしたのが見えました。これ説明難しいんですよ。繋がっていて、電圧が0、信号なしの状態がLowです。繋がっていなければHighもLowもわからない状態なんです。現にデジタル回路で繋がってるべき信号線が繋がっていないと、どっちの動作かわからなくなるので、繋がっているべき信号線はきちんと常にLowかHighになるようにします。ハードウェア設計するとき、わりと基本の部分で覚えるものですが、ひっかかりやすいものでもあります。

Don’t Careは、HighかLow、どっちかが入ってますよという意味です。これは信号線は基本繋がっていて、状況によってHighだったりLowだったりする信号のことです。
Excelではこの4種類を描き分けていくことになりますね。
今回は、こんな感じに描き分けてみようかなと思います。ほんとはDon’t Careは×にしたかったのですが、今回の方法だと×にできないので。。。

Excelでのタイミングチャートの表現

Excelでタイミングチャート上の4種類で描いてみました。

何かが物足りないですよね。

本当は、縦の線が欲しいじゃないですか。

では全部に縦の線を描いてみましょう。
いい感じで描けます。

でもこのタイミングだと縦線が邪魔ですよね。

ということで、何を言いたいかというと、縦線は一つ前と比べて変化があったときのみ必要ということです。

つまりさっきの4種類のうち、LowとHighに関して、一つ前と比べて変化があったものとそうではないものが必要で、全部でLow(変化なし)、High(変化なし)、Low(変化あり)、High(変化なし)、Hi-Z、Don’t Careの6種類が必要なのです。
一つ前からの変化なので、前側(左側)に縦線が入るようにします。

Excelに入力した文字にあわせて罫線を描画する

今回は、Excelの罫線を使ってただタイミングチャートを描くのではなくて、Excelに入力された文字にあわせて罫線を変化させるということをします。
え?それってプログラムみたいなのしなきゃなんないんじゃないの?難しいんじゃないの?と思った方、あ、Excelクラスタさんがニヤリとしたのが見えましたよ、これは、「条件付き書式」という機能でわりと簡単にできます。
条件付き書式についてはもうちょっと後で丁寧に解説していきますね。
とりあえず、今回罫線が6パターンあるのですが、入力は「0(Low)」と「1(High)」と「Z(Hi-Z)」と「D(Don’t Care)」の4種類として、0と1に関しては、前に比べて変化したかを自動的に判断して、それぞれ変化あり、なしに区分けして6種類に分類していこうかと思います。
そのためには、Excelの関数を使います。
もしも〇〇だったら□□にしてそうではなかったら△△にする、というIF関数を使います。
今回は、もしも、入力値がZかDならそのまま入力値を使います。そうではなくて前との変化があればCの文字の後、入力された0か1とします。
もしもが2重になっていますね。
まず、入力値がZかDならば、という部分をExcel関数にしてみると、これは、または条件なので、OR関数を使います。
値が入力されるセルはB2とします。
=OR(B2=”Z”,B2=”D”)

この計算式で、「セルB2がZという文字列、またはセルB2がDという文字列」という日本語になります。文字列は””で囲みます。
この計算式をIF関数に入れると、
=IF(OR(B2=”Z”,B2=”D”),B2,”そうじゃない”)
これで、「もしも、セルB2がZという文字列、またはセルB2がDという文字列だったら、セルB2の値を出して、そうではなかったら「そうじゃない」という文字列を表示する」
という日本語になります。
この「”そうじゃない”」の部分に「前と変化があればCの文字の後、セルB2に入力された値を使う」というようにします。
この部分を考えると、セルB2に対する前の値は左のセルA2です。
A2=B2
これで「前と同じ」という意味になります。
これをIF関数に入れると、
=IF(A2=B2,””,”C”)
となります。これで「もしも前のセルと同じなら、何もない文字にして、そうではなければCという文字にする」
という日本語になります。
これにセルB2の値をくっつければいいので、文字をくっつけるため、「&」を使います。
=IF(A2=B2,””,”C”)&B2
この計算式を「”そうじゃない”」の部分に入れます。
=IF(OR(B2=”Z”,B2=”D”),B2,IF(A2=B2,””,”C”)&B2)

これでセルB2に入れる計算式は完成です。

これを横にコピーすれば相対的にセルを参照します。

Excel関数なのですが、丁寧に解説したつもりなのですが、実はちょっとはじめてExcel関数を扱った方には難しい内容かもしれません。
関数の中に関数がたくさん入っていく作り方ですし、何よりも何かを実現するためにはどんな関数をどのように組み合わせていくか考えなければなりません。
0と1だけが入力されて、変化点の処理もなければそれほど難しくはないのですが、今回は入力を4種類にしてうち、2つを自動判別して全6種類に分類するという流れにしました。
これを今すぐにできるようになるのは難しいと思います。
ネットで、こういうことをしたいと検索して、それに該当する関数を調べて組み合わせていくことになります。
この作業ははじめは時間がかかっても仕方ないことです。

条件付き書式

では、条件付き書式を設定していきましょう。
B2からl2のセル範囲を選択して、ホームタブの条件付き書式をクリックし、その中のルールの管理をクリックします。

新規ルールをクリックします。

指定の値を含むセルだけを書式設定を選択して、「セルの値」、「次の値に等しい」「=”C1″」を入力します。この状態でC1の時にはという条件が設定できます。そしたら書式をクリックします。

罫線タブをクリックして、今回はC1の場合の罫線なので、上と左の罫線をクリックします。そしてOKします。

あとは全部OKボタンを押していけば、セルにC1となっている場合には、左と上に罫線が引かれます。

同様にC0の場合は下と左、0の時は下のみ、1の時は上のみ、Dの場合は上下右左、Zの場合も上下右左なのですが併せて塗りつぶしも設定します。
その場合、罫線のOKをする前に、塗りつぶしタブで黒を設定してOKボタンをクリックします。

このように出来上がります。

ちょっと書き換えてみました。うまくいっているようです。

こんどはこのように下にパターンを入力してみました。

セルB3をセルB6からU6にコピーすれば、相対的な位置で計算式をコピーするし、条件付き書式の設定もそのままコピーされます。
とても簡単にタイミングチャートが描かれます。

え?この計算しているC1とかの値を消したい?そうですよね、邪魔ですよね。でも消すとタイミングチャートが消えてしまいます。
消さないで見えなくするということができます。
あ、またExcelクラスタさんニヤリとしましたね。
今、コピーした範囲、B6からU6のセル範囲を選択します。

ここで、Ctrlキーを押したまま1のキーを押してください。
すると、次のような画面が出てくるので、セルの表示形式、ユーザー定義を選んで「;;;」と入力してOKボタンをクリックします。

すると、文字が消えます。これは見えなくなっただけで、実はExcelには値として入っています。

これも割と直接値を見せたくない時のテクニックでよく使う手です。

まとめ

今回作成したセルB2は、コピーすればどんな大きな範囲でもタイミングチャートを一瞬で描いてくれます。
0、1、Z、Dで記載したタイミングの下の行に貼り付けるだけです。
また、他のファイルに作った場合でも、今回のファイルからセルB2をコピーすれば、どんどん描いてくれます。
Excelのスゴイ所は、ただ単純にコピーするのではなくて、状況に合わせた計算式やセルの設定をコピーします。
そのことによって、元の値が変われば値や見え方が変わるものとしてコピーできること、それがExcelのすごいところその2なのです。

今回の記事はかなり大きくなったので今日中にアップできるか微妙でしたが、今さっき、文字変換中にWordが止まってしまって危なく今日書いた部分が全部だめになっるところでしたが、なんとか無事に書きああげることができました。
今回の操作自体は慣れれば5分くらいできるようになるのですが、初めての機能ばかりだとなかなか難しいと感じるかもしれません。何日かに分けてでもいいので、ぜえひExcelで実際にやってみて、ご自身の目で本当にExcelでタイミングチャートが作れることを体験してください。
少しでもExcelがこんな風に仕事の一部として役立つことができるんだ、それもそれほど今から勉強しなくてもいい範囲なんだ、ということをご理解いただけますと幸いです。

コメント

タイトルとURLをコピーしました