2016-04-19 8 views
0

E2 = "10-Apr-16"のExcelシートをカスタム形式として使用しています。そして、私はその週番号(多分16)を返したいと思います。私は(E2アクティブで)使用コード:Excel VBA Format関数が希望の日付を返しません

With ActiveCell 
    .NumberFormat = "mm/dd/yyyy" 
    .Value = Date 
End With 
oneDate = Format(Range("E2").Select, "mm/dd/yyyy") 
weekNumber = DatePart("ww", oneDate) 

oneDateは、1899年12月29日であることが判明し、WeekNumberは私のコードの何が問題である52であることを???


アップデート:私は、後にコードを変更し

:これで

Range("E:E").NumberFormat = "m/dd/yyyy" 
oneDate = Range("E2") 
oneDate = Format(Range("E2").Select, "m/dd/yyyy") 
weekNumber = DatePart("ww", oneDate) 

、私はoneDateとして1899年12月29日を取得し、weekNumberなど52。

3行目がない場合(または1行目がなくても)、コードは正しく動作し、weekNumberとして16を返します。

3行目(1行目の有無にかかわらず)は、1899年12月29日にはまだ返されました。

私はこの問題が3行目のコードにあると思いますが、それが何であるかはわかりません。私はそれがどうやって間違っていたのか誰にも分かりますか

答えて

1

あなたのコードは(どちらかであることを起こる1)のActiveCellにシステム日付を挿入し、その後、あなたは私にはわからないE2

にoneDate設定完全にあなたが達成したいと思っているものですが、あなたが述べたことを達成することができると思われます。

weekNumber = datepart("ww", Range("E2")) 

限り何E2でありますが実際の日付のシリアルExcelが日付として認識番号、およびないweekNumberはまだ間違っている場合は、日付(重要な区別)

のように見えるだけで、テキストであるとして、

weekNumber = datepart("ww",date) 
を試してみてください

これは現在の週番号を取得し、Excelが関係する限りE2は実際に日付ではないことを意味します。

+0

ありがとうございます。原因は、datepart関数を使用する前に日付を2回書式設定していたようです。たぶん、2番目の書式設定は、1899年と解釈される一連のシリアル番号に日付を付けました。 –

0

おそらく:

Sub qwerty() 
    Dim d1 As Date 
    d1 = ActiveCell.Value 
    MsgBox Application.WorksheetFunction.WeekNum(d1) 
End Sub 

enter image description here

+0

ありがとうございます! –

関連する問題