Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10850 / 76734 ←次へ | 前へ→

【71429】Re:日付の検索
発言  kanabun  - 12/3/1(木) 19:58 -

引用なし
パスワード
   ▼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 という日付けを書き込んでいる
わけです。

6 hits

【71412】日付の検索 AoYasu 12/3/1(木) 8:58 質問
【71413】Re:日付の検索 kanabun 12/3/1(木) 9:15 発言
【71415】Re:日付の検索 AoYasu 12/3/1(木) 10:49 質問
【71416】Re:日付の検索 AoYasu 12/3/1(木) 11:56 質問
【71417】Re:日付の検索 kanabun 12/3/1(木) 12:09 発言
【71419】Re:日付の検索 AoYasu 12/3/1(木) 12:42 質問
【71421】Re:日付の検索 kanabun 12/3/1(木) 13:00 発言
【71423】Re:日付の検索 AoYasu 12/3/1(木) 13:07 質問
【71425】Re:日付の検索 kanabun 12/3/1(木) 14:20 発言
【71426】Re:日付の検索 AoYasu 12/3/1(木) 15:49 質問
【71429】Re:日付の検索 kanabun 12/3/1(木) 19:58 発言
【71430】Re:日付の検索 AoYasu 12/3/1(木) 21:04 お礼
【71418】Re:日付の検索 kanabun 12/3/1(木) 12:17 発言
【71420】Re:日付の検索 AoYasu 12/3/1(木) 12:48 質問
【71422】Re:日付の検索 kanabun 12/3/1(木) 13:06 発言

10850 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free