• ベストアンサー

EXCELでマクロを用い日付をテキスト化したいのですが。

エクセルで日付をテキスト化するのに、マクロをつかって自動化させたいと考えています。 以下のようなデータを扱っています。 日付  その他  その他  その他 2007/4/26 2007/4/28 2007/5/12 2007/6/12 こういったデータがあり、日付の列を選択し、置換→200を'200にすることで日付をテキスト化したいと思っています。 マクロを作成中は問題なく、置換し、テキスト化が出来ますが。 一度日付データを消し、日付を入れてマクロを実行すると 4/26/'2007 4/28/'2007 5/12/'2007 6/12/'2007 といった感じで実行され、正しくテキスト化されません。 質問にお答えしていただけると大変ありがたいです。 よろしくお願い致します。 ※ちなみにマクロは自動記録方式のみで作っています。VBAは修正程度の知識しかないです。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#2です。 なぜ同じ質問をするのだろうと、やっと過去の質問を見つけました。 http://oshiete1.goo.ne.jp/qa3110083.html ですね。 あとから追加質問があったのですね。ずいぶん時間が経っているので気付きませんでした。 「日付の列を選択」がポイントなのですね。 では、ご自分で選択した部分だけの置換えです。 Sub test03() Dim c As Range For Each c In Selection If IsDate(c) Then c = "'" & Format(c, "yyyy/m/d") End If Next End Sub

iheuyo
質問者

お礼

回答していただきありがとうございます。 もう一つお聞きしたいのですが、列の空白を削除するVBAはわかりますでしょうか?空白は文字と文字の間にあります。半角、全角の二つともに対応できるようにしたいと考えています。

その他の回答 (5)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

> 上のVBAに関してですが、列指定にするとどうなりますでしょうか? > たとえばC列であればどのようになりますか? 先日回答した、 Sub Del_Space() Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False End Sub で、選択した部分(Selection)のスペースを全角半角問わず削除出来るのですから、SelectionをC列(Columns("C"))に変えればいいだけだと容易に想像がつくと思います。 同様に、今度は「列」ではなく仮に5行目を対象にするなら、Rows("5")に変えるだけです。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> 回答していただきありがとうございます。 それで、この質問(日付をテキスト化)については解決したのですか? 解決したのなら、追加の質問の前にまったく同じ質問の、 http://oshiete1.goo.ne.jp/qa3110083.html は締め切ってくださいな。 > もう一つお聞きしたいのですが、列の空白を削除するVBAはわかりますでしょうか?空白は文字と文字の間にあります。半角、全角の二つともに対応できるようにしたいと考えています。 空白? スペースのことですね? 列?どの列ですか? 以下は、列でも行でも選択した範囲のスペースを全角半角問わず削除します。 Sub Del_Space() Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False End Sub

iheuyo
質問者

補足

ありがとうございます。 前回の質問は締め切らせていただきました。 追加の質問にも答えていただきありがとうございます。 上のVBAに関してですが、列指定にするとどうなりますでしょうか? たとえばC列であればどのようになりますか? よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

なぜ日付を文字列にするのに置換を遣わなければならないのか。 狭い範囲の知識での、質問者の思い付きでは。 ーー エクセルは日付2007/7/7はセルの値は39270といった整数値でもっている。この際2007を書式で200に見えているからといって 置換対象にするのは適当かどうか良く吟味しないと。 基本的には、置換は「値」を対象に行われると思うが、バージョンが上がるほど、書式で見えている見た目をも対象にするようにMSは広げているようだが。 エクセル関数TEXTでも、別列を使えばできると思う。 別列がイヤなら、普通はVBAではFormat関数を使うと思うが、 Text関数でもできました。 Sub test01() Dim cl As Range For Each cl In Range("a1:A20") If cl <> "" Then cl = "'" & Application.Text(cl, "yyyy/m/d") End If Next End Sub >といった感じで実行され、正しくテキスト化されません、 の意味が良く伝わらないが、 >置換→200を'200にすることで日付をテキスト化、するマクロの記録 に問題があると思う。質問の仕方として、マクロの記録結果のコードを載せないでなぜ質問するのですか。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

全部のセルを対象にするなら Sub test01() Dim c As Range For Each c In ActiveSheet.UsedRange If IsDate(c) Then c = "'" & Format(c, "yyyy/m/d") End If Next End Sub 仮にA列だけなら Sub test02() Dim c As Range For Each c In ActiveSheet.Range("A:A") If IsDate(c) Then c = "'" & Format(c, "yyyy/m/d") End If Next End Sub iheuyoさん? 前に同じようなこと答えませんでしたっけ?

iheuyo
質問者

お礼

回答していただきありがとうございます。 前回も答えていただいたかと思うんですが、そのときはシート全体のみであったので、結局出来なかったんですね。もう一度答えていただきありがとうございます。 もう一つお聞きしたいのですが、列の空白を削除するVBAはわかりますでしょうか?空白は文字と文字の間にあります。半角、全角の二つともに対応できるようにしたいと考えています。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

原因とかは良く解りません。 元が英語圏のソフトなので日付形式のデフォルトが m/d/yyyy なのかな? このあたりの回答は識者にお任せして、、、 Sub Test() Dim r As Range  With ActiveSheet   For Each r In .Range("A2", .Range("A2").End(xlDown))     r.Value = Format(r.Value, "'yyyy/m/d")   Next r  End With End Sub