[[20140708172122]] 『データ区切がマクロで思うようにできません』(らいつい) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データ区切がマクロで思うようにできません』(らいつい)

いつも参考にさせていただいております。
現在、壁にぶつかっているのでどうか助けてください。

日付+時間がひとつのセルになっているデータを日付、時間にわけようとしています。

元セル(B1セルにあります):<2014/6/19 21:40:20>
わけたい形(B1:B2に書きたい):<2014/6/19> <21:40:20>
(<>はデータではありません。セルの区切りと思ってください)

元セルは表示形式/ユーザ定義で<yyyy/m/d h:mm>とされています。

これを日付と時間の間に半角スペースがあるので、半角スペースを区切記号として別セルにわけようとしています。
これが手動ならうまくいくのですが、それを記録したマクロにするとうまくいきません。

・手動の結果
<2014/6/19 0:00> <21:40:20> ←B1の0:00は後で表示形式で調整するのでスルーしてくださって結構です

・記録マクロ実行の結果
<2014/6/19 0:00> <9:40:20> <PM> ←24時間表示が壊れて3つ目のセルが作られてしまいます

・記録マクロのコード
Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _

        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

・それぞれの表示形式
   実行前        実行後
B1  <yyyy/m/d h:mm>  <yyyy/m/d h:mm> 
B2  標準        <h:mm:ss>
B3 標準         標準

コードには何も手を加えていないのに結果が変わってしまいます。
何が問題なのでしょうか?

ご教授お願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 確かに再現出来ました!
 文字列に直してから分割したら出来ましたので、こちらでいかがでしょうか?
Sub Macro1()
    Selection.Value = Evaluate("TEXT(" & Selection.Address(0, 0) & ", ""'yyyy/mm/dd hh:mm"")")
    Selection.TextToColumns Destination:=Range("B1") _
        , DataType:=xlDelimited _
        , TextQualifier:=xlDoubleQuote _
        , ConsecutiveDelimiter:=True _
        , Tab:=False _
        , Semicolon:=False _
        , Comma:=False _
        , Space:=True _
        , Other:=False _
        , FieldInfo:=Array(Array(1, 1), Array(2, 1)) _
        , TrailingMinusNumbers:=False
End Sub
(稲葉) 2014/07/08(火) 18:20

稲葉さま

ありがとうございます。できました!
"Evaluate"を知らなかったので、こちらも勉強させていただきました。関数が呼べるのはいろいろ便利そうですね。

今後ともよろしくお願いいたします。

p.s.上記での記録マクロコード内のDestinationの行先間違ってますね。「B1」が正解です。
  いろいろごちゃごちゃいじっていてコピペをミスしたようです。失礼いたしました。
  間違ったコードも読み取ってくださってさらに感謝です。
(らいつい) 2014/07/09(水) 12:11


 ごめんなさい、複数行ある場合を考慮していませんでした。

 Evaluate("TEXT(" & Selection.Address(0, 0) & ", ""'yyyy/mm/dd hh:mm"")")
 ここを

 Evaluate("IF(" & Selection.Address(0, 0) & ",TEXT(" & Selection.Address(0, 0) & ", ""'yyyy/mm/dd hh:mm""),)")
 こちらに置き換えてください。

 Evaluateメソッドについて、こちらに詳しく解説されています!
[[20070212134849]]

(稲葉) 2014/07/09(水) 12:47


>稲葉さま

補足を頂戴していたの気づきませんでした、失礼しました。

複数行についてはこの処理の手前でLoopさせる場所があるので、そこに入れて回しましたので
何とか望み通り動いています。

お心づかいありがとうございました。
(らいつい) 2014/07/12(土) 00:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.