Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [Πρότυπα] Ερώτημα για την vba

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 27-10-12, 23:01
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-10-2011
Μηνύματα: 33
Προεπιλογή Ερώτημα για την vba

καλησπέρα σας,

( δυστυχως δεν μπόρεσα να
βρω τίτλο και γι'αυτο αυτή η
γενικότητα)

σε ένα φύλλο 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  
Παλιά 28-10-12, 08:41
Όνομα: Θανάσης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-02-2012
Μηνύματα: 238
Προεπιλογή

Καλημέρα σε όλους
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  
Παλιά 28-10-12, 11:34
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-10-2011
Μηνύματα: 33
Προεπιλογή

Θανάση , πολλές ευχαριστίες

μού' "κοψε" , επειδή στο τέλος ξαναγραφόταν
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  
Παλιά 28-10-12, 12:04
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλημέρα
Θα ήταν καλύτερο να ορίσουμε το i = 11 χωρίς άλλη μεταβολή
και απαραίτητα να δηλωθεί το noROWS as long
ΥΓ ο κώδικας δέχεται κι άλλες βελτιώσεις
Καλή συνέχεια!
Απάντηση με παράθεση
  #5  
Παλιά 28-10-12, 13:40
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.028
Προεπιλογή

Καλημέρα!

Συμφωνώ με το Σπύρο.

Στο συγκεκριμένο βρόχο (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
Όσο για τα Select που χρησιμοποιείς σου προτείνω να δοκιμάσεις το αρχείο στον παρακάτω σύνδεσμο: http://www.ms-office.gr/forum/excel-...html#post12655

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 28-10-12, 14:35
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-10-2011
Μηνύματα: 33
Προεπιλογή

σας ευχαριστώ και τους δύο
και τον Σπύρο και τον Τάσο

εμπλουτίζετε τις γνώσεις ενός ερασιτέχνη

Τάσο ,
η στήλη που λές είναι η 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  
Παλιά 28-10-12, 15:27
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.028
Προεπιλογή

Νίκο αφού βολεύτηκες.. όλα καλά!

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

Για τα υπόλοιπα (βρόχους κλπ.) δεν μπορώ να έχω γνώμη αφού δεν γνωρίζω τη δομή του φύλλου σου καθώς και το ακριβές ζητούμενο.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #8  
Παλιά 28-10-12, 17:57
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

καλησπέρα
Δεν είχα δεί τα 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.
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας



Η ώρα είναι 05:54.