トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 次なるイノベーション編: 第9話「コードの問題点を解決しよう」3/4 :作り手が前もって用意する

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

作り手が前もって用意する

八木くんがニッコリ笑います。

「その通りです。
空の文字列をFindメソッドで検索しても意味が無いので、
こんな感じにIfステートメントを追加したらどうでしょう?」


With Worksheets("リスト設定")
    If ListName <> "" Then
        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 If
End With

「ああ…。こんなこと、考えもしなかったわ。
てっきりユーザーが、こちらの想定通りに操作してくれるものだとばっかり思ってた…。
八木っちの言うとおりね。
ユーザーが何をしてもいいように、作り手が前もって用意しておかないと…」
「(なんだい、なんだい!
…俺に聞いてくれればそんなこと、いつでもレクチャーできたのに…!
八木に美味しいトコ、持ってかれちゃったじゃないか!)」
泉先輩と八木くんの後ろ姿を、歯噛みしながら星くんが見つめます。
隣では岬さんが、真剣な表情で、八木くんの解説を聞いています。

「…そういった意味では呼び出し部にも、制限をかけておいたほうがいいですね。
Worksheet_SelectionChangeイベントで処理の対象となる行を、指定しておいたほうが安心ですよ」

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ListName As String, ListRange As Range

    If Target.Row > 3 Then
        ListName = Cells(3, Target.Column).Value
    :

「こんな感じで…
4行目以降のセルが選択されたときだけ、リストを設定する処理が動くように制限します。
1~3行目は、リストを設定する必要がありませんよね?」

一覧にもどる