注目のセミナー

申込受付中!

危機に強い
プロマネ養成
実践トレーニング

火消しのプロが、 実践演習と個別の メンタリングを通じ、 強いPMを2ヵ月で育成!

ソフト開発

Excel/VBAクリニック,今月の診断

ITpro

第30回 Functionプロシジャの戻り値を配列で受け渡す

2009/12/21
古庄 潤(ふるしょう じゅん)
本業はエンジニア。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●測定値を数値と単位に分けるマクロを実行した結果
[画像のクリックで拡大表示]

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

>>配列はたくさんのポケットを持った変数
次ページ以降はITpro会員(無料)の方のみお読みいただけます。
会員の方は、 ログインしてご覧ください。
まだ会員でない方は、ぜひ登録(無料)していただき、ITproの豊富なコンテンツをご覧ください。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介