ラベル 科学 の投稿を表示しています。 すべての投稿を表示
ラベル 科学 の投稿を表示しています。 すべての投稿を表示

2017年7月8日土曜日

C#でEXCELのVBAで利用できるdllを作成する方法

 Excelでマクロは便利ですが、VBAに慣れていないのでプログラムを作成するのが面倒です。そこで、COMの仕組みを利用してC#で作成したdllをVBAから利用する方法をご紹介します。


ステップ1 プログラムの準備

C#のクラスライブラリを利用してます。名前は「ClassLibrary2」としました。




ここでは、文字列型の名前を引数として与えると、goodmorning関数。「こんにちは○○さん。」という文字を返す関数を作りました。goodmorning関数を呼び出せるようにpublic修飾子を指定しています。クラス名はClass1としました。


 ステップ2 プログラムをVBAで呼び出せるよう修正

ここからが、VBAで呼び出せるようにするための部分です。
usingにSystem.Runtime.InterpServices;を追加し、Class1にClassIdというメンバーを作り、その文字列をGuid(Globally Unique IDentifier)として設定します。 ClassIdに与える文字列は次の
手順で生成します。



メニュー「ツール->GUIDの作成」を選択してください。GUIDの作成のウィンドウが開きます。
レジストリ形式を指定して、新規GUIDをクリックし、コピーをクリックすると、生成されたGUIDがコピーされるので、先ほどのClassIdのところに貼り付けてください。この時、余分な「{」と「}」は削除してください。



ステップ3 プログラムがVBAで呼ばれるようにコンパイル環境を設定しdllを作成

 メニュー「プロジェクト->プロパティ」を開き、「アプリケーション」タブを開きます。
「アセンブリ情報」ボタンがあるので、クリックします。




開いたダイアログの下の方に「アセンブリをCOM参照可能にする」にチェックを入れて「OK」を押します。


 これで、環境が整ったので、ビルドすると、COM参照可能なdllが作成されます。


ステップ4  dllをレジストリに登録する

 作成されたdllをわかり易い場所に置きましょう。ここでは、作成したClassLibrary2.dllをC:\mylibに置きました。

管理者権限でコマンドプロンプトを開いてください。.Netに付属しているRegAsm.exeを使ってレジストに登録します。  

まず、dllがあるフォルダーに移動します。

cd C:\mydll\

を入力してenterを押してください。
次に、RegAsm.exeを実行します。オプションとして/tlb、/codeを付けます。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /tlb /code ./ClassLibrary2.dll 

を入力してenterを押してください。v4.0.30319の部分はお使いの環境によって違うので、お使いの環境に合わせて変更してください。
このとき、署名がないないので、厳密な名前をつけて再登録してください。 といった注意が表示されますが、注意だけで、ちゃんと正常に登録されました書いてあります。

これで、レジストリへの登録が完了しました。



ステップ4  dllを呼び出してみる


では、実際にExcelのマクロからdllを呼びだしてみます。メニュー「ツール->マクロ->Visual Basic Editor」を選択して、Visual Basic Editorを起動してください。
Visual Basic Editorの「ツール->参照設定」を選択すると、参照設定ダイアログが開きます。

この中から作成したdllの名前を探してチェックを付けてOKしてください。今の場合は、ClassLibrary2になります。



プログラムですが、abcという関数を作成します(正確にはSubプロシージャですが)。まず利用するクラスのインスタンスを作成します。今の場合はClassLibrary2.dllのClass1を利用するために、xxxという変数にインスタンスを作成しました。
後は、Class1のメゾットであるgoodmorningに文字列hogeを代入して呼び出し、その文字列型の返り値をyyyで受け取り、A1セルに代入しています。




 ボタン1に作成したabc関数を登録して実行すると、





 このようにちゃんと「こんにちはhogeさん。」と表示されました。



今回はあまり役に立たないプログラムですが、vbaでは面倒なプログラムもC#では簡単にプログラムできたりするので、いろいろ作ってみてはいかがでしょうか?




2017年6月25日日曜日

リチウムの産地

 スマートフォンをはじめ、現代ではなくてはならないリチウム電池。
 その原料となるリチウムがどのように生産されているか知っていますか?

 世界のリチウムの30%近くを生産しているSQM社の生産方法を紹介します。

 SQM社はチリの企業で、アタカマ塩湖の下にある地下水を使ってリチウムを生産しているそうです。アタカマ塩湖の地下水にはリチウムが含まれているけど、濃度は0.2%と低い。
