質問です。


コピー前のデータ
2011/5/4 15:05

コピー後のデータ
5/4/2011 15:05

上記のように日付がが逆になってしますのはなぜでしょうか

よろしくおねがいします。

回答の条件
  • 1人20回まで
  • 13歳以上
  • 登録:2011/05/13 10:03:28
  • 終了:2011/05/13 18:47:47

ベストアンサー

id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/05/13 13:07:40

ポイント50pt

次のマクロで変換できますでしょうか?

Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。

p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk_name As Workbook
Application.DisplayAlerts = False
    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。
    
    With w.Sheets(1)
        
        kg = 2          '開始する行
        
        ck = "E"        'チェックする列
        
        For b = kg To .Cells(kg, ck).End(xlDown).Row
            g = .Cells(b, ck)
            If Len(g) > 7 Then
                If Mid(g, 2, 1) = "/" Then
                    '2文字目が / で 4文字目が / の場合、5文字目からの4文字を先頭にする
                    If Mid(g, 4, 1) = "/" Then
                        g = Mid(g, 5, 4) & "/" & Left(g, 3) & Right(g, Len(g) - 8)
                    Else
                        '2文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        End If
                    End If
                Else
                    If Mid(g, 3, 1) = "/" Then
                        '3文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        Else
                            '3文字目が / で 6文字目が / の場合、7文字目からの4文字を先頭にする
                            If Mid(g, 6, 1) = "/" Then
                                g = Mid(g, 7, 4) & "/" & Left(g, 5) & Right(g, Len(g) - 10)
                            End If
                        End If
                    
                    
                    End If
                End If
                
                .Cells(b, ck) = g
                
            End If
                
        Next b


        ck = "F"        'チェックする列
        
        For b = kg To .Cells(kg, ck).End(xlDown).Row
            g = .Cells(b, ck)
            If Len(g) > 7 Then
                If Mid(g, 2, 1) = "/" Then
                    '2文字目が / で 4文字目が / の場合、5文字目からの4文字を先頭にする
                    If Mid(g, 4, 1) = "/" Then
                        g = Mid(g, 5, 4) & "/" & Left(g, 3) & Right(g, Len(g) - 8)
                    Else
                        '2文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        End If
                    End If
                Else
                    If Mid(g, 3, 1) = "/" Then
                        '3文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        Else
                            '3文字目が / で 6文字目が / の場合、7文字目からの4文字を先頭にする
                            If Mid(g, 6, 1) = "/" Then
                                g = Mid(g, 7, 4) & "/" & Left(g, 5) & Right(g, Len(g) - 10)
                            End If
                        End If
                    
                    
                    End If
                End If
                
                .Cells(b, ck) = g
                
            End If
                
        Next b

    End With
         
    w.Save
    w.Close
    
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub

id:inosisi4141

ありがとうございます。

変換しないですね。

変換させたいデータCSVをc:¥testのなかにいれて実行しました

  E列       F列

5/12/2011 14:58 5/12/2011 14:58

5/12/2011 15:40 5/12/2011 15:40

5/12/2011 15:40 5/12/2011 15:40

2011/05/13 14:49:09

