Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
if関数のネスト
投稿日時: 19/07/10 12:13:49
投稿者: miso
メールを送信

ckSheetは1列にID,9列目に日時・時間、12列目に結果を出したいセル
allSheetは1列にID,2列に日時・時間、3列にKeyとする1が入ってます。
 ※日時と時間は【2018/12/11 22:17:07】こんな感じです。
 
条件はIDが合致、Keyが1で、日時・時間がallSheetよりckSheetのが早いものを見つけたらchSheetの12列目に”該当あり”と表示させたいです。
 
現在以下のコードを入れても日時、時間のチェックが機能していない状態です。
なぜかご指摘を頂きたくよろしくお願い申し上げます。   miso
 

    For i = 2 To ckRow
        For ii = 2 To allRow
            If ckSheet.Cells(i, 1) = allsheet.Cells(ii, 1) Then
                If allsheet.Cells(ii, 3) = 1 Then
                    If ckSheet.Cells(i, 9) > allsheet.Cells(ii, 2) Then
                        ckSheet.Cells(i, 12) = "該当あり"
                    End If
                End If
            End If
        Next ii
    Next i

回答
投稿日時: 19/07/10 13:16:03
投稿者: sk

引用:
ckSheetは1列にID,9列目に日時・時間、12列目に結果を出したいセル
allSheetは1列にID,2列に日時・時間、3列にKeyとする1が入ってます。

引用:
日時・時間がallSheetよりckSheetのが早いもの

引用:
If ckSheet.Cells(i, 9) > allsheet.Cells(ii, 2) Then

If ckSheet.Cells(i, 9) < allsheet.Cells(ii, 2) Then

投稿日時: 19/07/10 13:55:20
投稿者: miso
メールを送信

skさん、ご回答ありがとうございます。
符号が間違えてました、ごめんなさい。
符号を変えたらIDが同じものも全部はじかれました。。。なぜでしょうか?
理由はおわかりになりますでしょうか?  miso

回答
投稿日時: 19/07/10 14:29:43
投稿者: sk

引用:
符号を変えたらIDが同じものも全部はじかれました。。。なぜでしょうか?

各ワークシート上に実際に記録されているデータ次第なので、
現時点では何ともお答えできません。
 
例えば、[ID]列の値が同じである行が allSheet 側に見つかったとしても、
その行の[Key]列のセルの値が 1 ではなければ、当然その次の If 文には入りません。
 
また、それぞれのワークシートの[日時・時間]列のセルに
格納されているのが日時データ( Date 型)ではなく
文字列データ( String 型)であるなら、当然
「日時データの比較」ではなく「文字列データの比較」が
行なわれることになるはず。
 
例えば "2019/2/1 "という文字列と "2019/10/1" という文字列
月パートや日パートの桁数が可変である日時文字列)とを
比較すれば、前者の方が大きいという扱いになります。

回答
投稿日時: 19/07/10 15:07:28
投稿者: WinArrow
投稿者のウェブサイトに移動

ステップ実行
をやってみましょう。

投稿日時: 19/07/10 15:38:53
投稿者: miso
メールを送信

skさん、ご回答ありがとうございました。
見つけました!日付データが文字列と数値でした。。。Formatで書式を合わせてしまっていたので全く気づきませんでした。。。
ご指摘大変感謝します。ありがとうございました。
 
WinArrowさん、ご指摘ありがとうございます。
ステップは何度もかけて一行ずつ見ていたのですが、理由がさっぱりわかってませんでした。
 
 
皆様、くだらない凡ミスにお付き合いさせてしまい申し訳ございませんでした。またその中でご回答頂きまして大変感謝致します。  miso