Die MS Excel-Formel funktioniert, außer wenn ich iferror () hinzufüge. Dann wird ein Laufzeitfehler 1004 erzeugt

546
Steve G.

Ich habe eine Formel in einer Zelle:

=IF(INDEX(insurance_column_date,LOOKUP(2,1/(insurance_column_to=B59),ROW(insurance_column_to))-4)>0,INDEX(insurance_column_date,LOOKUP(2,1/(insurance_column_to=B59),ROW(insurance_column_to))-4),"No data") 

Und das funktioniert in den meisten Fällen einwandfrei, aber wenn es keinen Suchwert findet, gibt es einen Fehler durch Division durch 0 1/(insurance_column_to=B59). In diesem Fall erhalte ich # N / A. Meinetwegen. Also füge ich der Zelle die iferror-Funktion hinzu:

=IFERROR(IF(INDEX(insurance_column_date,LOOKUP(2,1/(insurance_column_to=B59),ROW(insurance_column_to))-4)>0,INDEX(insurance_column_date,LOOKUP(2,1/(insurance_column_to=B59),ROW(insurance_column_to))-4),"No data"),"No data") 

Und alles ist perfekt. Ich bekomme "Keine Daten" in den entsprechenden Zellen.

Wenn ich jedoch ein (völlig unzusammenhängendes) Makro ausführen soll, das bestimmte Zeilen ausblenden soll, erhalte ich jetzt einen Laufzeitfehler 1004: "Anwendungsdefinierter oder objektdefinierter Fehler", wenn er diese Zeile erreicht: pWorksheetName = ActiveWorkbook.Names(pCounter).RefersToRange.Parent.Name

Selbst wenn ich die Formel auf ihre Nicht-iferror () -Syntax zurückschalte, tritt der Laufzeitfehler immer noch auf. Ich habe einige Ursachen gelesen, die dazu führen könnten, dass die Formel eine Zeichenfolge mit mehr als 911 Zeichen (in diesem Fall nicht möglich) oder zu viele Legendeneinträge enthält (weiß nicht, was diese sind). Ich habe das Makro auf zwei separaten Computern ausgeführt und die gleichen Ergebnisse erhalten.

Weiß jemand, was die Ursache ist oder wie man es beheben kann?

