Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Γενικά] Πως μπορώ να μεταφέρω τα δεδομένα που θα επιλέγω από μια στήλη σε μια άλλη (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1228-pos-mporo-na-metafero-ta-dedomena-poy-tha-epilego-apo-mia-stili-se-mia-alli.html)

sakplak 27-06-11 16:16

Πως μπορώ να μεταφέρω τα δεδομένα που θα επιλέγω από μια στήλη σε μια άλλη
 
Θα ήθελα να ρωτήσω πως μπορώ να μεταφέρω δεδομένα τα οποία θα επιλέγω από μια στήλη σε μια άλλη...Ευχαριστώ εκ' τον προτέρων...

Lefteris 27-06-11 16:53

1 Συνημμένο(α)
Kαλησπέρα.
Φίλε Σακη, αν θέλεις αυτό να γίνεται συνέχεια, ορίζεις το κελί προορισμου. Δηλ. εκεί που θέλεις να στείλεις τα δεδομένα του κελιού Α1(για παράδειγμα), γράφεις τον τύπο =Α1,(Δές το παράδειγμα)
Αν αυτό θέλεις να γίνεται επιλεγμένα(όταν θέλεις εσύ), μαρκάρεις με αριστερό κλίκ τα κελιά που θέλεις να αντιγράψεις,πατάς αντιγραφή(copy), το πρώτο κελί προορισμού και πατάς επικόλληση(paste).
Eλπίζω να κατάλαβα το ζητούμενό σου.

Φιλικά/Λευτέρης

sakplak 27-06-11 18:24

1 Συνημμένο(α)
Φιλε Λευτέρη σε ευχαριστώ ίσως δεν το διατύπωσα σωστά..Θέλω να επιλέγω τα δεδομένα που θα μεταφέρονται από την στήλη πχ Α στην στήλη C και αντίστροφα....όχι όμως με copy paste..Ίσως με κλικ η με κάποια επιλογή..Ευχαριστώ για τον κόπο.. Επισυνάπτω αρχείο για υποβοήθηση

kapetang 27-06-11 19:49

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Σάκη, στο αρχείο που επισυνάπτω, έκανα μια προσπάθεια να υλοποιήσω το ζητούμενο.
Συγκεκριμένα κάνοντας κλικ σ’ ένα κελί της περιοχής «A2:A120»:
1. Αν το κελί έχει όνομα μεταφέρεται στους απόντες.
2. Αν είναι κενό γεμίζει με το όνομα που υπάρχει στη στήλη C και στην ίδια γραμμή.
Η παραπάνω λειτουργικότητα οφείλεται στον κώδικα:
Κώδικας:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim TargetRow As Long
    If Target.Cells.Count > 1 Then Exit Sub
    TargetRow = Target.Row
    If Not Intersect(Target, Range("A2:A120")) Is Nothing Then
        If Not IsEmpty(Target) Then
            Target.Cut Destination:=Cells(Target.Row, 3)
        Else
            Cells(Target.Row, 3).Cut Destination:=Target
        End If
        Cells(TargetRow, 2).Activate
    End If
End Sub

Φιλικά/Γιώργος

sakplak 27-06-11 20:52

Φίλε μου Γιώργο σε ευχαριστώ.. Είσαι απίστευτος. Υλοποιήσεως αυτό που ακριβώς ήθελα..Σε ευχαριστώ για τον κώδικα....Τι να πω respect!!!!!!

Tasos 27-06-11 21:20

Καλησπέρα Σάκη και καλωσόρισες στο φόρουμ!

Εναλλακτικά, μπορείς να δοκιμάσεις το παρακάτω:


Κώδικας:

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    With Target
        If .Count > 1 Or .Row < 2 Or .Column <> 1 Then Exit Sub
        Cancel = True
        If Trim(.Value) <> vbNullString Then
            .Offset(, 2).Value = .Value
            .ClearContents
        Else
            .Value = .Offset(, 2).Value
            .Offset(, 2).ClearContents
        End If
    End With
