同じ変数の名前のstrFilterがあり、Mid 6でどういう形で生成されるのでしょうか?
一応の確認ですが、プログラミングにおける(特にここの)「=
」は代入を表していて「左の変数に右の計算結果を代入する」という動作をします
なので、
変数 = 変数 & (追加の式)
の形は、「元の変数の後ろに文字を追加する」記述になります
Me.Filter = Mid(strFilter,6)
について
「任意のフィルタを設けたい」時にコードが簡素に記述できます
フィルタを複数項目で連続してかける場合、それぞれの条件を AND
でつなぎますが、「項目が任意」の場合、既にフィルタがあるかどうか( AND
をつけるかどうか)をチェックするのが煩わしくなってきます
なので、フィルタをつける場合はとりあえず AND
をつける、最後に先頭の AND
を除いた文字を取り出すという手順にして簡素化しています
もう一つ、改修を見越してというのもあります
「フィルタ項目を追加したい」となった場合、上記のような問題を考える必要がでるので、もともと対応済みの記述にしておけば、「元のコードに手を付けず、追加したい項目の処理を追加するだけ」で済みます
「年月」データの持ち方について
パソコンは基本的に文字列よりも数値のほうが楽に扱えます。日付のデータも、表示上は書式設定にて「yyyy/mm/dd」形式で表示し、内部的には数値データとして持つ場合が多いです(シリアル値と呼ばれたりします)
この場合、関連する日付を数値計算で算出したり、日付計算用の関数が使えたりするというメリットが受けられます
ただし、必ず「日」のデータまで必要なので「年月」でいい場合には注意が必要です。「日」まで気にして範囲指定しないと漏れが出たりします(そのための計算で複雑化したりします)
現状であろう「年/月」の文字列で保存するとか、「yyyymm」を数値として保存するとかありますが、桁数(月の十の位の0詰め)に気を付ける必要があるとか出ますし、究極的には「年」「月」でフィールドを分けて保存するのが一番安全なのかなと思っています