Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
![]() |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
![]()
καλησπέρα σας, ( δυστυχως δεν μπόρεσα να βρω τίτλο και γι'αυτο αυτή η γενικότητα) σε ένα φύλλο excel εχω αυτές τις εντολές ================================== Dim i As Integer Cells(Rows.Count, "D").End(xlUp).Select noROWS = ActiveCell.Row For i = 1 To noROWS - 1 Range("A" & i).Select If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next ======================================= Τα δεδομένα ξεκινάνε πάντοτε απο την σειρά 11 Η στήλη D έχει δεδομένα απο το D11 έως πχ το D100 , αριθμούς. ( δεν υπάρχει κάνενα κενό κελί ενδιάμεσα ) η στήλη Α έχει μόνο στο κελί Α11 , μία Ημερομηνία , ας πούμε την σημερινή Με τα παραπάνω , που εφανίζονται ανα μεσα στις δύο γραμμές με τα === , γινεται η συμπλήρωση - αντιγραφή της ίδιας ημερομηνίας του Α11 στα κελιά απο το Α12 έως και το Α100 Μέχρι εδώ καλά , ......................... ΤΟ ερώτημα είναι , μπορώ το Range("A" & i).Select να το κάνω να ξεκινάει απο το Α11 ; να μην κανει δηλαδη τον υπολογισμό όλης της στήλης "Α" . αλλά μόνο απο το Α11 και μετέπειτα ; Ισως ειναι και "χαζή" ερώτηση και μπορεί να είναι άλυτο το θέμα , αλλά επειδη δεν εχω επαρκείς γνώσεις ρωτάω . Ζητάω από το Α11 επειδή εχω βάλει περιορισμό στο ίδιο φύλλο να Μην μπορείς να κάνεις πχ επικόληση οτιδήποτε απο το Α1 έως και το Α9 παρά μόνο στο Α10 πχ οι δύο πρώτοι περιορισμοί , - απο τους 9 συνολικά - ------------------------------------------------------------------------------------------------ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox (" Για την σωστή διαδικασία χρησιμοποιούμε μόνο το κελί Α10 "), _ vbQuestion, " Επιλογή λανθασμένου κελιού " ElseIf Target.Address = "$A$2" Then MsgBox (" Για την σωστή διαδικασία χρησιμοποιούμε μόνο το κελί Α10 "), _ vbQuestion, " Επιλογή λανθασμένου κελιού " End If End Sub --------------------------------------------------------------------------------------------------------------------------- την στιγμή βέβαια που γινονται οι υπολογισμοί , τωρα τα MsgBox εμφανίζονται και θα ήθελα να παρακαμψω την διαδικασια το να πατάω 9 φορες το οκ στο παράθυρο του msgbox καθε φορα που γινεται ενας υπολογισμός Σας ευχαριστώ . Τελευταία επεξεργασία από το χρήστη jose : 27-10-12 στις 23:17. |
#2
| |||
| |||
![]()
Καλημέρα σε όλους For i = 1 To noROWS - 1 Range("A" & i+9).Select ' επιλογή από Α10 και κάτω ή το 9 με 10 για Α11 If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next Θανάσης |
#3
| |||
| |||
![]()
Θανάση , πολλές ευχαριστίες μού' "κοψε" , επειδή στο τέλος ξαναγραφόταν 10 ημερομηνίες απο την 101 έως και την 110 σειρα , και άλλαξα το -1 σε -11 καί όλα τώρα είναι άψογα ------------------------------------------------------------------------------- For i = 1 To noROWS - 11 Range("A" & i + 10).Select If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next ---------------------------------------------------------------------------------- καί πάλι σας ευχαριστώ |
#4
|
![]()
Καλημέρα Θα ήταν καλύτερο να ορίσουμε το i = 11 χωρίς άλλη μεταβολή και απαραίτητα να δηλωθεί το noROWS as long ΥΓ ο κώδικας δέχεται κι άλλες βελτιώσεις Καλή συνέχεια! |
#5
| ||||
| ||||
![]()
Καλημέρα! Συμφωνώ με το Σπύρο. Στο συγκεκριμένο βρόχο (For i = .... Next) μπορούμε να ορίσουμε τόσο την αρχή όσο και το τέλος του αριθμητή (i). Για παράδειγμα: For i = 11 To 100 ....... Next Ωστόσο, για να αντιγράψουμε σε μια περιοχή κελιών μια τιμή δεν χρειάζεται βρόχος (For...Next, Do....Loop κλπ.) Αρκεί η γραμμή: Range("A11:A100").Value = Range("A10").Value Νίκο, ένας απλός τρόπος για να αποτρέψεις την καταχώρηση σε κελιά, είναι να τα κλειδώσεις και να "ξεκλειδώσεις" τα υπόλοιπα (CTRL+1** > Προστασία). ** Όχι το πλήκτρο 1 από το αριθμητικό πληκτρολόγιο. Η μεταβλητή noROWS υποθέτω ότι δηλώνει την τελευταία μη κενή γραμμή μιας στήλης. Έστω ότι αυτή η στήλη είναι η Β. Σύμφωνα με τα παραπάνω ο κώδικας μπορούσε να διαμορφωθεί έτσι: Κώδικας: Sub Test1() Dim LastRow As Long LastRow = Range("B" & Rows.Count).End(xlUp).Row If LastRow > 10 Then Range("A11:A" & LastRow).Value = Range("A10").Value End If End Sub Κώδικας: Sub Test2() Dim LastRow As Long If TypeOf Selection Is Range Then LastRow = Selection.Row If LastRow > 10 Then Range("A10:A" & LastRow).Value = Range("A10").Value End If End If End Sub Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#6
| |||
| |||
![]()
σας ευχαριστώ και τους δύο και τον Σπύρο και τον Τάσο εμπλουτίζετε τις γνώσεις ενός ερασιτέχνη Τάσο , η στήλη που λές είναι η D , αυτή είναι "γεμάτη" με δεδομένα . Όλο το "κομμάτι" των εντολών είναι ( εδω φαίνεται η αλλαγή στην στήλη Α ) - οι στήλες Α , Β και C ενημερώνονται - με την "ιδιαιτερότητα" στην στήλη Α ----------------------------------------------------------------------- Dim i As Integer Cells(Rows.Count, "D").End(xlUp).Select noROWS = ActiveCell.Row For i = 1 To noROWS - 1 Range("B" & i).Select If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next For i = 1 To noROWS - 11 Range("A" & I + 10).Select If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next For i = 1 To noROWS - 1 Range("C" & i).Select If ActiveCell.Offset(1, 0).Value = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell.Value End If Next -------------------------------------------------------------------------------------------- Θα μελετήσω ότι αναφέρατε βέβαια , κάπου θα μου φανούν χρήσιμα , δεν μπορεί , αλλά αφού "βολεύτηκα" , με την λυση του Θανάση να τα αλλάξω όλα ; Τέλος πάντων , με βάλατε σε "πειρασμό" ................. Σας ευχαριστώ ξανά . |
#7
| ||||
| ||||
![]()
Νίκο αφού βολεύτηκες.. όλα καλά! Για τους υπόλοιπους που μας διαβάζουν όμως οφείλω να τονίσω ότι η μέθοδος Select στον κώδικα του μηνύματος είναι επιεικώς απαράδεκτη και θα πρέπει να θεωρηθεί ως παράδειγμα προς αποφυγή. Για τα υπόλοιπα (βρόχους κλπ.) δεν μπορώ να έχω γνώμη αφού δεν γνωρίζω τη δομή του φύλλου σου καθώς και το ακριβές ζητούμενο. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#8
|
![]()
καλησπέρα Δεν είχα δεί τα post του Τάσου όταν έφτιαξα ένα κωδικάκι για να δίνει το ζητούμενο αφού λοιπόν το έκανα δείτε το κι αυτό ένας εναλλακτικός αρκετά μικρότερος κώδικας για να έχουμε το ζητούμενο χωρίς να χρειάζονται και οι περιορισμοί στα κελιά Α1....Α10 (δεν τα αγγίζει καθόλου) Sub test() Dim i As Long Application.ScreenUpdating = False i = Range("D" & Rows.Count).End(xlUp).Row Range("A12:A" & i).Value = Range("A11").Value End Sub Μετράει απλά πόσα κελιά στη D έχουν δεδομένα και σε τόσα κελιά από το Α12 και κάτω (συμπεριλαμβάνεται) τοποθετεί την αξία του Α11 ΥΓ το να βολεύει μιά λύση δεν πάει να πεί ότι είναι και ότι καλύτερο υπάρχει πιθανότητα εν καιρώ να μας ξεβολέψει μια και καλή Τελευταία επεξεργασία από το χρήστη Spirosgr : 28-10-12 στις 18:25. |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Η ώρα είναι 05:54.