0
Versuchen Sie `IF (ISERROR (1 / (Versicherungsspalte_zu = B59)," Keine Daten ", IF (INDEX (Versicherungsspaltendatum, LOOKUP (2,1 / (Versicherungsspalte_zu = B59), ROW (Versicherungsspalte_zu)) - 4)> 0, INDEX ( insurance_column_date, LOOKUP (2,1 / (insurance_column_to = B59), ROW (insurance_column_to)) - 4), "Keine Daten")) ` thilina R vor 7 Jahren 0
Sieht so aus, als hätten Sie vergessen, die Halterung für die Funktion `IFERROR () 'zu schließen. Fügen Sie am Ende ein weiteres `)` hinzu. Behebt das das? Ƭᴇcʜιᴇ007 vor 7 Jahren 0
Danke Leute. Ich habe die Zeile = IF (ISERROR (1 / (insurance_column_to = B59)), "Keine Daten", IF (INDEX (insurance_column_date, LOOKUP (2,1 / (insurance_c‌ olumn_to = B59), ROW (in? Surance_column_to)) eingegeben. -‌`4`)> 0, INDEX (versicherung _column_date, LOOKUP (‌ 2,1 / (versicherung_colum‌n_to = B59), ROW (insura‌nce_column_to)) - 4), "data keine Daten") und bekam die Meldung "Die eingegebene Formel enthält einen Fehler." Aber ich kann sie nicht erkennen. Excel hebt die 4 hervor, die ich oben in Code Markup hervorgehoben habe, nicht jedoch das Minuszeichen (es scheint mit INDEX (Array, **) zu korrespondieren. row_num **, [column_num]). Steve G. vor 7 Jahren 0
Ein kurzer Blick wirft diese Frage auf: Fragen Sie 1 / TRUE oder 1 / FALSE oder 1 / Nummer oder 1/0? Eins geteilt durch Null ist Fehler: 1 / (insurance_column_to = B59); insurance_column = B59 führt zu wahr oder falsch ejbytes vor 7 Jahren 0
= insurance_column_to = B59 gibt mir #WERT !. Hrm. insurance_column_to ist ein Zellbereich (es ist eine Spalte von Zellen auf der Registerkarte "Versicherung" mit der Überschrift "An", wie in der Institution, für die wir die Versicherungsgebühren zahlen). Könnte das das Problem sein? Ich hatte den Eindruck, die LOOKUP-Funktion könnte einen Zellbereich überprüfen, aber ist dies so, dass = [spezieller Wert] = [spezifischer Wert] als Fehler aufgelöst wird, weshalb ich durcheinander komme? Die IF () - Formel, die ich in meinem ersten Beitrag angegeben habe, funktioniert einwandfrei, es sei denn, eine Zelle in insurance_column_to enthält den Wert in B59. In diesem Fall erhalte ich # N / A. Steve G. vor 7 Jahren 0
@SteveG. Ich habe Ihre Folgefrage nicht gesehen. Wenn Sie mich gefragt haben, beziehen Sie sich auf die Person mit @ und der Name der Person wird ausgefüllt. Auf diese Weise erhält die beabsichtigte Person die Nachricht. ejbytes vor 7 Jahren 0
@SteveG. Warum laden Sie nicht einen Screenshot hoch, damit Sie sehen können, womit Sie arbeiten. Sie verwenden Namen? Schreiben Sie explizit aus, insurance_column_to = This. Wenn Sie "someName = Etwas" verwenden, bitten Sie um Gleichheit, es ist wahr oder falsch. Darüber hinaus verwenden Sie auch ein "/", das eine Divisionsoperation ist. ejbytes vor 7 Jahren 0
@SteveG. Verwenden Sie bei so etwas Langem auch Tauch- und Eroberungstechniken. Beginnen Sie mit der ersten Frage und prüfen Sie die Integrität. Dann die Sekunde und überprüfen. Und so weiter. Halten Sie sie in verschiedenen Zellen getrennt. Dann montieren Sie im letzten Schritt und stellen Sie sicher, dass es noch funktioniert. ejbytes vor 7 Jahren 0
@ ejbytes und alle, ich habe es in Stücke aufgeteilt und bin mit der isnumber () - Funktion tatsächlich eine andere Route gegangen: `= IF (ISNUMBER (MATCH (B59, insurance_column_to)) = TRUE, INDEX (insurance_column_date, LOOKUP (2.1 / (insurance_column_to = B59), ROW (insurance_column_to)) - 4), "No data") `Anstatt die gesamte Funktion als Ganzes auszuwerten, habe ich bewertet, ob in der Versicherungsspalte eine Übereinstimmung vorhanden ist. Wenn nicht, Die Division durch Null würde sowieso niemals ausgewertet werden. Ich muss das noch mit der Funktion testen, die mir die 1004 gibt, aber es zeigt Versprechen! Steve G. vor 7 Jahren 0
Wenn sich B59 in insurance_column_to befindet, gibt MATCH () eine Position als Zahl zurück. Wenn nicht, wird # N / A zurückgegeben. Und IF () wertet aus, ob ISNUMBER (MATCH ()) TRUE zurückgibt (eine Zahl / relative Position hat) oder nicht. Wenn TRUE, gehe ich mit der Funktion INDEX () weiter (im if-true-Argument). Wenn nicht, füge ich im if-false-Argument meine Fehleraussage "Keine Daten" ein. Ich hoffe, das funktioniert mit dieser Runtime-Error-1004-Funktion, aber das ist auf einem anderen Computer (ich bin gerade nicht zu Hause und habe nur ein paar Testdaten zusammengeworfen). Wenn es nicht funktioniert, werde ich sicher sein, dass die vorgeschlagenen Screenshots @ejbytes veröffentlicht werden. Irgendwelche Kommentare? Steve G. vor 7 Jahren 0
Solange alle logischen Grundlagen abgedeckt sind, ist alles in Ordnung. Bewahren Sie Ihre Puzzleteile an einem sicheren Ort auf, um zu ihnen zurückzukehren. Nach der Montage einfach das Stück anbringen, iferror (mymontage, "") und fertig. ejbytes vor 7 Jahren 0

0 Antworten auf die Frage