こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2010 VBAでスペース区切り

はじめて質問させて頂きます。
VBA初心者ですが、宜しくお願いします。

CSVデータをエクセルにコピペしてから処理することを考えています。
CSVのデータはエクセルで開くと以下の様に入力されています。

    |      A列      |  B列 |  C列 |
1行目|   日付 時刻    |データ1|データ2|
2行目|2014/5/14 13:00:01|  ○  |  △  |
3行目|2014/5/14 13:00:14|  ○  |  △  |

時刻は24h制で入力されています。
A列の日付と時刻の間にはスペースがあり、これをVBAでスペース区切りをしたいのです。
B列に列を追加し、スペース区切りの処理をしようと思い、自動記録すると以下のようになりました。

Sub Macro1()
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
     TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Tab:=True, Semicolon _
     :=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array( _
     Array(1, 5), Array(2, 1)), TrailingMinusNumbers:=True
End Sub

ところが、このマクロを実行すると「コピーまたは移動先のセルの内容を置き換えますか?」のメッセージが表示されます。(記録する際には表示されませんでした。)
原因を探ったところ、自動記録のマクロを実行すると時刻が12時間制に変更されB列に、
C列にAM/PMが書き込まれます。(A列の日付は問題なく処理されます。)

B列に24時間制の時刻が書き込まれるようにしたいのですが、
何か不足してるとことがあるのでしょうか?

方法を教えて下さい。
お手数ですが、宜しくお願いします。

投稿日時 - 2014-05-14 20:36:58

QNo.8595357

困ってます

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

こんばんは!
データ → 「区切り位置」の方法でなく、
A列のシリアル値そのものを利用する方法です。
B列に日付・C列に時刻データを表示させるとします。

Sub Sample1()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Range(Cells(2, "B"), Cells(lastRow, "B"))
.Formula = "=INT(A2)"
.Value = .Value
.NumberFormatLocal = "yyyy/m/d"
End With
With Range(Cells(2, "C"), Cells(lastRow, "C"))
.Formula = "=MOD(A2,1)"
.Value = .Value
.NumberFormatLocal = "h:mm:ss"
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

投稿日時 - 2014-05-14 21:46:22

お礼

なるほど!
やりたいことができました。

ありがとうございましたm(_ _)m

投稿日時 - 2014-05-15 12:02:28

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問