Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] CONCATENATE If Left Or (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1880-concatenate-if-left.html)

devcon 19-05-12 07:55

CONCATENATE If Left Or
 
Καλημέρα σας,

Παρακαλώ θα ήθελα την βοήθεια σας.
Θέλω να χρησιμοποιήσω την φόρμουλα:

Κώδικας:

=CONCATENATE(B3," ",IF(LEFT(C3)="MAKER:",CHAR(10),C3))
Και στην περίπτωση που υπάρχει η λέξη «κλειδί» να γίνεται αναδίπλωση κειμένου.
Το ίδιο και όταν υπάρχει και δεύτερη λέξη κλειδί με το OR.

Ευχαριστώ
Θανάσης

gr8styl 19-05-12 08:35

Συνονόματε αν και δεν είναι σαφές το ζητούμενο σου.
Δοκίμασε τον παρακάτω τύπο όπου ίσως χρειαστεί να αλλάξεις τα ";" σε "," ανάλογα τις ρυθμίσεις του υπολογιστή σου.
Αν τα περιεχόμενα το C3 αρχίζουν από "MAKER:" ή "KEYWORD" το αποτέλεσμα θα είναι η ένωση των περιεχομένων των B3 και C3 με διαχωριστικό το Διάστημα (space) και την νέα γραμμή (new line char(10)).
Σημαντικό: Το κελί που θα βάλεις τον τύπο πρέπει να έχει τσεκαρισμένη την αναδίπλωση στην μορφοποίηση.

Κώδικας:

=B3&" "&IF(OR(LEFT(C3;LEN("MAKER:"))="MAKER:";LEFT(C3;LEN("KEYWORD"))="KEYWORD");CHAR(10)&C3;"")
Θανάσης
ΥΓ. Το ="a"&"b" είναι ισοδύναμο και προτιμότερο της =CONCATENATE("a";"b")

devcon 19-05-12 09:16

Σε ευχαριστώ πάρα πολύ.

‘Έχω μόνο ένα πρόβλημα, όταν προσπαθώ να βάλω και άλλες λέξεις «κλειδιά» δεν τις δέχεται και βγάζει λάθος.
Κώδικας:


=B3&" "&IF(OR(LEFT(C3,LEN("MAKER:"))="MAKER:",LEFT(C3,LEN("NOT AVAILABLE"))=
"NOT AVAILABLE"),LEFT(C3,LEN("EX STOCK"))="EX STOCK"),CHAR(10)&C3,C3)

Θανάσης

gr8styl 19-05-12 10:10

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

Στον τύπο που ανέβασες υπάρχει ένα συντακτικό λάθος
Η παρένθεση ")" μετά το ="NOT AVAILABLE") πρέπει να σβηστεί.
Από την άλλη μάλλον έχει και πρόβλημα λογικής γιατί μας λέει ότι αν το C3 αρχίζει από τις λέξεις κλειδιά που έχεις τότε δίνει αποτέλεσμα b3 & char(10) & c3 ενώ αν το Β3 δεναρχίζει με κάποια από τις λέξεις κλειδιά τότε το αποτέλεσμα θα είναι b3 & c3

Σε κάθε περίπτωση δηλαδή θα ενώνει το b3 με το c3 και αν το c3 αρχίζει από τις λέξεις κλειδιά θα παρεμβάλει νέα γραμμή. (char(10))

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

Φιλικά
Θανάσης

Tasos 19-05-12 10:19

Καλημέρα Θανάση!

Έχεις μια παρένθεση παραπάνω:

B3&" "&IF(OR(LEFT(C3;LEN("MAKER:"))="MAKER:";LEFT(C3;LE N("NOT AVAILABLE"))="NOT AVAILABLE");LEFT(C3;LEN("EX STOCK"))="EX STOCK");CHAR(10)&C3;C3)

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

Τάσος

devcon 19-05-12 11:07

1 Συνημμένο(α)
Καλημέρα,

Σας ευχαριστώ πάρα πολύ. Έλυσα το πρόβλημα είδα που έκανα λάθος.

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

Σας ευχαριστώ εκ των προτέρων και εύχομαι καλό Σαββατοκύριακο.

Θανάσης

gr8styl 19-05-12 16:35

Φίλε μου,
το αποτέλεσμα μιας συνάρτησης δεν μπορεί να έχει μίξη μορφοποιήσεων
Αντίθετα όταν έχεις ένα κελί που περιέχει πχ κείμενο και θέλεις να μορφοποιήσεις με έντονη γραφή από την πρώτη αλλαγή γραμμής char(10) και πέρα πρέπει να χρησιμοποιήσεις τον παρακάτω κώδικα.
Κώδικας:

Sub Conc_format()
Dim p As Integer
    p = InStr(1, ActiveCell, Chr(10))
    With ActiveCell.Characters(Start:=p + 1, Length:=Len(ActiveCell) - p).Font
        .FontStyle = "Bold"
    End With
