2016-10-13 14 views
0

私はhh:mm AM/PMからhh:mm(24h)に時間形式を変換するのに問題があります。 列がテキストで整形されるので、数値書式プロパティを適用することは全く機能しません(単に何もしません)。Powershell - 非常に遅いExcelフォーマット

しかし、私は "= TEXT(C1;" H:MM ")という式がうまくいきます。 だから私は、各シートにループし、補正された値を作成するために、新しい列に式を適用するに進んでPowerShellのスクリプトを構築しました:

$rows = $WorkSheet.UsedRange.Rows.Count 
for ($i = 8; $i -le $rows ; $i++) 
{ 
    $formula1 = '=TEXTE(C'+$i+';"H:MM")' 
    $formula2 = '=TEXTE(E'+$i+';"H:MM")' 
    $WorkSheet.Cells.Item($i,4).Formula = $formula1 
    $WorkSheet.Cells.Item($i,6).Formula = $formula2 
} 

このループはトリックを行い、それが膨大な時間を要するにもかかわらず実行する。 私のExcelファイルには、約37枚と1シートあたり約100行が含まれています。プロセス全体が完了するまでに20分以上かかります。

ここで私は何が間違っていましたか、どうすれば最適化できますか?

+0

これでも助けが必要ですか? – TravisO

+0

私はいくつかのyesを得ることができますので、今のところ私のalgorythmはまだ痛いほど遅いです – Marc

+0

私はあなたが最新のPowershell(v5)を使用していると仮定しています。 〜3,700行はあまりたくさんではなく、Powershellはデータをかなり高速に読み取ることができます。ここにあなたが使っていない他のワークシートはありますか? Powershellは文書全体を解析しなければならず、膨大な量のデータがある場合でも未使用の場合でも処理速度が大幅に低下します。 – TravisO

答えて

-1

このような処理を行うと、処理が高速化されます。もちろん、シートをループする必要があります。

Sub DoThis() 

    Sheet3.Range("M:M").Select 
    Selection.NumberFormat = "h:mm;@" 
    Selection.FormulaR1C1 = Selection.Value 

End Sub 
+0

私はあなたが私の投稿を読んでいないと思います:まず、vbaではなくpowershellを使ってファイルを処理しています。次に、セルがテキストとしてフォーマットされているので、答える前にお読みください – Marc