0

我将信息存储在 Excel 2010 工作簿的一张表上,其中一列包含日期。我想要一个宏,它将按日期对这些信息进行分组,并将其复制到同一工作簿中的其他工作表中,这些工作簿我之前已设置并按这些日期命名。

所以我在一张名为“来源”的工作表上有这些信息:

Date         First Name  Last Name  Hair Colour
01/02/2011   Bob         Jones      Brown
02/05/2011   Geoff       Smith      Red
03/09/2010   Craig       Hamilton   Blond
02/05/2011   Chris       Wazowski   Brown
05/06/2011   Steve       Mac        Blond
03/09/2010   Tom         Lounds     Brown

我还有另外四张纸,分别命名为:“2011 年 2 月 1 日”、“2011 年 5 月 2 日”、“2010 年 9 月 3 日”和“2011 年 6 月 5 日”

我想要一个宏,它将复制标题和“源”工作表中的整行,这些工作表将这些日期转移到相应的工作表中。

数据不断被添加到“源”表中,所以这是我需要经常重复的操作。

我知道这个网站上有很多代码显示如何按条件对信息进行分组和复制到其他工作表,但我还没有找到以这种方式工作的代码。

4

2 回答 2

2

Date这是一个示例,说明如何在 a (第一列中的数据)和String具有与工作表名称相同格式的 a之间来回转换。

Dim d As Date
Dim sheetName As String

d = CDate("01/02/2011") ' or e.g. Range("A2").Value
sheetName = Format(d, "dd mmm yyyy")

Debug.Print sheetName ' 01 Feb 2011

至于其余的,正如您自己指出的那样,该网站上已经回答了无数类似的问题,并为与您的问题几乎相同的问题提供了解决方案。一旦您尝试了某事,请告诉我们您是否有任何具体问题。

于 2011-05-19T19:20:39.280 回答
0

谢谢让-弗朗索瓦。

我找到了一个效果很好的解决方案,尽管我不完全确定如何或为什么:

Sub Update_Sheets()

'Formats dates
Dim rng As Range
Dim rngA As Range

Set rngA = Range("A1:A" & Range("A" & Range("A:A").Rows.Count).End(xlUp).Row)
rngA.NumberFormat = "@"
For Each rng In rngA
    rng.Value = Format(rng, "dd mmm yyyy")
Next rng


'Copies rows of data to the right sheets
Dim ws As Worksheet, source As Range, dest As Range
Dim daily As Worksheet
Set daily = Worksheets("Source")
Application.ScreenUpdating = False
On Error Resume Next
For Each ws In Worksheets
If ws.Name <> daily.Name Then
daily.Range("A1").AutoFilter Field:=1, Criteria1:=ws.Name
Set source = daily.Range("A1").CurrentRegion.Offset(1, 0).SpecialCells(xlVisible)
Set dest = Worksheets(ws.Name).Range("A65536").End(xlUp).Offset(1, 0)
source.Copy dest
End If
Next
daily.Range("A1").AutoFilter
On Error GoTo 0

End Sub
于 2011-05-20T09:16:41.560 回答