2017-07-03 14 views
2

私は2つの日付(異なる列)と現在の年の日付の間の比較を試みています。年が同じ場合は、列13の対応する行に「ATUAL」という単語を書き込む必要があります。年が異なる場合は、何も書き込む必要はありません。excel:vba型の不一致比較の日付

これはこれまで私が試したことです。

Sub CopyColumn2() 

Dim i As Long 
Dim j As Long 
Dim lastrow As Long 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim wbk As Workbook 
Dim wb As Worksheet 

Set wbk = Workbooks.Open("I:\CGP\DEOPEX\01 - Supervisão\01 - Administrativo\06- ADM - Taís e Natalia\Férias - Aprovadas\FÉRIAS TÉCNICOS EXTERNAS.xlsx") 
Set ws1 = ThisWorkbook.Sheets("BASE_TOTAL") 
Set ws2 = wbk.Worksheets("FUNCIONÁRIOS") 

lastrow = ws2.Range("A" & Rows.Count).End(xlUp).Row 


For j = 2 To lastrow 
    If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then 
     ws1.Cells(j, 13) = "ATUAL" 
    Else 
     ws1.Cells(j, 13) = "" 
    End If 
Next j 

End Sub 

日付は、列IおよびLに配置され、すべての列は日付として設定されます。私のExcelはポルトガル語なので、私の日付形式はdd/mm/yyyyです。

私は私のコードを実行すると、私はこのメッセージが表示されます。

実行時エラー13:型が一致しません

そして、この部分が強調表示されています:

If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then 

は誰ですここで何が問題なのか知っていますか?私のすべての日付は同じ方法でフォーマットされているので、うまくいくはずです。

+3

エラーが発生した行を確認しましたか? –

+0

1)あなたのコードを1行ずつ上に移動し、エラーの発生場所を確認します。 2)あなたの日付はすべて同じ形式で書式設定されていますが、テキスト形式またはExcel形式の形式ですか?それらをすべて同じようにフォーマットしても、テキストとしてはすべてあなたの数式であなたを助けるつもりはありません。正しい形式で日付を付けることが重要です。必要な形式に変換するには、まず手順が必要です。 –

+0

@EganWolfはい、質問を編集しました。 – paulinhax

答えて

1

これを試してみてください:

  1. 宣言日付変数Dim date1 As Date, date2 As Date変数

    date1 = ws1.Cells(j, 9) date2 = ws1.Cells(j, 12)

  2. 使用変数の

  3. 設定値をごIf文で

    If Year(date1) = Year(Date) Or Year(date2) = Year(Date) Then

+0

それは動作します、ありがとう!なぜ私のコードに違いが生じたのですか?私は不思議に思った。 – paulinhax

+0

@paulinhax正直言って、私は分かりません。それは何とか日付形式の違いに関連しています。 VBAはアメリカの書式を使用しています。これは 'mmddyyyy'です.Excelはあなたの地域を使います。ヨーロッパでは(ヨーロッパ各地にあると思いますが)' ddmmyyyy'です。このため、VBAでは、どのようなフォーマットが設定されていても、セルから直接取得された日付は認識されません。答えからのトリックは、何とかExcel形式の日付をVBA形式に変換し、正しく変換します。 VBAからセルに日付を設定する場合にも使用できます。あなたがそれを直接行うと、月と日を間違えてしまうことがあります。 –