1

newbの質問をお詫びしますが、オンラインで解決策を見つけられませんでした。VBAの日付範囲について簡単なif-thenステートメントを実行しようとしています。これまでの私のコード(機能していません):

            LR = 52
            Set rngData = Range("D2:D" & LR)
            'define the data range to evaluate
            For Each rngCell In rngData
                Select Case rngCell.Value
                    Case Val(Range("'Some_dates'!O8").Value) To Val(Range("'Some_dates'!P8").Value): rngCell.Value = Range("'Some_dates'!N8").Value
                    Case Val(Range("'Some_dates'!O9").Value) To Val(Range("'Some_dates'!P9").Value): rngCell.Value = Range("'Some_dates'!N9").Value
                    Case Val(Range("'Some_dates'!O10").Value) To Val(Range("'Some_dates'!P10").Value): rngCell.Value = Range("'Some_dates'!N10").Value
                    Case Val(Range("'Some_dates'!O11").Value) To Val(Range("'Some_dates'!P11").Value): rngCell.Value = Range("'Some_dates'!N11").Value
                Case Else: rngCell.Value = "Outside date ranges"
                End Select
            Next rngCell

すべてのセルの出力は「日付範囲外」です。これは、rngDataのすべてのセルに「else」値を選択していることを意味します。これは正しくありません。

'Some_dates'ワークシートのセルO8:P11は、4つの日付範囲を定義します(開始は列O、終了は列P)。これらは、セルのフォーマット方法に応じて、数値または日付のように見える日付です。'Some_dates'ワークシートの列Nには、各日付範囲のラベルがあります。

どんな助けでも大歓迎です!

4

1 に答える 1

3

比較しているすべてが日付である場合、それValが問題です。 Val(1/1/2012)、ここで 1/1/2012 は「実際の」Excel の日付 (またはそのことについては偽の日付) であり、「1」を返します。Val は、文字列の先頭から最初の非数値文字までを返します。だから、試してみてください:

Case Range("'Some_dates'!O8").Value To Range("'Some_dates'!P8").Value: rngCell.Value = Range("'Some_dates'!N8").Value

日付が一般形式または数値形式で格納されている場合、Val は数値全体 (文字列) を返すため、コードは機能するはずです。

于 2012-06-16T18:56:53.573 に答える