古庄 潤(ふるしょう じゅん)
本業はエンジニア。ICに様々な機械をつなぎ,電流やら電圧を測定する。もちろん,これらの測定器もVBAでコントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロの鬼軍曹!
今回のサンプルは、Excel 2002/2003/2007での動作を確認しています
「ウィ~ン ガシャン ウィーン ガシャン」
「先生、なにやってるんですか?」
「おぉ、ゲール君。新しくPCを買ったんじゃ」
「またですかぁ」
「うむ、学会に行くとき用にな、ネットPCというやつを買ってみた」
「あら、PCとは思えない大胆なデザイン」
「そうじゃろ?このデザインが気に入ってな。他より少々高かったがこれにした」
「でも、どちらかと言うと女性向けじゃないですか?」
「うむ、赤が基調で派手なデザインじゃからなぁ」
「あら、キーボードも真っ赤です」
「そうなんじゃ。キーボードまでデザインされたPCはなかなかない」
「ふ~ん」
「これから、セットアップするところじゃ」
「何を言ってるんですか!仕事をしてください」
「え~?」
「そのPCの代金はどこから出てると思ってるんですか?」
「それは、そのぅ・・・」
「お待ちの相談者の方、ど~ぞ~」
今月の相談
測定値を、数値と単位に分けるマクロを作りました。最初は一つの関数で実現する予定だったのですが、関数の戻り値を配列にすることが出来ず、泣く泣く二つの関数に分けました。再利用の頻度が高い関数なので、できれば一つにしたいのですが可能でしょうか?
リスト1●数値と単位に分けるマクロ
Option Explicit
Sub SeparateValue()
Dim myRow As Long
Dim i As Long
With ActiveSheet
myRow = .Cells(Rows.Count, 2).End(xlUp).Row
For i = 3 To myRow
.Cells(i, 3).Value = Extracted_Value(.Cells(i, 2).Value)
.Cells(i, 4).Value = Extracted_Unit(.Cells(i, 2).Value)
Next i
End With
End Sub
Function Extracted_Value(myTarget As String) As Variant
Dim myValue As Double
myValue = Val(myTarget)
Extracted_Value = myValue
End Function
Function Extracted_Unit(myTarget As String) As Variant
Dim myValue As Double
Dim myUnit As String
myValue = Val(myTarget)
myUnit = Replace(myTarget, myValue, "")
Extracted_Unit = myUnit
End Function
「先生、結構いけてるマクロだと思います」
「そうじゃな」
「このままでいいような気もします」
「うむ、では、そう言うことで、一件落着!」
「おいおい!」
「え?」
「いけてるマクロだとは思いますが、患者さんの悩みは解決しなければいけません」
「やっぱり?」
「そりゃそうです」
「どうしても?」
「クリニックの収入が減ります」
「うむ」
「お正月の餅が買えなくなります」
「それは、困る」
「でしょ?はい、お仕事、お仕事」
「そうじゃな」