End Sub

Ο κώδικας αυτός ενεργοποιείται με το διπλό κλικ πάνω σε κελί της στήλης A.

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

Τάσος

sakplak 28-06-11 15:47

Φίλε Τάσο σε ευχαριστώ πολύ...και ο δικός σου κώδικας είναι οκ!!!Ευχαριστώ πολύ για την βοήθεια..

jose 07-03-12 07:18

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 7053)
Καλησπέρα στην παρέα

Σάκη, στο αρχείο που επισυνάπτω, έκανα μια προσπάθεια να υλοποιήσω το ζητούμενο.
Συγκεκριμένα κάνοντας κλικ σ’ ένα κελί της περιοχής «A2:A120»:
1. Αν το κελί έχει όνομα μεταφέρεται στους απόντες.
2. Αν είναι κενό γεμίζει με το όνομα που υπάρχει στη στήλη C και στην ίδια γραμμή.
Η παραπάνω λειτουργικότητα οφείλεται στον κώδικα:
Κώδικας:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim TargetRow As Long
    If Target.Cells.Count > 1 Then Exit Sub
    TargetRow = Target.Row
    If Not Intersect(Target, Range("A2:A120")) Is Nothing Then
        If Not IsEmpty(Target) Then
            Target.Cut Destination:=Cells(Target.Row, 3)
        Else
            Cells(Target.Row, 3).Cut Destination:=Target
        End If
        Cells(TargetRow, 2).Activate
    End If
End Sub

Φιλικά/Γιώργος

Καλημέρα,

στο παραπάνω παράδειγμα ( αλλάζοντας το target.cut με το target.copy )

μπορω να Αντιγράψω ένα όνομα απο την στήλη Α στην στήλη C με την χρήση της VBA ,

πχ το Α1 στο C1

Η ερώτηση .........

εαν έχω πχ έναν πίνακα με τις στηλες Α και C

και 6 Ονοματα στην Α στήλη , Αλλά μόνο 3 θέσεις στην στηλη C

μπορώ πχ το Α2 να το βάζω ( αντιγράφω ) στο C1 και μετα ΑΝ το C1 έχει όνομα το

το Α4 να το βάζω στο αμέσως αποκάτω κενό κελί της στηλης C ; στο C2 δηλαδή

κσι κατόπιν το Α6 στο C3 ;

ή πιό απλά .... με ....

κλικ στο Α2 να αντιγράφεται στο C1
κλικ στο Α4 να αντιγράφεται στο C2
κλικ στο Α6 να αντιγράφεται στο C3 ;

kapetang 07-03-12 09:45

1 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από jose (Μήνυμα 9874)
.................................................. .....
ή πιό απλά .... με ....

κλικ στο Α2 να αντιγράφεται στο C1
κλικ στο Α4 να αντιγράφεται στο C2
κλικ στο Α6 να αντιγράφεται στο C3 ;

Καλημέρα

Νίκο, στο επισυναπτόμενο αρχείο υπάρχει μια υλοποίηση του ζητούμενου.

Φιλικά/Γιώργος

jose 07-03-12 11:03

αχ,

ετσι που ειχα τα παραδείγματα εδωσα λάθος νόημα

συγγνώμη ...παράλειψή μου

το ζητούμενο είναι να μεταφέρονται και τα Μονά ονόματα
( να χρησιμοποείται δηλαδή Ολη η στήλη Α )

πχ

Α1>C1
A3>C2
A4>C3

kapetang 07-03-12 11:33

Καλημέρα

Αν κατάλαβα καλά, κάθε φορά που θα κάνουμε κλικ σε ένα κελί της στήλης Α η τιμή του θα αντιγράφεται στην στήλη C κάτω από τα υπάρχοντα δεδομένα.

