Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 03-12-23, 09:02
Το avatar του χρήστη ChrisGT7
ChrisGT7 Ο χρήστης ChrisGT7 δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Χρήστος Ζώρζος
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-09-2013
Περιοχή: Κοντά σε ηφαίστειο...
Μηνύματα: 1.046
Προεπιλογή

Καλημέρα Σάκη,

1. Τα αθροίσματα των αποτελεσμάτων θα εμφανίζονται στη στήλη ΑΥ βάσει των πέντε καλύτερων ποσοστών γραμμής.
2. Ως δικλείδα ασφαλείας, το επιλεγμένο εύρος θα πρέπει να έχει όριο 250 γραμμών, 50 στηλών και πάντα ζυγό αριθμό στηλών. Φυσικά τα όρια αυτά αλλάζουν με τις ανάλογες τροποποιήσεις στον κώδικα.
3. Αφού επιλέξουμε το εύρος με τα δεδομένα μας (βλ. 2), πατάμε το κουμπί ΠΕΝΤΑΔΕΣ.

Σύμφωνα λοιπόν με τα παραπάνω, δοκίμασε τον παρακάτω κώδικα αν καλύπτει το ζητούμενό σου:

Κώδικας:
Option Explicit

Sub PENTADES()
    Dim Rng As Range
    Set Rng = Selection
    
    If Rng.Rows.Count > 250 Or Rng.Columns.Count > 50 Or Rng.Columns.Count Mod 2 <> 0 Then
        MsgBox "Λανθασμένο εύρος δεδομένων!", vbCritical, "ΣΦΑΛΜΑ"
        Exit Sub
    End If
    
    Dim R As Integer, X As Integer, C As Byte, Y As Byte, R1 As Integer
    [AY:AY,BA:BB].ClearContents
    X = Rng.Row + Rng.Rows.Count - 1
    Y = Rng.Column + Rng.Columns.Count - 1
    
    Application.ScreenUpdating = False
    For R = Rng.Row To X
        R1 = R
        For C = Rng.Column To Y Step 2
            Range("BA" & R1 & ":BB" & R1).Value = Range(Cells(R, C), Cells(R, C + 1)).Value
            R1 = R1 + 1
        Next
        
        [BA:BB].Sort Key1:=[BB1], Order1:=xlDescending, Header:=xlNo
        Range("AY" & R).Value = Evaluate("SUM(BA1:BA5)")
        [BA:BB].ClearContents
    Next
    Application.ScreenUpdating = True
End Sub
__________________
Your Curiosity Will Be The Death Of You!
Απάντηση με παράθεση