2014-05-19 54 views
0

我已經看過類似的問題的答案,但無論我做什麼,我都無法讓他們做我需要的東西。從一張紙上取得結果並將它們移動到其他許多紙張上

我其中有一個CSV文件給呼叫統計爲我們的銷售團隊前一天的每日電子郵件。我需要的是將它們放入Excel中,爲年度提供趨勢和歷史通話活動。沒有VBA或宏,這是一個非常耗時的過程。

它給人的統計是呼叫數,平均通話時長(是任何重要的),我已經得到了VBA來計算總傳出與此:

Dim Call_Number As Integer 
Dim Call_Time As Date 
Dim Call_Total As Date 

Call_Number = .Cells(2, 6).Value 
Call_Time = .Cells(2, 7).Value 

Call_Total = Call_Number * Call_Time 
.Cells(12, 7).Value = Call_Total 

所以我需要的是爲每個銷售員取3個單元格,並將它們移動到相關工作表中的正確位置,這些工作表按名稱分隔。如果目標單元格已滿,我還需要將它移動到右側的單元格中,因此我認爲我需要在1月1日之前開始粘貼過程,並繼續向右移動,直到找到空白單元格。有沒有辦法可以在按鈕或自動完成?

我作爲數據導入表,在這裏我們只是將數據導入CSV第一板,並且由於它的標準格式,它每天都會給它全部在正確的格式。

代碼我到目前爲止。它沒有錯誤,但不會做任何事情:

Sub Move_Data() 

Dim Dean As Worksheet 
Dim Chris As Worksheet 
Dim Paul As Worksheet 
Dim Nigel As Worksheet 
Dim Calc As Worksheet 
Dim Lastrow As Long 
Dim J As Long 
Dim i As Long 


Set Dean = ThisWorkbook.Worksheets("DEAN 822") 
Set Chris = ThisWorkbook.Worksheets("CHRIS 829") 
Set Paul = ThisWorkbook.Worksheets("PAULP 830") 
Set Nigel = ThisWorkbook.Worksheets("NIGEL 833") 
Set RUSSELL = ThisWorkbook.Worksheets("RUSSELL 835") 
Set Calc = ThisWorkbook.Worksheets("Calculation Sheet") 

Lastrow = Range("C" & Dean.Columns.Count).End(xlToRight).Column 

J = 2 

For i = 0 To Lastrow 

Set Rng = Dean.Range("C5").Offset(i, 0) 
If Not (IsNull(Rng) Or IsEmpty(Rng)) Then 
Calc.Cells(2, 4).Copy 
Dean.Range("c" & J).PasteSpecial xlPasteValues 
J = J + 1 
End If 
Next i 
Application.CutCopyMode = False 


End Sub 

回答

0

而不是

Lastrow = Range("C" & Dean.Columns.Count).End(xlToRight).Column 

我想你想

Lastrow = Range("C" & Dean.Columns.Count).End(xlUp).Row 

「我還需要...在按鈕中還是自動?「

LastCol = WshtName.Cells(CrntRow, Columns.Count).End(xlToLeft).Column 

LastCol設置爲行CrntRow中最後使用的列。


J = 2 

For i = 0 To Lastrow 

    Set Rng = Dean.Range("C5").Offset(i, 0) 
    If Not (IsNull(Rng) Or IsEmpty(Rng)) Then 
    Calc.Cells(2, 4).Copy 
    Dean.Range("c" & J).PasteSpecial xlPasteValues 
    J = J + 1 
    End If 
Next i 
Application.CutCopyMode = False 

我不知道這是什麼代碼嘗試。

它設置Rng到C5,C6,C7,C8,...至Cn,其中n爲LASTROW + 5。例如,如果C5爲空,則將C2複製到`Calc.Cells(2,4)。

您是否想將工作表Dean的C列複製到工作表Calc的B列?

如果去除空單元格的並不重要,那麼這將是更快,更清晰的:

Set Rng = Dean.Range(.Cells(5 ,"C"), .Cells(Lastrow ,"C")) 
Rng.Copy Destination:=Calc.Cells(2, 4) 

響應新的信息發表評論

我不能想像或者您的源數據或您的目的地您的描述中的數據無法提供任何具體建議。

歡迎來到Stack Overflow。我相信這是找到以前發佈的信息的好地方,也是發佈新問題的好地方,但您必須遵守網站規則。

頂部欄中的右側是幫助按鈕。點擊此處並閱讀如何使用本網站。瞭解如何發佈將被歸類爲一個好問題的問題,並且會得到快速有效的回答。

我認爲最大的三個問題你的問題是:

  • 問得太多。您可以根據自己的意願提出儘可能多的問題,但每個問題只能有一個問題。
  • 您要求提供已有的信息。
  • 對於允許任何人提供幫助的要求,您太模糊了。你說你想每個職員移動三個值。但是你不顯示如何安排工作表「計算表」或工作人員工作表。在獲得較高聲譽之前,您無法發佈圖片,但是您可以使用代碼功能來創建工作表的「圖紙」。

爲了避免要求太高,您必須將您的要求分成幾個小步驟。以下是我嘗試根據我對你所尋找的東西的猜測來確定必要的小步驟。

包含工作人員詳細信息的CSV文件作爲每日電子郵件的附件到達。你是否手動保存這些附件?用於保存附件的Outlook VBA宏不會很難編寫。我建議你稍後離開,但如果你搜索堆棧溢出「[outlook-vba]保存附件」,你會發現相關的代碼。

以上顯示了我如何搜索堆棧溢出。我從語言的標籤開始,並按照一些關鍵詞或關鍵詞進行。有時需要我花幾分鐘才能找到正確的搜索字詞,但我很少無法找到有趣的東西

如何將CSV導入Excel?你是否手動執行此操作?有許多可能的VBA方法。嘗試搜索「[excel-vba] xxxx」,其中xxxx描述了您的首選方法。

我假設CSV文件的結構非常簡單,並且在各行中查找信息沒有困難。您似乎知道查找最後一行的最簡單技術,因此您應該不難創建一個循環來處理行。

您如何將CSV文件中的員工姓名與他們的工作表名稱聯繫起來?在你的問題中,你有工作表名稱,如「DEAN 822」,「CHRIS 829」和「PAULP 830」。這些是CSV文件中使用的名稱嗎?新員工加入後會發生什麼?我懷疑這種情況經常發生,但是當它發生時你不想修改你的宏。

我不明白您對新數據要添加到任何現有數據權限的要求。每天將有三個值,每年大約200個工作日可以提供600列。對我來說,看到一個尷尬的安排。我會認爲每天一行會更方便。

你將如何運行宏?你提到一個按鈕或自動。我不喜歡按鈕,因爲我發現工具欄已經混亂了。我更喜歡使用快捷鍵,如Ctrl + q。我對這種類型的工作簿很少有一個以上的宏,因此對我來說效果很好。通過自動,我假設你的意思是宏將在工作簿打開時自動運行。我會從快捷鍵開始,但是當你準備好查找「事件」和「事件例程」時。您將找到一個解釋,說明如何在工作簿打開時自動啓動宏啓動。

我希望上面有一些幫助。

+0

嘿,對於遲到的回覆感到抱歉,只是有時間再次處理這個問題。要回答您的問題:您是否想將工作表Dean中的C列複製到工作表Calc的B列?不,它應該是相反的。 – user3651874

+0

讓我澄清我的要求。我需要自動將特定數據移動到右側的下一個可用單元格。如果C2-6中「計算表」的來源不正確,則不應輸入數據。這是爲了在工作人員在當天沒有打電話時提供靈活性。那有意義嗎? – user3651874

相關問題