Excel: concatenación y formato

thierry -  
 Visiteur -
Hola,

tengo un problema de concatenación con Excel.
Un ejemplo: vale más que un largo discurso:
en mi primera celda, tengo "Hola" (en negrita, es importante)
en mi segunda celda, tengo "¿cómo va?" (sin negrita)
me gustaría concatenar los dos textos en una tercera celda manteniendo estos formatos para obtener:
"Hola ¿cómo va?"

Así, así, no puedo. Ni siquiera con una macro, no sé cómo hacerlo.

Gracias por sus consejos
Cordialmente,
Thierry

24 respuestas

  • 1
  • 2
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
De nada :-)
Buenas noches para ti
9
Anonyme
 
Hola

Poner en negrita una parte de un texto en Microsoft Excel:

¿Cómo hacer para poner en una celda solo una parte del texto en negrita?
Sin VBA, es muy fácil, seleccionas y haces clic en el icono "negrita".
Mediante VBA, puedes utilizar la posición de la subcadena para hacerlo:

*** :
Sub PonerEnNegrita()
Range("A1") = "Automóvil"
'Poner en negrita "óvil"
Range("A1").Characters(7, 4).Font.Bold = True
End Sub
*** .

Denis Michon, (N°816)
Fuente => http://www.excelabo.net/excel/formatstexte.php

Creo que puedes llamar a una función, "PonerEnNegrita()", el resultado en curso de "cálculo"; y esta llamada de la función, se encuentra en la fórmula, en el lugar adecuado. La función, la haces tú mismo, con ayuda, basándote en el interesante ejemplo anterior. Gracias.

Es muy difícil encontrar información sobre la función "estilo"; para colocar en una fórmula!
Para Microsoft Excel (es difícil), como con OpenOffice.org Calc (más fácil de encontrar).
=> Se crea un estilo y se aplica directamente en (a partir de) la fórmula? (tengo dudas)

Gracias.

Hasta luego.
1
banbar
 
Es bastante sencillo: pones =celda1&celda2
0
pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 772
 
Muy buen ejemplo de un tema resurgido, caducado desde hace 4 años, para dar una respuesta totalmente inexacta.
0
exzellent
 
@pijaku
De hecho, tenía esta pregunta precisamente "ahora" (excepto por el formato) y tengo que decir que la respuesta de banbar resuelve a la perfección mi problema de concatenar varias celdas, ya que no necesito conservar los caracteres en negrita (no tengo). Así que esta resurrección del tema, aproximadamente 28 días antes de mi necesidad "ahora", no está lejos de ser una bendición ;-)
0
Visiteur
 
Para aquellos que puedan utilizar este foro más adelante. Aquí está mi solución, que considero más sencilla que el VBA para lo que quería hacer.

Lo que quería hacer: concatenación manteniendo el formato de un % y del texto.
Solución (ejemplo): =TEXTO(B2/B5;"0,00%")&" Patatas"

B2 y B5 contenían lo que comúnmente llamamos números.
0
Anonyme
 
Hola

Si puedes "eriiic", por favor, utiliza "Microsoft Excel Viewer" para ver cómo se ve la cosa; gracias.
=> Será muy instructivo; sin macros, VBA, o "otras cosas" activadas...

Mira también con OpenOffice.org Calc; gracias; no todo el mundo tiene Office...
Intenta, si quieres y puedes, ehh ;-), hacer ejemplos visibles correctamente para todos.
(gracias)

Por mi parte; no digo que hagas; como el ejemplo propuesto en el Post #8:

B1: =A1&A2&A3&A4 (para concatenar)
Pero más bien; si es posible:
B1: =PonerEnNegrita(A1)&PonerEnCursiva(A2)&NeutroDefecto(A3)&NeutroDefecto(A4) (para concatenar)

=> Llamamos a la función; aquí para el formato del texto, en la fórmula! ;-)
(¡Función que uno hace uno mismo!)

eh, en Excel, ¿no es posible usar la función oculta "estilo", como en OpenOffice.org Calc?
Digo oculta, porque no he encontrado información... (ver por favor los enlaces de publicaciones anteriores).

gracias "eriiic" y gracias a todos.

hasta luego
1
ATO
 
Hola,

Bueno... este post es un poco antiguo pero estoy frente al mismo problema.
Mi objetivo es también concatenar celdas que, según una variable de fecha, puedan estar en negrita o no.
La solución que estoy contemplando es crear en VBA una función "conservformat" que me permita mantener el formato de la celda fuente, tal como en el siguiente ejemplo:

=CONCATENAR(A1;conservformat(A2);A3)

Así el formato de la celda A2 se conservará en mi celda de destino.

Aquí está el inicio de mi código:

Function ConservFormat(rngCells As Range) As Double
Application.Volatile
Dim cell As Range
ConservFormat = ???
On Error Resume Next
For Each cell In rngCells
If cell.Font.Bold Then ConservFormat = ???
Next cell
End Function

Como pueden ver, la idea es detectar qué celdas están en negrita para establecer una condición de formato en la función. Pero me falta precisamente la condición de formato...
bueno, no sé si he sido claro, pero en caso de que comprendan mi problema, ¿tienen alguna idea de cómo hacerlo?

Gracias a ustedes
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Buenas noches,

Es posible, pero tus valores perderán el tipo numérico, será una cadena de caracteres.
C1: ="[" & DERECHA("0000" & A1;4) & ";" & DERECHA("0000" & B1;4) & "]"

eric
1
nicooo
 
¡Gracias SEÑOR eriiic!

Me estaba complicando al pedir demasiado a cada celda (había simplificado mi problema en el ejemplo), pero con tu solución tan sencilla y un mejor desglose de mis fórmulas, está resuelto.
¡Gracias de nuevo!
0
Saratum
 
Actualmente tengo el mismo tipo de problema...
De hecho, yo quiero asignar un nuevo formato al texto escrito en mi celda fuente, en mi celda final...

Alguien me acaba de dar un buen empujón con la fórmula de texto de excel....

Tenía un formato de número que quería tener en formato monetario... así que mi concatenar ahora se ve así: =CONCATENAR(QW589;RJ589;TW589&TEXTO(UB589;"# ## ##0_ $");UO589;QW590;QW591)

