物理量のSI単位まとめと単位の解析に便利なマクロの作成

資料請求番号:SH43 TS51

方程式の解析に必要な単位計算をマクロで手軽に

研究・開発活動を行っていると現象を元に自分が作成した方程式が正しいのか、論文に掲載されている方程式や無次元数に対する自分の理解が正しいのかを検証するため「単位の計算」を行うことが多くあります。

組立単位であるNやPaなどをSI単位「kg、m、s、K、mol、A、Cd」に分解し、この7つの単位の冪を足したり引いたりする作業を行い、両辺で単位が一致すればその方程式の信ぴょう性は上がり、単位がゼロ、すなわち無次元数であれば、それは無次元数であると言えます。

この作業の理論は非常に簡単でいわゆる「出来て当たり前」の作業なのですが、午後3時ごろや残業中午後7時ごろ、頭が疲労した状態ではこの作業が面倒に感じ、ミスも起こりやすいです。ミスをすればそのやり直しがさらに面倒に感じ・・・と効率が低下していきます。

今回、めんどくささの解消とミス防止のために、このような作業を簡単に行うためのマクロを作成しました。このマクロを使えば指定の項の次元が一発でわかり、その内訳も一目でわかるようなマクロを目指しました。

単位の解析は意外と集中力が要る?

ストーク
(マランゴニ数、マランゴニ対流を表す無次元数。このプロセスは攪拌がないからな・・・浮力対流しか起こらん思ていたら現象が全然合わんくて表面張力の温度依存性のデカい物質扱っているからこれや思うんやが・・・)

出典:今石 宣之 マランゴニ対流の基礎

シママ
ねぇねぇストーク!こないだね、ディープルが・・・・
ストーク
(σTが表面張力、dが代表長さ、dT/dxが温度勾配でμが粘度、κが熱拡散率でええんやろか・・・。単位を調べるか・・。)
シママ
ディープルがね~折り紙っていう趣味に目覚めたみたいで、見せてもらったんだけどすごく上手でさぁ~・・・
ストーク
・・・・・・。

ストーク
(ニュートン・・・F=ma、[kg・m・s-2]、Pa・・p = N/A mが2減って[kg・m-1・s-2]、粘度はsが1増えて[kg・m-1・s-1]、
あ~これ逆数か~・・・。)

シママ
ディープルが自分で趣味見つけて、楽しんでそれを笑顔で話すのがもうワタシ嬉しくてうれしくて・・・・
ストーク
(あわん・・・。なにがまちがっとる・・・??温度?熱拡散率?いや、これは拡散率やけん、一律でm2/sのはず・・・じゃあなんなん・・・??
そもそも表面張力ってN/mでよかったか?いや、そもそも表面張力に温度の次元はあるはずない、SIにするときにミスったか?それとも、そもそも記号の意味勘違いしとるか・・・。)

シママ
それでね~あとね~
ストーク
・・・・。
シママ
ディープルが今度の週末に〇×行きたいって。ディープルが自発的にどこどこに行きたいなんてさぁ~
ストーク
ああっ!!せからしかっ!!俺が何やってるかわからんか!!じゃまくるな!!
シママ
ご・・・ごめん・・・なさい。
ストーク
・・・・・。
ストーク
・・・すまねぇ。俺も言い過ぎた。
シママ
もう・・・。休日に家で仕事?頭おかしくなるわよ?
ストーク
月曜から富士に行くたい。それまでの間に今のモヤモヤをどうにかしたくてな・・・。
さっきふとマランゴニ対流いう現象思いついて、それについて考えとった。
シママ
なるほど・・・それにワタシが押しかけた形になってるのね・・・。ごめんね。
ストーク
もうええわ・・・。大丈夫。

単位のプロファイル化をしよう

シママ
単位の解析?単位っていっぱいあるよねぇ~。いっぱいあるけど、全部SIの7単位に集約されることくらいはワタシも知ってるよ。
ストーク
そうか。
シママ
アンタ、もしかして、一回一回組立単位バラして計算やってるの?
ストーク
せやけど・・・・
シママ
めんどくさいら?
ストーク
めんどくせぇけどやらんと。論文の記号の意味勘違いしたり、間違った方程式を元に仮説立てて実験して、その後間違ってました~なんて嫌やろ?
ストーク
特に実験中にミスに気付いたときなぁ~。残りの実験の時間と片付けの時間がしんどくてしんどくて・・・。もう情けなくて虚しくなるたい・・・。
シママ
(ストークにもそういうところあるんだ・・・。)
シママ
おっしゃる通りで。でも、色んな単位をF=maとかの基礎式に当てはめてバラしてくのめんどくさいからさぁ~、プロファイル化したら?
ストーク
プロファイル?集約化せぇってことか?
シママ
うん。アンタと同じ専門の友達がさぁ、単位をこんな風にまとめててね。

