2015-10-14 83 views
0

因此,我有一個包含日期列的工作表。 主表中的數據有重複的日期。對於我們每個月所做的每個月的意義,我可以有07/01/2010多達100次,或少至2次。根據現有工作表中的日期創建新工作表...列

我想要做的是篩選日期列,並根據該列中的日期(日期)創建新工作表,但我只想要唯一值。

因此,我有多個在VBA中創建新工作表的示例,這不是我的問題。它正在生成唯一的列表,以便讓創建的表單成爲我遇到問題的地方。

Sub Add_Sheets() 
Dim WS As Worksheet 
Set WS = sheets.Add(After:=Worksheets("MasterSheet")) 
WS.Name = 1 '<-- Want to call something so as to get the day from Master dynamically' 
End Sub 

這讓我我的唯一日期,但不是天名單:

Sub UniqueList() 
Dim lastrow As Long 
Dim sheets As Worksheet 
Set sheets = ThisWorkbook.Worksheets("MasterSheet") 
lastrow = sheets.Cells(Rows.Count, 3).End(xlUp).Row 
sheets.Range("C2:C" & lastrow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=sheets.Range("G2"), Unique:=True 'dont prefer this but it works. 
End Sub 

所以我接受建議。 最近開始這個項目,所以沒有深入到它重做所有它。需要VBA,因此用戶只需點擊按鈕即可。

感謝您的指點。

+0

最簡單的方法就是循環日期列上的細胞,創建一個名稱字符串,如'「WS_」&cell.Text'並檢查是否有此名稱的表已經存在,創造的不是。我錯過了什麼? –

+0

就是這樣,只是尋找一些示例代碼來幫助我到達那裏....謝謝。 – okmred

回答

0
Function getSheetByName(sh As String) As Worksheet 
    On Error Resume Next 
    Set getSheetByName = Worksheets(sh) 
    If Err.Number <> 0 Then Set getSheetByName = Nothing 
End Function 

Sub CreateSheetsByUniqueDate() 
    Dim cell As Range, name As String 
    Application.DisplayAlerts = False 

    For Each cell In Worksheets("MasterSheet").UsedRange.Columns(3).Cells ' <~~ set to your date column 
     name = "WS_" & Format(cell.Text, "dd") 
     If getSheetByName(name) Is Nothing Then Worksheets.Add().name = name 
    Next 
    Application.DisplayAlerts = True 
End Sub 
+0

在這裏得到一個錯誤:對於工作表(「MasterSheet」)。範圍(「A:A」)中的每個單元格,我更新爲「C:C」,因爲這是我的日期列,但只是錯誤.... – okmred

+0

@okmred確定這是因爲工作表名稱不接受名稱中的「/」字符。嘗試更改日期列的格式以避免/。 –

+0

@okmred請檢查編輯後的版本。 –

相關問題