1

VBA を使用して、csv ファイルをインポートし、多数のデータを複数の列に配置します。

これらの列の 1 つに日付と時刻があります。これらのセルの「時間」部分だけを使用できるようにする必要があるため、(および他のほぼすべてのバリエーション) を使用して、列全体を時間に変換しようとします。

Cells(x.y).EntireColumn.NumberFormat = "hh:mm:ss"  
or   
Range("C1").NumberFormat = "hh:mm:ss"     
Range("C1").EntireColumn.NumberFormat = "hh:mm:ss"

ただし、これは列全体を変換するわけではありません。列全体を選択して(VBを介して)変更する他のすべての方法を試しましたが、まだ一部しか変換されていません。

これらの変換されていないセルをダブルクリックして Enter キーを押すと、正しい形式に変更されます。これは計算に関連する一般的な問題だと認識していますが、私のワークブックは自動計算に設定されており、VB でもこれを設定しようとしました。これは何も変わりません。

私が見つけた唯一のパターンは、日が 2 桁に達するとセルの変換が停止することです。例えば:

Column C

01/05/2013 7:28:56  
03/05/2013 13:24:53  
07/05/2013 20:13:24  
09/05/2013 8:29:22  
12/05/2013 9:28:56  
15/05/2013 21:14:25  
17/05/2013 7:28:56 

なります:

Column C

7:28:56  
13:24:53  
20:13:24  
8:29:22  
12/05/2013 9:28:56  
15/05/2013 21:14:25  
17/05/2013 7:28:56  

各セルの上部にある数式バーには、すべてのセルの日付と時刻全体が表示されますが、これが関連しているかどうかはわかりませんが、時間を使用して実行する必要がある計算に関しては問題ではないようです。

基本的に、列 C のセルの時間を取り、別のセル (日付/時間形式でも) の時間を取り、違いを確認する必要があります。いくつかの調査の後、すべてのセルを時間形式に変換してから計算を行うのが最善の方法であると判断しました。

または、列をテキストに変換し、Split 関数 (区切り文字としてスペースを使用) を使用してタイムアウトを取得することもできますが、列全体をテキストに変換しようとすると、もう一度停止するので、これも問題があります。日付の 2 桁。

すべてをお読みいただきありがとうございます。ご意見やご協力をいただければ幸いです。

編集:投稿で構文の一部が間違っていることに気付きましたが、これはマクロ内では正しいものでした

別の編集:これは間違いなく日付形式と関係があると思います...それらをフォーマットする前に、日付がm/dd/yyyyであり、実際の2桁の日になると に変わりdd/mm/yyyy、それが問題が発生したときであることに気付きました...

4

1 に答える 1

1

混乱を避けるために、また日付は常に同じ幅を占めるように見えるため、次のことをお勧めします。

1) この列をテキストとしてインポートする

2)次に、列全体を調べます

For Each C In Range("A:A").Cells
    If C <> "" Then
        ' ....
    End If
Next C

3) 先頭の 11 の位置を切り取ります。C = Mid(C, 11, 99)

4 )残りの文字列を時刻に変換しC = CDate(C)ます

または、日付の部分をキャプチャして形にすることもできます。ワークシートの数式を使用したアイデアについては、こちらを参照してください。

于 2013-05-24T07:31:58.857 に答える