ich stehe schon wieder auf dem Schlauch: ich suche eine Möglichkeit, in VBA eine Formel "dynamisch" anzupassen; soll heißen: ich möchte die "festen" Bezeichner wie z.B. 'Range("I2:I"...' durch Zellbezüge in Form von "Cells(Row, Column)" ersetzen. Wie muss ich das umformen, so dass ich im Folgenden die Routine auch verwenden kann, wenn sich z.B. die E-Mail-Spalte ändert?
Code:
Sub SucheDoppelte()
Dim Zelle As Range Dim EMail_Spalte As Integer Dim Doppelte_Spalte As Integer
EMail_Spalte = 8 Doppelte_Spalte = 10
For Each Zelle In Range("TNDaten").Columns(EMail_Spalte).Cells ' nur die folgende Zeile soll statt "I" "dynamisch" werden: If Application.CountIf(Range("I2:I" & Zelle.Row), Cells(Zelle.Row, 9)) > 1 Then Cells(Zelle.Row, Doppelte_Spalte) = "doppelt" End If Next
End Sub
Ich weiß, dass ich das Ganze per Formel direkt in den Zellen erledigen kann:
@André völlig sinnlos, was du das schreibst ... wenn sich seine Spalten verschieben sollten, dann weiß er eben genau diese Zellenzuordnung nicht.
@LuckyJoe Habe mal in meinem Archiv gewühlt ... suchen der richtigen Überschrift könnte so aussehen ...
Code:
Public Function ColumnFromHeader(ByVal strSearch As String) As Integer Dim rngFound As Range
Set rngFound = Rows(1).Find(What:=strSearch, LookIn:=xlValues, LookAt:=xlWhole) If Not rngFound Is Nothing Then ColumnFromHeader = rngFound.Column Else ColumnFromHeader = 0 End If End Function
Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag 28 • LuckyJoe
zunächst einmal vielen Dank, dass ihr euch mit dem Problem beschäftigt habt. Eine Frage außerhalb des Themas: "Datei nicht angeschaut" ... weil es eine .xlsm ist? Ist das hier wegen der Makros nicht gewünscht? Wie kann ich das alternativ machen? Nur mit .xlsx-Dateien arbeiten und den Code dann hier im Text?
@Sabina: Danke für die Formel mit der Spaltenüberschrift, aber die hatte ich bereits - auch in meinem Beispiel, wo ich sie aber rausgenommen habe, um nicht unnötig Lesestoff zu produzieren.
Zum Thema: Grundsätzlich ist mir das Konstrukt mit "Cells(Zeile, Spalte)" bekannt, es geht mir um diese eine Zeile:
Code:
If Application.CountIf(Range("I2:I" & Zelle.Row), Cells(Zelle.Row, 9)) > 1 Then
Wie bekomme ich die damit hin?
Ich habe diese Routine im Herber-Forum gefunden und fand sie wegen der Kürze so charmant. Sonst müsste ich per VBA halt eine Routine schreiben, die mir in einer nicht sortierten Spalte doppelte Einträge markiert.
18.04.2019, 20:18 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2019, 20:31 von schauan.)
Hallöchen,
wenn ich denke, dass ich mit der Problembeschreibung zurecht komme, schaue ich nicht in eine Beispieldatei. Ich stehe nun mal auf ordentliche Beschreibungen und mit Tabellenausschnitten aufgehübschte Beiträge. Man muss, wenn man die Diskussionen verfolgt oder auch auf der Suche ist, nicht laufend Dateien runterladen, um zu schauen, was da eigentlich abgeht. Wenn da ein Thread nicht viel mehr Text enthält als "Problembeschreibung siehe Datei" und dann eine Datei x mal hin und her geht ist das auch nicht prickelnd.
Komplexere Problemstellungen gehen dagegen oftmals nicht ohne Beispiel.
Wenn ich mal eine Datei runterlade, dann mache ich sie meistens auch gleich direkt auf und speichere sie nicht ab. Irgendwann hat man so viel Müll auf der Platte und sieht nicht mehr durch, was eigentlich wichtig ist. Als Fragesteller geht es ja immer mal um eine einzelne Datei oder zwei oder .., aber als vielbeschäftigter Antworter können es hunderte, wenn nicht tausende werden, wenn man nicht aufpasst.
Ich finde, die werden viel zu häufig strapaziert. Ein Forum ist ja nun auch kein Up- und Downloadportal. Zuweilen hat man dann auch noch Dateien, die nicht unbedingt mehr Informationsgehalt haben als die schon magere Problembeschreibung im Thread … Zuweilen bekommt man vielleicht noch eine Beispieldatei wo es um eine einzelne Formel geht - mal überspitzt in B1 muss =A1 rein … Na ja, und ein bisschen kann der Fragesteller ja auch mitarbeiten, und sei es nur, um einen Code zu kopieren und an der passenden Stelle einzufügen. Eines unserer Ziele ist ja die Hilfe zur Selbsthilfe und da ist das sicher nicht zu viel verlangt. Wegen dem Hilfeanspruch kommt von mir auch häufig eine allgemeinere Antwort und man liest bei mir oft "im Prinzip" oder "ein Ansatz" … Ich verfolge damit auch ein bisschen das Ziel, dass eine allgemeinere Antwort, die eventuell noch die eine oder andere Erläuterung enthält, vielleicht anderen Suchenden eher hilft und den Fragesteller zum Mitdenken veranlasst als einfach nur immer fertige Lösungen hin und her zu schicken.
Aber da haben die Antworter auch unterschiedliche Ansichten dazu.
Nun zu Deiner fachlichen Frage, ich hatte das Prinzip ja schon beschrieben:
... jau, bin gerade von meinem Schlauch runtergeklettert und wollte mein Ergebnis hier mitteilen, da hast du es schon (quasi noch einmal) veröffentlicht. Danke! Ich hatte nicht gewusst, dass man ein "Range von:bis" auch so mit den "Cells" hinbekommt ... umso schöner