Αν ξανακάνω κλικ σε ένα κελί της στήλης Α τι θα γίνει, η τιμή του θα αντιγραφεί ξανά;

Φιλικά/Γιώργος

jose 07-03-12 12:30

1 Συνημμένο(α)
ναι αλλά θα βάλω ένα άλλο να πάει στην θέση του

σε ταλαιπωρώ και δεν το ήθελα , ας το αφήσουμε

τωρα το κάνω με το ..... = στο πχ C1 > κλικ και enter στο πχ Α2 και αντιγράφεται

επίσης μπορώ να χρησιμοποιώ και το παρακάτω

αλλά πρέπει να τα εχω εις τριπλούν ή διπλούν κλπ

Tasos 07-03-12 14:07

Καλησπέρα!
Αγαπητέ Νίκο,
δεν είναι καθόλου μα καθόλου αξιόπιστη η μέθοδος καταχώρησης δεδομένων με το συμβάν Worksheet_SelectionChange()
το οποίο δεν εξαπολύεται μόνο με το κλικ του ποντικιού αλλά και με αρκετά άλλα πλήκτρα όπως Enter, Tab, τα βέλη
και πολλά αλλά που προκαλούν τη μετακίνηση του κέρσορα και κατά συνέπεια την ανεπιθύμητη εκτέλεση του συμβάντος.

Αρκεί δηλαδή να ακουμπήσεις κατά λάθος ένα από τα πλήκτρα αυτά για να προκαλέσεις
κάποιο λάθος χωρίς καν να έχεις αντιληφθεί ότι άλλαξες μια τιμή, που την άλλαξες και ποια ήταν η παλιά τιμή για να τη διορθώσεις!

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

Φιλικά

Τάσος

jose 08-03-12 15:24

1 Συνημμένο(α)
καλησπέρα,

το θέμα το ξαναείδα επειδη είχα κάνει αποθήκευση την σελίδα ( όπως και άλλες )
στο Pc για τυχόν μελλοντική χρήση και διαβάζοντάς το μου ηρθε η ιδέα του ερωτήματος
μπας και γλύτωνα 1-2 κλικ .

