2017-08-24 8 views
0

私は現在、3つの列を持つシートを持つVBAの式を使用して実験しています。年、月、日のそれぞれ1つ。彼らは一緒に式を使用して別の列に擬似日付を形成します:なぜ私の列の形式が矛盾していますか?

=I4& "/" &H4& "/" &G4 

続いて別のシートに、私は擬似日付を取得し、VBAでVLOOKUP関数を経由して、それをコピーする列を持っています。

私はVBAを使用する前に、列自体に数式を配置し、正常に動作します。私がVBAに入れようとしたときだけ、奇妙なことが起こります。

一部のセルは適切なフォーマットを持ち、一部のセルはデフォルトの数値ストリングです。 13日未満の日付が数字列にデフォルト設定されるようになります。

例:一部のセルには42741などがありますが、一部のセルには20/6/2017の適切な書式があります。

私は、Vlookup列が一般的な擬似日付列と同じ形式を使用していることを確認しましたが、問題は引き続き存在します。

フォーマットを日付に変更すると、日付が数字列にデフォルト設定されている人は、日と月が逆転してしまいます。 (2011年1月8日が2011年8月1日になるなど)。もう一度13日以上の人は影響を受けません。

私はVlookup列に数値フォーマットを設定しようとしましたが、もう一度幸運を祈ることはありません。これは参考のためのコードです。

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("a4:a9999")) Is Nothing Then 
     With Me.Range("d4:d9999") 
      .Formula = "=IF(ISNA(VLOOKUP(A4,ProjectEntry,10,FALSE)),"""",VLOOKUP(A4,ProjectEntry,10,FALSE))" 
      .Value = .Value 
      .NumberFormat = "dd/mm/yyyy" 
     End With 

質問は今、なぜExcelはこの日付の問題ですべての狂気を動作していますか?

編集:日付の形式が両端で似ていることを確認する方法を考え出しました。

コードでは、コピーと貼り付けを値として使用して、必要なデータを取得するようになりました。私はこれで持っている問題は、それがコピーボックス(あなたはセルをコピーするときに表示される移動点線ボックス)を残すと、それは常に私がで宣言された最初の行にジャンプすることであるしかし

With Me.Range("d4:d9999") 
    .Formula = "=IF(ISNA(INDEX(ProjectEntry,MATCH(A4,ProjectEntry[Project No],FALSE),10)),"""",INDEX(ProjectEntry,MATCH(A4,ProjectEntry[Project No],FALSE),10))" 
    .Copy 
    .PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
End With 

コード(行4)。私は自分のデータを入力するたびにスクロールを終了したくない。私のコードでこれを削除する方法はありますか?

+0

Excelはフォーマットについて混乱しています(最初の日か月ですか)?視覚的に日付をどのようにフォーマットするかにかかわらず、ISO 8601には曖昧さがないので(「yyyy-MM-dd」)、それを与えてみてください。 –

答えて

0

Excelでは、日付は数字です。 Excelは1899年12月31日以来の日数をカウントします。そして、その数字をあなたの日のように見せます。エクセルは後退ギアでもそれを行います。あなたが日付のように見えるものを入力すると、その日付を表す数字にあなたのエントリを変換します。 Excelのように見えるものは日付のようなものではありませんが、ヒントとしては地域の設定と関係しています。

ここで、「疑似日付」は「=日付(G4、H4、I4)」(シーケンスは年、月、日)にする必要があります。結果は数値です。 K4にDate()関数があり、K4を "dd/mm/yyyy"(引用符は含みません)と書式を設定すると、セルに表示されるものとみなされます。すべての値は、表示された日付を表す数値になります。

これで、VLookupなどの機能を使用して適切な値を取得できました。あなたがそれに問題があるなら、それは別の主題です。

+0

私は理解していません...私はVBAで数式を使ってみましたし、私が持っているものと結合しようとしました。しかし、私が得るのは#NAMEだけです。あなたはもっと精巧にすることができますか、私は失われている例を与えることができます。 – hjh93

+0

私はapoligise! 'DateSerial()'はVBA関数です。ワークシートの等価物はsimly 'Date()'で、同じ順序で3つの引数Year、Month、Dayを取ります。私は上記の私のポストでこれを修正しました。 – Variatus

+0

すべてが順調です。最後にこの問題が解決されました。どうもありがとう。 – hjh93

関連する問題