No.2
- 回答日時:
シリアル時刻ならば次の方法は如何でしょうか。
TimeValue("10:20:00") or TimeSerial(10, 20, 0)
No.3ベストアンサー
- 回答日時:
こんにちは。
なかなか、難しい質問ですね。日付の比較は分かっているけれども、時間の比較というのは、私は、検証したことがありません。シリアル値の比較で本当に良いのかは、私は、疑問に残ります。
Cells(i,2) ----Cells(i,2).Text とすれば、"10:20:00" は、比較できるはずです。
Cells(i,2).Value とすれば、格納されたものは、見かけ上は、10:20:00 ですが、Date型になっています。
本来は、以下のように、リテラル値(#10:20:00# を直接入れること)は、コーディングの暗黙のルールとしてはいけません。必ず、変数を置いてから、変数に代入して、比較するようにします。
If Cells(i, 1).Value = #10:20:00# Then
If Cells(i, 1).Text = "10:20:00" Then
上手く行けば、両方ともヒットするはずです。
ワークシート関数のMatch を使う方法もあるとは思います。
それでは、どれがより良いでしょうか。
私は、この中では、文字列比較が上位に位置すると思います。
理由は、日付値は、Long 型ですからブレはありませんが、時間値は、無限小数のことがあるから、厳密な比較はできないのではないかという不安があります。オートフィルなどで入れると、誤差が発生します。だから、文字列比較が良いのではないか、と考えます。
したがって、以下のように、Text プロパティを入れればよいのではないか、というのが私の回答です。
Sub Test()
Dim i As Long
Dim myDate As String
myDate = "10:20:00"
For i = 1 To 100
If Cells(i, 1).Text = myDate Then
MsgBox i
End If
Next
End Sub
Find メソッドの検索の仕組みは、少し複雑になっているようです。
No.4
- 回答日時:
#3の追加
>Find メソッドの検索の仕組みは、少し複雑になっているようです。
Excel2002以上で、その仕様が変わったのだったと思います。
データは時間値のシリアル値で、文字列で検索するのは、ワークシートでは可能でしたが、こういうコードは、前のバージョンでは不可能だったと思います。
-----------------------------------------
Sub FindTest()
Dim rng As Range
Dim FirstAdd As String
Dim c As Variant
Dim srch As Variant
srch = "10:20:00"
Set rng = Range("A1:A100")
Set c = rng.Find( _
What:=srch, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not c Is Nothing Then
FirstAdd = c.Address
Do
MsgBox c.Row
Set c = rng.FindNext(c)
If c.Address = FirstAdd Then Exit Sub
Loop Until c Is Nothing
End If
End Sub
補足として、Value の比較を、検証してみて、正しいことが分かりました。
[Cells(i,1) と書くと、Value 値になる。暗黙のプロパティといいます]
同じ、時間値でも、以下のような例があります。
最初の時間にはヒットして、次の時間にはヒットしません。
10:20:00 0.430555555555556
10:20:00 0.430555555555555
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
しばらくするとネットワークの...
-
例えば192.168.1.10はプライベ...
-
エクセルで打刻(タイムレコーダ)
-
エクセル チーム成績管理
-
(1)のやり方やるときと(3)...
-
帰還率β
-
【Excel関数】特定の文字を別表...
-
2時間30分を分数で表わすと・・...
-
トランジスタの過渡応答
-
geogebra みたいに
-
Excel で最初の文字だけ大文字...
-
レトロフリーク→コンポジット出力
-
定格電圧と定格出力
-
EXCEL VBA 記号の削除
-
電圧感度(V/W)?
-
文字変換において、m3(立方)の...
-
タック?TAC?
-
和暦を西暦に変換する方法
-
斜投影図,等角投影図及び第三...
-
マージナル不良とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで打刻(タイムレコーダ)
-
しばらくするとネットワークの...
-
VBA カレンダー参照エラー
-
例えば192.168.1.10はプライベ...
-
ヤフオクでの在庫管理
-
磁気カードリーダ・学生証・エ...
-
エクセルで時間計算。ほんとう...
-
タイムゾーン
-
MSエクセルのif関数にて
-
表作成(EXCEL)
-
帰還率β
-
1から100までの自然数で、2.3.5...
-
文字変換において、m3(立方)の...
-
本音や多数派って、殆どは正し...
-
DocuWorks 文字認識 検索でき...
-
【Excel関数】特定の文字を別表...
-
geogebra みたいに
-
エンジン発電機をインバーター...
-
ハガキ宛名の住所の数字を漢数...
-
マージナル不良とは?
おすすめ情報