• 締切済み

エクセルVBAにつきまして

詳しい方ご教示ください。 エクセルのセルに、数字で1220と入っていて、 それを日付の2011/2/20に変換したいのですが、VBA必要でしょうか。 それとも何か便利な関数ありますでしょうか? 詳しい方、よろしくお願い致します。

みんなの回答

回答No.2

こんにちは。 規則化を留めていない書式は、どれが、年か月か日か、わからないので、単に質問に出された数字だけなら可能でも、それを標準化させるのは不可能です。 「1220」 は、最低でも「10220」 としない限りは、入力した人の意志や考えは、数字には、反映されていないので、見た人は、誰も特定できません。もちろん、VBAでも不可能です。 しかし、もしも、A1:「10220」 ならば、 2000年以降になりますが、 例えば、 =TEXT(20&REPT(0,6-(LEN(A1)))&A1,"####!/##!/##") --> 2011/02/20 (書式を直したい時は、一旦、日付シリアル値化しなければなりません) 「101」 ですと、 --> 2000/01/01 という数式で、表示は可能のはずです。 ただし、そのままでは、文字列なので、日付シリアル値にするには、 =TEXT(20&REPT(0,6-(LEN(A1)))&A1,"####!/##!/##")*1 などとしなければなりません。 なお、私は、関数式は不得意ですから、もし、間違っていたら、ご容赦ください。

回答No.1

「1111」は、何に変換しますか? 2000/11/11? 2001/1/11? 2001/11/1? 2011/1/1? 1900 年代、2100 年代などの考慮は不要ですか? 元々様々な数式が考えられ、上の条件によっても有利な数式は変わってくるかと思いますが、次式は、試作品。 A1 1220 B1 =date(2000+mid(a1,1,1),mid(a1,2,1),mid(a1,3,2))   あるいは   =0+(2000+mid(a1,1,1)&"/"&mid(a1,2,1)&"/"&mid(a1,3,2))  ……セルの書式として日付関係のものを指定 この場合、日付のシリアル値を作りたいだけのことなので、B1 セルは DATE 関数の数式のほうが普通です。 >……のですが、VBA必要でしょうか。 ご質問のような、ごく単純な計算をすることのみが目的なら、VBA はもちろん不要です。 VBA プロシージャ内において同様の計算をしようと思えば、それももちろん可能です。ご質問の内容よりもっと複雑な場合分けがたくさん絡んでくるような場合は、マクロの力を借りるべきケースも出てくるかもしれません。ただし、いずれにせよ、少なくともこの回答文の冒頭で投げかけた条件についてはクリアにしておかないと、VBA であろうが対応は不可能であることに変わりはありません。 数式ではなく「区切り位置」という機能により数字を複数のセルに分割しておき、DATE 関数でくっつけるという方法もあります。ウィザードにより「1」、「2」、「20」というふうに 3 セルに分けるということです。