質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

757閲覧

マクロをつかってDATE配列に特定要素があるか確認

FM88mhmh

総合スコア22

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/04/03 05:15

編集2020/04/03 06:09

シートから取り込んだDATE配列に含まれている日付かどうかを確認したいのですが型が一致しないというエラーが出ます。

実行時エラー'13': 型が一致しません。

シートから取り込み、STRINGに変換して比較という風にしているのですがうまくいきません。
どのように修正すればいいのかご教授お願いいたします。

VBA

1 Dim holidays(78, 0) As String 2 Dim dholidays 3 Dim exworkday(28, 0) As String 4 Dim dexworkday 5 Dim varResH 6 Dim varResW 7 Dim i As Integer 8 9 With ThisWorkbook.Worksheets("Sheet2") 10 dholidays = .Range("A2:A80") 11 dexworkday = .Range("F2:F30") 12 End With 13 14 For i = 0 To 78 15 holidays(i, 0) = CStr(dholidays(i + 1, 1)) 16 Next i 17 18 For i = 0 To 28 19 exworkday(i, 0) = CStr(dexworkday(i + 1, 1)) 20 Next i 21 22 With ThisWorkbook.Worksheets("Sheet1") 23 For i = 1 To 31 24 Dim d As String 25 d = // 2020/04/03 26 27 varResH = Filter(holidays, d) // ここでエラーが発生します。 28 varResW = Filter(exworlday, d) 29 30 If UBound(varResH) <> -1 And UBound(varResW) = -1 Then 31 32 End If 33 Next i 34 End With 35End Sub 36

ローカルウィンドウで確認したところ、 holidays の要素も d もStringでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Filter関数に渡す配列は一次元配列のみ許可されています。
二次元配列渡しているのでエラーになっていますね。

VBA

1 Dim holidays(78) As String 2 Dim dholidays 3 Dim exworkday(28) As String 4 Dim dexworkday 5 Dim varResH 6 Dim varResW 7 Dim i As Integer 8 9 With ThisWorkbook.Worksheets("Sheet2") 10 dholidays = .Range("A2:A80") 11 dexworkday = .Range("F2:F30") 12 End With 13 14 For i = 0 To 78 15 holidays(i) = CStr(dholidays(i + 1, 1)) 16 Next i 17 18 For i = 0 To 28 19 exworkday(i) = CStr(dexworkday(i + 1, 1)) 20 Next i 21 22 With ThisWorkbook.Worksheets("Sheet1") 23 For i = 1 To 31 24 Dim d As String 25 d = "2020/04/03" 26 27 varResH = Filter(holidays, d) ' ここでエラーが発生します。 28 varResW = Filter(exworkday, d) 29 30 If UBound(varResH) <> -1 And UBound(varResW) = -1 Then 31 32 End If 33 Next i 34 End With

投稿2020/04/03 06:18

yureighost

総合スコア2183

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

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

FM88mhmh

2020/04/03 06:39

一次元関数しか使えないのですね! ありがとうございます。 ちなみになのですが、ブックから配列に値を取り込んだ時に 必ず二次元配列になってしまうのですが、これはどうにもならないのでしょうか? しかも作った配列は(0)からなのに取り込むと(1,1)からになってしまったり。。。
yureighost

2020/04/03 06:51

1からなのは変えられませんが、一行のRange取得でしたら、 Application.Transpose関数と言うもので一次元配列に変換できます。 holidays = Application.Transpose(dholidays)
FM88mhmh

2020/04/03 07:43

そういう関数があったんですね。。。 追加の回答ありがとうございます! 無事求めてたものを作ることができました! ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問