その他の回答(4件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/05/13 10:13:49

ポイント20pt

英語表記だからです。


こちらに変換方法を含め書いてますのでどうぞ。

http://blog2world.at.webry.info/200801/article_9.html

id:inosisi4141

ありがとうございます

E列とF列が文字形式の日付が表示されている

5/4/2011 15:05

のを

マクロを使って

2011/5/4 15:05

の日付形式にできますか。

フォルダーの中にあるファイルをマクロを使って一括変更する方法

を教えてください。

よろしくお願いします。

2011/05/13 12:01:44
id:papavolvol No.2

papavolvol回答回数1073ベストアンサー獲得回数1982011/05/13 11:08:37スマートフォンから投稿

ポイント10pt

前者は入力ロケールが日本。後者は入力ロケールが USAなどになっています。

例えばエクセルならば、セルの書式から「日付」を選択して、入力ロケールを変更してください。

id:inosisi4141

ありがとうございます。

日付のセルにあてて右クリックしてセルの書式から「日付」を選択して

種類を2001/3/14

ロケール 日本語(日本)

カレンダーの種類 西暦

に変更しても直りません。

列は文字列になっています。

手打ちで日付を入力すると正常に入力します

コピーして貼り付けたときに文字列に変わったみたいです。

なぜでしょうか

一部ファイルは正常にコピーされています

2011/05/13 11:40:20
id:mezase50 No.3

mezase50回答回数143ベストアンサー獲得回数172011/05/13 12:21:18

ポイント10pt

コンパネの「地域と言語」の最初のタブにあるフォーマットで日本を選べば年月日の表示に変わります。

個別に表示形式を変えることもできます。


http://support.microsoft.com/kb/307938/ja

id:inosisi4141

ありがとうございます。

日本を選んでいます。

2011/05/13 12:43:57
id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/05/13 13:07:40ここでベストアンサー

ポイント50pt

次のマクロで変換できますでしょうか?

Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。

p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk_name As Workbook
Application.DisplayAlerts = False
    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。
    
    With w.Sheets(1)
        
        kg = 2          '開始する行
        
        ck = "E"        'チェックする列
        
        For b = kg To .Cells(kg, ck).End(xlDown).Row
            g = .Cells(b, ck)
            If Len(g) > 7 Then
                If Mid(g, 2, 1) = "/" Then
                    '2文字目が / で 4文字目が / の場合、5文字目からの4文字を先頭にする
                    If Mid(g, 4, 1) = "/" Then
                        g = Mid(g, 5, 4) & "/" & Left(g, 3) & Right(g, Len(g) - 8)
                    Else
                        '2文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        End If
                    End If
                Else
                    If Mid(g, 3, 1) = "/" Then
                        '3文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        Else
                            '3文字目が / で 6文字目が / の場合、7文字目からの4文字を先頭にする
                            If Mid(g, 6, 1) = "/" Then
                                g = Mid(g, 7, 4) & "/" & Left(g, 5) & Right(g, Len(g) - 10)
                            End If
                        End If
                    
                    
                    End If
                End If
                
                .Cells(b, ck) = g
                
            End If
                
        Next b


        ck = "F"        'チェックする列
        
        For b = kg To .Cells(kg, ck).End(xlDown).Row
            g = .Cells(b, ck)
            If Len(g) > 7 Then
                If Mid(g, 2, 1) = "/" Then
                    '2文字目が / で 4文字目が / の場合、5文字目からの4文字を先頭にする
                    If Mid(g, 4, 1) = "/" Then
                        g = Mid(g, 5, 4) & "/" & Left(g, 3) & Right(g, Len(g) - 8)
                    Else
                        '2文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        End If
                    End If
                Else
                    If Mid(g, 3, 1) = "/" Then
                        '3文字目が / で 5文字目が / の場合、6文字目からの4文字を先頭にする
                        If Mid(g, 5, 1) = "/" Then
                            g = Mid(g, 6, 4) & "/" & Left(g, 4) & Right(g, Len(g) - 9)
                        Else
                            '3文字目が / で 6文字目が / の場合、7文字目からの4文字を先頭にする
                            If Mid(g, 6, 1) = "/" Then
                                g = Mid(g, 7, 4) & "/" & Left(g, 5) & Right(g, Len(g) - 10)
                            End If
                        End If
                    
                    
                    End If
                End If
                
                .Cells(b, ck) = g
                
            End If
                
        Next b

    End With
         
    w.Save
    w.Close
    
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub

id:inosisi4141

ありがとうございます。

変換しないですね。

変換させたいデータCSVをc:¥testのなかにいれて実行しました

  E列       F列

5/12/2011 14:58 5/12/2011 14:58

5/12/2011 15:40 5/12/2011 15:40

5/12/2011 15:40 5/12/2011 15:40

2011/05/13 14:49:09
id:adlib No.5

adlib回答回数1894ベストアンサー獲得回数1112011/05/13 14:01:27

ポイント10pt

 

 岡目八目 ~ 行や列によって設定が混在する可能性あり ~

 

 コピー前の設定を、そのまま貼付け(P)か、コピー先の形式を選択

して貼付け(S)る場合では、結果が異なります。

 セルの書式設定が混在していれば、つぎの方法でチェックできます。

 

 カーソルの位置は「全体・行・列・セル」の四通りあります。

 存在しない日付「2011/02/29」が打てれば、文字列です。

(いったん文字列にすると、演算不能となり、マクロ変換できません)

 

 セルの書式設定;分類(C)→日付/文字列/ユーザ定義

http://www.eurus.dti.ne.jp/~yoneyama/Excel/hiduke.htm

── Excel(エクセル)基本講座:日付の表示形式

 

id:inosisi4141

ありがとうございます。

参考にさせていただきます。

2011/05/13 18:44:10
  • id:SALINGER
    ちょっと説明になってなかったか。
    たぶん外部のテキストからコピーしたとすると、表示形式の日付が英語になってるからというところかな。
  • id:taknt
    OSが 英語版ということ?

    XPの場合、コントロールパネルから 地域と言語のオプションで
    短い形式の日付の形式をセットできるようになってるけど それが 年月日の順になっていないのかな?
  • id:SALINGER
    確認方法としては、そのセルを右クリックして「セルの書式設定」→「表示形式」
    ここで表示形式が日付でロケールが英語になってたり、ユーザー定義でd/m/yyyyになっていないかを確認。
    その場合は、日付でロケールに日本語にするか、ユーザー定義でyyyy/m/dにするか。
  • id:SALINGER
    たぶん今までの流れからすると言語オプションの可能性が高いか。
  • id:inosisi4141
    コントロールパネルの地域と言語オプション
    は日本語です

    短い形式はyyyy/MM/dd
    です


  • id:windofjuly
    うぃんど 2011/05/13 14:07:16
    投稿したところ回答数上限に達してしまっていたのでコメントにしておきます
     
    前回( http://q.hatena.ne.jp/1305171737 )のtakntさんのコードで下記のように修正してみてください
    修正前 Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    修正後 Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False, Local:=True)
    これはVBAのデフォルトが英語表記なことに由来します
  • id:inosisi4141
    お世話さまです。

    修正して実行しましたがだめでした。
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False, Local:=True)


    5/12/2011 14:58 5/12/2011 14:58
    5/12/2011 15:46 5/12/2011 15:46
    5/12/2011 15:46 5/12/2011 15:46
    5/12/2011 15:46 5/12/2011 15:46

    よろしくおねがいします。

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

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

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

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