| 
    
     |  | ▼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 を使います。
 
 |  |