ストーク
ほう。
シママ
アンタ、使用頻度の低い単位は一回一回SI単位の組み合わせ調べてるら?特に電気が絡むやつ。
ストーク
まぁな・・・。頻度の高いヤツでも「あれ、これでよかったっけ?」って不安になって結局調べとるなぁ~。
シママ
この一回一回の時間をこのプロファイル化の時間に投資しようって考え方。
一回こんな風にプロファイル化してしまえばこれを見るだけで済むら?
ストーク
でもなぁ~。プロファイル化したデータがまちがっとったら切ないたい・・・。
シママ
それを言うなら、調べたSI単位を書き写し間違えるのも、せっかく調べたのに切ない感じじゃない?
ストーク
せやな。
シママ
人間はミスするんだから、「ミスするきっかけの回数」が少なければ少ないほどいいら?
ストーク
全くその通りやなぁ~。その考えには大いに賛成たい。
シママ
ワタシ、これのデータを友達から貰って会社のパソコンに入っているのよ。
「ストークに横流ししてもいい?」って言ったら、了承してくれたから、今度あげるね。
ストーク
おおっ!サンキュー!

項が持つ単位をワンクリックで調べられるマクロを作ろう

マクロの使い方

シママ
それからね、ワタシ、友達から貰ったExcelシート見て思ったんだけど、「単位を7つ成分をもつマトリックス」としてみて、単位解析を行列計算に落とし込んだらすごくラクに単位の解析ができるんじゃないかな~って思って。
ストーク
お~情報科卒らしい考え方やな。
ストーク
・・・・・。
ストーク
・・・・・マジでそれええな。
シママ
でしょ~(笑)だから、ワタシ、こんなの作ってみたのよ。

ストーク
お~。なんかこう、別の表に使いたい物理量だけを指定して、それをマトリクスごと足し引き出来たらええな。
ストーク
どうすればええかな~。VLOOKUP関数とか使えばええんかな?
シママ
やっぱり、ストークそれ言うと思ったよ~!
だからマクロ作っちゃった。VLOOKUPを使ったやり方はマクロ組んでから思いついた(笑)
ストーク
組んだんかい。思い付きで?そういうのサッサってできるってええなぁ~・・・。
これ使ってレイノルズ数が無次元数であることが確認できるん?こういう式でdが「長さ」uが「流速」ρが「密度」μが「粘度」やねんけど。

シママ
もちろん!O列に物理量入れて、P列にその冪を入れるのよ。

シママ
それで青いボタン押せばレイノルズ数の次元が計算されるよ。

ストーク
おおっ!スゲェ!!プラントル数は?ヌッセルト数は??
   

シママ
自分でやってみたら?ResetボタンでQ列から右、AllResetボタンでO列から右が消えるから、新しく物理量入れて。
ストーク
ああ。

プラントル数

ヌセルト数

ストーク
これ、ええなぁ~。
シママ
喜んでもらえてうれしいよ。

マクロの解説

ストーク
それで、このマクロはどうなっとるん?
シママ
そんなに大したマクロじゃないんだけど・・・。

/* unit analysis program */

Sub unit()

/* 指定の物理量の単位を抽出・表示 */
Unit_count = Cells(1, 16) – 1

For i = 3 To 3 + Unit_count
unit_num = Range(Cells(3, 1), Cells(23, 1)).Find(What:=Cells(i, 15).Value).Row

pow = Cells(i, 16)

For j = 17 To 23
Cells(i, j) = pow * Cells(unit_num, j – 10)
Next j
Next i

/* 物理量のSI単位の冪を計算して項の単位を調査 */
Cells(5 + Unit_count, 15) = “計”

For j = 17 To 23
Cells(5 + Unit_count, j) = WorksheetFunction.Sum(Range(Cells(3, j), Cells(3 + Unit_count, j)))
Next j

End Sub

/* unit analysis program End */

シママ
このマクロは日本語で入力した物理量を表からピックアップしてくるマクロと、
ピックアップした物理量のSI単位を合計して項のSI単位を表示させるマクロに大きくわかれるのよ。


