2016-06-16 20 views
1

DD/MM/YYYY HH:MM AM/PMの形式で2つの日付を比較しようとしています。ある日付が他の日付よりも大きければフィールドには「前」または「後」という単語があります。VBA Excelを使用してセルを記入する日付を比較

私はこれを試みましたが、悲惨に失敗しました。

For col = 0 To objSheet.UsedRange.Rows.Count 
    objSheet.Range("A2").Formula = "=IF(Value < B&(col+2), Before,After)" 
Next 

ラインobjSheet.Range("A2").Formula = "=IF(Value < B&(col+2), Before,After)"は、任意のエラーをスローしないようですが、私は私のExcelファイルに取得するすべての#NAME?

値が他の文字列を比較しようとしている値を含む文字列です。その後、

' Value = 5/4/2016 8:00:00 PM 
' Value in B column: 5/5/2016 12:00:00 PM 

は、出力は=、BEFOREが、その後

'Value in B column: 5/5/2016 2:00:00 AM 

場合、私はいくつかのdiff_date機能を見てきました

後の出力があるべきそれはいないように統合する必要がある場合これはオプションとして表示されないためです。

これを達成する方法はありますか?私は間違って何をしていますか?

+1

それはVBAでの予約語であるように私が値とは異なる変数を使用します。 '' Vlue''を使用すると、式は次のようになります。 '' = IF( ""&Vlue& ""

答えて

1

編集済みこれはExcel 2013で動作しますが、私は何をしているのかについていくつかの仮定をしなければなりませんでした。以下のコードは、Valueの日付が列Bの値の前または後にここで起こっ

Option Explicit 
Option Base 0 

Public Sub PopulateDates() 
    Dim dateString As String 
    Dim row As Long 
    dateString = "5/4/2016 8:00:00 PM" 
    Dim dateRepresentation As String 
    dateRepresentation = "VALUE(""" & dateString & """)" 

    Dim newFormula As String 
    For row = 1 To ActiveSheet.UsedRange.Rows.Count 
     newFormula = "=IF(" & dateRepresentation & " < B" & CStr(row) & ", ""Before"",""After"")" 
     ActiveSheet.Cells(row, 1).Formula = newFormula 
    Next row 
End Sub 

たくさんあるかどうかに応じて、列Aに記入します。

  • dateStringの代わりに、スコットCranerの音符当たりValue、そしてValueはとても汎用的であるため、あなたはそれが何を意味するのかを忘れかもしれません。
  • dateRepresentationは、ワークシート式のリテラルとして日付を表す方法です。それは、例えば、VALUE("5/4/2016 8:00 PM")である。
  • newFormulaはそれ自身の行にあるため、割り当てを行う前にデバッガで確認することができます。 :)
    • row(あなたはcol+2でした)はVBAの一部ですので、あなたの数式の一部ではありません。 CStr(row)は、文字列を作成します(42)。の後に,の後の文字列を&に貼り付けます。
  • ActiveSheet.CellsActiveSheet.Rangeの代わりにの代わりに私が機能しなかったためです。あなたはこのすべての結果は、セルA1に、例えば、置くことであるobjSheet代わりのActiveSheet

を使用します。

=IF(VALUE("5/4/2016 8:00:00 PM") < B1, "Before","After") 
+0

私は逆の結果を得ていたので、前に。しかし、これはうまくいった!本当にありがとう – Splendonia

関連する問題