引数で渡せばいいじゃないか
「配列変数を引数で渡せばいいじゃないか、星。
ほかの変数と同じだよ。
ただこのとき、頭にByValをつけないで引数を渡すんだ。
いいかい?もう一度言うよ。ByValをつけずに引数を渡すんだ。
…なぜそうするのかは、お前のVBAスキルがもう少し上達したら教えてやる」
星くんは、カリカリと必死になってメモを取っています。
「…こんなところかな?
処理の最後に、配列変数からセルへの書き戻しを忘れないようにな。
…じゃあ、明日!会社でがんばってくれ!!」
八木くんは、星くんの背中をバーンと叩きました。
次の日の会社、星くんはPCの画面とにらめっこをしています。
少し離れたところから、岬さんがチラチラと星くんの様子をうかがっています。
「…よし!昨日、八木から教えてもらった内容を、早速コードに実装するか。
まずはバリアント型変数を宣言しなくちゃ…」
星くんはバリアント型変数wrkを、宣言しました。
:
Dim Counter As Long
Dim wrk As Variant
:
「…次にセル範囲を変数wrkに代入する。
八木はセルA1から使用されている最終行、最終列までを格納しろといってたな…」
:
wrk = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, _
Cells(4, Columns.Count).End(xlToLeft).Column))
:
「これでよし…と。
Cells(1, 1)からCells(最終行, 最終列)までをRangeオブジェクトに指定して…変数wrkに代入だ。
これで変数wrkには、現在使用されているセル範囲が格納されているはずだ。
…ついでに処理の最後に書き戻すところも書いておくか…」
星くんはCSVデータ取り込みプロシージャの最後に、次のコードを記述しました。
:
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, _
Cells(4, Columns.Count).End(xlToLeft).Column)) = wrk
:
「よし!書き戻しは、セル範囲に変数wrkの内容を代入すればいいから、
さっきのコードの右辺と左辺を入れ替えるだけでオッケーだ」
星くんは目を閉じ、八木くんが昨日いったセリフを思い出します。
「…あとは、Cellsプロパティでセルの読み書きを行っている3か所を、
変数wrkに置き換えればいいんだっけ…
置き換えるのは、こことここと…ここだったな…」
カタカタと星くんが、該当箇所を修正していきます。
「…よし!製品行取得と日付列取得プロシージャには、引数を渡してあげなきゃ…。
あっと、このときはByValをつけちゃだめだっていってたな…」
Private Function 製品行取得(ByVal 製品 As String, wrk As Variant) As Long
Private Function 日付列取得(ByVal 日付 As String, wrk As Variant) As Long