Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Πως μπορώ να κάνω αναζήτηση των δεδομένων μου ανάμεσα σε δύο ημερομηνίες και να μου εμφανίζεται έπειτα μια λίστα με όλα τα δεδομένα που έχουν περαστεί σε αυτές τι ημερομηνίες;
Π.χ θέλω να κάνω μια αναζήτηση από τις 10/8/2017 μέχρι και σήμερα και να μου εμφανίσει όλα τα δεδομένα από τότε μέχρι σήμερα.

Γνωρίζει κανείς; 

(Έψαξα και στο site αλλά δεν βρήκα κάτι)

Στο συνημμένο τα δεδομένα βρίσκονται στο ΑΡΧΕΙΟ.

Ευχαριστώ εκ των προτέρων.

post-409028-0-07452900-1508715054_thumb.png

Δημοσ.

Καλημέρα,

 

Νομίζω ότι ή Link.png Site: DSUM σου κάνει την δουλειά

 

(δεν ξέρω βέβαια αν η DSUM στο κριτήριο μπορεί να παίρνει τιμή από άλλο κελί....  :fear: )

Δημοσ.

Θες να στα εμφανίζει και τα άλλα να κρύβει;
Εννοώ δεν θες κάποια πράξη όπως η sum παραπάνω;

Για το πρώτο δες την λύση του φίλτρου (καρτέλα δεδομένα).
Και γι ανα μην το πειλέγεις εσύ χειροκίνητα κάθε φορά, θα δημιουργούσα μια βοηθητική στήλη, που θα εμφάνιζε την τιμή show ή Hide ανάλογα αν στην ίδια σειρά, η ημερομηνία ήταν εντός ή εκτός διαστήματος.
Μετά απλά κάθε φορά που αλλάζεις το χρονικό διάστημα, θα ξαναεφαρμόζεις το φίλτρο. Αν θες δημιουργείς μετά και ένα macro να το κάνει ξερωγω με ένα κουμπί.

Άλλη λύση ακόμα πιο αυτοματοποιημένη είναι με κώδικα vba.

Σίγουρα γίνεται και με συνάρτηση κάτι, σε έναν βοηθητικό πίνακα δίπλα ή απο κάτω, που σου διαβάζει ενα ένα όλα τα δεδομένα εκτός απο αυτά που είναι εκτός διαστήματος, αλλά νομίζω είναι πιο βαριά λύση αυτή.

Δημοσ.
  • Πατάς ALT+F11 να ανοίξεις Visual Basic
  • Insert > Module
Public Sub yourDateRange()
Dim lngStart As Long, lngEnd As Long
lngStart = Range("H3").Value 'ψάχνεις ΑΠΟ
lngEnd = Range("I3").Value 'ψάχνεις ΜΕΧΡΙ

'τα κελιά που θα περιέχουν τα dates και θα εφαρμοστεί η αναζήτηση (Range)
Range("C2:C13").AutoFilter field:=1, _
Criteria1:=">=" & lngStart, _
Operator:=xlAnd, _
Criteria2:="<=" & lngEnd
End Sub
  • Πατάς F5 για να εκτέλεσεις το module εφόσον στο H3,I3 έχεις βάλει το date range σου.
Υπάρχει τρόπος να καλείς το παραπάνω VB module (yourDateRange) δημιουργώντας κουμπάκι εκτέλεσης μέσα στο Spreadsheet σου αντί να ανοίγεις VB κάθε φορά. Επειδή θέλει λίγη διαδικασία δες εδώ
Δημοσ.

Φίλτρο στη στήλη με τις ημερομηνίες.


 


Μετά κλικ στο drop down του φίλτρου στη στήλη και Date Filters > Between, θα δώσεις το εύρος για τις ημερομηνίες που θέλεις και αυτό ήταν.

Δημοσ.

 

  • Πατάς ALT+F11 να ανοίξεις Visual Basic
  • Insert > Module
Public Sub yourDateRange()
    Dim lngStart As Long, lngEnd As Long
    lngStart = Range("H3").Value 'ψάχνεις ΑΠΟ
    lngEnd = Range("I3").Value 'ψάχνεις ΜΕΧΡΙ

    'τα κελιά που θα περιέχουν τα dates και θα εφαρμοστεί η αναζήτηση (Range)
    Range("C2:C13").AutoFilter field:=1, _ 
        Criteria1:=">=" & lngStart, _
        Operator:=xlAnd, _
        Criteria2:="<=" & lngEnd
End Sub
  • Πατάς F5 για να εκτέλεσεις το module εφόσον στο H3,I3 έχεις βάλει το date range σου.
