2017-04-24 3 views
0

としての英語の日付形式をinterpeting:VBA:私は英語の形式で日付を含むスプレッドシートを持っている文字列

12 Feb 2015 
13 Oct 2016 
etc. 

しかし、私のMS Excelがフランス語であることから、それが日付としてではなく文字列としてそれらを取ることはありません。 。

これらの値を解析する必要があるため、手順を実行しますが、迷惑なことが起こります。 OS/Microsoftの言語に関係なく英語で設定されたVBAは、12 Feb 2015を日付として取得し、それを印刷するとフランス語の日付(12-févr-201512/02/2015)が返されます。これにより、その値と以前の12 Feb 2015との比較ができなくなります。

VBAに文字列を日付として解釈させないように頼むことができますか?

  1. 内の文字列12 Feb 2015を入れて:ここで

    は私のコード+テストケースの簡易版(私は英語エクセル上でそれを実行している場合は、問題を見ることができません推測する)でありますスプレッドシートの範囲A1

  2. 実行には、以下のコード:それは前にあったよう

    Sub test() 
        myVal = Range("A1").Value 
        Range("A2").Value = myVal 
    End Sub 
    
  3. 範囲(「A2」)の値は、Excelの言語ではなく、文字列に日付となります。

注:は私が値ではなく、日付のStringなるようにするRange("A2").Value = "'" & myValを書くと考えているが、それは後でとにかく、'12 Feb 201512 Feb 2015を比較し、する私を可能にしていない、12 Feb 2015になります日付は既にmyVal = Range("A1").Valueで読んでいます。

+0

これは実際に '12-févr-2015'をとり、それを' 12/05/2015'にするのか、それともこれを記述する際の技術的な誤りですか? – Vityata

+0

サンプルコードではVariantを使用しています。値の解釈方法を制御するには、使用している変数のデータ型を制御する必要があります。 –

+1

@Vityataセルの中に '12-févr-2015'と表示されていますが、F2を押して値を確認すると' 12/02/2015'になります。 2月の代わりに5月は入力エラーです、今すぐ変更します! –

答えて

2

文字列を保持する場合は、Valueの代わりにTextを使用し、記憶域変数を文字列として定義します。そう

Sub test() 
    Dim myVal as String 
    myVal = Range("A1").Text 
    Range("A2").Value = myVal 
End Sub 

Textようなので、まだ新しいセルに書き込むためにValueを使用して、読み取り専用です。 ValueTextの違いの例を含むドキュメント:https://msdn.microsoft.com/en-us/library/office/ff840217.aspx

+0

ありがとうWolfieは、宣言をしようとします(問題は、この変数が他のものと混ざり合っており、ゲームのどの時点でこれまでになったのか分かりません)。 –

+0

@MatteoNNZ、それは宣言なしで動作するはずですが、常に宣言するのは良い習慣です!宣言は '.Text'で書かれた書式を強制することはありません。コンパイラとプログラマーがもっと明白になります! – Wolfie

関連する問題