Excel: concatenación y formato

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. Colaborador
    De nada :-)
    Buenas noches para ti
    9
    1. Hola,
      ¿Has intentado ver entre las funciones que ofrece Excel?
      Inserción>Función, y eliges las opciones que te convengan.
      0
      1. Colaborador
        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
        1. 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
          1. 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
            1. 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
              1. 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
                1. Es bastante sencillo: pones =celda1&celda2
                  0
                2. Moderador
                  Muy buen ejemplo de un tema resurgido, caducado desde hace 4 años, para dar una respuesta totalmente inexacta.
                  0
                3. @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
                4. 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
              2. 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
                1. 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
                  1. Colaborador
                    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
                    1. Colaborador
                      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
                      1. 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
                        1. 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
                      2. Colaborador
                        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
                        1. Colaborador
                          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
                      3. 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
                        1. Colaborador
                          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
                        2. @eriiicBuenas 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
                      4. 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
                        1. Colaborador
                          Ú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
                          1. Colaborador
                            Para seguir
                            --
                            (_Usul de Arrakis
                            Soñador_Serial_)
                            0
                            1. 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. Colaborador
                                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
                                1. ¡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
                              2. HOLA

                                AQUI ESTÁ CÓMO HACER

                                A1 Hola
                                a2 ¿cómo estás?

                                a3 =a1 & a2
                                resultado Hola ¿cómo estás? en la celda a3

                                ¡HASTA LUEGO!
                                coco
                                0
                                • 1
                                • 2