2015-06-14 137 views
0

我對VBA不夠熟悉,但不幸的是我必須完成它。VBA從兩個時間之間的單元格中總結值

我從倉庫管理系統,它看起來像,進行了摘錄: enter image description here

我需要根據提取這是巨大的計算所有員工的生產力。

所以我準備xls與2個額外的選項卡。第一個選項卡包含上面的提取frm。第二標籤包含計數看起來像該

enter image description here

有97排,開始和結束時間(24個小時分割爲15分鐘份)

第三標籤包含的結果,看起來像:

enter image description here

我必須創建VBA宏來計算生產力。宏必須:

  • 總結挑選了多少產品(用RF槍掃描)並將其存儲在特定的15分鐘部分中。
  • 總共有多少15分鐘的用戶正在使用RF槍掃描產品(4 * 15分鐘部件= 1小時)。例如:用戶從提取物中掃描產品從03:21到03:43因此在標籤計數中我應該有按照Comodity(有3個comodities:Ambient,Chill,Frozen)存儲在03:15到03:30和03:30到03:45之間的情況,結果必須存儲在第三個選項卡Result中。如果有人在3個不同的區域掃描產品,我應該在結果選項卡中爲3個不同區域設置3個不同的總和。

正如我所說。我不熟悉VBA,但希望你能幫助我。如果沒有,我將不得不這樣做,通過填寫由倉庫成員填寫到Excel中填充的紙質活動表,並自己計算什麼會花費我很多時間爲100人。

我會很感激任何幫助。

+1

你爲什麼需要VBA?如果我正確理解您的需求,簡單的Excel Sumifs和Countifs函數可以爲您做到這一點。 – vacip

+0

或者像python或php這樣的腳本語言會很快做到你想要的。 –

+0

如果我將在休息日,其他人不得不這樣做。我不知道關於公式的理解和擅長這個其他人,所以我寧願讓宏在粘貼相關日期後自動執行它。其次,我無法想象公式如何看起來像。 不幸的是只有腳本語言我可以使用VBA。我不能使用其他任何東西。 – LukeJ

回答

0

數據透視表是要走的路。這將在第一個摘要中引發你的興趣。您需要使用Excel 2013作爲第二個,才能夠爲15分鐘的塊選擇DISTINCT計數。

Dim wb As Workbook 

Dim sourceWorksheet As Worksheet 
Dim summaryWorksheet As Worksheet 

Dim pvt1 As PivotTable 

Dim firstCell As Range 
Dim lastRow As Long 


Set wb = ActiveWorkbook 

Set sourceWorksheet = wb.ActiveSheet 


'Add two extra columns to calculate 15 minute blocks 
'=================================================== 

'***** SET THIS TO THE TOP-LEFT CELL OF THE DATA THAT CONTAINS "Hours" LABEL 
Set firstCell = sourceWorksheet.Range("A4") 


'Determine the last row 
lastRow = firstCell.CurrentRegion.Rows.Count + 3 

'Put column captions on new columns 
Cells(firstCell.Row, firstCell.Column + 4).Value = "Start" 
Cells(firstCell.Row, firstCell.Column + 5).Value = "End" 

'Set the formula for "Start" of 15 minute block 
Range(Cells(firstCell.Row + 1, firstCell.Column + 4), Cells(lastRow, firstCell.Column + 4)).Formula = "=FLOOR(" & Cells(firstCell.Row + 1, firstCell.Column).Address(False, False) & ",TIME(0,15,0))" 

'Set the formula for "End" of 15 minute block 
Range(Cells(firstCell.Row + 1, firstCell.Column + 5), Cells(lastRow, firstCell.Column + 5)).Formula = "=" & Cells(firstCell.Row + 1, firstCell.Column + 4).Address(False, False) & "+""00:15""" 

'Format the columns as times 
Range(Cells(firstCell.Row, firstCell.Column + 4), Cells(lastRow, firstCell.Column + 5)).NumberFormat = "hh:mm" 


'Create a pivot table for summary by 15 minute block 
'=================================================== 

Set summaryWorksheet = Sheets.Add 
summaryWorksheet.Name = "Summary" 

Set pvt1 = wb.PivotCaches.Create(SourceType:=xlDatabase, _ 
           SourceData:=sourceWorksheet.Name & "!" & firstCell.CurrentRegion.Address(ReferenceStyle:=xlR1C1), _ 
           Version:=xlPivotTableVersion15).CreatePivotTable(TableDestination:=summaryWorksheet.Name & "!R3C1", _ 
                       TableName:="PivotTable1", _ 
                       DefaultVersion:=xlPivotTableVersion15) 
With pvt1.PivotFields("Start") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
With pvt1.PivotFields("End") 
    .Orientation = xlRowField 
    .Position = 2 
End With 
With pvt1.PivotFields("User") 
    .Orientation = xlRowField 
    .Position = 3 
End With 
pvt1.AddDataField pvt1.PivotFields("Cases"), "Sum of Cases", xlSum 
'Change the style to be tabular 
pvt1.RowAxisLayout xlTabularRow 
'Remove unwanted subtotals 
pvt1.PivotSelect "End[All;Total]", xlDataAndLabel, True 
pvt1.PivotFields("End").Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False) 
pvt1.PivotSelect "Start[All;Total]", xlDataAndLabel, True 
pvt1.PivotFields("Start").Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False) 
pvt1.PivotSelect "Start[All]", xlLabelOnly, True 
Range("A3").Select 

'Be a good memory citizen 
Set wb = Nothing 
Set sourceWorksheet = Nothing 
Set summaryWorksheet = Nothing 
Set pvt1 = Nothing 
Set pvt2 = Nothing 
Set firstCell = Nothing 
+0

:/這可能是一個問題,因爲我的工作只有Excel 2007。 – LukeJ

+0

您是否可以澄清您的要求:「總共有多少15分鐘的用戶正在使用RF槍掃描產品」。如果他們在同一個塊(3:00-3:15)中掃描3次,它會計爲「1」還是「3」? – joehanna

+0

作爲掃描產品總數的「1」在步驟1中計數。在步驟2中,我需要知道該操作花費了多長時間,這就是爲什麼我需要統計他們正在做這件事的數量爲15分鐘。 – LukeJ

相關問題