Υπάρχει τρόπος να καλείς το παραπάνω VB module (yourDateRange) δημιουργώντας κουμπάκι εκτέλεσης μέσα στο Spreadsheet σου αντί να ανοίγεις VB κάθε φορά. Επειδή θέλει λίγη διαδικασία δες εδώ

 

εκανα κατι παρομοιο με αυτο που μου λες αλλα επειδη το φιλτρο δεν με βολευε γιατι ηθελα να υπολογιζω και καποιες αλλες τιμες, όπως το συνολο απο τα ποσα δαπανης που θα εβρισκα απο τις ημερομηνιες και το φιλτρο δεν μου την παρειχε αυτην την ιδιοτητα γιατι μου εμφανιζε το συνολο ολων των τιμων και οχι των τιμων που εψαχνα να βρω με βαση τις ημερομηνιες, εφτιαξα τον παρακατω κωδικα αλλα υπαρχει προβλημα σε αυτον.

Το προβλημα ειναι οτι η αναζητηση γινεται μονο σε μια ημερομηνια γιατι δεν ξερω πως να βαλω στον κωδικα να βρισκει με βαση και τις δυο ημερομηνιες τα δεδομενα που θελω.

Γνωριζεις τι κωδικας πρεπει να γραφτει για να μπορω να παιρνω τα δεδομενα και απο τις δυο ημερομηνιες και επειτα να μου εμφανιζει το αποτελεσματα εκει ακριβως που θελω;

Sub finddata()

'ΕΔΩ ΚΑΝΟΥΜΕ ΑΝΑΖΗΤΗΣΗ ΜΙΑ ΗΜΕΡΟΜΗΝΙΑ ΠΟΥ ΕΧΟΥΜΕ ΟΡΙΣΕΙ
Dim hmeromhnia As String
Dim finalrow As Integer
Dim i As Integer

If ActiveSheet.Cells(1, 8) = "" Then
    MsgBox "Δεν έχετε επιλέξει ημερομηνία." & vbCrLf & "Επιλέξτε την και δοκιμάστε πάλι.", vbExclamation
    ActiveSheet.Cells(1, 8).Select
    Exit Sub
End If

Sheets("ΑΡΧΕΙΟ").Range("I7:N1048576").ClearContents

hmeromhnia = Sheets("ΑΡΧΕΙΟ").Range("H1").Value
finalrow = Sheets("ΑΡΧΕΙΟ").Range("C1048576").End(xlUp).Row

For i = 2 To finalrow
    If Cells(i, 3) = hmeromhnia Then
        Range(Cells(i, 1), Cells(i, 6)).Copy
        Range("I1048576").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
        End If
Next i
        

End Sub

Θες να στα εμφανίζει και τα άλλα να κρύβει;

Εννοώ δεν θες κάποια πράξη όπως η sum παραπάνω;

 

Για το πρώτο δες την λύση του φίλτρου (καρτέλα δεδομένα).

Και γι ανα μην το πειλέγεις εσύ χειροκίνητα κάθε φορά, θα δημιουργούσα μια βοηθητική στήλη, που θα εμφάνιζε την τιμή show ή Hide ανάλογα αν στην ίδια σειρά, η ημερομηνία ήταν εντός ή εκτός διαστήματος.

Μετά απλά κάθε φορά που αλλάζεις το χρονικό διάστημα, θα ξαναεφαρμόζεις το φίλτρο. Αν θες δημιουργείς μετά και ένα macro να το κάνει ξερωγω με ένα κουμπί.

 

Άλλη λύση ακόμα πιο αυτοματοποιημένη είναι με κώδικα vba.

 

Σίγουρα γίνεται και με συνάρτηση κάτι, σε έναν βοηθητικό πίνακα δίπλα ή απο κάτω, που σου διαβάζει ενα ένα όλα τα δεδομένα εκτός απο αυτά που είναι εκτός διαστήματος, αλλά νομίζω είναι πιο βαριά λύση αυτή.

Αν μπορεις να με βοηθησεις με την παραθεση που εχω κανει στον φιλο The King θα σου ημουν ευγνωμον, διοτι το φιλτρο δεν με βοηθησε.

Καλημέρα,

 

Νομίζω ότι ή Link.png Site: DSUM σου κάνει την δουλειά

 

(δεν ξέρω βέβαια αν η DSUM στο κριτήριο μπορεί να παίρνει τιμή από άλλο κελί....  :fear: )

Βασικα φιλε newnick προσπαθω να λυσω το προβλημα μου με την VBA αλλα δεν το διευκρίνισα εξαρχης. Αν μπορεις να με βοηθησεις σχετικα με την παραθεση που εχω κανει στον φιλο The King θα σου ημουν επισης ευγνωμον.

 

