[英]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.