Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA und range(cells(x,x),cells(y,y))...

Forumthread: VBA und range(cells(x,x),cells(y,y))...

VBA und range(cells(x,x),cells(y,y))...
Bruno
Hi Excel-Spezialisten,
könnt ihr mir bitte sagen, was ich falsch mache?
In einem Arbeitsblatt habe ich beliebig viele Zeilen, in denen auch Telefonnummern enthalten sind, die auf die Spalten "N" (Landesvorwahl z.B. "+49"), "O" (Stadtvorwahl z.B. 711") und "P" (Rufnummer z.B. 1234567) verteilt sind.
Diese drei Spalten will ich in einer Spalte ("BA") zu einer vollständigen Telefonnummer zusammenziehen, und zwar jeden Zellenwert durch ein BLANK vom nächsten getrennt, also nach dem Motto:
=N2 & " " & O2 & " " & P2
Soweit so gut. Ich könnte diese Formel in eine Zelle schreiben und diese dann bis zur letzten Zeile propagieren...
Ich verwende den VBA-Konstruct:

Range(Cells(2, 53), Cells(LetzteZeile, 53)).FormulaR1C1 = "=RC[-39] &" & " " & "RC[-38] &" & " " & "RC[-37]"

erhalte aber das Ergebnis ohne Leerstellen, also z.B. +4928429449, brauche aber +49 2842 9449
Was mache ich falsch?
...bruno
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Makrorecorder....
22.03.2010 16:30:57
robert
hi,
zeichne doch diese formel mit dem recorder auf...
es liegt an den " "
siehe muster, auf deine bereiche anpassen !
gruß
robert
Range(Cells(2, 1), Cells(2, 1)).FormulaR1C1 = "=R[-2]C[3]&"" ""&R[-2]C[4]&"" ""&R[-2]C[5]"
End Sub
=N2 & " " & O2 & " " & P2
Anzeige
AW: Makrorecorder....
22.03.2010 17:00:24
braleta
Robert,
danke für die schnelle Hilfe, ich habe noch eine Frage dazu:
Was "genau" definieren die Werte in der eckigen Klammer, wenn RC[xxx]> aufgetrennt in R[?] und C[?] angegeben wird?
...bruno
R=Zeile, C=Spalte....owT
22.03.2010 17:06:07
robert
AW: Makrorecorder....
22.03.2010 17:06:11
braleta
Robert,
ich muss meine Frage präzisieren:
Meine Zielspalte ist "BA", also Spaltenoffset "53"
Meine Quellspalten sind die Spalten "N = 14", "O = 15" und "P = 16", also bezogen auf die Zielspalte R[-39] etc...
Ich will ja die gesamte Spalte, die durch die Range "(Cells(2, 53), Cells(LetzteZeile, 53)" definiert ist, setzen, und dachte, dass ich dann nur die Spaltenoffsets setzen darf.
Danke für eine Antwort
...bruno
Anzeige
AW: Makrorecorder....
22.03.2010 17:36:33
robert
hi,
meinst du so ?
gruß
robert
Sub TT()
Dim lZ As Long
lZ = 30 ' zB.,die ermittelst du ja irgendwie-
Range("BA2").FormulaR1C1 = "=RC[-39]&"" ""&RC[-38]&"" ""&RC[-37]"
Range("BA2").AutoFill Destination:=Range(Cells(2, 53), Cells(lZ, 53)), Type:=xlFillDefault
End Sub

Anzeige
AW: Makrorecorder....
22.03.2010 17:40:08
hary
Hallo Bruno
Brauchst auch nur.
geht auch so.
Range(Cells(2, 53), Cells(5, 53)).FormulaLocal = "=verketten(N2&"" "";O2&"" "";P2&"" "")"
Tabelle1
 NOPBA
249234567891049 2345 678910
3     
4     
5     

verwendete Formeln
Zelle Formel
BA2 =VERKETTEN(N2&" ";O2&" ";P2&" ")
BA3 =VERKETTEN(N3&" ";O3&" ";P3&" ")
BA4 =VERKETTEN(N4&" ";O4&" ";P4&" ")
BA5 =VERKETTEN(N5&" ";O5&" ";P5&" ")

Tabellendarstellung in Foren


gruss hary
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Excel Range mit Cells Definieren


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Gib den folgenden VBA-Code ein, um eine range mit cells zu definieren:

    Sub TelefonnummerZusammenfuehren()
       Dim LetzteZeile As Long
       LetzteZeile = Cells(Rows.Count, 14).End(xlUp).Row ' Geht davon aus, dass die Daten in Spalte N stehen
    
       Range(Cells(2, 53), Cells(LetzteZeile, 53)).FormulaR1C1 = "=RC[-39] & "" "" & RC[-38] & "" "" & RC[-37]"
    End Sub
  4. Starte das Makro: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".

  5. Überprüfe die Ergebnisse in Spalte BA, um sicherzustellen, dass die Telefonnummern korrekt zusammengeführt sind.


Häufige Fehler und Lösungen

  • Fehler: Die Telefonnummern werden ohne Leerzeichen angezeigt.

    • Lösung: Stelle sicher, dass Du die Formel korrekt mit den Leerzeichen einfügst. Siehe den Schritt 3.
  • Fehler: Die LetzteZeile wird nicht korrekt ermittelt.

    • Lösung: Überprüfe, ob die Daten in Spalte N beginnen. Andernfalls passe die Spaltennummer in Cells(Rows.Count, 14) an.

Alternative Methoden

Eine alternative Methode zur Verwendung von Range mit Cells ist die Verwendung von Verketten in einer Formel:

Range(Cells(2, 53), Cells(5, 53)).FormulaLocal = "=VERKETTEN(N2&"" "";O2&"" "";P2&"" "")"

Diese Methode kann bei kleineren Datenmengen effizienter sein, da sie die Funktion VERKETTEN verwendet, um die Werte direkt zu kombinieren.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Telefonnummern in Spalte BA formatieren kannst:

N (Landesvorwahl) O (Stadtvorwahl) P (Rufnummer) BA (Vollständige Nummer)
+49 2345 678910 +49 2345 678910

Verwende die oben genannten VBA-Codes, um die Daten in der Spalte BA korrekt zu formatieren.


Tipps für Profis

  • Verwende AutoFill: Um die Formel auf eine größere Datenmenge zu übertragen, kannst Du AutoFill verwenden, wie im Beispiel von Robert im Forum gezeigt.

  • Vermeide Hardcoding: Stelle sicher, dass Du die Zeilen- und Spaltennummern dynamisch ermittelst, um Wartungsaufwand zu minimieren.

  • Testen: Teste den Code in einer Kopie Deiner Datei, um potenzielle Datenverluste zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich eine Range mit Cells für mehrere Spalten definieren?
Du kannst die range wie folgt definieren: Range(Cells(2, 1), Cells(5, 3)), um die Zellen von A2 bis C5 zu erfassen.

2. Was bedeutet RC[-39] in der Formel?
R steht für Zeile, C für Spalte. RC[-39] bezieht sich auf die Zelle, die in der gleichen Zeile liegt, aber 39 Spalten links von der aktuellen Zelle ist.

3. Wie kann ich den VBA-Code anpassen, um andere Spalten zu verwenden?
Ändere die Zahlen in Cells(x, y), wobei x die Zeile und y die Spalte angibt, um die gewünschten Daten zu referenzieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige