
21/03/2004 は日付として登録されませんが、7/3/2004 は日付として登録されます。月値が 0 から始まる日付の値からすべての 0 を削除する方法をご存知の方はいませんか?
そのため、左余白に接着された列は、何らかの理由で自動変換されません。右余白に接着された列は問題ありません。
答え1
通常、これは DATEVALUE 関数を使用して、テキストの日付を Excel の日付値 (つまり、Excel が日付として認識する数値) に変換することで解決できます。使用方法は DATEVALUE(date_string or cell_address) です。
ただし、1) 例の文字列では日が月より前にあり、DATEVALUE では月の後に日が続くことが想定されており、2) 一部の日付文字列には時刻も含まれているため、この方法はここでは機能しません。
以下は、提供された例で機能する配列数式の代替例です。Control- Shift-Enterキーの組み合わせを使用して入力する必要があります。
=DATE(
RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),
LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),
LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)))
)
この非常に複雑な配列数式 (もっと簡単な数式を誰か提供してくれるといいのですが) は、DATE 関数を使用して Excel の日付値を作成します。 (日付を作成したときに、たまたまセル F8 に元の日付文字列がありました。)
変換する必要がある日付文字列は、時刻が含まれることがあるため、そのままの形式では使用できません。代わりに が使用されますRIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8)
。この数式は、日付文字列内のスペースを検索します。スペースが見つかった場合は、LEFT 関数を使用して、スペースの左側にあるすべての文字を取得します。スペースが見つからない場合は、元の文字列をそのまま返します。
数式の最も外側の部分は DATE 関数です。年、月、日を指定すると、Excel の日付が生成されます。上記のコードでは、これら 3 つの部分の計算を分割しています。
年計算は次のとおりです。
- 日付文字列を逆にします (上記の説明に従って時間を切り取ります)。
- SEARCH 関数を使用して、この反転された文字列の最初の「/」の位置を見つけます (このスラッシュは、実際には反転されていない日付文字列の最初のスラッシュです)。
- RIGHT 関数を使用して、日付文字列の右側からその文字数を取得します。
月の計算には次の手順があります:
- 最初のスラッシュの位置を見つけてください逆転していない日付文字列。
- この位置と、年の計算で決定された 2 番目の「/」の位置との差を計算して、月の文字数 (1 または 2) を決定します。
- MID 関数を使用して、最初のスラッシュと 2 番目のスラッシュの間の文字を返します。
日数の計算は最も簡単です。
- 月の計算と同じ方法を使用して、最初の「/」の位置を計算します。
- LEFT 関数を使用して、文字列の左側からその文字数 (-1) の文字を取得します。
結果を得るにはそれほど複雑ではない方法もありますが、@Barry が提案しているように、リボンの [データ] タブにある [テキストを列に分割] コマンドを使用するのが最も簡単な方法です。
もう 1 つの方法は、正規表現パターンマッチング関数を使用することです。この関数は Excel に組み込まれていませんが、VBA コードで作成してアクセスできます。コードは少し複雑ですが、ネット上でいくつかのバージョンが利用可能です (例:この例)。ただし、 関数の使用は非常に簡単です。たとえば、日を取得するための一致式は のようなものでREGEXP("./",F8)
、これを DATE 関数で使用して Excel の日付値を取得できます。
便宜上、完全な形式の式を以下に示します。
=DATE(RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1))))
答え2
左側に貼り付けられる値は、通常、テキスト値であることを意味しますが、数値/日付値は右側に揃えられます。
Excel で日付と時刻の変換を行う前に、次の点を確認してください。
システムの言語/地域設定、特に日付と時刻の形式を確認してください。Excel はデフォルトのシステム日付と時刻設定を使用するため、日付と時刻の変換は地域によって異なります。
セル値に余分な空白や隠れた改行文字が付いていないことを確認してください。空白を含む有効な日付時刻値は日付時刻ではなくテキスト値として扱われるため、Excel では自動変換されません。
Excel のカスタム セル形式オプションを使用すると、DD/MM/YYYY などの独自の変換ルールを指定できます。
答え3
おそらくソース形式は dd/mm/yyyy です。「テキストを列に」機能を使用して変換してみてください。
日付の列を選択
データ > テキストを列に > 次へ > 次へ > 「列データ形式」の下で「日付」を選択し、ドロップダウンからソース形式「DMY」を選択 > OK
答え4
Excel のデフォルトのデータ形式は :dd/m/yyyy です。m/dd/yyyy を選択したため、左余白は自動変換されません。正しい形式を選択するだけで問題は解決します。