|
追加で、
Matchしたときに帰ってくる数値ですのことですが...
> Set sh2 = Workbooks("集計表.xlsm").Worksheets(2)
> Set RangeF = sh2.Range("F6:F115")
> ' 集計表ブックのF6からF115範囲に マッチするセルがあるか?
> MyR = Application.Match(.Cells(k, "C"), RangeF, 0)
.Cells(k, "C") を 範囲RangeF からMatch検索していますが、
このとき MyR に 1 という数値が返ってきたとしますと、それは
RangeFという範囲の 1番目のセル で一致という意味であることはご存知ですよね?
RangeF という範囲の1番目のセルを RangeF.Item(1) と表現します。
RangeF は sh2 の.Range("F6:F115") の範囲のことですから、その1番目のセルは
具体的にはシート上の[F6]セルのことなのですが、いつもシート上の絶対番地に
なおさず、「検索範囲の何番目」というママの数値を使ったほうが 複雑にならずに
済みます。
ところで コードでは RangeF.Item(MyR) とあらわさず、
> RangeF.Item(MyR, 7)
という表記をしていますが、これは RangeF範囲の (1行目、7列目)のセル という
意味です。
RangeF.Item(1,1) が [F6]
RangeF.Item(1,2) が [G6]
RangeF.Item(1,3) が [H6]
RangeF.Item(1,4) が [I6]
:
RangeF.Item(1,7) が [L6]
ということで、 RangeF.Item(MyR, 7) は RangeF列の MyR行目のセルの 右側7列目の
セル、ということになります。
下の
RangeF.Item(1,11) も 同じ考えで [P6] セルとなります。
なお、Itemは省略可能ですから
RangeF(1,11) と書くことも可能です。
あと、
MyR = Application.Match(.Cells(k, "C").Value, RangeF, 0)
と検索値を Valueをつけるのは良くないです。
なぜなら Matchワークシート関数で検索値は セルの.Value値ではなく
セルの .Value2 値 だからです。たいていのばあい、 セルのValue2値 は セルの
Value値と同じですが、日付のときはValue2値は 42345 などのシリアル数値です。
Value値(2015/5/15) でMatch検索しても絶対にヒットしません。
MyR = Application.Match(.Cells(k, "C").Value2, RangeF, 0)
↑このように、つけるなら Value2
通常は何もつけないで セルを書いておけばいいです。↓
MyR = Application.Match(.Cells(k, "C"), RangeF, 0)
|
|