簡體   English   中英

從一張紙上獲取結果,然后將其移動到其他許多張紙上

[英]Take results from one sheet and move them into many other sheets

我已經對這個問題進行了類似的回答,但是無論我做什么,我都無法讓他們做我需要的事情。

我每天都有一封電子郵件,其中包含一個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

代替

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設置為LastCol行中最后使用的列。


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)。

您是否要將C列從工作表Dean復制到工作表Calc的B列?

如果清除空單元格並不重要,那么它將更快更清晰:

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

回應評論的新信息

我無法根據您的描述顯示您的源數據或目標數據,因此無法提供任何具體建議。

歡迎使用堆棧溢出。 我相信這是查找以前發布的信息的好地方,也是發布新問題的好地方,但是您必須遵循網站規則。

頂部欄中中心的右邊是“幫助”按鈕。 單擊此並閱讀如何使用此站點。 了解如何發布將被歸類為好問題並能快速,有效地回答的問題。

我相信您的問題最大的三個問題是:

  • 你問太多了 您可以根據自己的喜好提出許多問題,但每個問題只能有一個問題。
  • 您要求提供的信息。
  • 您對於允許任何人提供幫助的要求過於含糊。 您說要移動每個職員三個值。 但是您沒有顯示工作表“計算表”或工作人員工作表的排列方式。 在享有較高聲譽之前,您不能發布圖像,但可以使用代碼工具來創建工作表的“工程圖”。

為了避免提出過多要求,您必須將需求分為幾個小步驟。 以下是我根據您對所尋找內容的猜測來確定必要的小步驟的嘗試。

包含員工詳細信息的CSV文件作為日常電子郵件的附件到達。 您是否手動保存這些附件? 用於保存附件的Outlook VBA宏將不難編寫。 我建議您將其留待以后使用,但是如果您在Stack Overflow中搜索“ [outlook-vba]保存附件”,則會找到相關的代碼。

上面顯示了我如何搜索堆棧溢出。 我從語言標簽開始,然后加上一些關鍵詞或關鍵詞。 有時,我需要花一些時間才能找到正確的搜索詞,但我很少能找到有趣的東西

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

我認為CSV文件的結構非常簡單,並且在各個行中查找信息沒有困難。 您似乎知道找到最后一行的最簡單方法,因此您無需費力即可創建一個循環處理各行。

您如何將CSV文件中工作人員的姓名與工作表的姓名相關聯? 在您的問題中,您具有工作表名稱,例如“ DEAN 822”,“ CHRIS 829”和“ PAULP 830”。 這些是CSV文件中使用的名稱嗎? 新員工加入后會怎樣? 我懷疑這種情況經常發生,但是您不希望在發生這種情況時修改宏。

我不理解您對將新數據添加到任何現有數據右側的要求。 每天將有三個值,因此每年大約有200個工作日,即600列。 對我來說,這很尷尬。 我本來以為每天一排會更方便。

您將如何運行宏? 您提到一個按鈕或自動。 我不喜歡按鈕,因為我發現工具欄已經足夠混亂了。 我更喜歡使用快捷鍵,例如Ctrl + q 每個這種工作簿我很少有一個以上的宏,因此對我來說效果很好。 自動,我假設您的意思是打開工作簿時宏將自動運行。 我將從快捷鍵開始,但是當您准備就緒時,請查找“事件”和“事件例程”。 您將找到有關如何在工作簿打開時自動啟動宏的說明。

希望以上內容對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM