Excel VBAでの疑問点ですが、少し調べても解決しないので教えていただきたいです。 今日と2020/7/1との差の分、下にずらしたセルを選択したくて

Excel VBAでの疑問点ですが、少し調べても解決しないので教えていただきたいです。 今日と2020/7/1との差の分、下にずらしたセルを選択したくて Dim i i = "=datediff(d,date,#7/1/20#)" Cells(i, 4).Select というのを書いたのですが、実行すると「型が一致しません」というエラーが出るのですが、なぜだか理由がわかりません。 型宣言もいくつか試したのですが、どうにもうまくいきません。 初歩の初歩だと思いますがどうかご教授いただけないでしょうか。

Excel | Visual Basic22閲覧xmlns="http://www.w3.org/2000/svg">250

ベストアンサー

0

VBAの関数とワークシート関数が混合してしまっています。 "=datediff(d,date,#7/1/20#)" というのは文字列ですが先頭に=が付くと数式になります。 が、 それはセルに文字列を入れた時です。この場合は変数に文字列を入れるのですから数式にはなりません。なので Cells(文字列,4) で型が変ですよ、になります。それにワークシート関数なら ="=DATEDIF(""2020/7/1"",TODAY(),""d"")" おそらく i = DateDiff("d", Date, #7/1/2020#) なのかもしれませんが今日が2020/10/29なら iは-120になります。 Cells(-120,4)でエラーです。 Sub test() Dim i As Long i = DateDiff("d", #7/1/2020#, Date) Cells(i, 4).Select End Sub こんな感じかな? D120セルが選択されます。

ThanksImg質問者からのお礼コメント

皆様わかりやすい回答でだれをBAに選ぶか悩んだのですが、中でも一番わかりやすかった taihendaさんに送らせていただきます。 ワークシート関数も""でくくれば使えるものだと思っていたので前提が間違っていたみたいです、おかげで解決できました、皆様ありがとうございます!!

お礼日時:10/30 23:04

その他の回答(2件)

0

それだとiの中身が"=datediff(d,date,#7/1/20#)"になってるので、 Cells("=datediff(d,date,#7/1/20#)",4).select になってしまうからだと思います。 戻り値を数値にする必要があるので、下記に書き換えればたぶんおっけーです Sub gg() Dim i i = DateDiff("d", #7/1/2020#, Date) Cells(i, 4).Select End Sub とか Sub ggg() Cells(DateDiff("d", #7/1/2020#, Date), 4).Select End Sub

0

"=datediff(d,date,#7/1/20#)" というのは、セルの数式として実行して初めてセルに結果が出ます。 文字列を代入しても、i にはその文字列が入るだけです。 ですのであいているセルに Range("Z100").Formula="=datediff(d,date,#7/1/20#)" i = Range("Z100").Value のようにするか、これは格好悪いので通常は i = DateDiff("D", CDate("2020/7/1"), Now()) Cells(i,4).select というように、VBA の日付処理関数を使用して書きます。