エクセルで「3.5.1.」と日付を入力されたデータがあります(最初の数字は平成).最後のピリオドは有るデータと無いデータが混ざっています.これを「1991/5/1」とエクセルの日付の書式にあった形に変換し直す方法を教えてください.データが大量にあるので一括で変換できる方法を希望します.

回答の条件
  • 1人2回まで
  • 登録:2007/03/24 02:34:37
  • 終了:2007/03/24 10:51:49

ベストアンサー

id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692007/03/24 10:00:34

ポイント100pt

マクロ作ってみました

データが入力されたセルを選択して以下を実行

Sub Macro1()
    Dim myRange As Range
    Dim st As String
    
    Selection.NumberFormatLocal = "yyyy/m/d"
    For Each myRange In Selection
        If myRange <> "" Then
            st = "H" & myRange.Value
            Mid(st, InStr(1, st, "."), 1) = "/"
            Mid(st, InStr(1, st, "."), 1) = "/"
            If Right(st, 1) = "." Then st = Left(st, Len(st) - 1)
            myRange = DateValue(st)
        End If
    Next myRange
End Sub

条件に合わないセルを選択しているとエラーになりますので注意。

空白ははずしてますが、エラートラップで対処しないのは変換しないセルを間違って選択した場合セルの内容を変えてしまうかもしれないので。

id:doingo

一発で解決しました.ありがとうございました.これがベストの回答でした.

2007/03/24 10:49:29

その他の回答(2件)

id:kenji-lli No.1

kenji-lli回答回数2ベストアンサー獲得回数02007/03/24 10:22:44

ポイント50pt

Aが日付の入ってるセルの列だとします。

まず、下記の式で文字列の最後に引っ付いているドットを取ります。

「=IF(RIGHT(A1,1)=".",MID(A1,1,LEN(A1)-1),A1)」

式1は、

もし、文字列の最後が、ドット「.」ならば、文字数(LEN関数)ー1をした文字数を、MIDで頭から抜き出す、それ以外は、そのまま出力してよって式です。

一番右側の列などに式を入力、フィルハンドルで一斉にコピー

出てきたデータを、列ごとコピー

「別のシート」に貼り付ける。

そのシートで、編集ー置き換えを実行

ドット「.」 → スラッシュ「/」にすべて置き換え

置き換え後のデータは、エクセルが自動的に日付データとしてシリアル値に置き換えているはずです。

これを元のデータに貼り付けで、完了。

別のシートで置き換えを実行しないと、同一シート内の別の列のデータまで勝手に置き換えてしまうので注意が必要です。

また、

エクセルのデフォルトの設定や、OS側の設定などで、

日付のデフォルト表示が異なる場合があります。

「2007/01/01」のような西暦表示にする場合、

列を選択、右クリック、「セルの書式設定」-「日付」を選ぶといろいろ書式設定がでてきますので、それで書式を一括で変換できます。

ほんの2~3分で作業終了するかと思います。

あと何かの拍子で貼り付け先のデータと貼り付けるデータの順番が狂うと面倒なことになるので、バックアップとってから実行してみてください。

ちなみにエクセルは2003でテストしました。

id:doingo

なるほど.ありがとうございます.やってみます.

2007/03/24 10:39:44
id:nandedarou No.2

nandedarou回答回数230ベストアンサー獲得回数342007/03/24 05:15:07

ポイント50pt

例とえば、セルA1に「3.5.1」、セルA2に「4.3.2.」…というように、

A列の上から順に、ご質問の形式で日付が入力されている場合。

(1)セルB1に以下のように入力しして下さい。

=DATEVALUE("H"&SUBSTITUTE(A1,".","",3))

(2)セルB1を右クリック→セル書式設定→表示形式タブ→分類:日付 種別:1997/3/4 と設定して下さい。

(3)セルB1を必要なだけ下のセルにコピーして下さい。

いかがでしょうか?

id:doingo

なるほど・・.ありがとうございます.やってみます.

2007/03/24 10:49:35
id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692007/03/24 10:00:34ここでベストアンサー

ポイント100pt

マクロ作ってみました

データが入力されたセルを選択して以下を実行

Sub Macro1()
    Dim myRange As Range
    Dim st As String
    
    Selection.NumberFormatLocal = "yyyy/m/d"
    For Each myRange In Selection
        If myRange <> "" Then
            st = "H" & myRange.Value
            Mid(st, InStr(1, st, "."), 1) = "/"
            Mid(st, InStr(1, st, "."), 1) = "/"
            If Right(st, 1) = "." Then st = Left(st, Len(st) - 1)
            myRange = DateValue(st)
        End If
    Next myRange
End Sub

条件に合わないセルを選択しているとエラーになりますので注意。

空白ははずしてますが、エラートラップで対処しないのは変換しないセルを間違って選択した場合セルの内容を変えてしまうかもしれないので。

id:doingo

一発で解決しました.ありがとうございました.これがベストの回答でした.

2007/03/24 10:49:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません