トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 次なるイノベーション編: 第9話「コードの問題点を解決しよう」2/4 :まとめればスッキリ

やってみよう!Excel VBAで業務改善! 次なるイノベーション編|第9話 「コードの問題点を解決しよう」

まとめればスッキリ

「こんな感じです。
でも、同じオブジェクトの指定を何度も記述すると、うっとうしいので…」

Function リスト範囲設定(ListName As String, ListRange As Range) As Boolean
    Dim r As Long, c  As Long, o As Object

    With Worksheets("リスト設定")
        Set o = .Rows(1).Find(ListName)

        If Not o Is Nothing Then
            c = o.Column
            r = .Cells(Rows.Count, c).End(xlUp).Row
            Set ListRange = .Range(.Cells(2, c), .Cells(r, c))
            リスト範囲設定 = True
        End If
    End With
End Function

「こんな感じで、Withステートメントでまとめればスッキリします。
アクティブシートを切り替えなくても、リスト設定シートのセルを操作できますよ」
泉先輩が目を丸くして、頬を染めます。

「恥ずかしいわ…。
オブジェクトの階層構造なんて、ベーシックの最初で習うことなのに…。
よく理解していなかったのね…」
「いえいえ…VBA中級者でも、この辺りはよくやりますよ。
あと引数のListName、これは、Worksheet_SelectionChangeイベントで取得する、
リストの項目名ですよね?
出荷一覧表の外のセルを、ユーザーが選択したらどうなります?」
「そのときは……。
あっ、3行目の見出しが無いから、空の文字列を渡しちゃうわ!」

一覧にもどる