[[20200304181415]] 『型が一致しません』(くま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『型が一致しません』(くま)

教えてください。
下記コードを実行しようとしたところ「エラー13 型が一致しません」と
表示され、k = DateDiff("yyyy", d, i)部分が引っ掛かります。

longを変えてみてもダメで、どのようにすればよろしいのでしょうか。

Worksheets("Sheet2").Cells(1, 3)と
Worksheets("Sheet1").Cells(q, 15)には日付が入っています。

Sub test()

    Dim i As String
    Dim d As String
    Dim k As Long
    For q = 6 To 10000

    i = Worksheets("Sheet2").Cells(1, 3).Value
    d = Worksheets("Sheet1").Cells(q, 15).Value
    k = DateDiff("yyyy", d, i)

If k < 3 Then

    Worksheets("Sheet1").Cells(q, 18).Value = DateAdd("yyyy", 3, d)

ElseIf k >= 3 And k < 5 Then

    Worksheets("Sheet1").Cells(q, 18).Value = DateAdd("yyyy", 5, d)

End If

Next

End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 DateDiff は、エクセル関数では・・・。
(BJ) 2020/03/04(水) 18:42

 第二引数、第三引数は
バリアント、かデート型で宣言して
エクセル様が自動で日付と認識できる値、
若しくはシリアル値にすれば良いと思います。 ← 思うだけです ^^;
詳しくはマイクロソフト様のHP等でご確認を。。。 m(_ _)m
(隠居じーさん) 2020/03/04(水) 18:45

 あ、vbaでも使えたんだ・・・
http://officetanaka.net/excel/vba/function/DateDiff.htm

 変数iとdに何が入っているか確認してみましたか?

(BJ) 2020/03/04(水) 19:00


iとdには、日付が入力されているセルが選択されています。
(くま) 2020/03/04(水) 19:20

 こんばんは ^^
ですから。。。変数の宣言がストリング型に
なっているからでは?
m(_ _)m
(隠居じーさん) 2020/03/04(水) 19:30

dateに変えても、ダメなんです。。。。。
(くま) 2020/03/04(水) 19:42

 エラーになった時の q の値を確認後、そのセルの値を確認すると・・・。
 >日付が入力されているセル
 どんな日付なんですかね?

 因みに文字でも可。
 MsgBox DateDiff("yyyy", "2000/1/9", "2020/3/3")
(BJ) 2020/03/04(水) 19:45

日付は、2020/02/01 などの表記です。
連続データになっているので、変数で入力したいのです
(くま) 2020/03/04(水) 19:56

 ですから、セルの値に間違いが無いのなら、エラーになる方がおかしいと思うので、
 エラーになった時のセルの値を確認してくださいと言っているのです。

 Worksheets("Sheet2").Cells(1, 3).Value
 は、固定セルなので間違いはないだろうと思ってます。

 表現に気になった事があるので、
 セルを選択するコードは見当たらないけどね。
 >日付が入力されているセルが選択されています。

(BJ) 2020/03/04(水) 20:05


 MsgBox Worksheets("Sheet2").Cells(1, 3).Value
 MsgBox TypeName(Worksheets("Sheet2").Cells(1, 3).Value)
こんなので、何が表示されるか調べて、同じ内容を
アップしてみると原因が解るかもしれませんね。。。^^;
m(_ _)m
(隠居じーさん) 2020/03/04(水) 21:28

みなさま、色々とアドバイスありがとうございます!
どうしてもうまくいかず、取り急ぎ関数でなんとかしてみました。。。
(くま) 2020/03/05(木) 08:59

>Worksheets("Sheet1").Cells(q, 15)には日付が入っています。

(q)は行数の間違いと思いますので確認してみては。
Cells(q, 15) → にCells(1, 15)にしてみるとエラーは出ない。

>k = DateDiff("yyyy", d, i)部分が引っ掛かります。

1) (q)には 6 が代入されるのでCells(6, 15)、つまり O列6行目「O6」に日付が入力されていないため。
2) DateDiff(単位, 開始日時, 終了日時)です。
 ここでは(d)に空白である「""」が代入されるので開始日時と違う。
 つまり型が一致しないのでエラー表示が出る。

>iとdには、日付が入力されているセルが選択されています。

セルが選択されているわけではありません。セルの値を変数に格納しているだけです。
変数について もう一度確認勉強してください。

他の不具合については回答しません。

(閲覧者) 2020/03/05(木) 21:56


>DateDiff は、エクセル関数では・・・。

ワークシート関数 → DATEDIF ROUND  DATE → 全て大文字
VBA関数 → DateDiff Round Date → 頭文字のみ大文字

同じ関数名でも両方同一だったり違ったりする場合もある

ご存知だったら失礼します。

(jk) 2020/03/05(木) 22:49


 茶々入れ専門のjkへ
 頭から全部読め。
(BJ) 2020/03/06(金) 01:41

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.