簡體   English   中英

過濾每個值,將每個表復制並粘貼到新工作表中

[英]Filter each value, copy and paste each table into new sheet

我想使用 vba 代碼以便有序地選擇表中的每個值並將它們復制到新工作表中。 如圖所示,有一個表格,在 F 列中我們有 2 個不同的值(可能大於 2)。 我需要的是,當我運行宏時,它將選擇第一個值,然后將表格復制到新工作表中(工作表的名稱將基於 F 列中的值,例如 0.55),然后返回並選擇第二個值並做同樣的事情。 我們可能有超過 6-7 個值,所以我不知道如何創建一個循環來自動為所有值執行此操作。 我需要在該代碼塊的末尾添加這個過程。 因為代碼做了一些不同的事情,結果我得到了那個表。

在此處輸入圖片說明

Private Sub CommandButton2_Click()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim x As Workbook
Dim y As Workbook
Dim q As Workbook




'## Open all workbooks first:
Set x = Workbooks.Open("C:\Users\mammadov.ali\Desktop\macros\barkod.xlsx")
Set y = Workbooks.Open("C:\Users\mammadov.ali\Desktop\macros\csv.csv")
Set q = Workbooks.Open("C:\Users\mammadov.ali\Desktop\macros\campaign.xlsx")


'## Clear the workbook first:
Windows("csv.csv").Activate
y.Sheets("csv").Range("A:M").Clear


'## Insert the column in the barkod file:
Windows("barkod.xlsx").Activate
x.Sheets("barkod").Range("F1").EntireColumn.Insert

'## Insert the column header in the barkod file:
x.Sheets("barkod").Range("E1").Offset(0, 1).Value = "Discounts"

'## make the vlookup in barkod file:
With x.Sheets("barkod").Range("F2")
    .FormulaR1C1 = "=VLOOKUP(RC[-1], [campaign.xlsx]Sheet1!C[-5]:C[-4], 2, 0)"
    .AutoFill Destination:=.Resize(WorksheetFunction.CountA(.Offset(, -1).EntireColumn))
End With


'## deselect the #N/A:
Windows("barkod.xlsx").Activate
x.Sheets("barkod").Range(Sheets("barkod").Range("A1:F1"), Sheets("barkod").Range("A1:F1").End(xlDown)).Select
Selection.AutoFilter
ActiveSheet.Range("A:F").AutoFilter field:=6, Criteria1:="<>#N/A"


'Now, copy what you want from x:
x.Sheets("barkod").Range(Sheets("barkod").Range("A1:F1"), Sheets("barkod").Range("A1:F1").End(xlDown)).Copy


'Now, paste to y worksheet:
y.Sheets("csv").Range("A1").PasteSpecial

這個過程應該做你想做的,這樣你就可以給它一個有意義的名字,並在你現有代碼的末尾調用它。 它使用高級過濾器在 F 中創建一個唯一項目列表,然后使用自動過濾器循環每個項目以創建新工作表。

Sub Macro2()

Dim r As Range, r2 As Range, ws As Worksheet

Application.DisplayAlerts = False

With Sheets("Sheet1")   'change to suit
    Sheets.Add().Name = "Temp"
    .Range("F1", .Range("F" & Rows.Count).End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Temp").Range("A1"), Unique:=True
    Set r2 = Sheets("Temp").Range("A2", Sheets("Temp").Range("A2").End(xlDown))
     For Each r In r2
        .Range("A1").CurrentRegion.AutoFilter field:=6, Criteria1:=r
        Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
        .AutoFilter.Range.Copy ws.Range("A1")
        ws.Name = r
        .Range("A1").CurrentRegion.AutoFilter field:=6
    Next r
    Sheets("Temp").Delete
    .AutoFilterMode = False
End With

Application.DisplayAlerts = True

End Sub

暫無
暫無

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

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