シママ
まず、Unit_countっていう変数に単位を計算したい項を形成する物理量の数が入るようになっていて、Cells(1,16)、つまりP1セルにはこの関数がセットされている。

=COUNTA(P3:P11)

ストーク
COUNTA関数、空白でないセルの数を返す関数たいね。
シママ
そう。だから物理量とその冪を入れるだけここの数字が増えるようになっている。
ストーク
例えばレイノルズ数は「長さ」「密度」「流速」「粘度」の4つからできとるから、ここの数字は「4」になるわけやな。
シママ
うん。それで、Unit_countという変数には「4-1」で「3」が格納される。
そしたら次のFor文の範囲が3~6に指定される。3,4,5,6行を使いますってこと。実際に3,4,5,6行が使われているでしょ?

ストーク
確かに。これなら項を構成する物理量の数が変化してもフレキシブルに対応できるな。
シママ
それで次の文がポイントなんだけど・・・・

unit_num = Range(Cells(3, 1), Cells(23, 1)).Find(What:=Cells(i, 15).Value).Row

シママ
これは、3行1列~23行1列、つまりA3~A23に渡って検索し、i行15列と同じ文字列を見つけたら、その行番号を
unit_numという変数に格納しますっていう文。
ストーク
・・・・・?
シママ
えっと~・・。For文あるら?i = 3~6としたら、1回目の循環ではCells(3,15)と同じ文字列を探すことになる。Cells(3,15)、つまりO3セルには「長さ」って書いてあるでしょ?そしたら「長さ」っていう項目をA3~A23に渡って探すのよ。
ストーク
それはA4セルにあるな・・・。
シママ
でしょう?そしたら「4」っていう数字を「unit_num」という変数に格納するのよ。
「粘度」だったら「11」が格納される。
ストーク
あ~。それでその数字を
For j = 17 To 23
Cells(i, j) = pow * Cells(unit_num, j – 10)
Next j
に使うのか~。
17~23ってのはQ~Wやな。もし、「長さ」やったら「unit_num」は「4」やから
Cells(3, 17) = pow * Cells(4, 7)になる。Cells(4,7)、つまりG4セルには「長さ」っていう物理量の「kg」の単位が存在している。それをCells(3, 17)、つまりQ3に持ってくるんやな。

列がアルファベット表記だとわかりづらいので、列を数字にしてしまうことも可能です。
※アルファベット⇔数字切り換えの方法について

シママ
そういうこと!
これをj = 17~23に渡って繰り返せば「長さ」のSI単位が丸ごとコピーできるでしょ?
Cells(3, 18) = pow * Cells(4, 8)で「m」の単位が
Cells(3, 19) = pow * Cells(4, 9)で「s」の単位が・・・
って続く。

ストーク
それで「粘度」だったらi=6になって「unit_num」の数字が「11」になるけん、
Cells(6, 17) = pow * Cells(11, 7)で「kg」の単位が
Cells(6, 18) = pow * Cells(11, 8)で「m」の単位が・・・
ってコピーしてくることができるんやな~。

シママ
そうそう!そんな感じ!文字列を検索してその行番号を取得するマクロはこちらのページで詳しく解説しているから見てみてね!
※unit_num = Range(Cells(3, 1), Cells(23, 1)).Find(What:=Cells(i, 15).Value).Rowに関する詳しい説明

シママ
それで、それぞれの物理量のSI単位系をピックアップして冪の数を掛ける。そうしてできた各物理量のマトリクスの総和を取ればその項がもつ単位がわかるでしょう?
ストーク
わかる。
シママ
それが
For j = 17 To 23
Cells(5 + Unit_count, j) = WorksheetFunction.Sum(Range(Cells(3, j), Cells(3 + Unit_count, j)))
Next j
の部分。レイノルズ数の単位を出したいならUnit_countの数は「4-1」で「3」になってるでしょう?そしてj = 17だったら
Cells(8, 17) = WorksheetFunction.Sum(Range(Cells(3, 17), Cells(6, 17)))
になるよね。
Unit_countの説明

ストーク
ああ。
シママ
つまりやってることは、下の動画のようにQ8セルを選択して
=SUM(Q3:Q6)
という関数書いて、それをQ列からW列に渡ってドラックしているのと同じ。
ストーク
この「WorksheetFunction.Sum」ってのがSUM関数使うっていう文なんか。
シママ
そう。これを使うことで普段Excelで使っている関数がVBAでも使えるようになる。
それでFor文のj=17~23でQ列からW列に渡ってドラックする操作を表現しているの。
ストーク
なるほどなぁ~。これで晴れて項がもつ次元をワンクリックで調べるマクロの完成ってわけか~。

