2016-06-22 11 views
1

タイトルが混乱している場合はごめんなさい。シートに1行のデータ行がある場合、合計式が表示されない

私は複数のシートを持っています、私のコードは、各シートを通過する、計算時間/コスト&残りの値を入力します。素晴らしいことですが、問題が1つあります。

問題:ヘッダーの下に1行のデータしかない場合は、合計期間&を挿入する合計期間は、&で表示されません。

正確な問題例:複数行のデータがあるかどう

Start Time Duration Calling Name Dialed Number Cost 
6/2/2016 8:58 0:01:15 BLANK_F333  1303900000  $0.12 
Total Duration:        Total Cost: 

ここで正確な例が出ます。

Start Time Duration Calling Name Dialed Number Cost 
6/1/2016 15:07 0:30:55 BLANK_I380 6052340000 $3.72 
6/3/2016 12:26 0:05:40 BLANK_I380 1605230000 $0.72 
6/6/2016 13:49 0:00:08 BLANK_I380 1605380000 $0.12 
6/6/2016 13:50 0:00:08 BLANK_I380 1605380000 $0.12 
6/6/2016 13:51 0:01:15 BLANK_I380 1605320000 $0.12 
6/16/2016 8:29 0:01:42 BLANK_I380 1703290000 $5.04 
Total Duration: 0:39:48      Total Cost:  $9.84 

単列データシートを出力する方法がわかりません。

コード

Sub FormatEntry() 
Dim TotalCost As Double 
Dim TotalTime As Double 
Dim LastRow As Long 


For Each ws In ActiveWorkbook.Worksheets 
    On Error Resume Next  'Will continue if an error results 
    With ws 
     .Range("E:E").NumberFormat = "_-[$$-40B]* #,##0.00_ ;_-[$$-40B]* -#,##0.00 ;_-[$$-40B]* ""-""??_ ;[email protected]_ " 
     .Range("E2").End(xlDown).Offset(1, 0).Value = _ 
    WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row)) 
    .Range("B2").End(xlDown).Offset(1, 0).Value = _ 
    Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss") 
      .Range("A1").End(xlDown).Offset(1).Font.Bold = True 
    .Range("A1").End(xlDown).Offset(1).Value = "Total Duration:" 
    .Range("D1").End(xlDown).Offset(1).Font.Bold = True 
    .Range("D1").End(xlDown).Offset(1).Value = "Total Cost:" 
    .Range("B" & Rows.Count).End(xlUp).Row = LastRow 

End With 
Next ws 
End Sub 

答えて

2

問題がEnd(xlDown)であり、唯一の1行がありますので、あなたがB2E2

に対してそれを使用する場合、End(xlDown)方法は、スプレッドシート上の最後の行に移動します。 そこを見て、あなたは式:)

使用この代わりに表示されます。あなたはは常には少なくともデータの1行を変更することができますを持って知っていれば、

.Range("E" & .Rows.Count).End(xlUp).Offset(1, 0).Value = _ 
    WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row)) 
.Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Value = _ 
    Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss") 

代わりに注意点として1

.Range("E1").End(xlDown).Offset(1, 0).Value = _ 
    WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row)) 
.Range("B1").End(xlDown).Offset(1, 0).Value = _ 
    Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss") 

に元のコードに2行参照、この行は本当の意味がありません:

.Range("B" & Rows.Count).End(xlUp).Row = LastRow 
+0

私はその抜粋を試しました。総継続時間は素晴らしいものの、コストには依然として同じ問題がありました。 – CeFu

+1

@CeFu - 列Eを見下ろして、列に他のテキストがないことを確認します。列Eに表示されている最後の行に移動し、Ctrl + を押します。何が起こるのですか?また、別のソリューションのための私の編集を参照してください。 –

+0

私はそれを120k行下にしました。それはとても奇妙でした!ありがとう! – CeFu

関連する問題