0

Excel 2010 ブックの 1 つのシートに情報が格納されており、その 1 つの列に日付が含まれています。この情報を日付でグループ化し、以前に設定して日付で名前を付けた同じブック内の他のシートにコピーするマクロが必要です。

したがって、「ソース」と呼ばれるシートに次の情報があります。

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 つのシートがあります。

見出しと、これらの日付を持つ「ソース」シートの行全体を対応するシートにコピーするマクロが必要です。

データは「ソース」シートに継続的に追加されるため、これは頻繁に繰り返す必要があるアクションです。

このサイトには、情報を条件ごとにグループ化して他のシートにコピーする方法を示すコードがたくさんあることは知っていますが、この方法で機能するコードは見つかりませんでした。

4

2 に答える 2

2

Date(最初の列のデータ) とStringシート名と同じ形式の の 間で相互に変換する方法の例を次に示します。

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

残りの部分については、ご自身で指摘されているように、この Web サイトでは膨大な数の同様の質問が回答されており、あなたの問題とほぼ同じ問題の解決策が提供されています。何かを試してみて、具体的な問題が発生した場合はお知らせください。

于 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 に答える