Dicho esto, tengo otro problema... quiero que RJ589 y TEXTO(UB589;"# ## ##0_ $" se muestren en negrita... ¿cómo lo hago?

Quiero proceder sin macro si es posible, este archivo funcionará en varias computadoras....
1
ilan27 Mensajes publicados 395 Estado Miembro 36
 
Hola,
¿Has intentado ver entre las funciones que ofrece Excel?
Inserción>Función, y eliges las opciones que te convengan.
0
Vaucluse Mensajes publicados 27336 Fecha de registro   Estado Colaborador Última intervención   6 453
 
No Thierry, lamentablemente no tengo una solución, pero si alguien te da la buena idea, tal vez yo también podría resolver mi problema, que planteé unos minutos antes que el tuyo.
Ver para más información el hilo: "reagrupación de datos"
Seguimos nuestras respuestas respectivas, y nos las pasamos si funciona. ?
CRDLMNT
--
Ciencia sin conciencia es solo ruina del alma.
0
thierry
 
Sí, he revisado las funciones propuestas por Excel, pero no encontré nada que pudiera corresponder a mis necesidades (observación: es Excel en inglés, así que tal vez me perdí algo).

Si alguien sabe cómo obtener el mismo resultado con una macro, no tengo objeciones.

Gracias de antemano.
0
zarakoff Mensajes publicados 40 Estado Miembro 5
 
Buenas noches,

Aquí hay una pista:
Sea A1 = "Hola
A2 = "¿cómo va?"
A3 contendrá la siguiente fórmula:
=concatenar(a1;" ";a2)
Bueno, no tengo Excel a mano y por eso no sé si el formato en negrita de hola se conserva.
A probar.

Hasta luego
zarakoff
0
thierry
 
Justamente, ahí está mi problema, la fórmula no conserva el formato de las celdas, así que obtenemos simplemente Hola, ¿cómo estás?.
Y al poner la celda en negrita, obtenemos Hola, ¿cómo estás?.
Así que de esta manera no hay forma de tener Hola ¿cómo estás?
0
Anonyme
 
Hola

Poner en negrita una parte de un texto en Microsoft Excel:

https://sebsauvage.net/temp/wink/excel_vbarecord.html

Fuente => http://www.commentcamarche.net/forum
/affich-2073115-excel-comment-mettre-en-gras-avec-une-macro


Funciones "ocultas" de XL4; Consejo reciente: leer.celda(); sobre (C) 2006 Excel Downloads:
https://www.excel-downloads.com/threads/astuce-recente-lire-cellule.32955/

Saber si las celdas seleccionadas (Excel) están en negrita e itálicas:
http://www.codyx.org/snippet_savoir-si-cellules-selectionnees-excel-sont-gras-italiques_336.aspx

 Public Function IsBoldItalic(ByVal MyRange As Range) As String Dim rCell As Range For Each rCell In MyRange IsBoldItalic = IsBoldItalic & rCell.Address & " :" & vbCrLf IsBoldItalic = IsBoldItalic & vbTab & "Negrita : " & CBool(rCell.Font.Bold) & vbCrLf IsBoldItalic = IsBoldItalic & vbTab & "Itálica : " & CBool(rCell.Font.Italic) & vbCrLf Next rCell End Function Sub EXEMPLO() Debug.Print IsBoldItalic(Range("A1:A4")) ' *** RESULTADO : *** '$A$1 : ' Negrita : Falso ' Itálica : Falso '$A$2 : ' Negrita : Verdadero ' Itálica : Falso '$A$3 : ' Negrita : Falso ' Itálica : Verdadero '$A$4 : ' Negrita : Verdadero ' Itálica : Verdadero End Sub 


gracias.

hasta luego
0
thierry
 
Gracias Anónimo por todas estas investigaciones, pero no he encontrado nada que se corresponda con mi problema.

De hecho, es más complicado que simplemente poner en negrita una parte de la celda.
Otro ejemplo:
en A1: Hola_
en A2: ¿cómo va_?
en A3: Sí_
en A4: ¿y tú?
en B1: =A1&A2&A3&A4 (para concatenar)
y obtengo:
Hola_¿cómo va_?Sí_¿y tú?
en lugar de
Hola_¿cómo va_Sí_¿y tú?

En resumen, me gustaría conservar el formato durante la concatenación.

Gracias de antemano.
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola Thierry,

Tu pregunta no es fácil, pero es interesante.
Primero quise crear una función que reemplazara CONCATENAR, pero fue imposible de resolver.
Así que creé un sub que analiza la fórmula de las celdas que le pasas seleccionando rangos y pega el resultado en la celda inmediatamente a la derecha.
No hago casi ningún control, así que estas fórmulas deben limitarse a = A1 & A2 & ... y hacer referencia a celdas que solo contengan cadenas. Los atributos recuperados son: negrita, cursiva, subrayado simple, color. No he mirado, pero debe ser posible recuperar la fuente y el tamaño.

Por supuesto, es un primer borrador, pero es funcional. Tendrá que completarse con un formulario de usuario que permita elegir el desplazamiento de destino, los atributos a recuperar, etc. También previ que se pueda insertar un retorno de carro donde se desee (para Vaucluse ;-) ), pero no se ha tratado por ahora.
Un ejemplo más concreto: http://www.cijoint.fr/cij45591193727506.xls

Seleccionas, por ejemplo, F3:F4 y F6:F8 y lanzas la macro RecupFormatCel.
Vas a poder crear bonitos degradados ;-)

Eric
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Re,

nueva versión que permite insertar una cadena "vbLf" forzando el salto de línea dentro del texto de una celda
http://www.cijoint.fr/cij2036478627532.xls

Atención siempre hacer referencia a una celda, no trato (¿aún?) las fórmulas del tipo =A1 & "blablabla" & A3 & ...
eric
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola Anónimo,

Para Open Office nunca me he ocupado de las macros. Sin duda, se pueden adaptar fácilmente.
En cuanto a hacer una función, era mi idea inicial, pero no es tan fácil, créeme. Una vez que se devuelve el valor, ya no hay forma de continuar el tratamiento para hacer el formateo y acceder a la dirección sin tener una referencia circular, y si se aborda de otra manera, se pierden los atributos ya establecidos... (hay que investigar más, pero por ahora estoy en eso)
En última instancia, la opción de hacer un procedimiento tiene una ventaja: poder tratar una tabla ya hecha siempre que liberemos las celdas que reciben el resultado; sin embargo, no hay actualización dinámica :-s
Pero bueno, hay mejoras posibles, esto era al principio para ver la viabilidad sin hacer demasiados controles ni un análisis muy profundo de la fórmula.

A falta del visor, aquí tienes una captura de pantalla.
Las fórmulas de concatenación están en la columna H, el resultado de la macro en la columna I
He optado por una cadena específica para los saltos de línea, de ahí los "vbLf"
http://www.cijoint.fr/cij73148756327527.jpg

El código en VBA para adaptación en Open Office:
Const LF As String = "vblf" Sub RecupFormatCel() Dim c1 As Range, c2 As Range, dest As Range Dim i As Integer, long1 As Long, ptr1 As Long, ptr2 As Long Dim formatCel As Variant Dim ListeRef As Variant For Each c1 In Selection f = c1.Formula If Left(f, 1) <> "=" Then 'formule ? Exit Sub Else f = Mid(c1.Formula, 2) 'oui: eliminer = End If Set dest = c1.Offset(0, 1) 'cellule de destination dest.Value = c1.Value ListeRef = Split(f, "&") ' découper la formule ' ' remplacement des "vbLF" par vbLf While InStr(1, LCase(dest.Value), LF) pos = InStr(1, LCase(dest.Value), LF) dest = Left(dest.Value, pos - 1) & vbLf & Mid(dest.Value, pos + Len(LF)) Wend ' récupération des formats ptr1 = 1 For i = 0 To UBound(ListeRef) Set c2 = Range(ListeRef(i)) ' adresse de la chaine long1 = Len(c2.Value) ' longueur de la chaine 'ptr2 = ptr2 + long1 If LCase(c2.Value) = LF Then ' traitement vbLF long1 = 1 Else With c2.Font formatCel = .FontStyle dest.Characters(Start:=ptr1, Length:=long1).Font.FontStyle = formatCel formatCel = .ColorIndex dest.Characters(Start:=ptr1, Length:=long1).Font.ColorIndex = formatCel formatCel = .Underline dest.Characters(Start:=ptr1, Length:=long1).Font.Underline = formatCel End With End If ptr1 = ptr1 + long1 Next i Next c1 End Sub Sub test() Range("H3:H5,H7:H8").Select RecupFormatCel End Sub Sub raz() Range("I3:I8").ClearContents End Sub


eric
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Para completar las dificultades encontradas en la función, los atributos de texto aplicados sobre el texto de una celda (y no sobre la celda misma) se pierden tan pronto como se almacenan en una variable VBA. Solo se pueden manipular dentro de la propia celda.
Si encuentras un truco para manipularlos directamente en VBA, me interesa, todos los problemas quedarían resueltos, yo no he encontrado nada
Ahora hay que intentar con funciones separadas como en tu ejemplo, no había pensado en esta pista. A probar...
eric
0
thierry
 
Hola,

Gracias por dedicar tanto tiempo a mi pregunta, no esperaba tanto. Visiblemente no hay una respuesta demasiado complicada.
Pero hacer manualmente en negrita la cantidad de datos que tengo es bastante inferior al tiempo que he pasado tratando de hacerlo rápidamente, así que no hay mucho valor añadido.

Si quieren seguir buscando una solución, no hay problema, estaré pendiente de la discusión, pero desde mi perspectiva, es más sencillo dejarlo y hacerlo a mano. Gracias a eriiic y a anónimo.

Ciao
Thierry
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola Thierry,
¿estás seguro de haber leído bien las respuestas?

Abres el archivo adjunto en el post 10, abres tu archivo, seleccionas las celdas de tu archivo donde están las fórmulas de concatenación y ejecutas la macro, y en las celdas de al lado encuentras la cadena formateada con negritas, colores, etc.

Y si abres este: http://www.cijoint.fr/cij77852548227558.xls
incluso puedes elegir sobrescribir tus fórmulas (offset 0) o pegar el resultado 20 columnas más allá si deseas preservar tus celdas ocupadas.
eric
0
thierry > eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención  
 
Buenas noches,
De hecho, he leído un poco demasiado rápido las respuestas. Tus macros me ayudan bastante, así que muchas gracias.
Sin embargo, de todos modos debo haber terminado mañana, así que por mi parte voy a quedarme aquí.

Hasta luego
0
Anonyme
 
Hola

¡Muchas gracias "eriiic" por la información, la ayuda y la conversión para OpenOffice.org Calc!

(Gracias a todos también por reflexionar sobre el problema) o sobre los problemas planteados en las respuestas! :-)

(Intentemos dar una solución a todas las preguntas planteadas aquí, indirectamente en las respuestas)

* El programa de hojas de cálculo, Microsoft Excel o OpenOffice.org Calc, ¡no es fácil! ...

Gracias "eriiic", y gracias a todos por más información y ayuda. Gracias.

¡Hasta luego!
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Última versión con opción de offset: http://www.cijoint.fr/cij77852548227558.xls
(offset 0 reemplaza las fórmulas por las cadenas con formato)

Const LF As String = "vblf"
Sub RecupFormatCel()
Dim c1 As Range, c2 As Range, dest As Range
Dim i As Integer, long1 As Long, ptr1 As Long, offset1 As Long
Dim formatCel As Variant
Dim ListeRef As Variant
Dim msg As String
msg = "¿A qué offset (en columnas) pegar el resultado?" & vbCrLf
msg = msg & "(si offset = 0 la fórmula original " & vbCrLf
msg = msg & "será reemplazada por la cadena formateada)"
offset1 = InputBox(msg, "Selección de offset resultado")

For Each c1 In Selection
f = c1.Formula
If Left(f, 1) <> "=" Then '¿fórmula?
MsgBox ("Error" & vbCrLf & "La celda " & c1.Address & " no contiene una fórmula de concatenación")
Exit Sub
Else
f = Mid(c1.Formula, 2) 'sí: eliminar =
End If
Set dest = c1.Offset(0, offset1) 'celda de destino
dest.Value = c1.Value
ListeRef = Split(f, "&&") ' dividir la fórmula
'
' reemplazo de "vbLF" por vbLf
While InStr(1, LCase(dest.Value), LF)
pos = InStr(1, LCase(dest.Value), LF)
dest = Left(dest.Value, pos - 1) & vbLf & Mid(dest.Value, pos + Len(LF))
Wend

' recuperación de los formatos
ptr1 = 1
For i = 0 To UBound(ListeRef)
Set c2 = Range(ListeRef(i)) ' dirección de la cadena
long1 = Len(c2.Value) ' longitud de la cadena
If LCase(c2.Value) = LF Then
' tratamiento vbLF
long1 = 1
Else
With c2.Font
formatCel = .FontStyle
dest.Characters(Start:=ptr1, Length:=long1).Font.FontStyle = formatCel
formatCel = .ColorIndex
dest.Characters(Start:=ptr1, Length:=long1).Font.ColorIndex = formatCel
formatCel = .Underline
dest.Characters(Start:=ptr1, Length:=long1).Font.Underline = formatCel

End With
End If
ptr1 = ptr1 + long1
Next i
Next c1
End Sub
Sub test()
Range("H3:H5,H7:H8").Select
RecupFormatCel
End Sub
Sub raz()
Range("I3:I8").ClearContents
End Sub
0
UsulArrakis Mensajes publicados 7683 Estado Colaborador 3 196
 
Para seguir
--
(_Usul de Arrakis
Soñador_Serial_)
0
nicooo
 
muy bonita demostración de los estilos aplicados al texto, pero ¿qué pasa cuando se trata de un formato personalizado?

ejemplo:

valores ingresados: A1=5 B1=10
valores mostrados: A1=0005 B1=0010

y me gustaría poder concatenar los valores manteniendo su formato (ej: C1 = [0005;0010]

¿es posible?

¡Gracias por tu ayuda!

...realmente tengo que ponerme a las macros -_-
0
  • 1
  • 2