そこで、地下水を汲み上げて人工の池を作って天日干させることで、水分と飛ばす。
この過程でNaCl, KCl, Mg Cl2が析出し、リチウム濃度は高くなる。
リチウムの濃度が高くなってくると水が黄色くなって、オイルのような手触りになる。
リチウム濃度が6%となる、今度は、工場で化学的な処理によって不純物を取り除く。

具体的には、


添加物質除去される不純物
イソオクタール/ケロシンホウ素
水酸化カルシウムMg
炭酸ナトリウムNa
(https://www.gsj.jp/data/chishitsunews/2010_06_09.pdf)

のように取り除いているようです。後は、粉末状にします。

ちなみに、リチウムの生産国トップ3は、


1オーストラリア38%
2チリ33%
3中国10%
(http://mric.jogmec.go.jp/public/kogyojoho/2015-09/vol45_No3_03.pdf)

です。オーストラリアでは、鉱石から、中国ではかん水と鉱石の両方が行われている。


方式メリットデメリット
かん水方式コストが安い時間がかかる
鉱石短期間コストがかかる

2017年5月28日日曜日

シャンプー、リンスの違い

  みなさんは、シャンプー、リンスの違いを知っているでしょうか?シャンプーは、髪を洗うもので、リンスーは髪をしっとりさせるものぐらいは私でも知っています。では、洗髪としっとりさせる違いがどのように起こるかは知っていますでしょうか?

  シャンプーとリンスはどちらも界面活性剤の一種です。界面活性剤は高校の化学でも勉強しますが、水と結び付きやすい親水基と、水とは結び付かず油分と結び付きやすい疎水基を持った分子のことです。では、シャンプーとリンスの界面活性剤は何が違うかというと、親水基がマイナスに帯電しているかプラスに帯電しているかの違いのようです。

  シャンプーは親水基がマイナスに帯電しおり、髪は周囲環境が中性もしくは、アルカリ性になるとマイナス帯電するそうです。油汚れがあると、界面活性剤の疎水基が油汚れにくっつきます。親水基は水と結びつくのですが、親水基がマイナスに帯電していて髪もマイナスに帯電するのでそのまま油汚れを髪から引き離すように作用するそうです。

  一方、リンスは親水基がプラスに帯電しているので髪のマイナスに引き付けられて、界面活性材が髪側に親水基を向け、髪の外側に疎水基を向けて髪の表面をおおいます。これによって、手でさわると手の油と髪をおおう疎水基が結び付きやすく、触ったときのしっとり感がでるらしいです。

詳細は、Newton2017年1月号を読んでください。コンディショナーの作用ものっていました。
[参考:Newton2017年1月号]

2017年5月22日月曜日

Newton:レイナーワイス名誉教授のインタビュー 要約

マサチューセッツ工科大学 レイナーワイス名誉教授のインタビュー要約

2015年9月に史上初の重力波の検出に成功しました。
このプロジェクトの設立に尽力したのが、レイナーワイス名誉教授です。
プロジェクトの名前は、「LIGO」(Laser Interferometer Gravitational-Wave Observatoryの頭文字で、読み方は「ライゴ」)、つまりレーザー干渉計重力波観測所。

重力波の実験記録を見て、あまりにきれいな波形と大きな信号だったことから、本当の信号だと思わなかったようで、抜き打ちの訓練か、ハッキングを疑っていた。
本物の信号と確信するまでに3週間もかけたそうです。

子供の頃は、電子工学に興味があり、オーディオ機器を製作していた。
大学では音響工学の研究を行い、ノイズを減らす研究をしており、
LINGOでも様々なノイズ対策をとってきた。
LIGOの最大の課題は、レーザが通る空間を真空にするために費用がかかることだったそうです。

今後の挑戦したいこと、

  • 中性子星連星の検出
  • 重力波を放出する単独パルサーの発見
  • インフレーションに関する情報の観測

最後に、
 仕事に喜びを見いだし、一緒に仕事をする仲間と楽しくやっていくことそれに勝ることはない。失敗を恐れずチャレンジすることを忘れないでほしい。

この記事は、Newton 2016年`12月号のインタビュー記事の要約です。


ビットコインは上がる?下がる?将来予想してみた

先日、ビットコインキャッシュ(BCH)を購入方法の記事を書きましたが(ビットコインキャッシュの購入方法は こちら から)、その時には100万円超えたばかりだったビットコイン(BTC)がすでに200万円を超えました(2017/12/08現在)。驚くような上昇です。 今後、ビット...