Pregunta

Tenemos unas muy grandes libros de Excel (decenas de pestañas, más de un MB cada uno, cálculos muy complejos) con muchas docenas, tal vez cientos de fórmulas que utilizan el temido función INDIRECTO.Estas fórmulas se reparten durante todo el libro, y varias tablas de datos para búsqueda de valores.

Ahora tengo que mover los rangos de datos que son el objetivo de estas fórmulas a una ubicación diferente en el mismo libro.

(La razón es que no son especialmente relevantes, pero interesante por su propia cuenta.Debemos ejecutar estas cosas en Excel Calculation Services y la latencia de golpe de la carga de cada uno de los más grandes tablas de una en un tiempo, demostró ser inaceptablemente alta.Nos estamos moviendo las tablas en un intervalo contiguo de modo que podemos meterlos a todos en una sola toma.)

Hay alguna forma de localizar todas las fórmulas INDIRECTAS de que en la actualidad se refieren a las tablas que queremos mover?

No necesito hacer esto en línea.Me voy feliz de tomar algo que tarda 4 horas para que se ejecute siempre como confiable.

Ser conscientes de que el .Precedente .Dependientes, etc métodos sólo el seguimiento directo de las fórmulas.

(También, la reescritura de las hojas de cálculo en lo no es una opción para nosotros).

Gracias!

¿Fue útil?

Solución

Usted podría iterar a través de todo el Libro, el uso de 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

En este ejemplo se expande a cada aparición de "indirecto(D4)" con "indirecta(C4)".Usted puede cambiar fácilmente al sustituir la función con algo más sofisticado, si usted tiene más complicado indirecta-funciones.El rendimiento no es tan malo, incluso para los más grandes Libros.

Otros consejos

Q:"Hay alguna manera de localizar todas las fórmulas INDIRECTAS de que en la actualidad se refieren a las tablas que queremos mover?"

Como he leído, que desea buscar dentro de los argumentos de INDIRECTOS para las referencias a las áreas de interés.OTTOMH me gustaría escribir VBA para utilizar una expresión regular analizador, o incluso un simple INSTR encontrar INDIRECTOS( leer hacia adelante a la concordancia ), luego de EVALUAR() la cadena dentro de convertir a la dirección real, repita según sea necesario para múltiples INDIRECTA(...) las llamadas y volcado de la fórmula y su traducción a dos columnas en una hoja.

Puedes 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 Depurar.La impresión puede agregar código a tu gusto

Por desgracia, los argumentos de INDIRECTOS son generalmente más complejas que que.He aquí una fórmula real de una de las hojas, y no el más el complejo de fórmula tenemos:

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

hm, podría escribir un simple analizador haciendo caso omiso de la mayoría de los personajes y buscando las partes pertinentes (en este ejemplo:"A..Z", "0..9" y "!:" etc.) pero se corre en problemas si los argumentos en "indirectos" son funciones.

tal vez el procedimiento más seguro sería imprimir todas las ocurrencias de "indirecta" en una tercera hoja.luego, puede agregar la salida deseada y escribir una pequeña búsqueda y reemplazar el programa para escribir de nuevo los cambios.

Si "get" cada célula en un enorme hoja de cálculo usted puede terminar necesitando monstruosas cantidades de memoria.Estoy todavía dispuesta a tratar de tomar que riesgo.

PabloG del método de selección del rango utilizado es el camino a seguir (añadido en mi código original).La velocidad es bastante buena, especialmente si usted comprueba si la celda contiene una fórmula.Obviamente, todo esto depende del tamaño de tu libro.

No estoy seguro de lo que la etiqueta de ASÍ es la relativa a la mención de productos con los que el escritor está conectado, pero el ROBLE, el Operis Análisis de Kit, un complemento de Excel, puede sustituir a la INDIRECTA de las funciones de las referencias de celda que resolver.Usted puede entonces utilizar Excel herramientas de auditoría para determinar lo que los dependientes de cada rango tiene.

Usted podría, por supuesto, hacer esto a una copia temporal del libro.

Más en

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

Dada la edad de esta pregunta que bien podrían haber encontrado una solución alternativa o solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top