teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

追記

2021/11/08 02:13

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -77,4 +77,15 @@
77
77
  検索範囲をcellsで指定した場合どういう挙動になるのかは検証していません。
78
78
 
79
79
  あとは日付型の検索と、日付型を数式で処理しているセルの検索方法がわからないので、引き続き回答を募集します。
80
- 進捗があればまた追記をおこないます。
80
+ 進捗があればまた追記をおこないます。
81
+
82
+ 結論(2021/11/8 11:08)
83
+ ---
84
+ Findメソッドで日付を検索することは諦めてMatch関数を使用することで日付の検索を行なうことができました。
85
+ 「VBA Find 検索できない」などで検索してシリアル値で検索しなければいけないことやMatch関数を使用する方法のほうが簡単であることは認知していましたが、なかなかうまくいきませんでした。
86
+ 結局ベスト回答に選ばせていただいたご回答の下記のコードを参考にすることで目的を達成することができました。
87
+ ```VBA
88
+ Dim a As Long
89
+ a = Application.Match(CLng(CDate("2021年11月7日")), Range("A:A"), 0)
90
+ MsgBox a
91
+ ```

6

追記

2021/11/08 02:12

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -57,11 +57,11 @@
57
57
 
58
58
  なぜ上記のようなコードで検索できないのか教えてください。
59
59
 
60
- 追記
60
+ 追記(2021/11/8 10:40)
61
61
  ---
62
62
  一歩前進しました。
63
63
  文字列が検索できなかった原因が判明し、文字列については検索することができました
64
- **文字列が検索できなかった原因はセル結合を行なっていたことが原因**でした。
64
+ **文字列が検索できなかったはセル結合を行なっていたことが原因**でした。
65
65
 
66
66
  具体的にはセルA1からC1までを結合していました。この状態で
67
67
  ```ここに言語を入力

5

追記

2021/11/08 01:43

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -55,4 +55,26 @@
55
55
  おそらくFindメソッドの使い方を間違っているのではないかと推測しています。
56
56
  最終的にはセルA1に日付が入力されていて、A1以下のセル(セル間の間隔はランダム)にA1+1 An+1...というように日付が連続で入力されているシートで任意の日付を検索したいです。もともとはFindメソッドを使って文字列や日付の検索を行なうところまではできていて、A1+1のように日付型で数式が入力されているセルの検索ができなくて困っている状況だったのですが、試行錯誤するうちに文字列の検索のやりかたさえわからなくなりました。
57
57
 
58
- なぜ上記のようなコードで検索できないのか教えてください。
58
+ なぜ上記のようなコードで検索できないのか教えてください。
59
+
60
+ 追記
61
+ ---
62
+ 一歩前進しました。
63
+ 文字列が検索できなかった原因が判明し、文字列については検索することができました
64
+ **文字列が検索できなかった原因はセル結合を行なっていたことが原因**でした。
65
+
66
+ 具体的にはセルA1からC1までを結合していました。この状態で
67
+ ```ここに言語を入力
68
+ Set a = Worksheets("Sheet1").Range("A1").find(what:="a", LookIn:=xlValues)
69
+ ```
70
+ とするとA1にaと入力されていても検索に引っかからないようです。
71
+ ```ここに言語を入力
72
+ Set a = Worksheets("Sheet1").Range("A1:C1").find(what:="a", LookIn:=xlValues)
73
+ ```
74
+ とすることで検索することができました。
75
+ 検索したい値が入力されているセルが結合されている場合、結合範囲全体を検索範囲にしないと検索に引っかからないようです。
76
+ なので同じような状態の人でセルの結合を行なっている場合は検索範囲を結合範囲と同じにしてみてください。
77
+ 検索範囲をcellsで指定した場合どういう挙動になるのかは検証していません。
78
+
79
+ あとは日付型の検索と、日付型を数式で処理しているセルの検索方法がわからないので、引き続き回答を募集します。
80
+ 進捗があればまた追記をおこないます。

4

コードの修正

2021/11/08 01:42

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  Sub find()
15
15
 
16
16
  Dim a As Variant
17
- Set a = Worksheets("Sheet1").Range("A1:A2").find(what:="2021年11月5日", LookIn:=xlValue)
17
+ Set a = Worksheets("Sheet1").Range("A1").find(what:="2021年11月5日", LookIn:=xlValue)
18
18
 
19
19
  MsgBox a.Row
20
20
 

3

コードの修正

2021/11/08 00:57

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -38,17 +38,20 @@
38
38
  Sub find2()
39
39
 
40
40
  Dim a As Variant
41
- Set a = Range("A1").find(what:="a", LookIn:=xlValues)
41
+ Set a = Worksheets("Sheet1").Range("A1").find(what:="a", LookIn:=xlValues)
42
42
 
43
43
  MsgBox a.Row
44
44
 
45
45
  End Sub
46
46
  ```
47
- すると日付を検索したときと同じエラーがでます。
47
+ すると以下のエラーがでます。
48
48
  ```エラーコード
49
- 実行時エラー"91":
49
+ 実行時エラー"9":
50
- オブジェクト変数または Withブロック変数設定されていません
50
+ インデック有効範囲にありません
51
51
  ```
52
+ デバックモードでaにカーソルをあわせると"a = Empty 値"と表示されます。
53
+ NotingとEmptyが別の状態であることはなんとなく認知していますが、なぜ上記二つのコードでエラーの内容が変わり、二つのコードとも検索できないのか理解できません。
54
+
52
55
  おそらくFindメソッドの使い方を間違っているのではないかと推測しています。
53
56
  最終的にはセルA1に日付が入力されていて、A1以下のセル(セル間の間隔はランダム)にA1+1 An+1...というように日付が連続で入力されているシートで任意の日付を検索したいです。もともとはFindメソッドを使って文字列や日付の検索を行なうところまではできていて、A1+1のように日付型で数式が入力されているセルの検索ができなくて困っている状況だったのですが、試行錯誤するうちに文字列の検索のやりかたさえわからなくなりました。
54
57
 

2

コードの修正

2021/11/08 00:56

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,8 @@
36
36
 
37
37
  ```VBA
38
38
  Sub find2()
39
+
39
-
40
+ Dim a As Variant
40
41
  Set a = Range("A1").find(what:="a", LookIn:=xlValues)
41
42
 
42
43
  MsgBox a.Row

1

コードの修正

2021/11/08 00:49

投稿

tatatace
tatatace

スコア2

title CHANGED
File without changes
body CHANGED
@@ -37,7 +37,7 @@
37
37
  ```VBA
38
38
  Sub find2()
39
39
 
40
- Set a = Range("A1").find(what:="2021年11月5日", LookIn:=xlValues)
40
+ Set a = Range("A1").find(what:="a", LookIn:=xlValues)
41
41
 
42
42
  MsgBox a.Row
43
43