[三流君] −−> [プログラマー業務の愚痴] −−> [バックナンバー一覧]
−−> No.090 関数を自作できなくなった自分?

関数を自作できなくなった自分?


本文(発行内容)


<関数を自作できなくなった自分?>

こんにちは、三流プログラマーのKen3です。

私のいつものくだらないお話です。
笑ってやってください。

今回、私のもう一つのメルマガ、
三流PG Excel VBA/Access つまみ食い
で自作した関数を作って自分なりに思ったことを書きます。
みなさんのご意見をメールで送っていただけると助かります。

Excel VBAにあるかもしれないが、
指定した範囲を比較する関数を作成してみました。

In message "[三流PG 解説 No.029][Excel VBA] Range を受け取り範囲をチェックする"
'----
Sub testmain()
    If chkRANGE(Range("B2:C5"), Range("E4:F7")) = True Then
        MsgBox "二つのエリアは同じです"
    Else
        MsgBox "値が違いますよ"
    End If
End Sub
'----
Function chkRANGE(MOTO As Range, SAKI As Range) As Boolean
    Dim n As Integer
    
    Rem まず、セルの数があっているか調べます
    If MOTO.Count <> SAKI.Count Then
        chkRANGE = False
        Exit Function       'セルの数が違うのでもうチェック不要
    End If

    Rem 次にループさせ値をチェックします
    chkRANGE = True   '戻り値をTrueOKで初期化します
    For n = 1 To MOTO.Count
        If MOTO(n).Value <> SAKI(n).Value Then
            chkRANGE = False
            Exit For  '1つでも違えば後はチェックしなくていいので抜ける
        End If
    Next n
    
End Function

もし、過去に誰かが作ったものがあるなら、
それを流用するほうが工数(デバック工数含む)がかからなく、
効率的だ
その逆で、
なんでも自分で作りたいプログラマーもいる。

どちらがよいかはケースバイケースなのでここでは書かないが、
過去のC言語バリバリやってた自分なら、
共通関数を自分で作るのが好きで、
LK_XXXXX()って関数を楽しみながら作ってました。
↑名前が安易にLIBのLとKenjiのKでLK_XXX(ださださ(笑))

今の自分は、今回みたいな簡単な関数も、
すぐに作れなくなってしまったんだなぁと
質問に答えた後、ふと考えてしまった。

C言語ほど、自分のライブラリーは無くてもいいが、
VBAでも定石っぽいルーチンは探せるか、
自分で空いてる時間にまとめて作成したほうが良いと痛感する。

また、コード自体の書き方にもこだわりが無くなり、
動けばいいコードを書いているような、気がする。

掲示板で殴り書きでは?と指摘を受けたが、
'----
Function chkRANGE(MOTO As Range, SAKI As Range) As Boolean
    Dim n As Integer

    Rem まず、セルの数があっているか調べます
    If MOTO.Count <> SAKI.Count Then
        chkRANGE = False
        Exit Function       'セルの数が違うのでもうチェック不要
●ここでは、リターン値をセットして、関数をすぐ抜けているが、
    End If

    Rem 次にループさせ値をチェックします
    chkRANGE = True   '戻り値をTrueOKで初期化します
    For n = 1 To MOTO.Count
        If MOTO(n).Value <> SAKI(n).Value Then
            chkRANGE = False
            Exit For  '1つでも違えば後はチェックしなくていいので抜ける
●ここでは、リターン値セット後、Forを抜けて、End Function まで流している
        End If
    Next n
    
End Function
'----

動作は同じだが、下記のほうがわかりやすいかも?

'----
Rem 次にループさせ値をチェックします
For n = 1 To MOTO.Count
    If MOTO(n).Value <> SAKI(n).Value Then
        chkRANGE = False
        Exit Function  '1つでも違えば後はチェックしなくていいので関数終了
    End If
Next n
'全て正解なら
chkRANGE = True   '戻り値をTrueで関数を終る
'----

のほうがプログラムを読みやすかったのかも?
また、途中でExit Functionしないで、関数の出口を一つもアリかなぁと。
もっとわかりやすく、短く書く方法があるとは思いますが、
関数1つ、1つ、手を抜かないで作っていく気持ちが大事ですね。

今回はこれで終りますが、
みなさんが何か感じるものがあれば幸いです。
では、また。
説明べたな三流プログラマーでした。

フィードバック

愚痴系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.090を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告