アプリ版:「スタンプのみでお礼する」機能のリリースについて

閲覧ありがとうございます。
Excelのマクロに関しての質問です。
今、テキストデータから「東京都・晴れ」を含む行をExcelファイルに抽出後、そのデータを日付別にふり分けるマクロを作っています。
そこで、テキストデータの日付の表示「11/8/2009」(2009年8月11日)や「8/9/2009」(2009年9月8日)を「2009/8/11」「2009/9/8」のように、年・月・日という表示に変えたいのですが、検索しても色々試しても良いマクロが浮かびません。
よろしければ素敵なマクロ、ご教授願います。

※ちなみに、入力規則などを指定してもテキストからデータを引っ張ってきているため(?)か上手くいきません。

A 回答 (6件)

ごめんなさい。



d/m/yyyy 形式なんだね。英国式?なら、#3 は没で(´A `;)

米国式だと m/d/yyyy だから、11/8/2009 は 2009/11/8
だけど。。この点ははっきりさせた方が良いかもです。

VBA というか Excel のシステム自体 USA 産ですから、
日付書式は基本 m/d/yyyy です。
したがって、#3 のソースで変換をかけると 11/8/2009 は、
2009/11/8 になりますので、ご注意を。
    • good
    • 0

こんにちは。



#4の方が言われる「色んな解釈」の内のひとつになってしまいますが。。。
意味を取り違えていたらすみません。

変換する日付の文字列というのは、
  変換前:  "11/8/2009" ← 日/月/年 の順
            ↓
  変換後:  "2009/8/11" ← 年/月/日 の順
ということでしょうか?

上記の場合だという前提ですが、
以下は、日付文字列の変換部分のみのマクロの一例です。

■サンプルマクロ
注)インデントのため全角スペースを入れています。
/////↓ここから//////////
'==日付のフォーマット変換テスト==
Sub DateConv()

  Dim strDate As String
  Dim vaDate As Variant

  'テスト1:セルに直接データをセットする場合
  strDate = "11/8/2009"
  vaDate = Split(strDate, "/")
  Range("A1").Value = DateSerial(vaDate(2), vaDate(1), vaDate(0))

  'テスト2:一旦、文字列に格納してからセルにセットする場合
  strDate = "8/9/2009"
  vaDate = Split(strDate, "/")
  strDate = vaDate(2) & "/" & vaDate(1) & "/" & vaDate(0)
  Range("A2").Value = strDate

  'テスト3:日付シリアル値のセルデータを文字列として別セルにセット
  Range("B1").Value = "'" & Range("A1").Text
  Range("B2").Value = "'" & Range("A2").Text

End Sub
/////↑ここまで//////////

■補足
予め、日付データの貼り付け先のセルの表示形式が、
  「標準」 または、「日付」
になっていることが前提です。
また、対象セルの表示形式が「標準」になっていた場合で、上記のマクロを
実行した後は、セルの表示形式が自動的に「日付」に変更されます。

いずれの場合も、データ貼り付け後のセルの値は「日付シリアル値」になって
いますので、別の作業で文字列として扱いたい場合は、「日付シリアル値」を
文字列に変換する処理が必要になります。
※上記サンプルの「テスト3」がその一例です。

以上です。参考になれば幸いです。
    • good
    • 0

>2009年9月8日)を「2009/8/11」「2009/9/8」のように、年・月・日という表示に変えたいのですが


特に
>年・月・日という表示に変えたいのですが
質問が易しすぎて、色んな解釈が出来てしまうことは、今まで出ている回答を見ればわかる。何がしたいの?
年月日に分割
文字列化
表示形式の設定 など
元のデータが、「エクセルで日付入力の基本」の、日付シリアル値に現状なっているのか。
なっているなら表示形式の問題でNumberFormat(Local)の問題で、極く基礎的なことで、こんなところに質問するまでも無いレベルの問題だ。
Googleででも「NumberFormat」でWEB照会のこと。
>今、テキストデータから「東京都・晴れ」を含む行をExcelファイルに抽出後、そのデータを日付別にふり分けるマクロを作っています。
前置きみたいなこの箇所は質問に書く必要あるのかな。
    • good
    • 0

こんな感じとか。

IsDate でチェック済みなら、Cdate 関数を
使っても良いでしょう。

' // セル選択範囲において日付として評価できる文字列を
' // シリアル値に変換する
'
Sub Sample()
  
  If Not TypeOf Selection Is Range Then Exit Sub
  
  Dim r As Range
  Selection.NumberFormat = "yyyy/m/d" 'シリアル値表示形式
  For Each r In Selection.Cells
    If IsDate(r.Value) Then
      r.Value = DateValue(r.Value)
    End If
  Next

End Sub
    • good
    • 0

vを一旦、シリアル値に直した方が良いですね


MsgBox Format(DateValue(v), "yyyy/m/d")
    • good
    • 0

参考に


Dim v As Variant
v = "「11/8/2009」(2009年8月11日)"
v = Split(v, "(")
v = Replace(v(1), ")", "")
MsgBox Format(v, "yyyy/m/d")
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!