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