- 締切済み
エクセルの文字列を日付で計算したい
お世話になってます。 仕事で外部システムからデータを抜き出しているのですが、 日付が文字データとして抜き出されます。 ※西暦下2桁と月日の6文字が、文字データとして抜き出されます。 普段、下記の操作(1)~(4)を都度行っているのですが、 ほかにもっと簡単なやり方はないでしょうか? (1)A列、B列に 20000000 を加算 (2)C列に関数を入力 =DATE(INT(A2/10000),INT(MOD(A2,10000)/100),MOD(A2,100)) (3)D列に関数を入力 =DATE(INT(B2/10000),INT(MOD(B2,10000)/100),MOD(B2,100)) (4)E列に数式を入力 =D2-C2 例:サンプル A列 B列 発注日 納品日 121201 121211 121211 130105
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
>操作(1)~(4)を都度行っているのですが 「都度」行っているから手間が掛かるのです。 最初の1回のみ前もって関数を入力しておけば良いように、関数を工夫されると思います。 まず準備段階として (1)C2セルに次の関数を入力 =IF(A2="","",("20"&LEFT(A2,2)&"/"&MID(A2,3,2)&"/"&RIGHT(A2,2))+0) (2)C2セルをコピーしてD2セルに貼り付け (3)E2セルに次の関数を入力 =IF(OR(A2="",B2=""),"",D2-C2) (4)C2~E2の範囲をコピーして、同じ列の3行目以下に貼り付け という操作を最初の1回のみ、前もって行っておきます。 その上で、 (5)その都度A列とB列にだけ抜き出したデータを入力(或いは、抜き出したデータの値のみを貼り付け) という操作だけを行えば良いと思います。 尚、A列とB列に入力された日付の差だけが必要な場合には、次の様な関数として下さい。 =IF(OR(A2="",B2=""),"",("20"&LEFT(B2,2)&"/"&MID(B2,3,2)&"/"&RIGHT(B2,2))-("20"&LEFT(A2,2)&"/"&MID(A2,3,2)&"/"&RIGHT(A2,2))) この場合は、C列とD列の日付データは不要です。
- keithin
- ベストアンサー率66% (5278/7941)
=TEXT(A2,"0-00-00")*1 として,日付の書式を施すと計算できているのが確認できます。 もちろん =TEXT(B2,"0-00-00")-TEXT(A2,"0-00-00") で構いません。 >ほかにもっと簡単なやり方はないでしょうか A列を縦一列選択してから データタブ(データメニュー)の区切り位置を開始 特に何も指定せずに次々送り 3/3画面で「日付(YMD)」を明示的に指定して完了 B列も縦一列選択してから同様に操作する と,できます。 #知らない関数とか思い出すより手を動かした方が遙かに簡単だと私は思いますが,そうは思わない関数大好きの方の方が,圧倒的に沢山です。
- mu2011
- ベストアンサー率38% (1910/4994)
取り敢えず、日付を内部シリアル日付に変換する簡単な方法です。 1列ずつ列を選択→データ→区切り位置→次へ→次へ→列のデータ形式欄で日付を選択→完了 後は、マクロ(VBA)組込みでしょうか。
関数を使用せずに元の文字列を日付型に変更する方法。 ・まず、変更する範囲すべてを選択します。 ・メニューバーより、「データ」-「区切り位置」 を選択します。 ・そのまま 「次へ」-「次へ」 を押し最後の 「列のデータ形式」 で、 「日付」(YMD) を選択し、「OK」 を押します。 ・一気に文字列が日付に変換されます。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 シリアル値にしたいセルを範囲指定 → データ → 区切り位置 → 何もせずそのまま「次へ」を2回 → 「日付」を選択 → 「YMD」を選択しOK これでシリアル値になると思います。m(_ _)m
- tsubuyuki
- ベストアンサー率45% (699/1545)
何を基準に難しい・簡単を判断するのかはそれぞれの感性ですので何とも言えません。 とりあえず、納得できるかどうか置いておいて、 ご提示の(1)のステップだけでも簡略化したいなら(サンプルを例に採り) C2セル:=DATE(LEFT(A2,2)+2000,MID(A2,3,2),RIGHT(A2,2)) D2セル:=DATE(LEFT(B2,2)+2000,MID(B2,3,2),RIGHT(B2,2)) C2セルをコピー可 E2セル:=D2-C2 これで、3ステップ。 さらにこれを、C2:D2を範囲指定した状態で C2セル:=DATE(LEFT(A2,2)+2000,MID(A2,3,2),RIGHT(A2,2))※Ctrl+Enter で確定 E2セル:=D2-C2 これで、2ステップ。 ちなみに、範囲指定状態で「何か」を入力してCtrl+Enterで確定すると 選択した範囲すべてに同じ内容を入力できます。 式なら、相対参照でコピーした状態にできます。 ほんの若干ですが、省力という事で。