マクロを問題解決に役立てよう

シママ
さっき、なんかやってたでしょ?難しそうな単位解析・・・。
ストーク
ああ、これな。


出典:今石 宣之 マランゴニ対流の基礎

シママ
これをさっきのマクロに通してみたら?
ストーク
やってみる。

ストーク
あ~さっきと同じ結果や。「温度」だけ残る・・・。
ストーク
ということはそもそも、俺がこの無次元数に使われている記号の解釈を間違えとる・・・か・・・。

・・・・・・

ストーク
あ。
シママ
何かわかった?
ストーク
このσTいうやつ、「表面張力」やなくて「表面張力の温度勾配」や。

出典:今石 宣之 マランゴニ対流の基礎

ストーク
あ~そしたら辻褄あうやん・・・。

シママ
よかったじゃない!一つわからなかったことがわかって~
ストーク
・・・・・・。
シママ
どうしたの?
ストーク
恥ずかしか・・・。
シママ
なんで?
ストーク
やって、自分の考えが正しいってσTが表面張力でN/mの次元を持ってるって信じ込んで悩んで人に当たり散らして、結局自分の見落としが原因で・・・しかも、マランゴニ対流言うものは表面張力の勾配が引き起こす現象であってその現象の本質を理解せんで・・・。
シママ
あ、あれはワタシが悪かったのよ・・・。だから落ち込まないで・・・ね。
ストーク
・・・・・・。
シママ
(あ~ストークってこういうときに落ち込むんだな~。)
シママ
ところで、今やってることって自発的にやってるの?
ストーク
どういうことや?
シママ
いや、例えば上司に「オマエはこの土日に、この問題について考えとけ」とか言われているワケじゃないんだら?ってこと。
ストーク
そんなパワハラを絵に描いたような上司、いるかよ。
シママ
いやぁ~わかんないよ~。この世の中広いんだから。もしかしたらミナガミにもいるかもしれない、っていうか、伊予製造所(愛媛県四国中央市)にそういう上司がいるっていうウワサというか、被害報告というか・・・そういうのは聞いてる。
ストーク
(あ・・・。俺、シママに心配かけてたのかもな・・・。)
マジかよ~。関わりたないな~・・・。むしろ俺ら、最初がそういう上司じゃなくて良かったなぁ~。
シママ
そうね~。

まとめ

今回は注目する項がどのような次元をもっているのか、資料や論文に提示されている無次元数は本当に無次元なのか、などを調べる作業を効率よく進めるためのマクロを作成しました。

マクロを作成しなくても、様々な単位のプロファイル化はしておくべきだと思いました。何回も調べて確認して・・・という手間を1回で済ますことができますから、ラクになりますし、なによりミスが減ると思います。

そして休日に仕事や研究について考えるのは、頭の疲労、ひいては、うつ病を誘発することがあるので極力避けましょう。

おまけ

ナビエ・ストークス式の健全性解析

ナビエ・ストークス式は流体力学の基礎式で以下の記事で解説しています。


この5つの項の全てが同じ単位を持っていれば「方程式として健全」という表現をします。単位の違うもの同士を足したりイコールで結びつけることはできません。同じ1キロでも1kgと1kmを足し合わせることができないのと同じです。この場合「不健全な方程式」といい、検討しなおしが必要になります。

この方程式の左から1項ずつ1~5の名前を付けてそれぞれの項の単位を調べます。
~1項目~
密度×流速の時間微分です。時間微分を1回行えば時間をマイナス1乗したことになります。

kg・m-2・s-2はkg・m・s-2・m-3と解釈し、単位体積当たりの力N・m-3です。元々ナビエ・ストークス式は運動方程式F = maから変形させていますから、力の次元が入っているのは当然と言えます。2項目以降ですべてkg・m-2・s-2と出ればこの方程式は健全です。

~2項目~

ナブラ(∇)は

ですから、長さのマイナス1乗に相当します。

~3項目~

~4項目~

ラプラシアンは長さの2階微分です。

~5項目~

すべてkg・m-2・s-2と出たのでこの方程式は健全と言えます。この作業を行えば「この方程式を構成する物理量を理解した」と言いやすくなります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です