Posición de celdas con un texto
Tenía esta macro desarrollada para que me informe la posición de las celdas en las que contiene un texto buscado:
Sub buscar_cosas()
On Error Resume Next
Application.ScreenUpdating = False
Range("J:K").Clear 'Esto debería ser variable... (sólo sirve para limpiar anteriores búsquedas)
donde_estamos = ActiveCell.Address
'--------------------------------------
'Datos esenciales:
celda_inicial = "A1"
celda_final = "J100"
valor_buscado = InputBox("Introduce el valor, dato, o texto que deseas buscar:", "Dato a buscar")
mostrar_datos = "K1"
If Trim(valor_buscado) = "" Then Exit Sub
'--------------------------------------
'pasamos los datos a variables
min_fila = Range(celda_inicial).Row
max_fila = Range(celda_final).Row
min_columna = Range(celda_inicial).Column
max_columna = Range(celda_final).Column
'nos situamos en la primera celda
Range(celda_inicial).Select
'comenzamos a buscar el dato
For i = min_fila To max_fila
For j = min_columna To max_columna
If InStr(ActiveCell.Value, valor_buscado) > 0 Then
'ponemos el dato en color rojo
'Selection.Font.ColorIndex = 3
'guardamos la referencia donde se encuentra el dato
celdas_datos = celdas_datos & "," & ActiveCell.Address
End If
ActiveCell.Offset(0, 1).Select
Next
ActiveCell.Offset(1, -max_columna).Select
Next
'AHORA MOSTRAREMOS LO ENCONTRADO:
'--------------------------------------------------------------------------------
'quitamos la coma inicial del array de referencias
celdas_datos = Mid(celdas_datos, 2, Len(celdas_datos))
'ahora reemplazamos la referencia absoluta
celdas_datos = Replace(celdas_datos, "$", "")
'mostramos las referencias de las celdas
Range(mostrar_datos) = "Los datos encontrados están en: " & celdas_datos & ", es decir, aquí:"
'bajamos una fila
nuevos_datos = Range(mostrar_datos).Offset(1, 0).Address
Range(nuevos_datos).Select
'descomponemos el array
celdas = Split(celdas_datos, ",")
For i = 0 To UBound(celdas)
'ponemos la celda en cuestión
ActiveCell = celdas(i)
ActiveCell.Offset(1, 0).Select
Next
'--------------------------------------------------------------------------------
'Ordenamos el rango de datos con las referencias
Range(nuevos_datos).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range(nuevos_datos), Order1:=xlAscending
'nos situamos en la celda donde estábamos
Range(mostrar_datos).Offset(0, -1).FormulaR1C1 = valor_buscado
Range(mostrar_datos).Offset(1, -1).FormulaR1C1 = "=COUNTBLANK(R[-1]C[1]:R[48]C[1])"
If Range(mostrar_datos).Offset(1, -1).Value = 49 Then
MsgBox "No hay resultados en su búsqueda"
Range(mostrar_datos).FormulaR1C1 = "No se encontró nada"
End If
'Seleccionar donde estábamos inicialmente
Range(mostrar_datos).Offset(1, -1).ClearContents
Range(donde_estamos).Select
Application.ScreenUpdating = True
End Sub
Prácticamente está copiada de una página web. El error que he encontrado aquí es que no me busca bien en el rango especificado (por ejemplo en b20) y no entiendo por qué. Lo bueno de esta macro es que me dice todas aquellas celdas donde contiene ese texto buscado, y no sólo la primera que analice.
Sub buscar_cosas()
On Error Resume Next
Application.ScreenUpdating = False
Range("J:K").Clear 'Esto debería ser variable... (sólo sirve para limpiar anteriores búsquedas)
donde_estamos = ActiveCell.Address
'--------------------------------------
'Datos esenciales:
celda_inicial = "A1"
celda_final = "J100"
valor_buscado = InputBox("Introduce el valor, dato, o texto que deseas buscar:", "Dato a buscar")
mostrar_datos = "K1"
If Trim(valor_buscado) = "" Then Exit Sub
'--------------------------------------
'pasamos los datos a variables
min_fila = Range(celda_inicial).Row
max_fila = Range(celda_final).Row
min_columna = Range(celda_inicial).Column
max_columna = Range(celda_final).Column
'nos situamos en la primera celda
Range(celda_inicial).Select
'comenzamos a buscar el dato
For i = min_fila To max_fila
For j = min_columna To max_columna
If InStr(ActiveCell.Value, valor_buscado) > 0 Then
'ponemos el dato en color rojo
'Selection.Font.ColorIndex = 3
'guardamos la referencia donde se encuentra el dato
celdas_datos = celdas_datos & "," & ActiveCell.Address
End If
ActiveCell.Offset(0, 1).Select
Next
ActiveCell.Offset(1, -max_columna).Select
Next
'AHORA MOSTRAREMOS LO ENCONTRADO:
'--------------------------------------------------------------------------------
'quitamos la coma inicial del array de referencias
celdas_datos = Mid(celdas_datos, 2, Len(celdas_datos))
'ahora reemplazamos la referencia absoluta
celdas_datos = Replace(celdas_datos, "$", "")
'mostramos las referencias de las celdas
Range(mostrar_datos) = "Los datos encontrados están en: " & celdas_datos & ", es decir, aquí:"
'bajamos una fila
nuevos_datos = Range(mostrar_datos).Offset(1, 0).Address
Range(nuevos_datos).Select
'descomponemos el array
celdas = Split(celdas_datos, ",")
For i = 0 To UBound(celdas)
'ponemos la celda en cuestión
ActiveCell = celdas(i)
ActiveCell.Offset(1, 0).Select
Next
'--------------------------------------------------------------------------------
'Ordenamos el rango de datos con las referencias
Range(nuevos_datos).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range(nuevos_datos), Order1:=xlAscending
'nos situamos en la celda donde estábamos
Range(mostrar_datos).Offset(0, -1).FormulaR1C1 = valor_buscado
Range(mostrar_datos).Offset(1, -1).FormulaR1C1 = "=COUNTBLANK(R[-1]C[1]:R[48]C[1])"
If Range(mostrar_datos).Offset(1, -1).Value = 49 Then
MsgBox "No hay resultados en su búsqueda"
Range(mostrar_datos).FormulaR1C1 = "No se encontró nada"
End If
'Seleccionar donde estábamos inicialmente
Range(mostrar_datos).Offset(1, -1).ClearContents
Range(donde_estamos).Select
Application.ScreenUpdating = True
End Sub
Prácticamente está copiada de una página web. El error que he encontrado aquí es que no me busca bien en el rango especificado (por ejemplo en b20) y no entiendo por qué. Lo bueno de esta macro es que me dice todas aquellas celdas donde contiene ese texto buscado, y no sólo la primera que analice.
1 Respuesta
Respuesta de silvianu
1