VBA(マクロ)を使ってデータの中から必要の値をみつける
トルクと回転数、温度と重量など設備が連続して測定したデータの中から必要な値をみつけるVBA(マクロ)についての得ワザです
今回は測定したデータの中で一番高い温度を探し、その時の重量を求めるExcel VBA(マクロ)を VLookupとFindの2つの方法で説明します
本ページにはプロモーションが含まれています
サンプルデータ
今回は下記のようなデータから最高温度と最高温度時の重量をみつけます
本来ならデータは数百~数万行になりますが、表示しきれないので温度と重量が各5点のデータにしました
目的の値をみつけるコード
例文1
Sub Test1
Dim myMax as Double
Dim myAns1 as Double
Dim myScope as Range
Set myScope = Range("A2:A6")
myMax = Application. _
WorksheetFunction.Max(myScope)
MsgBox "Test1の最高温度は" & myMax & "℃です"
Set myScope = myScope.Resize _
(, myScope.Columns.Count + 1)
myAns1 = Application.WorksheetFunction. _
VLookup(myMax, myScope, 2, False)
MsgBox "VLookupで求める重量は" & myAns1 & "gです"
End Sub
解説1
- 1行目:最高温度を入れる変数をmyMaxにします
- 2行目:最高温度時の重量を入れる変数をmyAns1にします
- 3行目:検索範囲を入れる変数をmyScopeにします
- 4行目:myScopeの範囲をA列2行目からA列6行目にします
- 5行目:検索範囲の最大値をmyMaxに入れます
- 6行目:メッセージBoxで最高温度(myMax)を確認します
- 7行目:myScopeの範囲をA列2行目からB列6行目にします
- 8行目:myAns1をA列から探した最大値の右横の値にします
- 9行目:メッセージBoxで最高温度時の重量(myAns1)を確認します
変数の型に「Double」を使う理由は「VBA(マクロ)の知って得ワザ vol.3」で説明しているので、そちらをご覧ください
VLookupは戻り値が値(セルの中身)である為、そのまま扱えます
例文2
Sub Test2
Dim myMax As Double
Dim myAns2 As Double
Dim myScope As Range
Set myScope = Range("A2:A6")
myMax = Application. _
WorksheetFunction.Max(myScope)
MsgBox "Test2の最高温度は" & myMax & "℃です"
myAns2 = _
myScope.Find(myMax).Offset(0,1).Value
MsgBox "Findで求める重量は" & myAns2 & "gです"
End Sub
解説2
- 1行目~3行目:一部変数名が変わるだけで、解説1と同じです
- 4行目~6行目:解説1と同じです
- 7行目:Findで見つけた最大値のセルの右横の値をmyAns2に入れます
- 8行目:メッセージBoxで最高温度時の重量(myAns2)を確認します
Findの場合、戻り値がセルそのもの つまりRange("A4")になる為、セルとして扱う必要があります
まとめ
VLookupでもFindでも結果は同じになりますが、Findの方がコードが1行減り、尚且つ可読性も良くなっています
プログラムのコードを書くときに重要なのは、「少ないコード(行数)でプログラムを作成する」事なので、その点からはFindを使った方に利点があると思います
また可読性が良いとプログラムエラーを探しやすくなるので、この点からもFindに利点があると思います
後は処理速度ですが、こちらはデータ数に依存するので 両方比較して同程度ならFindでコーディングすることをおススメします
★VBA(マクロ)にも色々な書き方があるんですね~!★
コメント