|
▼t−k さん:
おはようございます
>行列範囲の指定なのは理解できるのですが それぞれ-1、-2する理由が不明です
たとえばアップされて表の例でいいますと
A1 のCurrentRegion は A1:D4 ですね。(4行4列)
で、この中の いわゆる データが入っているリストの領域は C2:D4(3行2列) になりますね。
.Offset(1, 2) == Offset(行方向の移動行数,列方向の移動列数)
これで、CurrentRegion領域を 1 つ下、2つ右に変化させます。
結果は C2:F5 になります。(4行4列)
.Resize(.Rows.Count - 1, .Columns.Count - 2) == Resize(変更後の行数,変更後の列数)
これで、上で変化させた領域 C2:F5 という 4行4列の領域に対して
行を、その行数4から 1を引いて 3行に、列を、その列数4から 2 を引いて 2列に変化させます。
ですから、結果は C2:D4 の 3行2列の領域になります。
>VBA.Arrayの部分とValueとAddresを行と列で言い方を変えてる部分が理解できません
まず、Array関数についてはヘルプも一読しておいてください。
Array(○○○,□□) は ○○○ と □□□ の 2つの要素を持った一次元配列を
生成します。通常、VBA. とつけずに使う例が多いと思いますが、これだと、できあがった配列の
LBoundが、もし、別途 Option Base 1 の記述が、このモジュールにあれば 1 になってしまいます。
コードの中では、最初の要素番号を 0 として処理しています。VBA. とつければ Option Base の記述の
有無にかかわらず、LBound が 0 で作られますので安心して処理できます。
で、VBA.Array(c.Value, c.Address(External:=True))
c.Value と c.Address(External:=True) の2つの値を配列の要素にしているわけです。
仮に c が アップされた例の C2 だったとします。
そうしますと、最初の要素 c.Value は 100 ですね。(セルの値)
で、c.Address(External:=True) は、そのセルのアドレスですが External:=True とすることで
単に "C2" ではなく、どのブックのどのシートのC2 だというアドレス文字列が格納されます。
ですから、あとからこのセルを Range(そのアドレス文字列) で参照することが可能です。
>日付の部分でVALUE2と表記してる部分も理解できていません
日付は、見た目 yyyy/mm/dd ですが、内容としては小数点付きのシリアル値というのは
ご存じでしょうか。
たとえば、今日 2013/2/11 は 41316 です。また現在の時刻は 41316.27901 あたりです。
Value2 には、日付セルの場合、このシリアル値を格納してくれます。
日付の検索は、けっこうやっかいなので、私はもっぱら、Value2 を使います。
|
|