Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 15-06-16, 05:34
Το avatar του χρήστη Spirosgr
Spirosgr Ο χρήστης Spirosgr δεν είναι συνδεδεμένος
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλημέρα.
Μια λύση, με κώδικα.
Ξεκαθάρισμα και μεταφορά 30.000 εγγραφών σε 3,58 sec
---------------------------------------------------------------------------------------
Σε μια module, αντιγράφουμε τον κώδικα:
Κώδικας:
Sub RelocateValues()
    Dim i As Long, Lr1 As Long, Nr2 As Long
    'Ορισμός τελευταίας γραμμής φύλλου εκκίνησης
    Lr1 = Sh1.Cells(Rows.Count, 1).End(xlUp).Row
    'Απενεργοποίηση οθόνης
    Application.ScreenUpdating = False
    'Καθαρισμός προορισμού
    Sh2.Range("a2:b" & Rows.Count).ClearContents
    'Μεταφορά (αν υπάρχει κεφαλίδα i = 2, άλλως i = 1)
    For i = 2 To Lr1
        'Ορισμός τελευταίας γραμμής φύλλου προορισμού
        Nr2 = Sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        'Συνθήκη μεταφοράς (όχι κενά - barcode με 8 χαρακτήρες)
        If Sh1.Cells(i, 1).Value <> vbNullString And _
           Len(Sh1.Cells(i, 1)) = 8 And _
           Sh1.Cells(i, 2).Value <> vbNullString Then
            'Μεταφορά τιμών - μορφοποίηση προορισμού
            Sh2.Cells(Nr2, 1).NumberFormat = "@"
            Sh2.Cells(Nr2, 1).Value = Sh1.Cells(i, 1).Value
            Sh2.Cells(Nr2, 2).NumberFormat = "###0"
            Sh2.Cells(Nr2, 2).Value = Sh1.Cells(i, 2).Value
        End If

    Next i
    'Επαναφορά οθόνης
    Application.ScreenUpdating = True
    Exit Sub
End Sub
Τι θα κάνει:
Θα μεταφερθούν, όλοι οι σωστοί κωδικοί (κελιά χωρίς κενά και μήκος 8 χαρακτήρες)
που έχουν στο δεξί κελί τιμή.
Ο barcode θα μεταφερθεί ως text.

Σημειώσεις:
1. Όπου sh1 το κωδικό όνομα του φύλλου εκκίνησης.
2. Όπου sh2 το κωδικό όνομα του φύλλου προορισμού.
3. Αν ο barcode έχει περισσότερους - λιγότερους από 8 χαρακτήρες,
αλλάξτε την γραμμή:
Len(Sh1.Cells(i, 1)) = 8
4. Αν χρειαστεί (ανάλογα με το περιεχόμενο της 2ης στήλης) αλλάξτε:
Μορφοποίηση Sh2.Cells(Nr2, 2).NumberFormat = "###0"
5. Αν η στήλη κωδικών, είναι <> από την 1η (Α) αλλάξτε το 1, όπου χρειαστεί πχ
Sh2.Cells(Nr2, 1).Value = Sh1.Cells(i, 1).Value
6. Αν η στήλη τιμών, είναι <> από την 2η (Β) αλλάξτε το 2, όπου χρειαστεί πχ
Sh2.Cells(Nr2, 2).Value = Sh1.Cells(i, 2).Value
*Όμοια τα a και b πχ
Sh2.Range("a2:b" & Rows.Count).ClearContents
Απάντηση με παράθεση