Excel: liste områder målrettet av INDIREKTE formler

stemmer
5

Vi har noen veldig store Excel-arbeidsbøker (dusinvis av faner, over en MB hver, svært komplekse beregninger) med mange titalls, kanskje hundrevis av formler som bruker den fryktede INDIREKTE-funksjonen. Disse formlene er spredt ut over hele arbeidsboken, og målrette flere tabeller av data for å slå opp for verdier.

Nå trenger jeg å flytte områder av data som er rettet av disse formlene til et annet sted i samme arbeidsbok.

(Årsaken er ikke spesielt relevant, men interessant i seg selv. Vi må kjøre disse tingene i Excel Beregnings Services og ventetid rammet av lasting hver av de heller store bord, ett om gangen viste seg å være uakseptabelt høy. Vi flytter tabeller i et sammenhengende område, slik at vi kan legge dem alle i ett skudd.)

Er det noen måte å finne alle de indirekte formler som i dag refererer til tabellene vi ønsker å flytte?

Jeg trenger ikke å gjøre dette på nett. Jeg vil gjerne ta noe som tar 4 timer å kjøre så lenge det er pålitelig.

Vær oppmerksom på at .Precedent, .Dependent, etc metoder bare spore direkte formler.

(Også, skrive regneark i alt er ikke et alternativ for oss).

Takk!

Publisert på 29/08/2008 klokken 13:49
kilden bruker
På andre språk...                            


5 svar

stemmer
5

Du kan iterere over hele arbeidsbok ved hjelp av VBA (jeg har tatt inn koden fra @PabloG og @ 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

Dette eksempel substitues hver forekomst av "indirekte (D4)" med "indirekte (C4)". Du kan enkelt bytte skift-funksjon med noe mer sofistikert, hvis du har mer kompliserte indirekte-funksjoner. Ytelsen er ikke så ille, selv for større arbeidsbøker.

Svarte 29/08/2008 kl. 14:53
kilden bruker

stemmer
0

Du kan bruke noe som dette i 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

I stedet for Debug.Print kan du legge til kode som passer din smak

Svarte 29/08/2008 kl. 15:03
kilden bruker

stemmer
0

Dessverre, argumenter INDIREKTE er vanligvis mer komplisert enn som så. Her er en faktisk formel fra en av arkene, ikke den mest komplekse formelen vi har:

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

hm, kan du skrive en enkel parser ved å ignorere de fleste av karakterene og bare leter etter de relevante delene (i dette eksempelet: "A-Å", "0..9" og ":" etc.), men du vil kjører inn i problemer hvis argumentene i "indirekte" er funksjoner.

kanskje tryggere tilnærming ville være å skrive ut hver forekomst av "indirekte" i en tredje arket. Deretter kan du legge den ønskede effekt, og skrive en liten søk og erstatt program for å skrive endringene tilbake.

Hvis du "får" hver celle i et stort regneark du kan ende opp som trenger uhyrlige mengder minne. Jeg er fortsatt villig til å prøve og ta den risikoen.

PabloG metode for å velge brukt serien er veien å gå (lagt det inn i min opprinnelige koden). Hastigheten er ganske bra, spesielt hvis du sjekke om den aktuelle cellen inneholder en formel. Selvfølgelig, dette avhenger av størrelsen på arbeidsboken.

Svarte 29/08/2008 kl. 17:01
kilden bruker

stemmer
1

Spørsmål: "Er det noen måte å finne alle de indirekte formler som i dag refererer til tabellene vi ønsker å flytte?"

Da jeg leste det, vil du se inni argumentene til INDIREKTE for referanser til områder av interesse. OTTOMH Jeg vil skrive VBA å bruke et vanlig uttrykk parser, eller en enkel INSTR å finne INDIREKTE (les frem til matching), evaluere () strengen inni å konvertere den til den faktiske adressen, gjenta etter behov for flere INDIREKTE (...) samtaler og dumpe den formel og dens oversettelse til to kolonner i et ark.

Svarte 15/09/2008 kl. 19:39
kilden bruker

stemmer
0

Jeg er ikke sikker på hva etikette av SO er om omtale av produktene som forfatteren er tilkoblet, men EIK, den Operis Analysis Kit, et Excel-tillegg, kan erstatte den indirekte funksjoner ved cellereferanser de løse til. Du kan deretter bruke Excel revisjon verktøy for å finne ut hva som forsørges hvert område har.

Du ville selvsagt gjøre dette til en midlertidig kopi av arbeidsboken.

mer på

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

Gitt en alder av dette spørsmålet kan du godt ha funnet en alternativ løsning eller midlertidig løsning.

Svarte 15/09/2009 kl. 17:34
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more