varios valores valor saber rango otro otra numero hacer esta entre devolver dentro como coincidencias celda buscar excel excel-vba

valores - Excel: rangos de listas dirigidos por fórmulas INDIRECTAS



saber si un numero esta dentro de un rango excel (5)

Desafortunadamente, los argumentos de INDIRECT suelen ser más complejos que eso. Aquí hay una fórmula real de una de las hojas, no la fórmula más compleja que tenemos:

=IF(INDIRECT("''"&$B$5&"''!"&$O5&"1")="","",INDIRECT("''"&$B$5&"''!"&$O5&"1"))

hm, podrías escribir un analizador simple ignorando la mayoría de los personajes y simplemente buscando las partes relevantes (en este ejemplo: "A..Z", "0..9" y "!:" etc.) pero lo harás se encuentra con problemas si los argumentos en "indirecto" son funciones.

tal vez el enfoque más seguro sería imprimir cada ocurrencia de "indirecta" en una tercera hoja. a continuación, puede agregar el resultado deseado y escribir un pequeño programa de búsqueda y reemplazo para volver a escribir los cambios.

Si "obtienes" cada celda en una hoja de cálculo enorme, es posible que termines necesitando monstruosas cantidades de memoria. Todavía estoy dispuesto a intentarlo y correr ese riesgo.

El método de PabloG de seleccionar el rango utilizado es el camino a seguir (lo agregó a mi código original). La velocidad es bastante buena, especialmente si comprueba si la celda actual contiene una fórmula. Obviamente, todo esto depende del tamaño de su libro de trabajo.

Tenemos algunos libros de trabajo de Excel muy grandes (docenas de pestañas, más de un MB cada uno, cálculos muy complejos) con muchas docenas, quizás cientos de fórmulas que usan la temida función INDIRECTO. Estas fórmulas se distribuyen en todo el libro de trabajo y se dirigen a varias tablas de datos para buscar valores.

Ahora necesito mover los rangos de datos que están dirigidos por estas fórmulas a una ubicación diferente en el mismo libro de trabajo.

(La razón no es particularmente relevante, pero es interesante por sí misma. Necesitamos ejecutar estas cosas en Excel Calculation Services y el éxito de la latencia de cargar cada una de las tablas más bien grandes de una en una demostró ser inaceptablemente alto. tablas en un rango contiguo para que podamos cargarlas todas de una vez).

¿Hay alguna manera de localizar todas las fórmulas INDIRECTAS que actualmente se refieren a las tablas que queremos mover?

No necesito hacer esto en línea. Con gusto tomaré algo que demore 4 horas en funcionar, siempre que sea confiable.

Tenga en cuenta que los métodos .Precedent, .Dependent, etc. solo rastrean fórmulas directas.

(Además, volver a escribir las hojas de cálculo en lo que no sea una opción para nosotros).

¡Gracias!


Podrías iterar sobre todo el libro utilizando vba (he incluido el código de @PabloG y @ euro-micelli):

Sub iterateOverWorkbook() For Each i In ThisWorkbook.Worksheets Set rRng = i.UsedRange For Each j In rRng If (Not IsEmpty(j)) Then If (j.HasFormula) Then If InStr(oCell.Formula, "INDIRECT") Then j.Value = Replace(j.Formula, "INDIRECT(D4)", "INDIRECT(C4)") End If End If End If Next j Next i End Sub

Este ejemplo sustituye cada aparición de "indirecta (D4)" por "indirecta (C4)". Puede cambiar fácilmente la función de reemplazo por algo más sofisticado, si tiene funciones indirectas más complicadas. El rendimiento no es tan malo, incluso para libros de trabajo más grandes.


Puede usar algo como esto en VBA:

Sub ListIndirectRef() Dim rRng As Range Dim oSh As Worksheet Dim oCell As Range For Each oSh In ThisWorkbook.Worksheets Set rRng = oSh.UsedRange For Each oCell In rRng If InStr(oCell.Formula, "INDIRECT") Then Debug.Print oCell.Address, oCell.Formula End If Next Next End Sub

En lugar de Debug.Print puede agregar el código que se ajuste a su gusto


P: "¿Hay alguna manera de localizar todas las fórmulas INDIRECTAS que actualmente se refieren a las tablas que queremos mover?"

A medida que lo leo, quiere mirar dentro de los argumentos de INDIRECT para referencias a áreas de interés. OTTOMH Escribiría VBA para usar un analizador de expresiones regulares, o incluso un INSTR simple para encontrar INDIRECTO (leer hacia adelante a la correspondencia), luego EVALUAR () la cadena dentro para convertirla a la dirección real, repetir como se requiera para INDIRECTO múltiple (...) llama y volca la fórmula y su traducción a dos columnas en una hoja.


No estoy seguro de cuál es la etiqueta de SO con respecto a la mención de productos con los que está conectado el escritor, pero OAK, el Operis Analysis Kit, un complemento de Excel, puede reemplazar las funciones INDIRECTAS por las referencias de celda que resuelven. Luego puede usar las herramientas de auditoría de Excel para determinar qué dependientes tiene cada rango.

Por supuesto, haría esto en una copia temporal del libro de trabajo.

Mas en

  • http://www.operisanalysiskit.com/oakpruning.htm
  • http://www.operisanalysiskit.com/help/2007/index.html?oakconceptpruning.htm

Dada la edad de esta pregunta, es muy posible que haya encontrado una solución alternativa o alternativa.