| Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
Γεια σας! Δεν ξέρω πόσο πιο συγκεκριμένα και με λίγα λόγια να περιγράψω το ζητούμενο στον τίτλο. Στο βιβλίο έχω μια στήλη με ημερομηνίες. Σε ένα κελί έχω αναπτυσσόμενη λίστα με επιλογές. Αυτό που χρειάζομαι είναι το εξής. Για την επιλογή Α, στις αναπτυσσόμενες λίστες, θέλω στην στήλη 1ο να εμφανίζονται οι διαθέσιμες ημερομηνίες που είναι καταχωρημένες στη στήλη B, από 1 έως και 15 Ιανουαρίου, στην στήλη 2ο, από 16 έως και 31 Ιανουαρίου, στην στήλη 3ο, από 1 έως και 15 Φεβρουαρίου, στην στήλη 4ο, από 16 έως και 28 Φεβρουαρίου (ισχύει ότι θα προτιμηθεί να μην καταχωρηθεί η 29η στα δίσεκτα, εάν παίζει ρόλο). Αντίστοιχα για Β Γ και Δ θα ισχύουν τα ίδια, απλά θα αλλάξω τις ημερομηνίες. Έχω ένα παράδειγμα στο βιβλίο για το Α και το Β σε δύο ξεχωριστά φύλλα. Εάν το κατανόησε κάποιος το ζητούμενο, γίνεται αυτό; Ευχαριστώ πολύ |
|
#2
| |||
| |||
|
Ψάχνοντας βρήκα το παρακάτω, τροποποιώντας το στο κανονικό μου βιβλίο. Όμως παρέλειψα κάτι σημαντικό, εάν έχω 2 φορές και περισσότερες την ίδια ημερομηνία θέλω να εμφανίζεται μόνο μια φορά στις στήλες. Παρακάτω έχω χρωματίσει για να ξεχωρίσετε τα κομμάτια για τα Α Β Γ και Δ. Και πάλι ευχαριστώ Κώδικας: IF($U$4="Α";INDEX('Φύλλο1'!$E$10:$E$2001;SMALL(IF('Φύλλο1'!$E$10:$E$2001>='Φύλλο2'!$N$1;IF('Φύλλο1'!$E$10:$E$2001<='Φύλλο2'!$O$1;ROW('Φύλλο1'!$E$10:$E$2001)-ROW('Φύλλο1'!$E$10)+1));ROWS('Φύλλο2'!$N$1:N1)));
IF($U$4="Β";INDEX('Φύλλο1'!$E$10:$E$2001;SMALL(IF('Φύλλο1'!$E$10:$E$2001>='Φύλλο2'!$N$4;IF('Φύλλο1'!$E$10:$E$2001<='Φύλλο2'!$O$4;ROW('Φύλλο1'!$E$10:$E$2001)-ROW('Φύλλο1'!$E$10)+1));ROWS('Φύλλο2'!$N$4:N4)));
IF($U$4="Γ";INDEX('Φύλλο1'!$E$10:$E$2001;SMALL(IF('Φύλλο1'!$E$10:$E$2001>='Φύλλο2'!$N$7;IF('Φύλλο1'!$E$10:$E$2001<='Φύλλο2'!$O$7;ROW('Φύλλο1'!$E$10:$E$2001)-ROW('Φύλλο1'!$E$10)+1));ROWS('Φύλλο2'!$N$7:N7)));
IF($U$4="Δ";INDEX('Φύλλο1'!$E$10:$E$2001;SMALL(IF('Φύλλο1'!$E$10:$E$2001>='Φύλλο2'!$N$10;IF('Φύλλο1'!$E$10:$E$2001<='Φύλλο2'!$O$10;ROW('Φύλλο1'!$E$10:$E$2001)-ROW('Φύλλο1'!$E$10)+1));ROWS('Φύλλο2'!$N$10:N10))))))) |
|
#3
| |||
| |||
|
Καλησπέρα Σταμάτη, δες μια πρόταση στο συνημμένο. Χρησιμοποιώ κώδικα. |
|
#4
| |||
| |||
|
Καλησπέρα Γιώργο, σε ευχαριστώ πολύ που απάντησες. μετέφερα τον κώδικα στο βιβλίο μου, ενημέρωσα τις 3 περιοχές που έχεις βάλει στα Const μόνο που δε ξέρω αν το έχω σωστό το παρακάτω γιατί είναι σε άλλο φύλλο Κώδικας: Const startCel As String = Φύλλο06.Range("E10")
Παράθεση:
Παράθεση:
|
|
#5
| |||
| |||
|
Σταμάτη το φύλλο, που έχει το Combo Box, στο οποίο θα γίνονται οι επιλογές είναι το ενεργό. Δεν έχει σημασία το όνομά του. Εκείνο που χρειάζεται είναι η προσθήκη του κώδικα και η αναγραφή, μέσα σε εισαγωγικά, των σωστών κελιών (χωρίς το όνομα φύλλου) στις εντολές Const. |
|
#6
| |||
| |||
|
Έχω μεταφέρει όλον τον κώδικα στο ενεργό φύλλο, στο βιβλίο μου. Ήθελα να πω πως η λίστα με τις ημερομηνίες καταχωρούνται σε άλλο φύλλο. Όχι στο ενεργό, οπότε δεν πρέπει να γράψουμε το όνομα του φύλλου; Επειδή είδα ότι στη συγκεκριμένη εντολή αναγράφεις το πρώτο κελί της λίστας με τις ημερομηνίες έβαλα το παραπάνω. |
|
#7
| |||
| |||
|
Βάλε στο ενεργό φύλλο τον παρακάτω κώδικα: Κώδικας: Option Explicit
Const strSheet As String = "Φύλλο2"
Const startCel As String = "B4" 'αρχή των ημερομηνιών
Const startResult As String = "F3" 'αρχή αποτελεσμάτων
Const cboCel As String = "D2" 'κελί combobox
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngSource As Range, dct As Object, i As Long, key As Variant
Dim D(1 To 6) As Long, M3 As Long, start3 As Date, end3 As Date
Dim yr As Long, c As Range, d15 As Long, x() As Variant, sh As Worksheet
On Error GoTo errHandler
If Target.Count = 1 And Replace(Target.Address, "$", "") = cboCel Then
Set sh = Worksheets(strSheet)
Set rngSource = sh.Range(sh.Range(startCel), sh.Cells(Rows.Count, sh.Range(startCel).Column).End(xlUp))
Set dct = CreateObject("Scripting.Dictionary")
yr = Year(rngSource(1))
M3 = Asc(Range(cboCel)) - 192
start3 = DateSerial(yr, (M3 - 1) * 3 + 1, 1)
end3 = DateSerial(yr, M3 * 3 + 1, 0)
For Each c In rngSource
If IsDate(c) Then
If c >= start3 And c <= end3 Then
d15 = (Month(c) - M3 * 3 + 2) * 2 + IIf(Day(c) <= 15, 1, 2)
If Not dct.exists(c.Value) Then
dct(c.Value) = d15
End If
End If
End If
Next
Range(startResult).Resize(rngSource.Count, 6).ClearContents
If dct.Count Then
ReDim x(1 To dct.Count, 1 To 6) As Variant
For Each key In dct.keys
D(dct(key)) = D(dct(key)) + 1
x(D(dct(key)), dct(key)) = key
Next
Range(startResult).Resize(dct.Count, 6).Value = x
End If
End If
Exit Sub
errHandler:
MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub
|
|
#8
| |||
| |||
|
Όχι που δε θα το έβρισκες, είναι αυτό ακριβώς που ζητούσα! Γάτος είσαι Γιώργο, χίλια ευχαριστώ!
|
|
#9
| |||
| |||
|
Καλή συνέχεια Σταμάτη. Να είσαι καλά!
|
|
#10
| |||
| |||
|
Άσχετο με το ζητούμενο, όταν πχ σε ένα βιβλίο έχεις 2000 σειρές σε μια στήλη όπου πρέπει να έρθει ένα αποτέλεσμα από ένα φύλλο, βάσει του αριθμού που έχει δίπλα του, στη διπλανή στήλη δηλαδή, τι είναι προτιμότερο; μια ίδια συνάρτηση στα 2000 κελιά της στήλης ή κωδικας;
|
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [ Φόρμες ] αναδυομενο πεδιο επιλογη συνθήκης | artchrist73 | Access - Ερωτήσεις / Απαντήσεις | 10 | 20-03-17 21:13 |
| [Excel07] Εύρεση εγγραφής με βάσει δύο στήλες | Ελευθερία_ | Excel - Ερωτήσεις / Απαντήσεις | 6 | 05-11-15 02:48 |
| [Excel07] Συμπλήρωση κελιού με τιμή σε συγκεκριμένο κελί βάσει ημερομηνίας | stam75 | Excel - Ερωτήσεις / Απαντήσεις | 13 | 08-10-15 16:32 |
| [Συναρτήσεις] Αποτέλεσμα βάσει προϋπόθεσης | dimkrin | Excel - Ερωτήσεις / Απαντήσεις | 7 | 25-02-13 09:54 |
| Σύνταξη συνθήκης if | dmarop | Access - Ερωτήσεις / Απαντήσεις | 2 | 13-12-12 21:36 |
Η ώρα είναι 21:38.


Αλλαγή σε γραμμικό τρόπο

