VBA ile Excel'de iki veya daha fazla farklı levhalar halinde kriterlere uyan Kopya satırları

oy
0

Herkes (bu şeyleri öğrenmek için coşku bir sürü) gerçekten kendi kendini yetiştirmiş acemi yardım etmeye istekli var mı?

Bir stok ve sipariş dosyası için ben başka bir sayfaya 1 ölçütlere uyan bir tablonun satırlarını kopyalamak için bir yol arıyorum. Aynı zamanda ben (1 kriterlerine uymuyor) tüm diğer satırlar başka bir sayfaya kopyalanacak istiyorum.

Ben yaprak INSTOCKORDERS masa INSTOCKORDERS için, sac SİPARİŞLER tablo ORDERS satırlarını kopyalayabilirsiniz noktaya yaptı. Ama gerçekten istediğiniz tüm siparişler dışında iki farklı sayfaları yapmaktır. sipariş ve stok öğeleri ile biri. Ve stokta DEĞİLDİR siparişler / öğeleri ile başka bir sayfa. Bu eylem gerçekleşti sonra, SİPARİŞLER-tabloyu boşaltmak gerekir. Ve bundan sonra, bir dahaki sefere bu onların son satırın altına tablolar INSTOCKORDERS ve NOSTOCKORDERS içine SİPARİŞ yerleştirmelidir.

Ne sıralamaya ile ilgisi geliyordu ben daha kolay NOSTOCKORDERS ve INSTOCKORDERS diğer tüm olanları 0 öğelerle tüm olanları kopyalamak yapabiliriz düşünce masa, üstünde 0 bir stockquantity sahip tüm öğeleri koymaktır. Ama, bazı eski sorulara geçti AutoFilter koştu (... benim başlayanlar cehalet için üzgün) bu düzgün bir çalışma eylemi başlatmak için nasıl dursun yapmak için nasıl hiçbir ipucu var ama alamadım ...

Sub CopyOrders()

