私は現在、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)。私は自分のデータを入力するたびにスクロールを終了したくない。私のコードでこれを削除する方法はありますか?
Excelはフォーマットについて混乱しています(最初の日か月ですか)?視覚的に日付をどのようにフォーマットするかにかかわらず、ISO 8601には曖昧さがないので(「yyyy-MM-dd」)、それを与えてみてください。 –