pickup

Functionは、決して、消費税の計算や、合否判定を行うためにあるわけではありません。

ルーティンワークで、必ず活躍してくれるのが、Functionです。

目次

スポンサーリンク

Functionで、コードを短くする

 

こんにちは。伊川(@naonaoke)です。

今回は前回の続きになります。

記事差し込み

引数が、複数の場合、戻り値がある場合など、

むしろ、普通にコードを記載したほうが、コードが短くなる場合が多かったですね。

しかし、今を見るのではなく、3ヶ月先を見るのです。

その3ヶ月後に、きっとスキルは上がっています。

VBAはもともと、究極のルーティンワークをExcelに実行させるのです。

だから、繰り返しは、ループ、同じことを実行させるのは、Function です。

 

スポンサーリンク

このブログはこんな人にお勧め

今回のテーマ
  • ExcelVBAを勉強している人
  • Functionを勉強している人
  • Functionが、イマイチ理解できていない人

このブログを、読み終わるころには・・・・

このブログの結論
Functionは、やればできると感じるはずです。
世の中の例えがよくないと思います。
Functionの利用方法は、もっと便利なはずです。
その作成方法を理解できると思います。
スポンサーリンク

Functionの作成

 

前回は、企画的カンタンなものを紹介しました。

今回は少しだけ難しくなります。

でも、ほんの少しだけなので、頑張っていきましょう。

できるだけ、わかりやすく説明したいと思います。

 

Functionでコードを短くする 作業手順 その1 戻り値にオブジェクトを指定する方法

 

戻り値は、今までは、Hello VBA!でした。

この戻り値を、オブジェクトに変更します。

この場合は、Setステートメントを使用します。

Sub macro5()

    Dim str As String

    Dim range As range

    str = "A1"

    Set range = obj(str)

    range.Value = "Hello VBA!"

 End Sub




 Function obj(ByVal str As String) As range

    Set obj = range(str)

 End Function

 

 

このコードを実行すると、セルA1にHello VBA!と表示されます。

このコードに何の意味があるのか謎だと思います。

Range(“A1”)の、A1をFunctionで記載しています。

Range(“A1”)=” Hello VBA!”  と記載すれば済むので、実務では、意味がないと思います。

では、少しアレンジしてみましょう。

Sub macro5()

Dim str As String

Dim Range As Range

Dim i As Long

maxrow = Cells(Rows.Count, "A").End(xlUp).Row

For i = 1 To maxrow

str = "B" & i

Set Range = obj(str)

Range.Value = "Hello VBA!"

Next i

End Sub

Function obj(ByVal str As String) As Range

Set obj = Range(str)

End Function

赤枠は、同じ意味になります。

そもそも、Range自体が、オブジェクトなので、このような指定をします。

 

Functionでコードを短くする 作業手順 その2 Functionを作成する

 

本来でしたら、参考にしたサイトでは、配列とFncutionの解説になります。

しかし、良いサンプルを作成できなかったので、実際にFncutionを作成してみようと思います。

長いコードをどれだけ短くできるか、堪能してみてください。

Functionでコードを短くする 作業手順 その3  引数ってなんだ?

 

引数って言うから、数字のような気がしますよね。

違います。

私の場合は、ここが最初は理解できませんでした。

スポンサーリンク
例えば、IF関数の場合は、Excelで上記のように表示されます。

引数とは、関数を利用するために、必要最低限の情報です。

IF関数に関しては、引数が最大で、3つあります。

中には、引数を省略できる関数もあります。

つまり、数字ではないということに、気が付かないとFncutionはいつまでたっても利用できません。

自作する関数にどのようなルーティンワークをさせたいのかを考えます。

Functionでコードを短くする 作業手順 その4 サンプルコードを考える

 

サンプルコードの内容は、

A列の中で、特定の文字を探す。

特定の文字を発見したら、そのセルを選択する

その選択したセルの、1つ右隣を、シート2の特定のセルへ転記する

この内容です。

では、関数を作動させるための、根幹となる動きはどの部分でしょうか?

それは、A列の中で、特定の文字を探す、です。

転記、セルを選択するというのは、オプションで、サラダバーや、ドリンクバーのようなもので、引数にはなりません。

 

Functionでコードを短くする 作業手順 その5 実際のコード

 

Sub test2()

Worksheets("sheet2").Range("B9").Value = _

Found("AAAA", Worksheets("Sheet1").Range("A:A")).Value




Worksheets("sheet2").Range("B10").Value = _

Found("bbbbb", Worksheets("Sheet1").Range("A:A")).Value




End Sub




Function Found(xWord As String, xRange As Range) As Range

Set Found = xRange.Find(xWord, LookAt:=xlWhole).Offset(, 1)

End Function

 

このようなコードになります。

このように対比してみたら、理解できると思います。

ここがポイント

 

ここがポイント
Function8.png
サンプルコードから、わずか4行になりました。
そして、汎用性もできました
こんなにも、短くなるなんて!
これって感動じゃないですか?
今回も、コードの可読性がないと、正解にたどり着けないですよね。
外国語と一緒で、初めから理解できる人はいません。
外国語は、ヒヤリングが効果的ですが、コードをヒヤリングはできません。
だから、コードを理解できなくても、見る事、眺める事が重要なのです。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

 

今回のコードは、Findを利用しているため、あまりお勧めできるコードではありません。

つまり、他のコードに比べて、時間がかかります。

また、やっていることは、VLOOKUPと同じです。

私は、VLOOKUPが嫌いなので・・・・・・・・

今回も最後まで読んでいただきありがとうございました。

 

今回のサンプルファイルは、No261です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

初心者でも、すぐに、集計、プレゼンができるようになる。書籍だけの勉強は今すぐやめよう!
電子書籍で、AMAZON1位
専門のスタッフが、電話、チャットで完全サポート
大手パソコンスクールよりも、圧倒的な低価格
スポンサーリンク

Twitterでフォローしよう

おすすめの記事