Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
合致した年月日を抽出したい
投稿日時: 19/02/20 13:24:36
投稿者: SHIBARAKU

年月日をsheet1で入力し、合致したsheet2の列を表示する方法をお教え下さい。
  
sheet1
年月日  2019/1/2
 
sheet2
年月日 コード1 検索番号 区分1 区分名
2019/1/2 12547 12564 12541 あああああ
2019/1/4 12897 35789 12541 あああああ
2019/1/5 12632 58947 12478 いいいいい
2019/1/2 12632 58947 12478 いいいいい
                    ⇓
年月日 コード1 検索番号 区分1 区分名
2019/1/2 12547 12564 12541 あああああ
2019/1/2 12632 58947 12478 いいいいい
 
年月日のセルの書式設定は、日付-*2012/3/14に設定しています。
以下のコードでは、抽出できないのですが、他に方法はありますか?
 
Sub AutoFilter()
     Dim kikan As String
     kikan = Sheets("Sheet1").Range("C11")
     Sheets("Sheet2").Select
     Range("A1").AutoFilter Field:=1, Criteria1:=kikan 'フィールド番号1「年月日」を抽出
End Sub

回答
投稿日時: 19/02/20 14:32:56
投稿者: WinArrow
投稿者のウェブサイトに移動

> Range("A1").AutoFilter Field:=1, Criteria1:=kikan

      Range("A1").AutoFilter Field:=1, Criteria1:=CDate(kikan) 'フィールド番号1「年月日」を抽出
 
又は
 
      Dim kikan As Date
kikan = Sheets("Sheet1").Range("C11")
      Sheets("Sheet2").Select
      Range("A1").AutoFilter Field:=1, Criteria1:=kikan 'フィールド番号1「年月日」を抽出
 
に修正すればOKでしょう。
 
 
なお、
>年月日のセルの書式設定は、日付-*2012/3/14に設定しています。
この表現は誤解されやすい・・・と思います。
一般的には、シリアル値といいます。
シリアル値とは「日付形式」という意味です。
要するに
表のA列の設定が日付形式に対して文字列形式で検索しているから、
該当なしとみなされたということです。
 
検索する側と検索される側のデータ型を合わせる
ということです。
 
 
 

回答
投稿日時: 19/02/20 15:09:28
投稿者: Suzu

こんにちは。
 

WinArrow さんの引用:
>検索する側と検索される側のデータ型を合わせる
ということです。

 
ですよね。
そう思っていたのですが。。。
 
Excel2010
 
Sheet1、Sheet2 の 年月日 の セルの書式 yyyyy/mm/dd として、
 
 
CDate(kikan)
も、
Dim kikan As Date
 
どちらでも抽出結果 0件となります。
 
Dim kikan As Date
Criteria1:=Format(kikan, .Range("A2").NumberFormatLocal)
 
ではいかがでしょう。

投稿日時: 19/02/20 15:26:03
投稿者: SHIBARAKU

WinArrowさん、返答ありがとうございます。
お教えいただいたコードで記載すると、抽出条件が
1/2/2019
となり、抽出できませんでした。
 
但し、sheet2の年月日のセルの書式設定を、ユーザー設定で 
m/d/yyyy;@
に設定すると抽出できるのですが、表示は
1/2/2019
といった形になってしまいます。

回答
投稿日時: 19/02/20 15:32:52
投稿者: WinArrow
投稿者のウェブサイトに移動

Suzu さんの引用:
こんにちは。
 
Excel2010
 
Sheet1、Sheet2 の 年月日 の セルの書式 yyyyy/mm/dd として、
 
 
CDate(kikan)
も、
Dim kikan As Date
 
どちらでも抽出結果 0件となります。
 

えっ・・・・Excelのバージョンによって違う?
こちらは、Excel02007です。
困った問題ですね!!
 

投稿日時: 19/02/20 16:00:04
投稿者: SHIBARAKU

suzuさん、ありがとうございます。
 

Suzu さんの引用:

 
Dim kikan As Date
Criteria1:=Format(kikan, .Range("A2").NumberFormatLocal)
 
ではいかがでしょう。

 
コードをコピペし、
 
Sub AutoFilter()
    Dim kikan As Date
    kikan = Sheets("Sheet1").Range("C11")
    Sheets("Sheet2").Select
    Range("A1").AutoFilter Field:=1, Criteria1:=Format(kikan, .Range("A2").NumberFormatLocal)
End Sub
 
としたのですが、コンパイルエラーとなります。どの部分の記述に間違いがありますか?

回答
投稿日時: 19/02/20 16:46:39
投稿者: WinArrow
投稿者のウェブサイトに移動

コンパイルエラー
>Criteria1:=Format(kikan, .Range("A2").NumberFormatLocal)
 
Suzuさんのレス
「.」があることが原因と思います。
「.」をとる
 
そのうえで、A2セルは、そのままでもよいかもしれませんが、
Suzuさんに聞かないとわかりません。
 

回答
投稿日時: 19/02/20 16:56:48
投稿者: sk

引用:
Range("A1").AutoFilter Field:=1, Criteria1:=kikan

Range("A1").AutoFilter Field:=1, _
                       Operator:=xlFilterValues, _
                       Criteria2:=Array(2, kikan)
 
-------------------------------------------------------
 
それぞれのセルの表示形式に影響されないようにするなら
以上のように書き換えればよいはず。
 
Office TANAKA より:
http://officetanaka.net/excel/vba/tips/tips151.htm

回答
投稿日時: 19/02/20 17:21:47
投稿者: WinArrow
投稿者のウェブサイトに移動

 sk さん、ありがとうございました、
 
ちょうど、TANAKAさんのページを読んでいたところでした。
読み終わって、戻ってきたら、skさんのレスが・・・・・
 
バージョンによって、違うことが分かりました。
 
面倒ですね・・・

投稿日時: 19/02/20 17:33:49
投稿者: SHIBARAKU

皆さん、ありがとうございます。
無事に抽出できました。
バージョンによって、コードが違うと今後購入するEXCELで問題がありそうですね。