Φίλτρο στη στήλη με τις ημερομηνίες.

 

Μετά κλικ στο drop down του φίλτρου στη στήλη και Date Filters > Between, θα δώσεις το εύρος για τις ημερομηνίες που θέλεις και αυτό ήταν.

 

Το φιλτρο το δοκιμασα και οντος με βοηθησε στο να βρω τις ημερομηνιες που ηθελα, αλλα επειδη βρισκοντας τις ημερομηνιες, θελω να παιρνω τις τιμες απο τα Ποσα Δαπανης, το φιλτρο δεν μου παρεχει αυτην την ιδιοτητα, διοτι θελω να παιρνω συγκεκριμενες τιμες απο τις αναζητουμενες ημερομηνιες και οχι ολες τις τιμες που το φιλτρο μου δινει. Ισως σε μπερδεψα. Αν μπορεις να με βοηθησεις ομως με την VBA γιατι ετσι προσπαθω να λυσω το προβλημα μου, εχω κανει μια παραθεση στον φιλο The King. 

Δημοσ.

Τελικά βρήκα λύση στο πρόβλημά μου. Σας ευχαριστώ όλους για τις απαντήσεις σας και το ενδιαφέρον που δείξατε.

 

 

Γιατί δε μοιράζεσαι αναλυτικά τη λύση με τους υπόλοιπους που θα διαβάσουν κάποια στιγμή το πρόβλημά σου και μπορεί να χρειαστούν την ίδια λύση;

 

Έτσι μπορείς να ανταποδώσεις δίνοντας κάτι πίσω στην κοινότητα αντί να μας ευχαριστείς λεκτικά για το χρόνο και το ενδιαφέρον μας.

 

Φαντάζεσαι να κρατούσαμε όλοι τις λύσεις/απαντήσεις για πάρτη μας τι θα γινόταν;

Δημοσ.

Γιατί δε μοιράζεσαι αναλυτικά τη λύση με τους υπόλοιπους που θα διαβάσουν κάποια στιγμή το πρόβλημά σου και μπορεί να χρειαστούν την ίδια λύση;

 

Έτσι μπορείς να ανταποδώσεις δίνοντας κάτι πίσω στην κοινότητα αντί να μας ευχαριστείς λεκτικά για το χρόνο και το ενδιαφέρον μας.

 

Φαντάζεσαι να κρατούσαμε όλοι τις λύσεις/απαντήσεις για πάρτη μας τι θα γινόταν;

Sub finddata()

'ΕΔΩ ΚΑΝΟΥΜΕ ΑΝΑΖΗΤΗΣΗ ΣΕ ΧΡΟΝΙΚΟ ΔΙΑΣΤΗΜΑ ΠΟΥ ΕΧΟΥΜΕ ΟΡΙΣΕΙ
    Dim Apo As Date, Eos As Date
    Dim finalrow As Integer
    Dim i As Integer

    If Not IsDate(Cells(1, 8)) Then    'Ημερομηνία έναρξης
        MsgBox "Δεν έχετε επιλέξει ημερομηνία." & vbCrLf & "Επιλέξτε την και δοκιμάστε πάλι.", vbExclamation
        Cells(1, 8).Select
        Exit Sub
    End If

    If Not IsDate(Cells(1, 9)) Then    'Ημερομηνία λήξης
        MsgBox "Δεν έχετε επιλέξει ημερομηνία." & vbCrLf & "Επιλέξτε την και δοκιμάστε πάλι.", vbExclamation
        Cells(1, 9).Select
        Exit Sub
    End If
    Apo = Cells(1, 8).Value 'Εδώ του λέμε από ποιο κελί θα πάρει την αρχική ημερομηνία
    Eos = Cells(1, 9).Value 'Εδώ του λέμε από ποιο κελί θα πάρει την δεύτερη ημερομηνία


    Range("I7:N1048576").ClearContents 'Εδώ καθαρίζει το πεδίο έτσι ώστε να εμφανιστούν τα νέα δεδομένα

    finalrow = Range("C1048576").End(xlUp).Row  

    For i = 2 To finalrow
        If Cells(i, 3) >= Apo And Cells(i, 3) <= Eos Then 
            Range(Cells(i, 1), Cells(i, 6)).Copy
            Range("I1048576").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
        End If
    Next i
    Application.CutCopyMode = False



End Sub

έδωσα απάντηση μέσο της εφαρμογής δεν ήθελα να κρατήσω κάτι για την πάρτη μου, εξάλλου κοινοποίησα και τμήμα του κώδικα για βρεθεί γρηγορότερα κάποια λύση. 

Έκανες καλά πάντως που μου το είπες. 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...