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
'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
'se guarda la marca sin posibles espacios
For y = 10
To 13
'se la busca en la celda de la factura, a partir de la posición 1
'si la función InStr devuelve un valor se toma la cadena a partir de esa ubicación
If ubica > 0 Then
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
'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
No hay comentarios.:
Publicar un comentario