Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Formel per VBA dynamisch anpassen
#1
Hallo zusammen,

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:

Code:
=WENN(ZÄHLENWENN(I$2:I2;I2)>1;"doppelt";"")

... aber ich brauche das als VBA-Routine.

Danke schon mal im Voraus.


Angehängte Dateien
.xlsm   Formel per VBA dynamisch anpassen.xlsm (Größe: 18,18 KB / Downloads: 2)
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top
#2
Hallo,

du könntest die Spalten als Parameter übergeben, anstatt sie im Code fest zu schreiben.

Oder du suchst nach einer Überschrift, der betreffenden Spalte.

Ohne deine Datei angeschaut zu haben.
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Antworten Top
#3
Hallöchen,

ich hab auch nicht in die Datei geschaut Sad Hier mal eine Range-Angabe, die sich aus Zellen zusammensetzt.

Range(Cells(a,b),Cells(e,f))


Alternativ könntest Du auch eine Cells Angabe nehmen und die Resizen

Cells(a,b).Resize(e,f)

wobei hier e und f keine Zeilennummer bzw. Spaltennummer ist wie im ersten Beispiel sondern die Anzahl Zeilen und Spalten.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Hallo,

@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
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • LuckyJoe
Antworten Top
#5
Hi Sabina,

Zitat:völlig sinnlos, was du das schreibst ...

seh ich nicht so, sonst hätte ich es nicht geschrieben. Lies einfach nochmal die Aufgabenstellung und lass sie etwas einwirken :16:

Im Code steht

Zitat:EMail_Spalte = 8

Wenn nun aus der 8 eine 9 gemacht wird - auch das ist eine "Verschiebung", dann klappt das mit Range("I... nicht mehr. Siehe die Frage

Zitat:ich möchte die "festen" Bezeichner wie z.B. 'Range("I2:I"...' durch Zellbezüge in Form von "Cells(Row, Column)" ersetzen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • LuckyJoe
Antworten Top
#6
Hallo Sabina, hallo André,

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.

Danke nochmals für euer Mitdenken.


Angehängte Dateien
.xlsx   Formel per VBA dynamisch anpassen.xlsx (Größe: 12,33 KB / Downloads: 1)
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top
#7
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:

Range(Cells(2, EMail_Spalte), Cells(Zelle.Row, EMail_Spalte))
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • LuckyJoe
Antworten Top
#8
... 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 Smile
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste