ms-office.gr > Forum > Microsoft Office > Visual Basic for Applications (VBA) > [Excel - VBA] offset στην VBA

Visual Basic for Applications (VBA) Ερωτήσεις / Απαντήσεις σε σχέση με τη χρήση της VBA.

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 27-11-19, 08:18
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 236
Προεπιλογή offset στην VBA

Γεια σε όλους παιδιά

Έχω σε ένα φύλλο στο Excel, στην περιοχή C5:D6, κάποια νούμερα και στο κελί F5 υπολογίζω την ορίζουσα αυτής της περιοχής, με την συνάρτηση MDETERM(C5:D6). Τώρα, στο κέλι H5, υπολογίζω πάλι τα ίδια, αλλά αυτήν την φορά, βάζοντας μεσά στον τύπο την συνάρτηση OFFSET(), με την μορφή, MDETERM(OFFSET(A1;4;2):OFFSET(A1;5;3)).

Πως γράφεται αυτή η συνάρτηση (MDETERM(OFFSET(A1;4;2):OFFSET(A1;5;3))) σε κώδικα VBA;

Όσο και να προσπάθησα, κάνοντας παραλλαγές, δεν κατάφερα να το κάνω να δουλέψει σε κώδικα.

Υ. Γ.

Ουσιαστικά αυτό που θέλω να πετύχω, είναι να δημουργώ μέσα σε κώδικα, μεταβλητά Range, με αναφορά κάποιο κελί και μετά να βάζω την OFFSET() για να έχω μεταβλητό, πάνω και κάτω όριο.


Ευχαριστώ.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsx mdeterm and offset.xlsx (8,2 KB, 9 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 27-11-19, 12:17
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.249
Προεπιλογή

Γεια σου Γιώργο!

Το αποτέλεσμα μιας καταγραφής μακροεντολής μας βοηθά στη προκειμένη περίπτωση:


Κώδικας:
Sub Test1()
    ActiveCell.FormulaR1C1 = "=MDETERM(OFFSET(R[-4]C[-7],4,2):OFFSET(R[-4]C[-7],5,3))"
End Sub
  • Κάνεις κλικ στην καταγραφή μακροεντολής
  • Επιλέγεις το κελί με τον τύπο
  • Βάζεις τον κέρσορα στη γραμμή τύπων
  • Πατάς ENTER και διακόπτεις την καταγραφή.
  • Με ALT+F11 εισέρχεσαι στο περιβάλλον VBE για να δεις τον τύπο που κατέγραψες.

Σύμφωνα με τη βοήθεια της Microsoft η συνάρτηση MDETERM επιστρέφει την τιμή σφάλματος #ΤΙΜΗ! όταν:
  • Κάποια κελιά στον πίνακα είναι κενά ή περιέχουν κείμενο.
  • Το όρισμα πίνακας δεν περιέχει ίσο αριθμό γραμμών και στηλών

Καλή συνέχεια!

Με εκτίμηση

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 27-11-19 στις 14:50.
Απάντηση με παράθεση
  #3  
Παλιά 27-11-19, 13:03
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 236
Προεπιλογή

Ευχαριστώ πολύ Τάσο

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

Να σε ρωτήσω και κάτι άλλο. Μπορούμε να βάζουμε γενικά, μέσα στον τύπο της φόρμουλας και μεταβλητές; Για παράδειγμα έχω βάλει όλην την προηγούμενη φόρμουλα μέσα σε ένα loop και στην θέση των γραμμών και στηλών της OFFSET έχω βάλει την μεταβλητή i του βρόγχου (for i=1 to 3) , με σκοπό να "παίζω" με γραμμές και στήλες, αλλά δεν με δουλεύει. Αν βάλω σταθερά νούμερα, δουλεύει.
Έχω κάνει κάπου λάθος, ή πρέπει όλοι οι παράμετροι να είναι σταθεροί αριθμοί;

Ευχαριστώ.
Απάντηση με παράθεση
  #4  
Παλιά 27-11-19, 15:30
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.249
Προεπιλογή

Γιώργο μου νομίζω ότι ο τύπος μπορεί να απλοποιηθεί ως εξής:

Κώδικας:
=MDETERM(OFFSET(A1;4;2;2;2))
Στη VBA με μεταβλητές:

Κώδικας:
 ActiveCell.FormulaR1C1 = "=MDETERM(OFFSET(R[-" & var1 & "]C[-" & var2 & "],4,2,2,2))"
Ωστόσο μπορείς να χρησιμοποιήσεις τη συνάρτηση WorksheetFunction.MDeterm(Range)

Παράδειγμα:
Κώδικας:
    Range("h2").Value = WorksheetFunction.MDeterm(Range("a1:b2"))
Για να το αυτοματοποιήσεις τροποποίησε τα "i" ή και τις τιμές των RowIndex και ColumnIndex του παρακάτω παραδείγματος:

Κώδικας:
Sub test()
    Dim i As Integer
    Dim x As Integer
    For i = 0 To 6 Step 2
        Range("H2").Offset(x).Value = WorksheetFunction.MDeterm(Range( _
                        Cells(RowIndex:=2 + i, ColumnIndex:=1 + i), _
                        Cells(RowIndex:=3 + i, ColumnIndex:=2 + i)))
        x = x + 1
    Next

End Sub
Θα πρέπει να υπάρχουν δεδομένα στις αναφερόμενες περιοχές για να λειτουργήσει η συνάρτηση.

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #5  
Παλιά 28-11-19, 07:42
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 236
Προεπιλογή

Ευχαριστώ πολύ Τάσο

για την αναλυτική σου απάντηση και με παραδείγματα.

Θα τα μελετήσω και θα τα εφαρμόσω ανάλογως.

Ευχαριστώ.
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] Χρήση της OFFSET() George R Excel - Ερωτήσεις / Απαντήσεις 4 30-11-18 07:36
[VBA] ΔΕΝ ΜΟΥ ΜΕΤΑΦΕΡΕΙ ΤΟ ΟΛΟΓΡΑΦΩΣ ΣΤΗΝ ΑΠΟΘΗΚΕΥΣΗ ΚΑΙ ΣΤΗΝ ΕΚΤΥΠΩΣΗ ΔΗΜΗΤΡΗΣ8519 Excel - Ερωτήσεις / Απαντήσεις 0 05-08-17 22:59
Επιλογή εντολής στην subform απο εντολή στην Main Form γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 5 14-11-16 20:53
Επιλογή offset κελιών από δυναμική περιοχή. Σανίδας Visual Basic for Applications (VBA) 1 24-01-16 08:43
[ Εκθέσεις ] Άλλα έχω στην προεπισκόπιση και άλλα στην εκτύπωση!!! prokopino Access - Ερωτήσεις / Απαντήσεις 12 19-07-10 00:29


Η ώρα είναι 01:17.