End Sub

Η προσέγγισή σου δεν είναι και πολύ "ορθόδοξη". Εγώ θα διατηρούσα τα περιεχόμενα σε διαφορετικά κελιά και χρησιμοποιώντας μορφοποίηση υπό όρους θα εφάρμοζα την έντονη γραφή όπου χρειαζόταν.

Φιλικά
Θανάσης

devcon 19-05-12 17:24

Αγαπητέ συνονόματε,

Ευχαριστώ γα την απάντησή σου, αλλά δεν κάνει στην περίπτωσή μου.
Και στην περίπτωση που στην αρχή τα είχα σε διαφορετικά κελιά και μετά τα συνέδεα (concatenate) χάνουν την μορφοποίηση τους από Bold σε κανονικά.

Άρα ο μόνον τρόπος που μένει είναι χειροκίνητα.

Φιλικά
Θανάσης

devcon 19-05-12 18:10

Θανάση,

Βρήκα ένα ενδιαφέρον άρθρο στο internet (Humar December 29, 2009 at 06:55:53 Pacific)
που με κάποιες αλλαγές θα μπορούσα να το χρησιμοποιήσω.
Δυστυχώς για μένα δεν ξέρω πως να τις κάνω χρησιμοποιώντας ένα module.
Εάν κάποιος μπορεί να βοηθήσει θα του ήμουν ευγνώμων.

Κώδικας:


Here is a way to bold a list of words inside a longer phrase.
It requires visual basic and it uses the Change event.
For this example three words will be included in the new phrase and will be Bolded.
Put three words in cells E4, E5 and E6:
        E
4        Wayne
5        John
6        big

Put this formula in cell E8:
="Films with "&E6&" film actor "&E5&" "&E4
Now right click on the Sheet name tab at the bottom of the Excel window. This example used Sheet1.

Select View Code
In the window that opens enter this code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim objISect As Range

'this range object is created if the changed range (Target)
'contains any part of range E4:E6
Set objISect = Intersect(Target, Range("E4:E6"))
'make the changes if the range object has been set (i.e. is Not Nothing)
If Not objISect Is Nothing Then
    'create the new string in cell E9
    Range("E9").Value = Range("E8").Text
    'remove any existing Bold font
    Range("E9").Font.Bold = False
    'now bold each of the words from the list E4:E6
    Range("E9").Characters(InStr(1, Range("E9").Text, Range("E4").Text), _
                        Len(Range("E4").Text)).Font.Bold = True
    Range("E9").Characters(InStr(1, Range("E9").Text, Range("E5").Text), _
                        Len(Range("E5").Text)).Font.Bold = True
    Range("E9").Characters(InStr(1, Range("E9").Text, Range("E6").Text), _
                        Len(Range("E6").Text)).Font.Bold = True
End If
End Sub

To use more words, change the range in the line starting Set objIsect
For a fourth word the line becomes:Set objISect = Intersect(Target, Range("E4:E7"))
and add a new line under the heading 'now bold each of the words from the list E4:E6
Note that there are three lines of code, but each has been split onto two visual lines using the '_' character.
Just copy the last two visual lines, and paste them before End if, and change the E6 to E7 for a fourth word.
When you change any word in your list a new phrase with bolded text appears in cell E9.
Note that when you move cells referenced in this code, the code does not change, so you will have to change
 the code to show the new cell addresses.
Regards

Ευχαριστώ εκ των προτέρων.

Spirosgr 19-05-12 18:50

Καλησπέρα
Θανάση (αναφέρομαι στον ερωτώντα) αν έχω καταλάβει καλά το βασικό σου ερώτημα είναι
Αν στο κελί C2 για παράδειγμα περιλαμβάνετε μια λέξη "κλειδί" τότε να ενωθούν τα κελιά Β2 & C2
και να αλλάξει η γραμμή (αλλά αυτό είναι δευτερεύον προς το παρών)
Αν είναι έτσι τα πράγματα τότε στο παράδειγμα που ανέβασες στο κελί Β6 υπάρχουν και το MAKER: και το NOT AVAILABLE
η ερώτηση μου είναι αν το βασικό σου στήσιμο είναι σωστό και με ποιο κριτήριο επιλέγεις τα δεδομένα του κάθε κελιού που περιέχει λέξη "κλειδί" μιας και δεν μας ανέβασες το αρχικό σου φύλλο και πρέπει να μαντέψουμε κάποια πράγματα...

devcon 19-05-12 19:21

4 Συνημμένο(α)
Καλησπέρα Spirosgr,

Κατ’ αρχήν θέλω να σε ευχαριστήσω για το ενδιαφέρον που δείχνεις.

Επισυνάπτω module concatenate που από το Export 1 φύλλο γίνεται Export 2.
Τώρα η τελική μορφή που πρέπει να πάρει το φύλλο είναι το Export 3.
‘Όπως θα δεις μέσα στο module concatenate υπάρχουν κάποιες λέξεις κλειδιά που όταν τις βρει γίνεται η αναδίπλωση.
Το ερώτημα μου είναι πώς μπορώ μέσω αυτών των κλειδιών να έχω αυτά τα κλειδιά και bold.

Φιλικά
Θανάσης

kapetang 19-05-12 19:34

Καλησπέρα

Θανάση (devcon) για να μπορέσει κάποιος να προσαρμόσει τον κώδικα του συνονόματό σου (ταιριάζει καλύτερα) ή αυτόν που ανέβασες στα δεδομένα σου, θα πρέπει να ξεκαθαρίσεις πως είναι οργανωμένα.

Βλέπω ότι δεν κάνεις το απολύτως αναγκαίο. Δεν παρουσιάζεις:

1) Την περιοχή (στήλη;) με τις φράσεις που θα αποτελέσουν το πρώτο συνθετικό στη σύνθετη φράση.

2) Την αντίστοιχη περιοχή με τις φράσεις που θα αποτελέσουν το δεύτερο συνθετικό.

3) Την αντίστοιχη περιοχή με τους τύπους που θα δημιουργούν τη σύνθετη φράση.

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

Tasos 19-05-12 20:41

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

Αγαπητέ Θανάση,

αυτό που ζητάς δεν έχει και πολύ σχέση με το αρχικό σου ερώτημα :fryingpan:

Δες όμως το συνημμένο που πιστεύω ότι θα σε βοηθήσει να συνεχίσεις.

Φιλικά

Τάσος

kapetang 20-05-12 12:01

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

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

Συνοπτικά:

1) Στο φύλλο «KeyWords» υπάρχει μία λίστα με τις λέξεις που προκαλούν αλλαγή γραμμής.
Η λίστα αυτή είναι δυναμική και ονομάζεται «KeyWds».

2) Δημιουργήθηκε μία συνάρτηση χρήστη «Conc(Arg1;Arg2)» που συνενώνει, σύμφωνα με το ζητούμενο, τις φράσεις που περιέχουν τα κελιά Arg1 και Arg2.

3) Στο φύλλο «Result» προστέθηκε ένα κουμπί για τη μορφοποίηση των αποτελεσμάτων της συνάρτησης.

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

devcon 22-05-12 16:12

Αγαπητέ Τάσο,

Άριστα.
Δεν έχω λόγια πως να σε ευχαριστήσω. Είναι ακριβώς αυτό που ήθελα.

Φιλικά Θανάσης

devcon 23-05-12 12:03

Παράθεση:

Αρχική Δημοσίευση από Tasos (Μήνυμα 11022)
Καλησπέρα σε όλους!

Αγαπητέ Θανάση,

αυτό που ζητάς δεν έχει και πολύ σχέση με το αρχικό σου ερώτημα :fryingpan:

Δες όμως το συνημμένο που πιστεύω ότι θα σε βοηθήσει να συνεχίσεις.

Φιλικά

Τάσος

Τάσο καλημέρα,

Παρατήρησα ότι όταν δεν είναι λέξεις κλειδιά από την στήλη “C” δεν τα κάνει συνένωση (concatenate) με την στήλη “B”.

Θα ήθελα οι λέξεις που δεν είναι κλειδιά που βρίσκονται στην στήλη “C” να συνενώνονται με την στήλη “B” (πχ. Β2 & “ “ & C2).
Μετά το πέρας της επεξεργασίας της κολόνας “B” η κολόνα “C” να διαγράφεται.

Μήπως σου είναι εύκολο να κάνεις αυτή την διόρθωση;

Σε ευχαριστώ για την βοήθεια.

Φιλικά Θανάσης

gr8styl 24-05-12 01:35

Καλησπέρα Φίλοι μου.

Ο Γιώργος έχει προτείνει ήδη λύση με το ConcatenateAndFormat.xls που κάνει το ζητούμενο του Θανάση.

Τώρα αν θέλουμε να προσαρμόσουμε και την λύση του Τάσου Delivery.xls αρκεί στον κώδικα της Conc_format
να προσθέσουμε πριν από το πρώτο End If τις παρακάτω δύο γραμμές:

Else
c = Replace(c, Chr(10), vbNullString) & " " & d

Πάμε για άλλα
:chat:
Τέλος καλό όλα καλά
Καληνύχτα και καλή ξεκούραση.

Φιλικά
Θανάσης

devcon 24-05-12 05:45

Αγαπητέ συνονόματε,

Σε ευχαριστώ για την απάντηση και την λύση του προβλήματος.

Σου εύχομαι μια καλή και εποικοδομητική ημέρα.

Θανάσης


Η ώρα είναι 20:00.

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


Search Engine Optimization by vBSEO 3.3.2