Μεχρι πριν λιγο καιρό πριν ασχοληθώ με την vba ερασιτεχνικα και την χρησιμοποιήσω ,
ειχα φτασει στο σημείο να κάνω περι τα 600,000 με 700,000 κλικ τον χρονο !!!
απο οσο ειχα υπολογίσει στο excel .
και αυτά , με copy past τα εκανα .
μόνο κάποια ημέρα της εβδομάδος έκανα 8 με 10,000 κάθε εβδομάδα.
( σε κάποιο '' έργο" )

και μου έχει μείνει απωθημένο !!!!

το συννημένο excel ειναι αυτο που χρησιμοποιώ ( ένα κομματι )

οπως φαίνεται , * με μια ματια μπορω να δω στο ζευγος των 2 ονοματων ή των τριών αν
τα εχω μεταφέρει σωστα και μπορω αμεσως να κανω τυχόν δόρθωση. *

Σε άλλο φυλλο του ''εργου'' υπάρχουν τα Ονόματα και σε διπλανή στήλη
καποιες επιδόσεις για τον καθενα .

απ το κουμπι 2 ή 3 ( δεν ειναι σε λειτουργια ) παιρνω το πρωτο Ονομα και το βαζω σε καποια
στηλη με τις επιδοσεις που εχει
και μετα δίπλα το δεύτερο Ονομα με τις επιδόσεις και αυτού .

και συγκρινω τις επιδόσεις των 2 Ονοματων , σε συνδιασμό με κάποια ημερομηνία .

( δυσνόητο λιγο , αλλά για τα μέτρα μου στις γνώσεις του excel και vba ειναι απλό )

( να μην σας βάζω σε περαιτέρω βάσανο ,

και με κοπυπαστάδα !! ή με = κάνω την δουλειά μου
δεν είναι δα και τόσο σοβαρό το ζήτημα )

Tasos 08-03-12 16:04

Νίκο θα θέλαμε να ξέρουμε τι ακριβώς ζητάς. Όχι πως το κάνεις.

Μέχρι στιγμής είναι προφανές ότι (αν κάνω κάπου λάθος σε παρακαλώ διόρθωσε με):

Έχεις τρεις στήλες.

Στήλη 1 = Ημερομηνία (δεν την αναφέρεις πουθενά)

Στήλη 2 = Όνομα

Στήλη 3 = Επιδόσεις

Το ζητούμενο είναι να συγκρίνονται τις επιδόσεις των 2 ονομάτων, που έχουν την ίδια ημερομηνία.

Το βασικότερο που δεν γνωρίζουμε: Τι θα γίνει μετά τη σύγκριση;

Μήπως έπρεπε να κάνει η εφαρμογή τις συγκρίσεις καθώς και την επόμενη κίνηση αντί να σου στοιχίζει 700.000 κλικ το χρόνο;

Τάσος

jose 08-03-12 16:52

συνέχεια...............

"""Νίκο θα θέλαμε να ξέρουμε τι ακριβώς ζητάς""""

ένα και μόνο ένα

πως με ενα κλικ σέ ένα κελί στην στηλη Α του excel Onomata

να Αντιγράφεται στο κελι C3

και το επομενο κλικ της στηλης Α να αντιγράφεται στο C4

Αν πατηθεί

Τρίτο Ονομα απο την Α > στο C3

Τέταρτο Ονομα απο την Α στο > C4

Πέμπτο Ονομα στην Α πάλι στο C3

Εκτο Ονομα στην Α > C4 και ουτω καθεξής

αν κατα λάθος πατησω πχ 2 φορες το Α2 και παει ( αντιγραφει ) στο C3 και C4
απλα με το πλήκτρο del σβηνω το C4 και κλικαρω άλλο κελί από το Α2


ελπίζω να ήμουν αυτη την φορά κατανοητός

kapetang 08-03-12 21:34

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στο επισυναπτόμενο αρχείο επιχειρείται μια προσέγγιση του ζητούμενου.

Κάνοντας κλικ στα κελιά της στήλης Α οι τιμές τους αντιγράφονται, εναλλάξ, στα κελιά C3 και C4.

Αν η τιμή του κελιού στο οποίο γίνεται κλικ υπάρχει στο κελί C3 ή C4, η τιμή του δεν αντιγράφεται.

Η παραπάνω λειτουργικότητα υλοποιείται με τον παρακάτω κώδικα:

Κώδικας:

Option Explicit
Public numClick As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim FinalRow As Long, RngSource As Range
    If Target.Cells.Count > 1 Then Exit Sub
   
    Application.EnableEvents = False
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set RngSource = Range("A2:A" & FinalRow)
   
    If Not Intersect(Target, RngSource) Is Nothing Then
   
        If Not (Target.Value = Range("C3") Or Target.Value = Range("C4")) Then
            numClick = numClick + 1
            If numClick Mod 2 = 1 Then
                Target.Copy Destination:=Range("C3")
            Else
            Target.Copy Destination:=Range("C4")
            End If
        End If
        Cells(Target.Row, 2).Activate
    End If
    Application.EnableEvents = True
End Sub

Νίκο, ελπίζω αυτή τη φορά να έγινε αντιληπτό το ζητούμενο.

Φιλικά/Γιώργος

Spirosgr 09-03-12 08:53

1 Συνημμένο(α)
Καλημέρα
Μία εναλλακτική λύση για μεταφορά και αντιγραφή χωρίς VBA
με χρήση CHECK BOX και 2 απλούς τύπους IF
Μπορεί να είναι χρήσιμο

Spirosgr 09-03-12 09:00

1 Συνημμένο(α)
ΚΑΙ σε xls
Συγνώμη το ξεχνάω...

Tasos 09-03-12 10:33

1 Συνημμένο(α)
Καλημέρα σε όλους!

Το ζητούμενο του φίλου Νίκου είναι πάρα πολύ απλό αλλά σπάνιο .

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

Φιλικά

Τάσος

jose 09-03-12 14:14

Αμέτρητες ευχαριστίες.....

Δυστηχώς η Forthnet είχε μιά πολύωρη διακοπή
και γι'αυτο η καθυστερημένη απάντηση.

Να βάλω και εγώ κάτι που μπορεί να χρησιμεύσει σε κάποιον
( ισως οι Αδμινίστορες την θεωρήσουν χρήσιμη και την
τοποθετήσουν σε ανάλογο Θέμα )

Εστω
Α1 = 5
Β1 = - ( παύλα )
C1 = 9

Με την =CONCATENATE(A1;B1;C1) στην στήλη Ε και στο Ε1 παίρνουμε το 5-9

με την παρακάτω , στις στήλες G και Η κάνουμε Split το 5-9 , σε 5 και 9

( δεν ξέρω αν υπάρχει και άλλος τρόπος , αυτήν είχα βρεί στο διαδύκτιο και ήταν
πολυ πρακτική )

Κώδικας:

Sub Split_paula()

 Dim firstName As String
    Dim lastName As String
    Dim n As Integer
    Dim rowNum As Integer
    Dim colNum As Integer
    rowNum = 1
    colNum = 5
   
    While Cells(rowNum, colNum).Value <> ""
        n = InStr(1, Cells(rowNum, colNum).Value, "-")
        lastName = Left(Cells(rowNum, colNum).Value, n - 1)
        firstName = Right(Cells(rowNum, colNum).Value, Len(Cells(rowNum, colNum).Value) - n - 0)
        Cells(rowNum, colNum + 2).Value = lastName
        Cells(rowNum, colNum + 3).Value = firstName
        rowNum = rowNum + 1
    Wend

End Sub


και πάλι σας ευχαριστώ

Tasos 09-03-12 16:17

Νίκο σ ευχαριστούμε για τη λύση που παράθεσες!

Και εμείς ήμαστε στο Internet και συνήθως οι κώδικες μας δεν είναι φλύαροι:biggrin:

Για παράδειγμα, ο παρακάτω κώδικας διαχωρίζει τη λέξη 1-1 από το κελί A2 στα και περνά τα τμήματα της στα αμέσως επόμενα κελιά δεξιά:

Κώδικας:

Sub Split_paula()
    Dim arr() As String, i As Integer
    arr = Split(Cells(2, 1), "-")
    For i = 0 To UBound(arr)
        Cells(2, i + 2) = Trim(arr(i))
    Next
End Sub

Φιλικά

Τάσος

gr8styl 09-03-12 17:08

Καλησπέρα σας και από μένα.
εκτός του ότι δεν καταλαβαίνω γιατί να σπάσουμε (split) κάτι που ενώσαμε με την Concatenate !!!
δεν καταλαβαίνω και γιατί χρειαζόμαστε VBA αφού οι τύποι:
Κώδικας:

G1=LEFT(E1;SEARCH(B1;E1)-1)
και
H1=RIGHT(E1;LEN(E1)-SEARCH(B1;E1)-LEN(B1)+1)

στις στήλες G και H αντίστοιχα δίνουν το επιθυμητό (το διαχωριστικό είναι στην στήλη Β).

Ή απλά μέσω μενού κείμενο σε στήλες με διαχωριστικό την παύλα (κελί e1 στα g1 και h1)
Κώδικας:

Sub Split_paula()
    Application.CutCopyMode = False
    Range("e1").TextToColumns Destination:=Range("g1"), _
        DataType:=xlDelimited, Other:=True, OtherChar:="-"
End Sub

Ελπίζω εσείς να ξέρετε το γιατί.
Τα λέμε.
Θανάσης.


Η ώρα είναι 14:29.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2