[三流君] −−> [プログラマー業務の愚痴] −−> [バックナンバー一覧]
−−> 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つ、手を抜かないで作っていく気持ちが大事ですね。

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


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

リンクや広告など

項目別に本音?それとも建て前?的な記事をまとめました。

気になったジャンル↓を選択してください。
[ルーキー rookies]・・・ 新人さん達 初心者さんへ
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話
[共同作業 team]・・・チーム、グループ作業
[プログラムは心? spirit]・・・プログラマー 心・気質・魂

[掲示板デビューしようぜ bbs]・・・掲示板関係の話、質問者・回答者の気持ちほか
[昔はできた seo]・・・三流式の効果無しSEOとアフィリエイト
[仕事や作業、転職 job]・・・仕事や転職、評価、作業など
[その他 etc]・・・その他 分類外の記事

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [愚痴(Bookmark)]/ [広告Blog(Bookmark)]



[三流君(TOP ken3.org へ戻る)] / [プログラマー業務の愚痴] / [バックナンバー 一覧]