Sabemos dar formato a celdas y rangos: negrita, colores, otra fuente, etc.
Pero ¿cómo podemos dar otro formato a solo parte del contenido parcial de una celda?
Utilizando la función INSTR([posición inicial], cadena donde buscar, cadena a buscar, [coincidencia])
Veamos 2 ejemplos:
Ejemplo 1: Tenemos una factura (nota de débito, albarán o presupuesto, etc). Y deseamos 'hacer notar' de alguna manera las marcas de los productos facturados.
Sub marcaNegrita()
'hoja Factura
'x Elsamatilde
'buscar fin de rango en la hoja de productos....
Ajustar al modelo
Set hox = Sheets("Productos")
x = hox.Range("C" & Rows.Count).End(xlUp).Row
'copiar col C a la col auxiliar E y quitar duplicados
... Ajustar al modelo
With hox
.Columns("C:C").Copy Destination:=.[E1]
.Range("$E$1:$E$" & x).RemoveDuplicates Columns:=1,
Header:=xlYes
'se guarda
el nuevo fin de rango para la col E
x =
.Range("E" & Rows.Count).End(xlUp).Row
End With
'recorre la col E buscando esos textos en la hoja
Factura, col B
'se sabe que la lista de productos facturados va de
10 a 13....Ajustar al modelo
For I = 2 To x
dato =
Trim(hox.Range("E" & I).Text) 'se guarda la marca sin posibles espacios
For y = 10
To 13
ubica =
InStr(1, Range("B" & y), dato, 0) 'se la busca en la celda de la factura, a partir de la posición 1
If
ubica > 0 Then 'si la función InStr devuelve un valor se toma la cadena a partir de esa ubicación
With Range("B" & y).Characters(ubica, Len(dato)).Font 'la función Len devuelve la longitud del dato
.FontStyle = "Negrita"
.ColorIndex = 3
End
With
End If
Next y
Next I
MsgBox "Fin del proceso."
End Sub
Sub enNegrita()
'hoja Contrato
'x Elsamatilde
'ultimas filas con datos de la hoja principal, hoja
activa
x = Range("K" &
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("Cto final") 'ajustar el nombre de la hoja auxiliar
hox.Columns("A:G").Delete
Columns("A:G").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("K" & I) <> "" Then
dato =
Trim(Range("K" & I).Text) 'para mantener los formatos de importes
y fechas
For y =
2 To f
ubica = InStr(1, hox.Range("A" & y), dato, 0)
If
ubica > 0 Then
With hox.Range("A" & y).Characters(ubica, Len(dato)).Font
.FontStyle = "Negrita"
'.ColorIndex = 5
End With
End
If
Next y
End If
Next I
'altos de fila
For I = 2 To f
alto =
Range("A" & I).RowHeight
hox.Range("A" & I).RowHeight = alto
Next I
hox.Select
[A1].Select
MsgBox "Fin del proceso."
End Sub