Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kreuzabfrage

Kreuzabfrage
10.07.2014 14:43:59
Bon
Hallo VBA Experten,
in meiner Quelltabelle stehen in der Spalte A Indizes. In der 4. Zeile stehen Monatsnamen (Januar - Dezember).
Nun möchte ich, wenn in B2 meiner Zieltabelle ein Monat erscheint (z.B. Januar), auch nur die Spalte Januar in mein Ziel-Tabellenblatt kopiert wird.
Der Code, den ich gefunden habe, kopiert nur fest vorgegebene Spalten.
Habt ihr Ideen, wie man dieses Problem lösen kann?
Danke im voraus!
Sub Übertragen()
Dim colDummy As Collection
Dim colZeilen As New Collection
Dim i As Long
Dim k As Long
Dim strSearch As String
Dim varDummy As Variant
Dim wsZiel As Worksheet
Dim wsQuelle As Worksheet
Dim dtmBeginn As Date
On Error Resume Next
dtmBeginn = Now
Set wsZiel = Worksheets("Tabelle1")
Set wsQuelle = Worksheets("Tabelle2")
With wsZiel 'Zieldatenblatt
For i = 1 To 650
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
Set colDummy = New Collection
colZeilen.Add colDummy, "X-" & strSearch
colZeilen("X-" & strSearch).Add i, "Zielzeile"
End If
Next
End With
With wsQuelle 'Tabelle mit allen Daten
For i = 1 To 650
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
colZeilen("X-" & strSearch).Add i, "Quellzeile"
End If
Next
End With
With wsZiel 'Zieldatenblatt
Application.ScreenUpdating = False
For Each varDummy In colZeilen
i = varDummy("Zielzeile")
k = varDummy("Quellzeile")
'Kopiert von 1. bis 7.Spalte -> soll aber nur eine bestimmte Spalte kopiert werden
.Range(.Cells(i, 1), .Cells(i, 7)).Value = _
wsQuelle.Range( _
wsQuelle.Cells(k, 1), wsQuelle.Cells(k, 7) _
).Value
Next
Application.ScreenUpdating = True
End With
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Kreuzabfrage
10.07.2014 15:34:05
fcs
Hallo Bon,
die Anpassung kann etwa wie folgt aussehen.
Wenn die Spalte in der Zieltabelle nicht variabel ist, dann der Variablen colZiel den festen Wert zuweisen und zugehörigen Codeabschnitt löschen.
Gruß
Franz

Sub Übertragen()
Dim colDummy As Collection
Dim colZeilen As New Collection
Dim i As Long
Dim k As Long
Dim colQuelle As Long
Dim colZiel As Long
Dim strSearch As String
Dim varDummy As Variant
Dim wsZiel As Worksheet
Dim wsQuelle As Worksheet
Dim dtmBeginn As Date
On Error Resume Next
dtmBeginn = Now
Set wsZiel = Worksheets("Tabelle1")
Set wsQuelle = Worksheets("Tabelle2")
With wsZiel 'Zieldatenblatt
For i = 5 To 650    'Startzeile ggf. anpassen!
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
Set colDummy = New Collection
colZeilen.Add colDummy, "X-" & strSearch
colZeilen("X-" & strSearch).Add i, "Zielzeile"
End If
Next
'Zielspalte ermitteln/vorgeben
strSearch = wsZiel.Range("B2").Text 'gesuchter monat
Set varDummy = .Rows(4).Find(what:=strSearch, LookIn:=xlValues, lookat:=xlWhole)
If varDummy Is Nothing Then
MsgBox "Monat """ & strSearch & """ nicht in Zeile 4 der Zieltabelle gefunden!"
GoTo Beenden
Else
colZiel = varDummy.Column
End If
End With
With wsQuelle 'Tabelle mit allen Daten
For i = 5 To 650    'Startzeile ggf. anpassen!
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
colZeilen("X-" & strSearch).Add i, "Quellzeile"
End If
Next
'Quellspalte ermitteln
strSearch = wsZiel.Range("B2").Text 'gesuchter monat
Set varDummy = .Rows(4).Find(what:=strSearch, LookIn:=xlValues, lookat:=xlWhole)
If varDummy Is Nothing Then
MsgBox "Monat """ & strSearch & """ nicht in Zeile 4 der Quelltabelle gefunden!"
GoTo Beenden
Else
colQuelle = varDummy.Column
End If
End With
With wsZiel 'Zieldatenblatt
Application.ScreenUpdating = False
For Each varDummy In colZeilen
i = varDummy("Zielzeile")
k = varDummy("Quellzeile")
'Kopiert von 1. bis 7.Spalte -> soll aber nur eine bestimmte Spalte kopiert werden
.Cells(i, colZiel).Value = wsQuelle.Cells(k, colQuelle).Value
Next
End With
Beenden:
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Kreuzabfrage
11.07.2014 09:15:33
Bon
Super! Vielen, vielen Dank!! Funktioniert wunderbar!

AW: Kreuzabfrage
11.07.2014 10:29:37
Bon
Ich habe jetzt noch eine weitere Frage:
Es soll eine weitere Abfrage eingefügt werden: Wenn in der Quelldatei in der Zeile 8 der Name der Tabelle 1 drin steht, dann soll genau diese Spalte (unterhalb des Namen der Tabelle 1) in die Zieldatei eingefügt werden.
Ideen?
Danke schon mal!

AW: Kreuzabfrage
11.07.2014 10:42:55
Bon
Sorry, jetzt doch anders: Ich benötige folgende Abänderung: Zwar soll der Monat verglichen werden (damit die Spalte die richtige Spalte in der Zieldatei angesprochen wird), in der Quelldatei soll aber nur die Spalte mit dem Titel "Tabelle 1" in die Zieldatei (wie gehabt mit Index) übertragen werden.

Anzeige
AW: Kreuzabfrage
11.07.2014 11:06:58
Bon
Ich schon wieder!
Habs jetzt selbst gelöst *stolz ist*
Function Uebertragen_Monatswerte(Ziel As String, Quelle As String, Vergleichsmonat As String,  _
Namenszusatz As String, Abteilung)
Dim colDummy As Collection
Dim colZeilen As New Collection
Dim i As Long
Dim k As Long
Dim colQuelle As Long
Dim colZiel As Long
Dim strSearch As String
Dim varDummy As Variant
Dim wsZiel As Worksheet
Dim wsQuelle As Worksheet
Dim dtmBeginn As Date
On Error Resume Next
dtmBeginn = Now
Set wsZiel = Worksheets(Ziel)
Set wsQuelle = Worksheets(Quelle)
With wsZiel 'Zieldatenblatt
For i = 5 To 300
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
Set colDummy = New Collection
colZeilen.Add colDummy, "X-" & strSearch
colZeilen("X-" & strSearch).Add i, "Zielzeile"
End If
Next
'Zielspalte ermitteln/vorgeben
strSearch = wsQuelle.Range(Vergleichsmonat).Text & Namenszusatz 'gesuchter monat in  _
Quelldatei
Set varDummy = .Rows(5).Find(what:=strSearch, LookIn:=xlValues, lookat:=xlWhole)
If varDummy Is Nothing Then
MsgBox "Monat """ & strSearch & """ nicht in Zeile 5 der Zieltabelle gefunden!"
GoTo Beenden
Else
colZiel = varDummy.Column
End If
End With
With wsQuelle 'Tabelle mit allen Daten
For i = 5 To 300
strSearch = CStr(.Cells(i, 1))
If strSearch  "" Then
colZeilen("X-" & strSearch).Add i, "Quellzeile"
End If
Next
'Quellspalte ermitteln
strSearch = wsZiel.Range(Abteilung).Text 'gesuchte Abteilung --> muss jetzt noch mit  _
Zieldatei vergleichen
Set varDummy = wsQuelle.Rows(8).Find(what:=strSearch, LookIn:=xlValues, lookat:=xlWhole)
If varDummy Is Nothing Then
MsgBox "Abteilung """ & strSearch & """ nicht in Zeile 4 der Quelltabelle gefunden!"
GoTo Beenden
Else
colQuelle = varDummy.Column
End If
End With
With wsZiel 'Zieldatenblatt
Application.ScreenUpdating = False
For Each varDummy In colZeilen
i = varDummy("Zielzeile")
k = varDummy("Quellzeile")
.Cells(i, colZiel).Value = wsQuelle.Cells(k, colQuelle).Value
Next
End With
Beenden:
Application.ScreenUpdating = True
End Function
;)

Anzeige
AW: Kreuzabfrage
11.07.2014 11:25:07
fcs
Hallo Bon,
super, dass du das selber lösen konntest.
Aus deinen beiden vorherigen Fragen hab ich nämlich fast Null verstanden, was du ändern/ergänzen wolltest.
Gruß
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige