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

VBA-Code der sich auf Spalte H bezieht erweitern

Forumthread: VBA-Code der sich auf Spalte H bezieht erweitern

VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 10:43:26
thepinky
ich bekomme folgendes Szenario nicht gelöst.
Bisher werden Daten aus einer Quelldatei Spalte H abgerufen und in einem Matrixverfahren sortiert und in der Zieldatei ab rngStartzelle = ActiveSheet.Range("I5") eingefügt.

Das ganze soll genauso umgesetzt werden, wenn ggf. Werte in Spalte I - Z vorhanden sind.
Das Einfügen soll dann im Zielblatt unter den Werten von H (aus Quelldatei) usw. stattfinden.

Habt Ihr eine Lösung für das Problem?




Sub PPA_Importieren_2()
On Error GoTo ErrorHandler

Const WerteProNest As Long = 5
Dim AnzahlNester As Long
Dim i As Long, j As Long, k As Long
Dim rngStartzelle As Range
Dim varQ As Variant, varZ As Variant
Dim csvFilePath As String
Dim wb As Workbook
Dim h3Value As Double, h4Value As Double, diffH3H4 As Double
Dim cellValue As String
Dim cellValueMerkmal As String
Dim firstFiveArtikelnummer As String
Dim str As String
Dim startPos As Integer
Dim endPos As Integer
Dim artikelname As String

Set rngStartzelle = ActiveSheet.Range("I5")

Application.ScreenUpdating = False
csvFilePath = Application.GetOpenFilename("CSV Files (*.csv), *.csv", , "Bitte eine CSV-Datei auswählen")
If csvFilePath > "False" Then
Set wb = Workbooks.Open(csvFilePath, Local:=True)

' Speichern als XLSX
wb.SaveAs Replace(csvFilePath, ".csv", ".xlsx"), FileFormat:=xlOpenXMLWorkbook
csvFilePath = Replace(csvFilePath, ".csv", ".xlsx")
wb.Close False

' Wieder öffnen und bearbeiten
Set wb = Workbooks.Open(csvFilePath)

cellValueMerkmal = wb.Sheets(1).Range("H1").Value
cellValue = wb.Sheets(1).Range("A5").Value

' Dein Eingabestring
str = cellValue

' Finde die Position des ersten und zweiten Unterstrichs
startPos = InStr(1, str, "_") + 1 ' Startposition nach dem ersten Unterstrich
endPos = InStr(startPos, str, "_") ' Position des zweiten Unterstrichs

' Extrahiere den Text zwischen den beiden Unterstrichen
artikelname = Mid(str, startPos, endPos - startPos)

' Nur die ersten 5 Zeichen extrahieren
firstFiveArtikelnummer = Left(cellValue, 5) & 999

h3Value = wb.Sheets(1).Range("H3")
h4Value = wb.Sheets(1).Range("H4")
varQ = wb.Sheets(1).Range("H5:H" & Application.Max(2, wb.Sheets(1).Cells(Rows.Count, 8).End(xlUp).Row)).Value
diffH3H4 = h3Value - h4Value

If IsEmpty(varQ) Then
MsgBox "Es sind keine Werte vorhanden!"
Else
If UBound(varQ) Mod WerteProNest Then
MsgBox "Die Anzahl der Messwerte ist nicht korrekt! Bitte Quelldatei prüfen!"
Else
ReDim varZ(1 To UBound(varQ) / WerteProNest, 1 To WerteProNest)
AnzahlNester = UBound(varZ)
MsgBox "Die PPA enthält " & AnzahlNester & " Nest" & IIf(AnzahlNester = 1, ".", "er.")
For i = 1 To UBound(varQ)
If ((i - 1) Mod AnzahlNester) = 0 Then
j = 1
k = k + 1
Else
j = j + 1
End If
varZ(j, k) = varQ(i, 1)
Next i
rngStartzelle.Resize(AnzahlNester, WerteProNest).Value = varZ
ThisWorkbook.Activate

Worksheets("Testmessung").Activate
Worksheets("Testmessung").Range("N5").Value = diffH3H4
Worksheets("Testmessung").Range("B5").Value = cellValueMerkmal
Worksheets("Testmessung").Range("G1").Value = firstFiveArtikelnummer

Worksheets("Checkliste PPA").Activate
Worksheets("Checkliste PPA").Range("G1").Value = firstFiveArtikelnummer
Worksheets("Checkliste PPA").Range("H1").Value = artikelname
Worksheets("Testmessung").Activate
End If
End If

wb.Close False
Application.ScreenUpdating = True

Else
MsgBox "Es wurde keine Quelldatei ausgewählt!", vbCritical
End If

' Löschen der XLSX-Datei
Kill csvFilePath

Exit Sub

ErrorHandler:
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description, vbCritical
Application.ScreenUpdating = True
End Sub


Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 11:06:29
MCO
Moin!

Statt
  Set rngStartzelle = ActiveSheet.Range("I5")


nimm
  Set rngStartzelle = ActiveSheet.Range("H" & rows.count).end(xlup).offset(1,0)


Des weiteren kannst du ändern:

                Worksheets("Testmessung").Activate

Worksheets("Testmessung").Range("N5").Value = diffH3H4
Worksheets("Testmessung").Range("B5").Value = cellValueMerkmal
Worksheets("Testmessung").Range("G1").Value = firstFiveArtikelnummer

Worksheets("Checkliste PPA").Activate
Worksheets("Checkliste PPA").Range("G1").Value = firstFiveArtikelnummer
Worksheets("Checkliste PPA").Range("H1").Value = artikelname
Worksheets("Testmessung").Activate


in
                With Worksheets("Testmessung")

.Activate
.Range("N5").Value = diffH3H4
.Range("B5").Value = cellValueMerkmal
.Range("G1").Value = firstFiveArtikelnummer
End With

With Worksheets("Checkliste PPA")
.Range("G1").Value = firstFiveArtikelnummer
.Range("H1").Value = artikelname
End With


Gruß, MCO
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 11:10:58
snb
Hat AI dazu keine Antwort ?
AW: VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 13:16:43
Yal
Hallo Pinky (man spricht sich im Forum per Vorname an ;-)

da es sich um eine reine Datenbehandlungsaufgabe handelt (bis auf dem Auswahl der csv), würde ich eine solche Aufgabe mit Power Query (PQ) behandeln: kein VBA, kein Stress.

Wenn Du eine Beispieldatei* postest inkl. wie es am Ende aussehen soll, kann man Dir einen Entwurf mit PQ basteln.
*: bereinigt vom allem, was nicht im Netz gelangen sollte. Beispieldaten können in einer Arbeitsblatt vorliegen. Dann machen wir daraus 'ne csv.

VG
Yal
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 14:31:55
thepinky
Hallo Yal,

würde es gerne versuchen mit VBA zu lösen.
Eigentlich müsste sich doch nur folgender Block auf die nächsten Spalten beziehen (Quelldatei)?
Und anschließend noch die richtigen Zielzellen bestimmen. :-)



h3Value = wb.Sheets(1).Range("H3")
h4Value = wb.Sheets(1).Range("H4")
varQ = wb.Sheets(1).Range("H5:H" & Application.Max(2, wb.Sheets(1).Cells(Rows.Count, 8).End(xlUp).Row)).Value
diffH3H4 = h3Value - h4Value

If IsEmpty(varQ) Then
MsgBox "Es sind keine Werte vorhanden!"
Else
If UBound(varQ) Mod WerteProNest Then
MsgBox "Die Anzahl der Messwerte ist nicht korrekt! Bitte Quelldatei prüfen!"
Else
ReDim varZ(1 To UBound(varQ) / WerteProNest, 1 To WerteProNest)
AnzahlNester = UBound(varZ)
MsgBox "Die PPA enthält " & AnzahlNester & " Nest" & IIf(AnzahlNester = 1, ".", "er.")
For i = 1 To UBound(varQ)
If ((i - 1) Mod AnzahlNester) = 0 Then
j = 1
k = k + 1
Else
j = j + 1
End If
varZ(j, k) = varQ(i, 1)
Next i
rngStartzelle.Resize(AnzahlNester, WerteProNest).Value = varZ
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
26.02.2026 11:23:39
Yal
Hallo,

das Problem ist, dass deine VBA-Kenntnis beschränkt zu sein scheint. VBA verlangt eine Menge Abstraktionsvermögen, weil nichts wird visualisiert, während Du den Code verarbeitest. Genau diesen Punkt bringt Power Query: per Klick wird eine Transformationsschritt ausgeführt (und gleichzeitig aufgenommen) und Du kannst das Ergebnis-Vorschau sehen. Darum kann man ohne große Mühe innerhalb weniger Stunden mit Power Query viel erreichen.

Schau dir folgende Tutorial: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
Es beinhaltet die Anweisung und dazu kurze Videos (insg. 1 Std).

Dein VBA-Code nimmt alle Daten in Spalte H ab Zeile 5 und pivotiert (oder transponiert) jeden Block von 5 Zeilen in 5 Spalten. Ich gehe davon aus, dass in der neue Datei die Daten bereits in Spalten verteilt sind. Daher würde es reichen, den gesamten Block zu kopieren. Aber ich sehe die Datei nicht und bin kein Hellseher.

Da einige Überschriften in verschiedenen Arbeitsblätter kopiert werden, wirst Du neben PQ trotzdem in bisschen VBA brauchen.

VG
Yal
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
26.02.2026 14:57:37
GerdL
Na, wenn du meinst.
Dim a As Long

For a = 8 To 26
h3Value = wb.Sheets(1).Cells(3, a)
h4Value = wb.Sheets(1).Cells(4, a)
varQ = wb.Sheets(1).Range(Cells(5, a), Cells(Application.Max(2, wb.Sheets(1).Cells(Rows.Count, a).End(xlUp).Row), a)).Value

diffH3H4 = h3Value - h4Value

If IsEmpty(varQ) Then
MsgBox "Es sind keine Werte vorhanden in Spalte " & Split(Cells(1, a).Address, "$")(1) & "!"
Else
If UBound(varQ) Mod WerteProNest Then
MsgBox "Die Anzahl der Messwerte ist nicht korrekt! Bitte Quelldatei prüfen!"
Else
ReDim varZ(1 To UBound(varQ) / WerteProNest, 1 To WerteProNest)
AnzahlNester = UBound(varZ)
MsgBox "Die PPA enthält " & AnzahlNester & " Nest" & IIf(AnzahlNester = 1, ".", "er.")
For i = 1 To UBound(varQ)
If ((i - 1) Mod AnzahlNester) = 0 Then
j = 1
k = k + 1
Else
j = j + 1
End If
varZ(j, k) = varQ(i, 1)
Next i
Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Resize(AnzahlNester, WerteProNest).Value = varZ
End If
End If
Next

Gruß Gerd
Anzeige
AW: VBA-Code der sich auf Spalte H bezieht erweitern
25.02.2026 11:21:15
thepinky
Ich bekomme es auch via AI nicht gelöst..... stelle mich zu blöd an.

Forumthreads zu verwandten Themen

Anzeige
Anzeige