Namen in Excel anwenden ist fehlerhaft?
Ich sehe, dass Leute dieses Problem vor 10 Jahren hatten und es ist immer noch nicht behoben. Oder vielleicht weiß ich einfach nicht, wie ich diese Funktion verwenden soll.
In meinem Blatt habe ich diese benannten Bereiche:
A1 - "name1"
B1 - "name2"
C1 - "name3"
In einigen anderen 3 Zellen habe ich diese Formeln:
=A1
=A1+B1
=COUNT(A1:C1)
Nach dem Ausführen von Namen anwenden... Ich erwarte Folgendes:
=name1
=name1+name2
=COUNT(name1:name3)
Ich bekomme das nie, egal welche Optionen ich wähle. Außerdem, normalerweise werden meine Formeln völlig ruiniert...
=name1
=name1
=name1
Wie kann ich das gewünschte Ergebnis erhalten?
Ich kenne mich mit VBA aus, also habe ich versucht, eine Lösung für dieses Problem mit VBA zu entwerfen, aber der Code hat auch nicht funktioniert.
Ich verwende Excel 2013 (32 bit MS Office Professional Plus). OS - Windows 7 Enterprise, 64-bit.
3 answers
Ich kann dies nicht replizieren (mit meiner Excel-Version unter Windows 7) -
Wenn ich Ihre Namen definiere und dann Formeln erstelle
Dann Namen anwenden
Ich erhalte das gewünschte Ergebnis -
Wie definieren Sie die Namen? Ich wähle die Zelle aus, klicke dann links in der Formelleiste auf den Titel und tippe den Namen ein.
Mit Ihnen -
Namen anwenden -
Wie hier gezeigt
Keine Änderung ohne "Formeln anzeigen" -
Namen anwenden
Okay, hier gehen wir. Office 2013 windows 7 -
Namen anwenden
Sieht aus wie ein replizierter Fehler.
Okay, versuchen wir Excel 2016 auf OSX Yosemite
Definieren wir unsere Namen und Formeln -
Gut, gut, wenden wir unsere Namen an
Was? Warnung Formel ist zu lang
Nun wählte es meine count
und.. Was? Warnung Microsoft Excel kann keine Referenzen zum Ersetzen von
Und es ist ein.. teilweise scheitern?
Okay, dann machen wir das manuell -
Seltsam, es markiert nicht den Bereich, nur die beiden Zellen?
Aber es funktioniert?
Nur zum Vergleich hebt ein reguläres count
den Bereich hervor -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39
Sagen, wir beginnen mit:
Und wir haben bereits A2 und B2 Namen zugewiesen. In der Registerkarte Formeln, Pull-down:
Name definieren> Namen anwenden...
Stellen Sie sicher, dass wir beide Namen hi-light und berühren OK
Und wir bekommen:
Und so werden die Namen angewendet!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-05-25 22:25:25
Wie in code review darauf hingewiesen wurde, verursacht dies Probleme, wenn es beispielsweise nach "A1" sucht und "A10" usw. findet.
Okay, hier ist mein Versuch einer Problemumgehung. Damit müssen Ihre Formeln die ganze Zeit absolute Referenzen verwenden. Es funktioniert in benannten Bereichen, die größer als 1 Zelle sind.
Bitte beachten Sie, dass ich bin auf der Suche usedrange
- aber Sie können engen, wie Sie möchten, indem Sie srchRng
.
Option Explicit
Sub FixNames()
Dim ClctNames As Variant
Set ClctNames = ActiveWorkbook.Names
Dim rngName As String
Dim rngNameLoc As String
Dim strFrmla As String
Dim c As Range
Dim n As Integer
'Define as needed
Dim srchRng As Range
Set srchRng = ActiveSheet.UsedRange
'For each name (n) in the collection
For n = 1 To ClctNames.Count
'I'm storing the Named Range's name and address as strings to use below
rngName = ClctNames(n).Name
rngNameLoc = ClctNames(n).RefersToRange.Address
'--Should I break this out into a function? If so, at what point?
For Each c In srchRng
'We only want to test cells with formulas
If c.HasFormula = True Then
'We have to check if the cell contains the current named range's address
If InStr(1, c.Formula, rngNameLoc, vbTextCompare) <> 0 Then
'Since these are perfect matches, no need to look for length or location, just replace
strFrmla = Replace(c.Formula, rngNameLoc, rngName)
c.Formula = strFrmla
End If
End If
Next
Next
'No error handling should be needed
End Sub
Sie müssen absolute verwenden referenzen, weil, wenn ich den benannten Bereich RefersToRange.Address
ziehe, es a zurückgibt bereich objekt - kein Bereich, also setze ich ihn als String. Ich denke, Sie könnten eine Funktion schreiben, die die absoluten Referenzen $
entfernt, wenn Sie möchten.
das war ein Spaß
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-04-13 12:41:07