'Sorting column STOCK in ORDERS from a-z
    Worksheets(Orders).ListObjects(Orders).Sort. _
        SortFields.Clear
    Worksheets(Orders).ListObjects(Orders).Sort. _
        SortFields.Add2 Key:=Range(Orders[[#All],[STOCK]]), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets(Orders).ListObjects(Orders).Sort
        .Apply
    End With

'Copying the table ORDERS to INSTOCKORDERS
Range(Orders).Copy Range(InStockOrders)

End Sub

Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Sonda gelen iyi bir çalışma sistemi var.

    Sub CopyOrders()

'Sorting column STOCK in ORDERS from A-Z
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Clear
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Add2 Key:=Range("Orders[[#All],[STOCK]]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("Orders").ListObjects("Orders").Sort
        .Apply
    End With

'Delete all rows from table NoStockOrders
On Error Resume Next
Worksheets("NoStockOrders").ListObjects("NoStockOrders").DataBodyRange.EntireRow.Delete

'Copy all orders which have no stock to
'the sheet NoStockOrders
Worksheets("Orders").Range("ORDERS").AutoFilter _
    Field:=6, Criteria1:="0", VisibleDropDown:=True
On Error Resume Next
Worksheets("Orders").Range("ORDERS").SpecialCells _
    (xlCellTypeVisible).Copy
    Range("NoStockOrders").PasteSpecial _
    Paste:=xlPasteValues

If Worksheets("Orders").ListObjects("Orders").FilterMode Then
    Worksheets("Orders").AutoFilter.ShowAllData
End If

'Sorting column STOCK in ORDERS from Z-A
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Clear
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Add2 Key:=Range("Orders[[#All],[STOCK]]"), SortOn:= _
        xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With Worksheets("Orders").ListObjects("Orders").Sort
        .Apply
    End With

'Delete all rows from table InStockOrders
On Error Resume Next
Worksheets("InStockOrders").ListObjects("InStockOrders").DataBodyRange.EntireRow.Delete

'Copy all orders which have no stock to
'the sheet InStockOrders
Worksheets("Orders").Range("ORDERS").AutoFilter _
    Field:=6, Criteria1:=">0", VisibleDropDown:=True
On Error Resume Next
Worksheets("Orders").Range("ORDERS").SpecialCells _
    (xlCellTypeVisible).Copy
    Range("InStockOrders").PasteSpecial _
    Paste:=xlPasteValues

If Worksheets("Orders").FilterMode Then
    Worksheets("Orders").ShowAllData
End If

'Copying the table ORDERS to INSTOCKORDERS
'Range("Orders").Copy Range("InStockOrders")

End Sub

Unutmayın: Siparişler masa dışından bu çalışan düzgün çalışmıyor! Daha sonra tablodaki filtermode temizlemez. (: benim yeni bir soru izleyin buraya bağlantı açıklama girin )

Cevap 28/11/2018 saat 13:50
kaynak kullanıcı

oy
0

Güncelleme: Cevap 2: Ben bütün bu hatayı buldum. Ne o anda doğru satırların kopyalıyor, bugüne kadar yok. formüllerle Ama kopyalar! Bu orijinal tablo (Siparişler) farklı bir şekilde sıralanır ediliyor veya satırlar silinir veya başka bir şey olduğunda demektir, "... StockOrders" kopyalanan satırlar çünkü orada formüllerin farklı değerler gösteriyor! Benim ihtiyacım Nasıl değerleri yerine formüller kopyalamak için küçük bir yardım ... nedir?

Cevap 1: Teşekkürler bir yere gidiyor Curtis000 için. Şimdi stokta bulunan öğelerin bir kopyasını oluşturur VBA bir parça var. Aynı adı taşıyan masaya levha "InStockOrders" kopyalanabilir alır. Ancak oluyor bir küçük sorun var.

flirts 5 sütun içinde sağ değerlerle kopyalanır. Ama daha fazla 6 sütun ve benim masa "SİPARİŞLER" sıraları ilk aittir kopyalanan değerleri olsun.

    Sub FilterInStock()

Worksheets("Orders").Range("B2,I2").AutoFilter Field:=6, Criteria1:="<>" & "0", VisibleDropDown:=True
Worksheets("Orders").Range("ORDERS").SpecialCells(xlCellTypeVisible).Copy Range("InStockOrders")

If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

End Sub

Ama masa NoStockOrders olmalıdır olanlar gayet doğru kopyası vardır. Şimdiye kadar ben ayrı iki VBA en koşuyorum. Bu örnekte: İlk FilterInStock ardından FilterNoStock.

    Sub FilterNoStock()

Worksheets("Orders").Range("B2,I2").AutoFilter Field:=6, Criteria1:="0", VisibleDropDown:=True
Worksheets("Orders").Range("ORDERS").SpecialCells(xlCellTypeVisible).Copy Range("NoStockOrders")

If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

End Sub

Siparişler masa

InStockOrders masa

NoStockOrders masa

Cevap 11/11/2018 saat 11:34
kaynak kullanıcı

oy
0

Haklısınız, Otomatik Filtre işlevi istediğiniz şeydir. Otomatik filtreleme ölçütleri bulmak için hangi sütunun (alan) anlatılması gerekiyor daha sonra da süzmek için bir ölçüt gerekiyor ve. Filtrelemek sonra Sonra, kalan görünür hücreleri kopyalamak gerekiyor. Aşağıdaki kodda, çalışma kitabınızda için gerekenler ile çalışma kitapları, çalışma sayfaları ve Range değiştirin:

Sub FilterNoStock()
Workbooks.Worksheets.Range.AutoFilter Field=5, Criteria1:="0", VisibleDropDown:=True
Workbooks.Worksheets.Range.SpecialCells(xlCellTypeVisible).Copy
End Sub

Aynı şekilde, tüm ama 1 değeri için filtreleyebilirsiniz:

Sub FilterInStock()
Workbooks.Worksheets.Range.AutoFilter Field=5, Criteria1:="<>" & "0", VisibleDropDown:=True
Workbooks.Worksheets.Range.SpecialCells(xlCellTypeVisible).Copy
End Sub

Ayrıca dinamik veri içeren satırları kopyalamak için Rows.Count fonksiyonu ile bu eşleştirme muktedir tavsiye ve instock ve NoStock sayfalarında Listelerinizden sonunda yapıştırın olacaktır. Rows.Count yöntemiyle, VBA sen, bir değişkene, sonra aralığın uzunluğunu ilan etmek o değişkeni kullandığınızı belirledik kaç satır saymak olun. Şu anda size instock ve NoStock tabakalarda çok siparişleri derlemeye çalışıyorsanız önceki siparişler tüm verileri üzerine yazacak yapıştırma gibi sorunlu olacak tüm çalışma sayfasını, kopyaladığınız: Rows.Count açıklaması

Cevap 08/11/2018 saat 14:47
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more