|    | 
     ▼AoYasu さん: 
>▼kanabun さん: 
> ここで一つ知識不足ですいません 
>  マクロの書き方で 
> 1:sht2.[B1].Value ---[B1]の意味 
> 2;Ran.Cells(1, 4).Value -----ここでは何を取得するのでしょうか  
 
全体のコードが提示されてないので、こちらでそれっぽいものを適当に 
書いてみると以下のようになります。 
これは UserForm1の TextBox受注日 に 抽出したい日付けを、たとえば「2/9」 
のようにタイプしたあと、よこの CommandButton1をクリックすると、 
Sht3の表から 指定の日付の行を Sht1 へ抽出コピーするものです。 
 
 
Private Sub CommandButton1_Click() 
  Dim Sht1 As Worksheet 
  Dim Sht2 As Worksheet 
  Dim Sht3 As Worksheet 
  Dim fRange As Range ' Filter Range(抽出元の表範囲) 
  Dim cRange As Range 'CriteriaRange(検索条件範囲) 
  Dim CopyTo As Range 'CopyTo Range (抽出先) 
   
  Set Sht1 = Worksheets(1) 
  Set Sht2 = Worksheets(2) 
  Set Sht3 = Worksheets(3) 
  '--- フィルタ範囲 ------ 左下セルと右上セルとで指定 
  With Sht3 
    Set fRange = .Range(.Cells(.Rows.Count, "B").End(xlUp), "M3") 
  End With 
  '--- 抽出条件範囲 ------ 
  Set cRange = Sht2.[B1:B2] 
  cRange.Item(1).Value = fRange.Item(1, 4).Value 
  cRange.Item(2).Value = CDate(Year(fRange.Item(2, 4).Value) & "/" _ 
             & TextBox受注日.Text) 
  '--- 抽出先先頭セル ----- 
  Set CopyTo = Sht1.[B1] 
   
  fRange.AdvancedFilter xlFilterCopy, CriteriaRange:=cRange, _ 
             CopyToRange:=CopyTo 
  Sht1.Activate 
End Sub 
 
説明1 
>  Set cRange = Sht2.[B1:B2] 
の .[B1:B2] は .Range("B1:B2") の簡略した書き方です。 
 
説明2 
>  Set cRange = Sht2.[B1:B2] 
>  cRange.Item(1).Value = fRange.Item(1, 4).Value 
この.Item というのは コレクション内の個々の要素を指定するときに 
使われるプロパティです。ここでは Sht2.[B1:B2] の2つのセルを 
cRange というRangeコレクションにしていますから、 
>  cRange.Item(1) 
というのは Sht2.[B1:B2] の最初のセル つまり Sht2.[B1] のことです。 
cRange.Item(2) は cRangeコレクション内の2番目のセル すなわち 
Sht2.[B2] のことです。 
同様にして 
> fRange.Item(1, 4) 
とは、fRange(フィルタ範囲 のこと) 内の 1行目、4列目のセルのこと 
を意味します。fRange.Cells(1,4) とも書きます。 
注意しなければいけないのは fRangeの1列目は シートの2列目(B列) 
のことなので、fRangeの 4列目は シートの E列 ということになります。 
同様に fRangeの1行目は シート全体でいえば 3行目のことです。 
まとめると、 
>  cRange.Item(1).Value = fRange.Item(1, 4).Value 
は、fRangeの4列目の列見出し「受注日」を CriteriaRangeの 
1行目に転記する、という処理をしています。 
 
説明3 
>  cRange.Item(2).Value = CDate(Year(fRange.Item(2, 4).Value) & "/" _ 
             & TextBox受注日.Text) 
ここは、 
いま、TextBox受注日.Text が 「2/9 」 だとして、何年の 2月9日なのか 
分からないので、抽出表の 「受注日」列の 2行目の日付データから 年号部分を 
取得しようとしているところです。 
     B    C    D    E    F   
>3   納入日  場所  納入先  受注日  金額 
>4   3月10日  神田  神田商店  2/9  \15000 
>5   3月20日  神田  神田商店  2/15  \25000 
E列の4行目 (fRange.Item(2,4) のセル) には 「2/9」という日付データが 
ありますが、数式バーを見ると分るように このセルの値は「2010/2/9 」です。 
Year関数で 年号を取り出すと 2010が得られます。 
> CDate(Year(fRange.Item(2, 4).Value) & "/" & TextBox受注日.Text) 
は 
  CDate(2010 & "/" & "2/9") 
つまり 
  cRange.Item(2).Value = CDate("2010/2/9") 
を実行して 抽出条件範囲の2行目に 2010/2/9 という日付けを書き込んでいる 
わけです。 
 | 
     
    
   |