| 
    
     |  | ▼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 という日付けを書き込んでいる
 わけです。
 
 |  |