Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
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

Bereich zwischen Wörtern ausschneiden

Bereich zwischen Wörtern ausschneiden
09.02.2021 08:04:27
Jan
Hallo zusammen,
ich habe leider nichts zu diesem Thema im Forum gefunden und verzweifel grad ein wenig...
ich hoffe ihr könnt mir bei meinem Problem helfen. :)
Ich benötige folgenden Vorgang, falls überhaupt möglich, in VBA:
Das Wort 1 = "Beispiel1" befindet sich immer in Spalte A. Dies soll gesucht werden und der Bereich bis zu Wort 2 = "Beispiel2", welches sich auch immer in Spalte A befindet, markiert, ausgeschnitten und in Tabelle2 in die erste freie Zeile in Spalte A transponiert werden. Und das solange bis eins der beiden Suchbegriffe in Tabelle 1 nicht mehr vorkommt.
Die Wörter 1 und 2 können öfter vorkommen und der Bereich zwischen Wort 1 und Wort 2 kann auch immer unterschiedlich viele Zeilen enthalten. So kann es also sein, dass ich mal nur einen Bereich, mal aber auch mehrere Bereiche habe die in Tabelle 2 transponiert werden sollen, so dass aus der Tabelle 1 Spalte A eine fortlaufende Auflistung in Tabelle 2 entsteht.
Ich bin schon sehr gespannt auf eure Antworten und darauf zu erfahren ob so etwas möglich ist! :)
VG
Jan

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
09.02.2021 08:31:58
UweD
AW: Bereich zwischen Wörtern ausschneiden
09.02.2021 09:41:13
Jan
Hallo UweD,
vielen Dank für die Antwort und den Hinweis :)
Hier einmal eine Beispieldatei:
https://www.herber.de/bbs/user/143746.xlsb
aus dieser heraus entweder in Tabelle 2 das ganze Szenario oder im besten Fall sogar in eine neue Arbeitsmappe mit dem Namen "Mängelmeldungen.xlsb".
AW: Bereich zwischen Wörtern ausschneiden
09.02.2021 11:10:30
UweD
Hallo
versuch mal das hier:
in ein Modul

Option Explicit
Sub Transfere()
Dim TB1 As Worksheet, TB2 As Worksheet
Dim Sp As Integer, Such1 As String, Such2 As String
Dim Anz As Integer, Zvon As Integer, Zbis As Integer, LR As Integer
Dim Pfad As String, NeuName As String, WS
Set TB1 = Sheets("Tabelle1")
Set TB2 = Sheets.Add(after:=Sheets(Sheets.Count)) 'Temporäres Blatt
Set WS = WorksheetFunction
Sp = 1 'Suchspalte A
Pfad = "C:\Temp\"
NeuName = "Mängelmeldungen.xlsb"
Such1 = "Beispiel 1"
Such2 = "Beispiel 2"
Do Until WS.CountIf(TB1.Columns(Sp), Such1) = 0
If WS.CountIf(TB1.Columns(Sp), Such2) > 0 Then      ' ist Such2 auch vorhanden
Zvon = WS.Match(Such1, TB1.Columns(Sp), 0)
Zbis = WS.Match(Such2, TB1.Columns(Sp), 0)
LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row + 1 'Erste freie Zeile
'übertragen
TB2.Cells(LR, Sp).Resize(1, Zbis - Zvon - 1).Value = _
WS.Transpose(TB1.Cells(Zvon + 1, Sp).Resize(Zbis - Zvon - 1, 1))
'Zeilen löschen
TB1.Rows(Zvon).Resize(Zbis - Zvon + 1).Delete xlUp
Else
MsgBox "Fehlendes Ende: " & Such2
End If
Loop
'Verschieben in neue Datei
TB2.Move
'speichern
ActiveWorkbook.SaveAs Filename:=Pfad & NeuName, FileFormat:=xlExcel12
End Sub
LG UweD
Anzeige
Update..
09.02.2021 11:28:12
UweD
Hier noch ein paar Änderungen

