singular Δημοσ. 19 Δεκεμβρίου 2008 Δημοσ. 19 Δεκεμβρίου 2008 Καλησπέρα παιδιά, Θα ήθελα να ρωτήσω κάτι για τους ειδικούς του excel. Έχω ένα λογιστικό φύλλο το οποίο έχει δύο rows την Α και τη Β. Στην Α έχω τους λογαριασμούς σε αυτή τη μορφή 6000000000 6100000000 6100001000 6100001100 και πάει λέγοντας... στην στήλη Β έχω αριθμούς 10,00 20,00 45,00 50,00 και πάει λέγοντας... δηλαδή η μορφή του sheet είναι η εξής.. Α | Β 6000000000 | 10,00 6100000000 | 20,00 6100001000 | 45,00 6100001100 | 50,00 και πάει λέγοντας.. Στο ίδιο αρχείο excel έχω δημιουργήσει ένα άλλο sheet και θέλω σε ένα πεδίο ας πούμε στο Α1 του νέου sheet να αναζητήσω από τη στήλη Α, του sheet που περιέχει τα παραπάνω δεδομένα που σας περιγράφω, λογαριασμούς με κριτήριο το εξής: 61****1*** δηλαδή όσους ξεκινάνε από 61 και στο έβδομο χαρακτήρα έχουν 1. Μετά αφού τους βρεί θα πάει και θα προσθέσει τον αριθμό που έχουν δίπλα τους από τη στήλη Β. Παράδειγμα: Αν αναζητήσει με το κριτήριο 61****1*** θα μας φέρει τον λογαριασμό 6100001000 και όσους άλλους λογαριασμούς ταιριάζουν με το κριτήριο. Μετά θα πάει και θα διαβάσει από τη στήλη Β τον αριθμό δίπλα του και θα τον προσθέσει. Μία εντολή που κάνει κάτι παρόμοιο είναι SUMIF(A:A;6100001000;B: Αυτή η εντολή ψάχνει από την στήλη Α τον λογαριασμό 6100001000 και όταν τον βρεί πάει και προσθέτει το περιεχόμενο της στήλης Β του λογαριασμού. Αυτή η εντολή όμως δεν υποστηρίζει χαρακτήρες μπαλαντέρ. Δηλαδή δεν μπορώ να του πω να ψαξει για 61****1*** ή για 61????1???, δεν λειτουργεί. Υπάρχει καμία εντολή η συνδιασμός εντολών η οποία θα κάνει ότι και η sumif αλλά θα δέχεται και κριτήρια με χαρακτήρες μπαλαντέρ? Ευχαριστώ εκ των προτέρων για την βοήθεια σας και για τον χρόνο σας.
bilco Δημοσ. 22 Δεκεμβρίου 2008 Δημοσ. 22 Δεκεμβρίου 2008 Μια λύση είναι να χρησιμοποιήσουμε τις regular expressions της VBScript. Θα φτιάξουμε λοιπόν μια δικιά μας συνάρτηση sumif που σαν criteria θα μπορεί να πάρει regular expressions Σε ένα module της VBA γράφουμε την συνάρτηση SUMIFREGEX : > Public Function SUMIFREGEX(match_range As Range, ByRef pattern As String, sum_range As Range) As Variant Dim src As Variant, val As Variant Dim i As Long, res As Variant, mr_max As Long Dim regex As Object Set regex = CreateObject("VBScript.RegExp") regex.pattern = pattern src = match_range.Cells val = sum_range.Cells mr_max = UBound(src, 1) For i = 1 To mr_max If (regex.Test(src(i, 1))) Then res = res + val(i, 1) End If Next i Set regex = Nothing SUMIFREGEX = res End Function Τα ορίσματα είναι όπως στην SUMIF (εδώ καλό είναι να μην βάζουμε ολόκληρες τις στήλες αλλά μόνο την περιοχή που χρειαζόμαστε, αφού είναι πολύ πιο αργή από τη SUMIF) Για την συγκεκριμένη περίπτωση, το pattern για να βρούμε τους δεκαψήφιους αριθμούς που αρχίζουν με 61 και το έβδομο ψηφίο έιναι 1 είναι ^61.{4}1.{3}$ Παράδειγμα : =SUMIFREGEX(A1:A6;"^61.{4}1.{3}$";B1:B6)
dwarves Δημοσ. 5 Ιουνίου 2009 Δημοσ. 5 Ιουνίου 2009 Να κανω και εγω μια ερωτηση για το sumif (ας μην ανοίγω νέο thread) έχω ενα excel της μορφής Α Β 3000 | 50000 3100 | 150000 3000 | 210000 Θέλω αν υπάρχει ένα νούμερο στην στήλη Α περισσότερες από μία φορά αυτό να αθροίζει σε ένα άλλο κελι. θέλω η sumif να μου βρει αυτόματα που στην στήλη Α έχει πάνω από μια φορά το ίδιο νούμερο και να το αθροίζει σε ένα κελι που θα είναι της μορφής Α Β 3000 | 260000 3100 | 210000 περιμένω τις προτάσεις σας...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.