Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: im Range spalte und zeile als Variable

im Range spalte und zeile als Variable
14.09.2015 20:10:48
Thomas
Hallo excelfreunde,
ich habe von matthias die macro bekommen es funktioniert auch gut, nur leider
ist meine Spaltenanzahl und Zeilenanzahl Variable. So das ich den Spaltenbuchstabe anhand der Überschrift suchen muss.
Mit
Dim quellSpalte As Variant
Dim zielSpalte As Variant
Application.ScreenUpdating = False
Set quellSpalte = Rows(10).Find("Datum h", LookAt:=xlWhole)
Set zielSpalte = Rows(10).Find("Datum Z", LookAt:=xlWhole)
finde ich zwar die Spaltennummern aber wenn ich das "G" bzw B mit quellSpalte bzw. zielSpalte ersetze geht es nicht.
kann mir jemand zeigen wie ich es machen muss?
liebe grüsse thomas
Sub wenn_wert_vorhanden_dann_kopieren()
' wenn in spalte g ein wert vorhanden ist wird er nach spalte b kopiert ausschneiden einfügen
Dim Myrow
For Myrow = 10 To 20000 'Ende(hier Zeile20) anpassen oder Einlesen!
If Range("G" & Myrow).Value  "" Then Range("G" & Myrow).Cut Destination:=Range("B" & Myrow)
Next
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: im Range spalte und zeile als Variable
14.09.2015 20:32:15
Nepumuk
Hallo,
so:
Cells(Zeilennummer, Spaltennummer)
Gruß
Nepumuk

AW: im Range spalte und zeile als Variable
14.09.2015 20:55:29
Thomas
Hallo Nepumuk
hab vielen dank für deine unterstützung
ich habe es mal versucht aber es kommt fehler typenunverträglichkeit was bedeutet dies?
Ich hab bestimmt was falsch gemacht.
schaust du mal bitte?
liebe grüsse thomas
Sub wenn_wert_vorhanden_dann_kopieren()
' wenn in spalte g ein wert vorhanden ist wird er nach spalte b kopiert ausschneiden einfügen
Dim quellSpalte As Variant
Dim zielSpalte As Variant
Application.ScreenUpdating = False
Set quellSpalte = Rows(10).Find("Datum h", LookAt:=xlWhole)
Set zielSpalte = Rows(10).Find("Datum Z", LookAt:=xlWhole)
'Cells(Zeilennummer, Spaltennummer)
Dim Myrow
For Myrow = 10 To 20000 'Ende(hier Zeile20) anpassen oder Einlesen!
If Cells(Myrow, quellSpalte).Value  "" Then Cells(Myrow, quellSpalte).Cut Destination:= _
Cells(Myrow, quellSpalte)
Next
End Sub

Anzeige
AW: im Range spalte und zeile als Variable
14.09.2015 21:05:18
Gerd
Hallo Thomas,
ohne Plausi-Prüfungen u. im Wesentlichen nur eingesetzt.
Sub wenn_wert_vorhanden_dann_versetzen()
' wenn in quellspalte ein wert vorhanden ist, wird ausgeschnitten u. in zielspalte eingefügt
Dim Myrow As Long, quellspalte As Long, zielspalte As Long
quellspalte = Rows(10).Find("Datum h", LookAt:=xlWhole).Column
zielspalte = Rows(10).Find("Datum Z", LookAt:=xlWhole).Column
For Myrow = 10 To 20000 'Ende(hier Zeile20) anpassen oder Einlesen!
If Cells(Myrow, quellspalte).Value  "" Then Cells(Myrow, quellspalte).Cut Destination:= _
Cells(Myrow, zielspalte)
Next
Application.CutCopyMode = False
End Sub
Gruß Gerd

Anzeige
super es klappt
14.09.2015 21:23:08
Thomas
Hallo Gerd,
es klappt super ich kapiere es nie. vielen vielen dank.
geht dies auch mit den Zeilen?
liebe grüsse thomas

AW: im Range spalte und zeile als Variable
14.09.2015 22:53:19
Gerd
Hallo Thomas,
ja. Erkläre bitte, was du erreichen möchtest.
Gruß GErd

AW: im Range spalte und zeile als Variable
14.09.2015 23:25:51
Thomas
Hallo Gerd,
wenn das ginge wäre dies sicherer für den Fall das die Überschriften doch mal in einer anderen Zeile als 10 landen und ich müsste wirklich nur den Bereich abklappern der mit Daten gefüllt ist. So muss ich ein riesen Bereich wählen um nicht Gefahr zu laufen das er nicht ausreicht. Dann wird dieses Makro sehr langsam. Ursprünglich wollte ich die daten mit dem Makro unten markieren ausschneiden und dann in die Spalte Datum z einfügen. dabei dürfen nur dann die zellen überschrieben werden wenn in der Quellspalte auch daten sind. Aber leider geht es wahrscheinlich nicht mit nichtzusammenhängenden datenbereichen ohne schleife. Den kompletten bereich kann ich nicht ausschneiden einfügen denn dann werden die Daten in der Zielspalte teilweise mit leer überschrieben. In diesen Fall müssen aber die Daten in der Zielspalte stehen bleiben.
hab recht vielen dank für dein interesse an mein problem.
liebe grüsse thomas
Sub gefüllte_markieren_()
With ActiveSheet.Columns(1)
.ColumnDifferences(.Cells(Rows.Count, 1)).Select  'Cut  ' die eins UND ROWS muss mit varible  _
ersetzt werden.
End With
End 

Sub

Anzeige
konnte dies problem lösen owt
16.09.2015 21:19:17
Thomas
.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Variablen für Zeilen und Spalten in Excel VBA nutzen


Schritt-für-Schritt-Anleitung

Um in Excel VBA mit variablen Zeilen- und Spaltennummern zu arbeiten, kannst du die Cells-Methode verwenden. Hier ist ein einfacher Ablauf:

  1. Definiere deine Variablen:

    Dim quellSpalte As Long
    Dim zielSpalte As Long
    Dim Myrow As Long
  2. Finde die Spaltennummern anhand der Überschrift:

    quellSpalte = Rows(10).Find("Datum h", LookAt:=xlWhole).Column
    zielSpalte = Rows(10).Find("Datum Z", LookAt:=xlWhole).Column
  3. Schreibe die Schleife, um die Daten zu verarbeiten:

    For Myrow = 10 To 20000
       If Cells(Myrow, quellSpalte).Value <> "" Then
           Cells(Myrow, quellSpalte).Cut Destination:=Cells(Myrow, zielSpalte)
       End If
    Next Myrow
  4. Deaktiviere den CutCopyMode, um zu verhindern, dass die Auswahl bleibt:

    Application.CutCopyMode = False

Mit dieser Struktur kannst du sowohl die zeilen als auch die spalten dynamisch anpassen.


Häufige Fehler und Lösungen

  • Typenunverträglichkeit: Dies passiert häufig, wenn du versuchst, einen Wert einer Variablen zuzuweisen, die nicht den richtigen Datentyp hat. Stelle sicher, dass quellSpalte und zielSpalte als Long deklariert sind.

  • Fehler bei der Verwendung von Cells: Achte darauf, dass du die Werte wie Cells(Myrow, quellSpalte) korrekt verwendest. Wenn quellSpalte oder zielSpalte nicht die korrekten Spaltennummern zurückgeben, funktioniert das Skript möglicherweise nicht.


Alternative Methoden

Eine andere Möglichkeit, Ranges zu verwalten, ist die Verwendung von Range mit Variablen:

Dim quellRange As Range
Dim zielRange As Range

Set quellRange = Range(Cells(10, quellSpalte), Cells(20000, quellSpalte))
Set zielRange = Range(Cells(10, zielSpalte), Cells(20000, zielSpalte))

If Not IsEmpty(quellRange) Then
    quellRange.Cut Destination:=zielRange
End If

Dies kann manchmal leserlicher sein und die Verwaltung von Bereichen erleichtern.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von Cells mit Variablen:

  1. Kopieren von Werten zwischen Spalten:

    If Cells(Myrow, quellSpalte).Value <> "" Then
       Cells(Myrow, zielSpalte).Value = Cells(Myrow, quellSpalte).Value
    End If
  2. Anpassen der Zeilennummer: Falls du die Startzeile flexibel gestalten möchtest, kannst du eine Variable für die Startzeile definieren:

    Dim startZeile As Long
    startZeile = 10
    For Myrow = startZeile To 20000
       ' Dein Code hier
    Next Myrow

Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler reduziert.

  • Vermeide Select und Activate: Arbeite direkt mit Objekten, um deinen Code effizienter zu gestalten.

  • Nutze Application.ScreenUpdating = False: Dies verbessert die Leistung, insbesondere bei großen Datenmengen.


FAQ: Häufige Fragen

1. Was bedeutet "Typenunverträglichkeit" in VBA? Typenunverträglichkeit bedeutet, dass du versuchst, einen Wert einem Variablentyp zuzuweisen, der nicht kompatibel ist. Überprüfe, dass die Variablen den richtigen Typ haben, z.B. Long für Zeilen- und Spaltennummern.

2. Wie finde ich die Spaltennummer basierend auf der Überschrift? Verwende die Find-Methode, um die Spaltennummer zu ermitteln, z.B.:

Dim spalte As Long
spalte = Rows(10).Find("Überschrift", LookAt:=xlWhole).Column

3. Kann ich auch mehrere Zeilen gleichzeitig verarbeiten? Ja, du kannst Schleifen verwenden, um durch alle Zeilen zu iterieren und die gewünschten Aktionen auszuführen. Achte dabei darauf, dass du die richtigen Grenzen für deine Schleife setzt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige