2012-03-27 12 views
7

Ho bisogno di prendere le prime due righe di testo da una cella avvolta in Excel. Ad esempio, una cella di Excel avvolto contiene il testo come segue:Ottenere le prime due righe di testo da una cella wraped in excel

wrapedtext1 

wrappedtext2 

wrappedtext3 

wrappedtext4 

Ho bisogno solo le prime due linee come 'wrapedtext1wrappedtext2'. È possibile?

+1

Hai provato ad afferrare il contenuto di quella cella e a vedere esattamente quali caratteri contiene - stampando i codici ASCII, ad esempio, utilizzando la funzione Asc()? Questo potrebbe darti un indizio su come ottenere ciò che vuoi. – JTeagle

+1

@JTeagle: Ho anche questo problema. Dopo aver impostato la proprietà wrapText nella cella, il contenuto della cella viene automaticamente avvolto con la larghezza della colonna. Ad esempio, in realtà non inseriamo interruzioni di riga. Sono in grado di estrarre 2 righe quando inseriamo i dati premendo Alt + Invio.Ma qui sta semplicemente impostando la proprietà text wrap sulla cella – 1355

+1

@ 1355 - Capisco. Temo che potresti avere delle difficoltà qui visto che sebbene tu possa probabilmente ottenere la larghezza della cella e persino il font in uso, VBA non fornisce (a mia conoscenza) un modo per "misurare" il testo come è possibile in C++ e possibilmente in VB nativo . Posso chiederti perché hai bisogno solo delle prime due linee? Dal momento che la larghezza della cella (e quindi, quanto si adatta) può essere facilmente modificata in fase di esecuzione, sembra una cosa leggermente arbitraria da fare? – JTeagle

risposta

5

Ho solo bisogno di ottenere i primi due linee come "wrapedtext1wrappedtext2" .È possibile ???

potrebbe essere possibile, ma non v'è NO SEMPLICE modo per realizzarla. Ci sono molti fattori che dovrai considerare.

1) Altezza riga in pixel

2) Tipo di Font Size e

3) Interlinea

4) E 'la cella unita?

5) è la cella in stato Adatta

6) è tutto il testo in modalità normale o ha alcun corsivo/grassetto/Sottolineato (s) ecc ecc

Considerate questa istantanea

enter image description here

Per esempio, Altezza riga nel pixel possono essere derivati ​​da

Debug.Print Range("A1").Height * (24/18)

Dimensione carattere nel caso di cui sopra può essere raggiunto da questo

Debug.Print Range("A1").Font.Size

Ma la sfida è ciò che sarebbe accaduto nello scenario di seguito?

enter image description here

A mio parere, sarebbe troppo di un dolore per ottenere quello che vuoi.La parte migliore sarebbe utilizzare ALT + Enter per inserire interruzioni di riga e quindi recuperare il testo.

FOLLOWUP

Le corde vengono inserite nella cella avvolto tramite codice vba. Allora, come inserirai i dati premendo alt + invio? - 1355 4 ore fa

In un tale scenario, è possibile adottare un approccio simile pure.

Sub Sample() 
    Dim strg As String 

    strg = "This is a sample" & vbCrLf & _ 
      "sentence which is" & vbCrLf & _ 
      "in Cell A1 and the" & vbCrLf & _ 
      "text is separated" & vbCrLf & _ 
      "with line breaks" 

    With Range("A1") 
     .Columns(1).ColumnWidth = 16.86 
     .Font.Name = "Calibri" 
     .Font.Size = 11 
     .Value = strg 
    End With 
End Sub 

NOTA: Per quanto sopra si dovrà registrare una macro e vedere qual è il tipo di carattere, dimensione del carattere e la colonna di larghezza che può assumere una particolare formattazione. Di nuovo, dovrai considerare il fatto che l'esempio che ho dato sopra è per una cella non formattata in un nuovo foglio. Se stai scrivendo su una cella unita o su una cella per formattazione, dovrai modificare di conseguenza il codice sopra riportato che può essere facilmente ottenuto registrando una macro. Sono anche supponendo che il livello di zoom è impostato su 100%

ISTANTANEE

enter image description here

HTH

Sid

+1

Le stringhe vengono immesse nella cella avvolta tramite il codice vba. Allora, come inserirai i dati premendo alt + invio? – 1355

+1

Buona domanda. :) Probabilmente trovi la larghezza della cella e poi decidi il numero di parole da inserire in ogni riga? Fammi vedere se posso mostrarti un esempio :) –

+0

Grazie per la risposta. Di nuovo c'è un problema. Non sono riuscito a inserire le interruzioni di riga nella stringa manualmente. Devo controllare che quante parole saranno sistemate in due righe. – 1355

0

Ciao ok ci sono due modi su come farlo con il codice VBA.

Primo modo. Se le linee sono separate da uno spazio

Dim avarSplit As Variant 

'If separated with a space 
avarSplit = Split(Worksheets(2).Range("A7").Value, " ") 

secondo modo se sono separati con una pausa.

Dim avarSplit2 As Variant 

'separated with a break 
avarSplit2 = Split(Worksheets(2).Range("A8").Value, Chr(10)) 

Quindi si ottiene un array in cui sono separati tutte le linee e si può semplicemente leggere ...

Möösli

+0

Hanno già detto che inseriscono i dati tramite il codice vba. Quindi le interruzioni di riga non saranno lì. Lo spazio non sarà un separatore di linea valido qui. – user1142922

0

Si può fare qualche formula complicata in Excel per raggiungere questo senza codice VBA.

Supponendo che il testo su più righe è in A1. Se si desidera solo le prime due righe, si può fare questo:

ottenere la prima riga:

=MID(A1,1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2)))) 

ottenere la seconda linea:

=MID(A1,SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1))+1,IF(2=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1,LEN(A1),SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",2)))-SEARCH("@",SUBSTITUTE(A1,CHAR(10),"@",1))) 

Poi è sufficiente utilizzare CONCATENATE() per combinare quei due .

Date un'occhiata a questo sito che consentono di specificare quale linea di ottenere: http://www.excelblog.ca/separating-lines-from-multi-line-excel-cell/

1

Utilizzare la funzione Trova:

= SINISTRA (B2, (FIND (CHAR (10), B2)))

  • ricerche trovare per il carattere di interruzione di riga (CHAR (10)
  • sinistra fornisce i primi X caratteri in B2, fino al numero dove trova l'interruzione di riga
Problemi correlati