Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Sum bold and red (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/4923-sum-bold-red.html)

ΔΗΜΗΤΡΙΟΣ 11-06-18 17:25

Sum bold and red
 
1 Συνημμένο(α)
Ποιό είναι το λάθος που έχει ο κώδικας ( το αρχείο είναι απο το διαδίκτυο) και δεν λειτουργεί;
Ευχαριστώ !

Spirosgr 11-06-18 19:18

Το σωστό είναι:

Κώδικας:

Sub SumBOLDRED()
    Dim LastRow As Long, i As Long, MySum As Double
    LastRow = Φύλλο1.Cells(Rows.Count, 1).End(xlUp).Row
    MySum = 0

    For i = 1 To LastRow
        If IsNumeric(Φύλλο1.Cells(i, 1)) And _
          Φύλλο1.Cells(i, 1).Font.Bold = True And _
          Φύλλο1.Cells(i, 1).Font.ColorIndex = 3 Then
            MySum = MySum + Cells(i, 1)
        End If
    Next i
    Φύλλο1.Range("k1").Value = MySum
End Sub

*Όπου Φύλλο1 το κωδικό όνομα φύλλου.
(Θα προτιμούσα να αλλαχθεί με κάτι σαν... Sht1)

**Αν θέλουμε να «τρέχει» σε κάθε ενεργό φύλλο, το αλλάζουμε με ActiveSheet.

Το σφάλμα, είναι στην γραμμή κώδικα, που βρίσκει την τελευταία γραμμή με «γεμάτο» κελί.

αντί
Κώδικας:

LastRow = Range("A1:A20").End(xlUp).Row
πρέπει
Κώδικας:

LastRow = Φύλλο1.Cells(Rows.Count, 1).End(xlUp).Row
***το MySum As Double είναι πολύ καλά στην μορφή που είναι,
διότι επιτρέπει μεγάλους αλλά και δεκαδικούς αριθμούς.

kapetang 11-06-18 19:58

1 Συνημμένο(α)
Καλησπέρα

Και μια πρόταση, με συνάρτηση, στο συνημμένο.

Τη θεωρώ πιο ευέλικτη.

Αθροίζει τα κελιά που η γραμματοσειρά είναι είτε Bold είτε Red είτε και τα δύο.

Με μια μικρή αλλαγή στον κώδικα μπορεί να αθροίζει μόνο τα κελιά που η γραμματοσειρά είναι ταυτόχρονα και Bold και Red.

ΔΗΜΗΤΡΙΟΣ 11-06-18 20:01

Ευχαριστώ πολύ !
Να είστε καλά !

ΔΗΜΗΤΡΙΟΣ 12-06-18 06:56

Καλημέρα !
Σπύρο τι εννοείς όταν λες ότι βρίσκει την τελευταία γραμμή με << γεμάτο>> κελί;
Ευχαριστώ πολύ!

Spirosgr 12-06-18 07:53

1 Συνημμένο(α)
Καλημέρα.
Η έκφραση:
Cells(Rows.Count, 1).End(xlUp).Row

που σε «ελεύθερη» μετάφραση γίνεται:
κελιά(γραμμές.μέτρησε, στην στήλη 1).πήγαινε στο τέλος των γραμμών(και
ανέβα προς τα πάνω).γραμμή


δίνεται σε μια μεταβλητή πχ LastRow =
την οποία ορίζουμε ως Long (Dim LastRow As Long)
να είναι δηλαδή μεγάλος ακέραιος και βρίσκει την τελευταία γραμμή μιας στήλης
που έχει δεδομένα (*βλέπε εικόνα)
Στην προκειμένη περίπτωση, θα επιστρέψει το 20 (γραμμή 20)
για να το χρησιμοποιήσουμε στον κώδικα μας και να πάρουμε την τιμή 200 για παράδειγμα
ή Cells(Rows.Count, 1).End(xlUp).Row+1
για να βάλουμε κάτι άλλο στο αμέσως πιο κάτω κενό κελί (γραμμή 21)
ή ότι άλλο ανάλογα με τις ανάγκες του κώδικα που χτίζουμε.

Η μέθοδος End(xlUp) μέσα στην έκφραση,
μας εξασφαλίζει το σωστό αποτέλεσμα,
καθώς σε σχέση με το αντίστοιχο End(xlDown)
θα παραβλέψει τα κενά κελιά της στήλης.
θα πάει στον πάτο του φύλλου και ανεβαίνοντας,
θα «τρακάρει» στο κελί της γραμμής 20,
πράγμα που είναι το ζητούμενο,
σε αντίθεση με το End(xlDown) που θα έδινε γραμμή 9, που δεν είναι το επιθυμητό.

Ακόμα
Με όμοιο τρόπο, μπορούμε να έχουμε και την τελευταία γεμάτη στήλη μιας περιοχής,
με την έκφραση:
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
και εδώ το LastCol ορίζεται ως Long

ΔΗΜΗΤΡΙΟΣ 12-06-18 15:33

Ευχαριστώ πολύ !


Η ώρα είναι 05:45.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2