2012-03-27 12 views
7

Necesito tomar las dos primeras líneas de texto de una celda envuelta en excel. Por ejemplo, una célula de Excel envuelta contiene el texto de la siguiente manera:Obtenga las dos primeras líneas de texto de una celda wraped en excel

wrapedtext1 

wrappedtext2 

wrappedtext3 

wrappedtext4 

necesito sólo las dos primeras líneas como 'wrapedtext1wrappedtext2'. ¿Es posible?

+1

¿Ha intentado agarrar el contenido de esa celda y ver exactamente qué caracteres contiene, imprimiendo códigos ASCII, por ejemplo, usando la función Asc()? Eso puede darte una pista sobre cómo obtener lo que quieres. – JTeagle

+1

@JTeagle: también tengo este problema. Después de establecer la propiedad wrapText en la celda, el contenido de la celda se envuelve automáticamente con el ancho de la columna. Es decir, en realidad no ponemos saltos de línea. Puedo extraer 2 líneas cuando ingresamos datos presionando Alt + Intro.Pero hacer esto es simplemente establecer la propiedad de ajuste de texto en la celda – 1355

+1

@ 1355 - Entiendo. Me temo que puede tener dificultades aquí ya que aunque es probable que pueda obtener el ancho de la celda e incluso la fuente en uso, VBA no (según mi conocimiento) proporciona una forma de 'medir' el texto como sea posible en C++ y posiblemente VB nativo . ¿Puedo preguntar por qué solo necesitas las dos primeras líneas? Dado que el ancho de la celda (y, por lo tanto, la cantidad de ajustes) se puede cambiar fácilmente en el tiempo de ejecución, parece una cosa un tanto arbitraria de hacer. – JTeagle

Respuesta

5

solo me falta conseguir dos primeros líneas como 'wrapedtext1wrappedtext2'. ¿Es posible?

Sí, podría ser posible, pero no es NO SIMPLE manera de lograrlo. Hay muchos factores que tendrá que considerar.

1) Altura fila píxeles

2) Tipo de fuente y tamaño de

3) Espacio entre líneas

4) se fusiona la célula?

5) es la célula en el estado Autofit

6) ¿Es todo el texto en el modo normal o tiene cualquier cursiva/carácter Negrita/Subrayado (s), etc, etc

Considere esta instantánea

enter image description here

Por ejemplo, alto de fila en píxeles se pueden derivar de

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

tamaño de fuente en el caso anterior se puede conseguir de esta

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

Pero el reto es lo que sucedería en el siguiente escenario?

enter image description here

En mi opinión, sería demasiado de un dolor para lograr lo que quiere.La mejor parte sería usar ALT + Enter para insertar saltos de línea y luego recuperar el texto.

FOLLOWUP

Las cuerdas se introducen en la célula envuelta a través de código VBA. Entonces, ¿cómo se insertarán datos presionando alt + enter? - 1355 hace 4 horas

En este caso, puede adoptar un enfoque similar también.

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: Por lo anterior que tendrá que grabar una macro y ver lo que es el ancho de la fuente, tamaño de fuente y la columna que puede tomar un formato particular. De nuevo, tendrá que considerar el hecho de que el ejemplo que he dado arriba es para una celda no formateada en una hoja nueva. Si está escribiendo en una celda combinada o en una celda por formato, tendrá que cambiar el código anterior en consecuencia, lo cual se puede lograr fácilmente registrando una macro. También estoy asumiendo que el nivel de zoom se establece en 100%

SNAPSHOTS

enter image description here

HTH

Sid

+1

Las cadenas se ingresan en la celda envuelta a través del código vba. Entonces, ¿cómo se insertarán datos presionando alt + enter? – 1355

+1

Buena pregunta. :) ¿Probablemente encuentres el ancho de la celda y luego decides el número de palabras que deben incluirse en cada línea? Déjame ver si puedo mostrarte un ejemplo :) –

+0

Gracias por tu respuesta. De nuevo, hay un problema. No pude insertar saltos de línea en la cadena manualmente. Necesito verificar cuántas palabras se acomodarán en dos líneas. – 1355

0

Hola, hay dos formas de hacerlo con el código VBA.

Primera manera. Si las líneas se separan con un espacio

Dim avarSplit As Variant 

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

de segunda manera si se separan con un descanso.

Dim avarSplit2 As Variant 

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

A continuación, se obtiene una matriz en donde se separan todas las líneas y sólo puede leerlos ...

Moosli

+0

Ya han indicado que ingresan datos a través del código vba. Entonces, los saltos de línea no estarán allí. El espacio no será un separador de línea válido aquí. – user1142922

0

Usted puede hacer algunas complicada fórmula en Excel para lograr esto sin el código VBA.

Suponiendo que el texto multilínea está en A1. Si lo que desea es las dos primeras líneas, se puede hacer esto:

conseguir la primera línea:

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

obtener la segunda línea:

=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))) 

Entonces sólo tiene que utilizar CONCATENATE() combinar esos dos .

Tener un vistazo a este sitio que le permiten especificar qué línea para obtener: http://www.excelblog.ca/separating-lines-from-multi-line-excel-cell/

1

Use la función de búsqueda:

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

  • búsquedas Buscar para el carácter de salto de línea (CHAR (10)
  • IZQUIERDA le da los primeros X caracteres en B2, hasta el número donde se encuentra el salto de línea
Cuestiones relacionadas