Option Explicit
Sub Transfere()
Dim TB1 As Worksheet, TB2 As Worksheet
Dim Sp As Integer, Such1 As String, Such2 As String
Dim Anz As Integer, Zvon As Integer, Zbis As Integer, LR As Integer
Dim Pfad As String, NeuName As String, WF
Set TB1 = Sheets("Tabelle1")
Sp = 1 'Suchspalte A
Pfad = "C:\Temp\"
NeuName = "Mängelmeldungen.xlsb"
Such1 = "Beispiel 1"
Such2 = "Beispiel 2"
Set WF = WorksheetFunction
Set TB2 = Sheets.Add(after:=Sheets(Sheets.Count))
Do Until WF.CountIf(TB1.Columns(Sp), Such1) = 0
If WF.CountIf(TB1.Columns(Sp), Such2) > 0 Then  'ist Such2 auch vorhanden
Zvon = WF.Match(Such1, TB1.Columns(Sp), 0)
Zbis = WF.Match(Such2, TB1.Columns(Sp), 0)
'erste freie Zeileermitteln
LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
'übertragen
TB2.Cells(LR, Sp).Resize(1, Zbis - Zvon - 1).Value = _
WF.Transpose(TB1.Cells(Zvon + 1, Sp).Resize(Zbis - Zvon - 1, 1))
'Zählen
Anz = Anz + 1
'löschen
TB1.Rows(Zvon).Resize(Zbis - Zvon + 1).Delete xlUp
Else
MsgBox "Fehlendes Ende: " & Such2
Exit Do
End If
Loop
'Verschieben in neue Datei und speichern
If Anz > 0 Then
TB2.Move
ActiveWorkbook.SaveAs Filename:=Pfad & NeuName, FileFormat:=xlExcel12
Else
Application.DisplayAlerts = False
TB2.Delete
End If
MsgBox Anz & " Fundstellen"
End Sub
LG UweD
Anzeige
AW: Update..
09.02.2021 12:06:19
Jan
Hallo UweD,
richtig richtig gut!
Vom Vorgang her genau das was ich wollte!
Nur eine Kleinigkeit, die ich allerdings selber nicht erwähnt habe...
Die neue Datei "Mängelmeldungen" die erstellt wird möchte die schon bestehende Datei überschreiben. Gibt es hier eine Möglichkeit diese Datei nicht zu überschreiben sondern fortlaufend zu nutzen, so dass jedes mal der neu eingefügte Bereich in die erste freie Zeile der bestehenden Datei "Mängelmeldungen" eingefügt wird?
Das wäre super!
Vielen vielen Dank!
VG
Jan
AW: Update..
09.02.2021 13:03:27
UweD
Hallo nochmal.
Dann so...

Option Explicit
Sub Transfere()
Dim TB1 As Worksheet, WB2 As Workbook, TB2 As Worksheet
Dim Sp As Integer, Such1 As String, Such2 As String
Dim Anz As Integer, Zvon As Integer, Zbis As Integer, LR As Integer
Dim Pfad As String, DateiName As String, WF, TMP As Boolean
Application.ScreenUpdating = False
Set TB1 = Sheets("Tabelle1")
Sp = 1 'Suchspalte A
Pfad = "C:\Temp\"
DateiName = "Mängelmeldungen.xlsb"
Such1 = "Beispiel 1"
Such2 = "Beispiel 2"
Set WF = WorksheetFunction
Set WB2 = Workbooks.Open(Filename:=Pfad & DateiName)
Set TB2 = WB2.Sheets(1)
Do Until WF.CountIf(TB1.Columns(Sp), Such1) = 0
If WF.CountIf(TB1.Columns(Sp), Such2) > 0 Then  'ist Such2 auch vorhanden
Zvon = WF.Match(Such1, TB1.Columns(Sp), 0)
Zbis = WF.Match(Such2, TB1.Columns(Sp), 0)
'erste freie Zeile ermitteln
LR = TB2.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
'übertragen
TB2.Cells(LR, Sp).Resize(1, Zbis - Zvon - 1).Value = _
WF.Transpose(TB1.Cells(Zvon + 1, Sp).Resize(Zbis - Zvon - 1, 1))
'Zählen
Anz = Anz + 1
'löschen
TB1.Rows(Zvon).Resize(Zbis - Zvon + 1).Delete xlUp
Else
MsgBox "Fehlendes Ende: " & Such2
Exit Do
End If
Loop
'speichern und schließen
If Anz > 0 Then TMP = True ' =mit Speichern
MsgBox Anz & " Zeilen angefügt"
WB2.Close Savechanges:=TMP
End Sub
LG UweD
Anzeige
AW: Update..
09.02.2021 14:09:45
Jan
Hallo Uwe,
ein Traum!
vielen vielen Dank!
In was für einer Geschwindigkeit die Antworten und Lösungen kamen und dazu auf Anhieb die Lösung genau wie beschrieben, Weltklasse!
VG
Jan
Danke für die Rückmeldung owT
09.02.2021 14:23:59
UweD

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige