Como crear una función UDF en excel para colocar en negrita ciertas partes de una cadena de texto concatenado

Estoy confeccionando un contrato, donde debo resaltar algunas partes del Texto, la mejor idea que se me ocurre es crear una función en excel para colocar en negrita el texto que yo desee dentro de una cadena de texto, existiría de crear una fun ción así por ejemplo "En la ciudad de Asunción"&"negrita(Nombre del comprador" y el Negrita(NOmbre del vendedor) celebran presente contrato"

Negrita(Primera Clausula): El comprador con RUC Negrita(800500) domiciliado"... Básicamente todos los datos estiraré con buscarv porque ya tengo la base de datos de los compradores y vendedores, pero me piden resaltarlo en negrita, y como no quiero más hacer en word, quise ver la posibilidad de automatizarlo con excel, si me pueden dar una mano

2 respuestas

Respuesta
3

Una UDF no te permite poner negritas en los textos.

Te explico un poco más. Una UDF es como una fórmula, solamente te regresa un resultado, pero en la celda lo que tienes es el nombre de la función, algo como esto:

=FuncionPrueba("A2")

Y lo que tú ves es:

En la ciudad de Asunción comprador y el vendedor celebran presente contrato.

Para poner en negritas un texto, realmente tienes que tener el texto en la celda; y para automatizarlo, debe ser con una macro.

Y para hacerlo con una macro, debes especificar en alguna parte, una especie de catálogo los valores que requieres en negrita, o especificar cuáles son los patrones para identificar dónde empieza el dato y dónde termina el dato que quieres en negritas.



Básicamente todos los datos estiraré con buscarv porque ya tengo la base de datos de los compradores y vendedores

De acuerdo a lo anterior, si proporcionas los ejemplos, los catálogos y/o los patrones entonces te ayudo con una macro.

Buen día Dante, te paso el modelo del contrato, lo tengo en excel también que te pase a tu mail, para que puedas tomar como ejemplo,

Saludos

Te paso la macro.

Tal vez haya que realizar algunos ajustes de algunos textos, por el formato de las celdas o de las cantidades.

- La macro copia la hoja1 en la hoja "Contrato" para trabajar con los valores de las celdas.

- En la Hoja1, de la celda L24 y hacia abajo escribe las palabras que necesites poner en negrita.

- Además la macro va a considerar estas celdas:

L2, L3, L9, L10, L13

- Pero puedes agregar otras celdas en esta línea de la macro:

  Set rng = sh2.Range("L2, L3, L9, L10, L13, L24:L29")

- La macro también considera lo que está entre paréntesis, ej:

 (Guaraníes  Ochocientos Millones)


Prueba el siguiente código y me comentas:

Sub PonerNegritas()
'Por Dante Amor
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim c As Range, rng As Range, celda As Range
  Dim arr As Variant
  Dim dato As String
  Dim lr As Long, j As Long, ini As Long, n As Long
  '
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  '
  'Copia la Hoja1 en la hoja Contrato para tener solamente valores
  Set sh1 = Sheets("Hoja1")
  On Error Resume Next
  Sheets("Contrato").Delete
  On Error GoTo 0
  sh1.Copy after:=Sheets(Sheets.Count)
  Set sh2 = ActiveSheet
  sh2.Name = "Contrato"
  '
  lr = sh2.Range("A" & Rows.Count).End(3).Row
  With sh2.Range("A1:J" & lr)
    .Value = .Value
  End With
  '
  'En la siguiente línea debes poner las celdas que quieres en negritas
  'Puedes poner celdas individuales o un rango:
  Set rng = sh2.Range("L2, L3, L9, L10, L13, L24:L29")
  '
  'Pone los textos en negritas
  For Each c In sh2.Range("A1:A" & lr)
    ini = 0
    n = 0
    If c.Value <> "" Then
      For Each celda In rng
        dato = celda.Value2
        For j = 1 To Len(c.Value)
          If Mid(c.Value, j, Len(dato)) = dato Then
            c.Characters(Start:=j, Length:=Len(dato)).Font.Bold = True
          End If
          If Mid(c.Value, j, 1) = "(" Then
            ini = j
            n = 1
          End If
          If n > 0 Then n = n + 1
          If Mid(c.Value, j, 1) = ")" And ini > 0 Then
            c.Characters(Start:=ini, Length:=n).Font.Bold = True
          End If
        Next
      Next
    End If
  Next
  '
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
End Sub

Bien recibido Dante, ¿por si acaso tendrías el archivo para mirar? ¿O debo agregar una hoja con el nombre "contrato"? esa parte me he perdido =(

Te envié el archivo.

No es necesario que tú crees la hoja "contrato", la macro la crea en automático.

Para aclarar:

Tú debes seguir trabajando en la Hoja1, después de ejecutar la macro, el resultado estará en la hoja "Contrato".

Si el texto ya existe en la columna L, no tienes que replicarlo más abajo, solamente agrega la celda a la línea de la macro, ejemplo:

Si quieres incluir el número de resolución, simplemente agrega L18 a la línea:

Set rng = sh2.Range("L2, L3, L9, L10, L13, L16, L18, L19, L21, L22, L24:L29")

Respuesta
2

Lo que necesitas sí se puede hacer pero no creo que una función personal (UDF) sea la solución porque requiere que en otra celda escribas:

= Función(el rango a buscar, cada uno de los textos) ... y de última tendrás 1 o más funciones.

Primero aclarame cómo tendrás los textos en Excel : si todo en una sola celda combinada, si en varias celdas por párrafos, en fin, todo lo que puedas comentar será de ayuda.

Y se me ocurre que en alguna columna tengas los párrafos a marcar. Como en este ejemplo:

La macro recorre las filas en B mirando el texto que se encuentra en H para marcarlo.

Si te parece que puedes enviarme un modelo del documento (no pongas datos reales), mis correos los encontrarás en sitio que dejo al pie (toma el de gmail)

Sdos.

Elsa

http://aplicaexcel.com/contactos

Buen día Elsa, te paso una captura del archivo en word, el mismo prepare en excel pero no pude lograr pasarlo a negrita, =(.. por si te sirva

Si, acabo de recibir tu archivo. Ya en un momento lo miraré y te enviaré respuesta.

Sdos!

Dejo mi propuesta sin temo de que sea tildada de 'acoso'... sino todo lo contrario... ya que fui la primera en atender esta consulta ;)

Mi propuesta es que tengas en una sola columna todos los items que luego serán incluídos, mediante fórmulas, en el documento. En este caso es col K y los datos se encuentran en col L. Por eso intercalé los campos que tenías a tu derecha dentro de la col L.

Ya debieras tener una hoja vacía, considerando que siempre la necesitarás para cualquier documento. En mi ejemplo se llama Hoja2. La macro copia solo las col del contrato, o sea A:J, como valores. Y luego recorre esa col L marcando en la hoja auxiliar en negrita los textos o valores.

Sub enNegrita()
'x Elsamatilde
'ultimas filas con datos de la hoja principal, hoja activa
x = Range("L" & Rows.Count).End(xlUp).Row
f = Range("A" & Rows.Count).End(xlUp).Row
'se copia el rango del documento en otra hoja auxiliar, como 'solo valores'
'quitando previamente col utilizadas con anterioridad
Set hox = Sheets("Hoja2")     'ajustar el nombre de la hoja auxiliar
hox.Columns("A:J").Delete
Columns("A:J").Copy
    hox.Range("A1").PasteSpecial Paste:=xlValues, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    hox.Range("A1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
'recorre la col de textos a formatear, buscandolos en hoja auxiliar
For i = 2 To x
    If Range("L" & i) <> "" Then
        If Range("L" & i).Interior.ColorIndex < 0 Then
            For y = 2 To f
                dato = Trim(Range("L" & i).Text) 'para mantener los formatos de importes y fechas
                ubica = InStr(1, hox.Range("A" & y), dato, 0)
                If ubica > 0 Then
                    hox.Range("A" & y).Characters(ubica, Len(dato)).Font.FontStyle = "Negrita"
                End If
            Next y
        End If
    End If
Next i
MsgBox "Fin del proceso."
End Sub

Como se puede observar en la imagen, los valores y fechas se vuelcan con el formato correcto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas