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

VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren

Forumthread: VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren

VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren
20.11.2024 17:53:26
AxelF1977
Hallo nochmal zusammen,

da ich hier so fantastische Hilfe bekommen habe, wende ich mich mit der letzten Hürde meines Umbaus der Tabelle noch einmal an Euch.

In dem Code unten werden alle Werte einer anderen Exceltabelle in die vorhandene geladen. Dann werden bestimmte Daten in ein anderen Tabellenblatt kopiert und die ersten Daten gelöscht.

Bisher mussten meine Kollegen immer die richtige Tabelle runter laden und diese dann "importieren". Das möchte ich ändern. Alle benötigten Werte, verschiedene Städte, sollen nun in einer Tabelle sein, und diese soll importiert werden.

Im Tabellenblatt "menu" steht in der Zelle "N4" der Name der Stadt, für welche die Daten kopiert werden sollen.

Nun sollen aus der zu importierenden Werte NUR die Zeilen der Matrix eingefügt werden mit unterem Code, die z.B. in Spalte Ab Berlin zu stehen haben.
In Spalte A stehen IMMER die Städtenamen.

Also sollte das Script unten nur so erweitert werden, das in Spalte A zuerst geschaut wird, wo überall eine Übereinstimmung mit der Zelle N4 im Menu Tabellenblatt besteht. Alle diese Zeilen sollen dann mit dem Script unten koipert werden.

Das Script läuft und ist ok, nur die Funktion des Aussortierens der nicht passenden Städte muss rein.

Sub Import_BEISPIEL_Data()


Dim wiMaster As Office.FileDialog
Dim SvName As String
Dim strInput As String
Dim strFile As String
Dim Pfad As String
Dim Datei As String
Dim wbRGdata As Workbook, wbMaster As Workbook
Dim wsRateshop As Worksheet, WsMaster As Worksheet
Dim firstline As Double
Dim tbl()
Dim varRegion, pvTab As PivotTable, pvField As PivotField
Dim varMG01
Dim strDir As String

varMG01 = ThisWorkbook.Sheets("menu").Range("N4").Value
Set wbMaster = ThisWorkbook
Set WsMaster = wbMaster.Sheets("Import BEISPIEL")

Pfad = "C:\Users\" & Environ("Username") & "\Documents\...\" & Format(Now, "yyyy") & "\BEISPIEL\" & Format(Now, "mm") & " " & Format(Now, "mmmm") & " " & Format(Now, "yyyy") & "\" & Format(Now, "dd.mm") & " " & "Lokal" & "\" & "BEISPIEL" & "\"
Datei = "BEISPIEL_" & Format(Now, "yyyymmdd")
strFile = Dir(Pfad & "*" & Datei & "*.xlsx")
Set wbRGdata = Workbooks.Open(Pfad & strFile)
Set wsRateshop = ActiveSheet

'copy data
With wsRateshop
tbl = .Range("A1:BZ30000").Value2
End With

'copy on top
With WsMaster
firstline = .Cells(.Rows.Count, 1).End(xlUp).Row + 0
.Cells(firstline, 1).Resize(UBound(tbl), UBound(tbl, 2)) = tbl

End With

'Namen der Datei einfügen
Dim strFileName01 As String
strFileName01 = Format(Now, "dd.mm.yyyy hh:mm")
wbMaster.Sheets("menu").Range("A6").Value = strFileName01

'Namen der Datei einfügen
Dim strFileName02 As String
strFileName02 = Mid(strFile, InStrRev(strFile, "\", , vbTextCompare) + 1)
wbMaster.Sheets("menu").Range("E4").Value = strFileName02

'close import file
wbRGdata.Close (False)


Dim raFund As Range, loLetzte As Long, i As Long
Dim wsZ As Worksheet, wsQ As Worksheet, strSuchbegriff As String
Set wsZ = ThisWorkbook.Worksheets("data BEISPIEL")
Set wsQ = ThisWorkbook.Worksheets("Import BEISPIEL")
Application.ScreenUpdating = False
With wsZ
'vorhandene Daten im Blatt 2 löschen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
If loLetzte > 1 Then
.Range(.Cells(2, 1), .Cells(loLetzte, 16)).ClearContents
End If
'Schleife über die Überschriften im Blatt 2
For i = 1 To 16
strSuchbegriff = .Cells(1, i)
'entspr. Überschrift im Blatt 3 suchen
With wsQ
Set raFund = .Rows("1:1").Find(What:=strSuchbegriff, LookIn:=xlValues, LookAt:= _
xlWhole)
'wenn gefunden Daten kopieren
If Not raFund Is Nothing Then
loLetzte = .Cells(.Rows.Count, raFund.Column).End(xlUp).Row
.Range(.Cells(2, raFund.Column), .Cells(loLetzte, raFund.Column)).Copy
End If
End With
'im Blatt 2 in die entspr. Spalte einfügen
.Cells(2, i).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Next i
End With
Set wsZ = Nothing: Set wsQ = Nothing

Application.ScreenUpdating = True

Worksheets("Import BEISPIEL").Range("A2:NTP100000").ClearContents

MsgBox ("Import data and saving successful")

End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren
21.11.2024 05:15:52
Oberschlumpf
Hi,

aber ohne Bsp-Datei(en) von dir mit genügend Bsp-Daten in den richtigen Zeilen/Spalten, die du uns per Upload zeigst, bleibt es unnötig schwierig, zu versuchen dir zu helfen...finde zumindest ich.

Ciao
Thorsten
AW: VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren
21.11.2024 08:37:09
MCO
Moin!

Sorry, aber da blick ich auch nicht so richtig durch...
Warum wir hier zugewiesen
    Set WsMaster = wbMaster.Sheets("Import BEISPIEL")

und hier nochmal?
    Set wsQ = ThisWorkbook.Worksheets("Import BEISPIEL")


ich hab mal versucht wenigstens die Elemente zu ordnen und in Form zu bringen, Code siehe unten.

Vom Prinzip her musst du es wie folgt machen:

Daten in ein Array laden, ein weiteres, gleichgroßes Array erstellen, Datensätze durchgehen und in das neue Array kopieren, dann das neue Array in das Sheet einfügen.
Das ist deutlich schneller als mit der Tabelle zu arbeiten.




Sub Import_BEISPIEL_Data()


Dim wiMaster As Office.FileDialog
Dim SvName As String
Dim strInput As String
Dim strFile As String
Dim Pfad As String
Dim Datei As String
Dim wbRGdata As Workbook, wbMaster As Workbook
Dim wsRateshop As Worksheet, WsMaster As Worksheet
Dim firstline As Double
Dim tbl()
Dim varRegion, pvTab As PivotTable, pvField As PivotField
Dim varMG01
Dim strDir As String
Dim strFileName01 As String
Dim strFileName02 As String
Dim raFund As Range, loLetzte As Long, i As Long
Dim wsZ As Worksheet, wsQ As Worksheet, strSuchbegriff As String

varMG01 = ThisWorkbook.Sheets("menu").Range("N4").Value
Set wbMaster = ThisWorkbook
Set WsMaster = wbMaster.Sheets("Import BEISPIEL")

Pfad = "C:\Users\" & Environ("Username") & "\Documents\...\" & Format(Now, "yyyy") & "\BEISPIEL\" & Format(Now, "mm") & " " & Format(Now, "mmmm") & " " & Format(Now, "yyyy") & "\" & Format(Now, "dd.mm") & " " & "Lokal" & "\" & "BEISPIEL" & "\"
Datei = "BEISPIEL_" & Format(Now, "yyyymmdd")
strFile = Dir(Pfad & "*" & Datei & "*.xlsx")
Set wbRGdata = Workbooks.Open(Pfad & strFile)
Set wsRateshop = ActiveSheet

'copy data
tbl = wsRateshop.Range("A1:BZ30000").Value2

'copy on top
With WsMaster
firstline = .Cells(.Rows.Count, 1).End(xlUp).Row + 0
.Cells(firstline, 1).Resize(UBound(tbl), UBound(tbl, 2)) = tbl
End With

'Namen der Datei einfügen
strFileName01 = Format(Now, "dd.mm.yyyy hh:mm")
strFileName02 = Mid(strFile, InStrRev(strFile, "\", , vbTextCompare) + 1)

With wbMaster.Sheets("menu")
.Range("A6").Value = strFileName01
.Range("E4").Value = strFileName02
End With

wbRGdata.Close False 'close import file

Set wsZ = ThisWorkbook.Worksheets("data BEISPIEL")
Set wsQ = WsMaster

Application.ScreenUpdating = False

With wsZ
'vorhandene Daten im Blatt 2 löschen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
If loLetzte > 1 Then .Range(.Cells(2, 1), .Cells(loLetzte, 16)).ClearContents

For i = 1 To 16 'Schleife über die Überschriften im Blatt 2
strSuchbegriff = .Cells(1, i)
'entspr. Überschrift im Blatt 3 suchen
With wsQ
Set raFund = .Rows("1:1").Find(What:=strSuchbegriff, _
LookIn:=xlValues, _
LookAt:=xlWhole)

If Not raFund Is Nothing Then 'wenn gefunden Daten kopieren
loLetzte = .Cells(.Rows.Count, raFund.Column).End(xlUp).Row
.Range(.Cells(2, raFund.Column), .Cells(loLetzte, raFund.Column)).Copy
End If
End With
'im Blatt 2 in die entspr. Spalte einfügen
.Cells(2, i).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Next i
End With
Set wsZ = Nothing: Set wsQ = Nothing

Application.ScreenUpdating = True
WsMaster.Range("A2:NTP100000").ClearContents
MsgBox ("Import data and saving successful")

End Sub


Gruß, MCO
Anzeige
AW: VBA Code erweitern, nur bestimmte Werte aus Matrix kopieren
21.11.2024 14:24:13
AxelF1977
Hi MCO,

danke das Du dich ohne Beispiel daran gewagt hast! Ich habe erstmal Deine aufgeräumte Version eingebaut, läuft. Obs schneller ist, weiß ich gerade nicht, aber auf jeden Fall übersichtlicher.

Das ist wohl 2 mal deklariert, weil ich es aus zwei Skripten aus dem Netz zusammen gefrickelt habe. Am Ende hat es funktioniert, das war das Wichtigste.

Was soll die Erweiterung nun tun?

Sie soll in Spalte A von der Datei die importiert wird gucken, ob der Wert der in A:A steht, dem aus varMG01 entspricht,. wenn ja, dann diese Zeile kopieren, usw. Alle Zeilen deren Wert in A:A NICHT dem Wert aus varMG01entspricht, ignorieren. Diese Städte oder Bundesländer werden dann nicht benötigt, und werden in eine andere Tabelle importiert.

Die Tabelle dient zur Analyse einzelner Städte oder Bundesländer. Die Datei für den Import enthält aber ALLE Städte oder Bundesländer, die betrachtet werden sollen. Von daher sollen immer nur die Daten importiert werden, die auch zu der jeweiligen Stadt aus varMG01 gehören.

Ich danke Dir.

VG
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige