古庄 潤(ふるしょう じゅん)
本業はエンジニア。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

図1●測定値を数値と単位に分けるマクロを実行した結果
図1●測定値を数値と単位に分けるマクロを実行した結果
[画像のクリックで拡大表示]

「先生、結構いけてるマクロだと思います」
「そうじゃな」
「このままでいいような気もします」
「うむ、では、そう言うことで、一件落着!」
「おいおい!」
「え?」
「いけてるマクロだとは思いますが、患者さんの悩みは解決しなければいけません」
「やっぱり?」
「そりゃそうです」
「どうしても?」
「クリニックの収入が減ります」
「うむ」
「お正月の餅が買えなくなります」
「それは、困る」
「でしょ?はい、お仕事、お仕事」
「そうじゃな」