Θέμα: Γενικά μετατροπή σε ωρα

Εμφάνιση ενός μόνο μηνύματος
  #4  
Παλιά 22-08-10, 15:57
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.030
Προεπιλογή

Καλησπέρα σε όλους!

Νίκο, ο Γιώργος έχει δίκιο. Δεν γίνεται με κάποια μορφοποίηση κελιού να μετατρέψουμε το
1245 σε 12:45 και να μπορεί ταυτόχρονα να υπολογιστεί για να βγεί κάποιο άθροισμα κτλ.

Με τη βοήθεια της VBA και με μια μικρή προετοιμασία στο φύλλο θα μπορέσουμε να εμφανίζουμε την ώρα σε μορφή "ωω:λλ" σε μορφή κειμένου η οποία μπορεί να υπολογιστεί από την Excel σαν αριθμός ή ώρα!

1) Μορφοποίησε τις στήλες που θα πληκτρολογείται η ώρα ως κείμενο (Επιλογή στήλης και συνδυασμος πλήκτρων CTRL+1).

μετατροπή σε ωρα-xl_format_dlg.jpg

2) στην πρώτη γραμμή των στηλών που θα πληκτρολογείται η ώρα (πχ. στο κελί C1, D1, F1 κοκ.) να πληκτρολογήσεις την τιμή -1.
Έτσι, με βάση αυτή την τιμή, ο κώδικας παρακάτω θα μπορεί να ελέγξει αν προκειται για στήλη που πρέπει να γίνουν οι απαραίτητες αλλαγές.

3) Kανε δεξί κλικ στην καρτέλα του φύλλου και επίλεξε: "Προβολή κώδικα".
Στο παράθυρο που θα εμφανιστεί, επικόλλησε τον παρακάτω κώδικα:

Κώδικας:
Option Explicit
   
  Private Sub Worksheet_Change(ByVal Target As Range)        ' Target = το κελί που προκαλεί το συμβάν αυτό
      On Error Resume Next
      If Cells(1, Target.Column) <> -1 Then Exit Sub
      If Target.Row > 50 Or Target.Row < 2 Then Exit Sub ' αν η γραμμή του "Target" είναι
            'μεγαλύτερη του 50 ή μικρότερη του  2  τοτε δεν θα συνεχίσει η εκτέλεση του κώδικα.
            'Προσάρμοσε τα νούμερα αυτά στα μέτρα σου.

      If Target.Value = "" Then Exit Sub
      Application.EnableEvents = False
      Select Case Len(Target.Text)
          Case Is > 4
              Target.ClearContents
              Target.Select
              GoTo TheEnd
          Case Is = 4
              If Left(Target, 2) > 24 Or Right(Target, 2) > 59 Then
                  Target.ClearContents
                  Target.Select
                  GoTo TheEnd
              End If
              Target.Value = Left(Target, 2) & ":" & Right(Target, 2)
   
          Case Is = 3
              If Right(Target, 2) > 59 Then
                  Target.ClearContents
                  Target.Select
                  GoTo TheEnd
              End If
              Target.Value = "0" & Left(Target, 1) & ":" & Right(Target, 2)
          Case Is = 2
              If Target.Value > 23 Then
                  Target.ClearContents
                  Target.Select
                  GoTo TheEnd
              End If
              Target.Value = Format(Target, "00") & ":" & "00"
   
          Case Is = 1
              Target.Value = Format(Target.Text, "00") & ":" & "00"
      End Select
      If Target.Value = 0 Then Target.Value = "00:00"
   
  TheEnd:
      Application.EnableEvents = True
  End Sub
Δοκίμασε τον τρόπο λειτουργίας με διαφορες τιμές.

Αν κάπου υπαρχει κάποια απορία... εδώ είμαστε.

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

Φιλικά

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