🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1500閲覧

VBAのエラーコード13を解決したいです

tassan

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/02/07 21:37

編集2021/02/11 21:43

VBAのエラーを解決したいです

VBAで入力した月日に関連して色が変わるコードを作っているのですが
型変換の仕方がわからないので教えてください

13

型が一致しません

該当のソースコード

VBA
Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long
Dim j As long
Dim mycell As Range
for i = 4 To Cells(Rows.Count, 1).End(xlUp).Row
for j = 8 To 15
Set mycell = Cells(i, j)
If 30 <= DateDiff("d", mycell, Date) And mycell <> "" Then

Range(Cells(i,3),Cells(i,7)).Interior.Color = RGB(255,0,0)

Elseif 14 <= DateDiff("d", mycell, Date) And mycell <> "" Then
Range(Cells(i,3),Cells(i,7).Interior.Color = RGB(255,255,0)

Elseif 7 <= DateDiff("d", mycell, Date) And mycell <> "" Then

Range(Cells(i,3),Cells(i,7).Interior.Color = RGB(0,255,255)

Elseif 7 > DateDiff("d", mycell, Date) Then

Range(Cells(i,3),Cells(i,7).Interior.Color = RGB(255,255,255)

End if
Next
Next

ちょうどSet mycell とif式の間にエラーが発生します

試したこと

my cell as dateで変換しようとしたのですができませんでした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/07 21:43

>VBAのコードについて質問です タイトルに全く内容がないので、要件を記載してください。 https://teratail.com/help/question-tips#questionTips3-1 コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564 エラー内容を記載してください。 https://teratail.com/help/question-tips#questionTips3-4-2 「うまくいかない」「できない」では情報はゼロです。 https://teratail.com/help/question-tips#questionTips3-4-1
Y.H.

2021/02/09 13:58 編集

> If 30 <= DateDiff('d, mycell, Date) And mycell <> '' Then > ・・・略・・・ >ちょうどSet mycell とif式の間にエラーが発生します 'd → 'd' 入力ミスが多すぎるのでは?
m.ts10806

2021/02/09 21:03

>VBAのコードについて質問です タイトルに全く内容がないので、要件を記載してください。 https://teratail.com/help/question-tips#questionTips3-1 コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564 エラー内容を記載してください。 https://teratail.com/help/question-tips#questionTips3-4-2 「うまくいかない」「できない」では情報はゼロです。 https://teratail.com/help/question-tips#questionTips3-4-1
guest

回答3

0

[型が一致しません
mycell as dateで変換しようとしたのですができませんでした]
この件に関するネットがありましたので URL 記載してみました
https://kosapi.com/post-2409/
DateDiff【デイトディフ】関数の書式と引数の説明
Dim mycell As Variantの様です

イメージ説明

投稿2021/02/12 00:37

syousuke.33

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

とりあえず、mycellは日付か空白のいずれかと仮定してますが、

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim i As Long 3 Dim j As Long 4 Dim mycell As Range 5 For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row 6 For j = 8 To 15 7 Set mycell = Cells(i, j) 8 If mycell <> "" Then 9 If 30 <= DateDiff("d", mycell, Date) Then 10 Range(Cells(i, 3), Cells(i, 7)).Interior.Color = RGB(255, 0, 0) 11 ElseIf 14 <= DateDiff("d", mycell, Date) Then 12 Range(Cells(i, 3), Cells(i, 7)).Interior.Color = RGB(255, 255, 0) 13 ElseIf 7 <= DateDiff("d", mycell, Date) Then 14 Range(Cells(i, 3), Cells(i, 7)).Interior.Color = RGB(0, 255, 255) 15 ElseIf 7 > DateDiff("d", mycell, Date) Then 16 Range(Cells(i, 3), Cells(i, 7)).Interior.Color = RGB(255, 255, 255) 17 End If 18 End If 19 Next 20 Next 21End Sub

変数を使うともう少しスッキリするかな。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim i As Long 3 Dim j As Long 4 Dim mycell As Range, diff As Long, mycolor As Long 5 6 For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row 7 For j = 8 To 15 8 Set mycell = Cells(i, j) 9 If mycell <> "" Then 10 diff = DateDiff("d", mycell, Date) 11 If 30 <= diff Then 12 mycolor = RGB(255, 0, 0) 13 ElseIf 14 <= diff Then 14 mycolor = RGB(255, 255, 0) 15 ElseIf 7 <= diff Then 16 mycolor = RGB(0, 255, 255) 17 ElseIf 7 > diff Then 18 mycolor = RGB(255, 255, 255) 19 End If 20 Range(Cells(i, 3), Cells(i, 7)).Interior.Color = mycolor 21 End If 22 Next 23 Next 24End Sub 25

投稿2021/02/10 02:18

編集2021/02/10 02:27
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1'Rows.Countの後は, 2for i = 4 To Cells(Rows.Count. 1).End(xlUp).Row 3for i = 4 To Cells(Rows.Count, 1).End(xlUp).Row 4 5'Rangeの)が足りていない 6Range(Cells(i, 3), Cells(i, 7).Interior.Color = RGB(255,0,0) 7Range(Cells(i, 3), Cells(i, 7)).Interior.Color = RGB(255, 0, 0) 8 9'指定は基本的に"(ダブルクォーテーション)で囲む 10If 30 <= DateDiff('d, mycell, Date) And mycell <> '' Then 11If 30 <= DateDiff("d", mycell, Date) And mycell <> "" Then

Cells

VBAで位置を変化させるような1つのセルを指定する場合の書き方の基本は、

Cells(行, 列)
このように書いて下さい。

基本的な構文の記入ミスですが、手打ちだと思うので最初は慣れるまでRange()と書いてから中にCells()と書くようにすれば徐々にミスをなくせます。

投稿2021/02/08 00:08

編集2021/02/08 00:21
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tassan

2021/02/09 13:54

回答ありがとうございました。ソースの該当箇所を確認したところそのようなミスがなかったので、コピペではなく手打ちで入力したことが原因だと思います。質問内容を訂正したので再度お答えいただければ幸いです。
退会済みユーザー

退会済みユーザー

2021/02/10 00:04

ソースコードを元のデータからエラーが発生する箇所を全てコピペしてください。 上記のコードは打ち間違いを修正すればエラーは出ませんので調査が出来ません。 ちなみに my cell as dateと書いていますがmycell as dateの書き間違いですか? 仮にmycellだとしてCells(i, j)に入っているデータは何ですか? my cellだとすれば値はいつ何を入れてますか? as dateで変換といっていますがas dataで変換は出来ません。 正しいソースコードと的確な質問は正しい答えが素早く手に入るため、あなたの利益になります。
退会済みユーザー

退会済みユーザー

2021/02/10 00:30

As dataの補足すると例えば下記の記述がありますね。 Dim mycell As Range これは変数mycellのデータ型をRangeに定義しますという意味です。 この変数mycellにはRange型以外入れませんよ。 それ以外を入れたらエラー出してくださいねってお願いしてる状態です。 なので例えば dim mycell as dataを別に作ったとしてここに文字列や数字を入れたらエラーになります。 型が一致しませんになります。 なので変換する場合は下記の参考サイトのような形で変換処理を行う必要があります。 https://vba-labo.rs-techdev.com/archives/119 該当セルにどのような形で記入しているかで変換方式は多数ありますが、変換元のデータを参照して必要なプログラムを組むので元のデータがないと変換できないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問