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

Datenänderung via Änderungsprotokoll

Datenänderung via Änderungsprotokoll
20.04.2022 10:31:30
Jana
Hallo zusammen, Ich möchte eine Änderung zum Artikel in der Datenbasis vornehmen Siehe Beispieldatei). Im Änderungsprotokoll werden alle Änderungen aufgeführt. Das Suchkriterium und das Änderungsfeld kann variieren, da nicht alle Daten zum gleichen Zeitpunkt vorhanden sind. Bisher konnte ich meinen Makros nur suchen und einfügen beibringen aber hier muss es ja speziell nach den sich änderden variablen suchen können. Könnt ihr mir hier helfen oder auch Tipps geben. Danke
https://www.herber.de/bbs/user/152537.xlsx

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kann man auch ohne VBA lösen ...
20.04.2022 11:48:21
neopa
Hallo Jana,
... wenn man, wie ich sich nicht mit VBA beschäftigt. So wäre sicherlich eine Lösung mit Power Query (PQ) möglich Du Excel der Version 2016 oder jünger im Einsatz hast. Nachfolgend hab ich eine Formellösung aufgestellt die ab XL2010 möglich wäre.
Den ursprüngliche Datenbestand hab ich dazu einfach in die Spalten I:K verschoben.
Nachfolgende Formel E2 einfach nach rechts und unten ziehend kopierbar:
Arbeitsblatt mit dem Namen 'Datenbasis'
 ABCDEFGHIJK
1IDlfd. Nr.ArtikelnummerArt.bez.VKVerpackungseinheitMengeBemerkung ÄnderungVK_vorhVE_vorhM_vorh
2MI_7688249  Arikel 18,9910 9,991 
3MI_7688282547171403254Arikel 23,9980 3,995 
4MI_7690998 1415905Arikel 34,99103000 4,9910 
5MI_7697304547261023455Arikel 47,9958000 7,995 
6 54730 Arikel 54,99200 4,993 
7MI_7697549547311403462Arikel 65,9920 29,992 
8  1404398Arikel 73,9942000 3,994 
9           

ZelleFormel
E2=WENN(D2="";"";WENNFEHLER(INDEX(Änderungsprotokoll!$D:$D;AGGREGAT(14;6;ZEILE(A$2:A$9)/(Änderungsprotokoll!$C$2:$C$9=E$1)/((Änderungsprotokoll!$A$2:$A$9=$A$1:$C$1)*(Änderungsprotokoll!$B$2:$B$9=$A2:$C2));1));I2))
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Arbeitsblatt mit dem Namen 'Änderungsprotokoll'
 ABCD
1SuchkriteriumSuchbegriffÄnderungsfeldNeuer Wert
2lfd. Nr.54717Verpackungseinheit8
3Artikelnummer1415905Menge3000
4IDMI_7697304Menge8000
5lfd. Nr.54730Verpackungseinheit20
6IDMI_7697549VK5,99
7Artikelnummer1404398Menge2000
8IDMI_7688249VK8,99
9    
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Gruß Werner
.. , - ...
Anzeige
AW: kann man auch ohne VBA lösen ...
20.04.2022 11:59:42
Jana
Hallo, vielen Dank für diese Idee. Leider kann die Datenbasis nicht in ihrer Art verändert werden. Die Daten im Originalen entsprechen dem 1000 fachen und werden auf unterschiedliche Arten mit in die Tabelle integriert. Teilweise werden auch Formeln mit Werten überschrieben. Ich kann nur einen Anstoß per VBA veranlassen, der wirklich nur die Daten ändert, die in diesem Protokoll hinterlegt sind. Es soll ausdrücklich nicht mit Formeln gearbeitet werden. VG
AW: Datenänderung via Änderungsprotokoll
20.04.2022 12:37:22
Herbert_Grom
Hallo Jana,
schau dir mal meinen Vorschlag an:
https://www.herber.de/bbs/user/152542.xlsm
Servus
Anzeige
AW: Datenänderung via Änderungsprotokoll
20.04.2022 15:00:38
Nepumuk
Hallo Jana,
teste mal:

Option Explicit
Public Sub Transferred()
Dim objSearch As Object, objChange As Object
Dim objItem As Range, objCell As Range
Dim lngRow As Long, lngChangeRow As Long
Set objSearch = CreateObject(Class:="Scripting.Dictionary")
Set objChange = CreateObject(Class:="Scripting.Dictionary")
With Worksheets("Änderungsprotokoll")
For Each objItem In .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
If Not objSearch.Exists(Key:=objItem.Text) Then
Set objCell = Worksheets("Datenbasis").Rows(1).Find(What:=objItem.Text, _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Call objSearch.Add(Key:=objItem.Text, Item:=objCell.Column)
Set objCell = Nothing
Else
Call MsgBox("Spalte ''" & objItem.Text & _
"'' in Tabelle ''Datenbasis'' nicht gefunden.", vbCritical, "Programmabbruch")
Exit Sub
End If
End If
Next
For Each objItem In .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp))
If Not objChange.Exists(Key:=objItem.Text) Then
Set objCell = Worksheets("Datenbasis").Rows(1).Find(What:=objItem.Text, _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Call objChange.Add(Key:=objItem.Text, Item:=objCell.Column)
Set objCell = Nothing
Else
Call MsgBox("Spalte ''" & objItem.Text & _
"'' in Tabelle ''Datenbasis'' nicht gefunden.", vbCritical, "Programmabbruch")
Exit Sub
End If
End If
Next
For lngRow = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
Set objCell = Worksheets("Datenbasis").Columns(objSearch.Item(Key:=.Cells(lngRow, 1).Text)).Find( _
What:=.Cells(lngRow, 2).Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Worksheets("Datenbasis").Cells(objCell.Row, _
objChange.Item(Key:=.Cells(lngRow, 3).Text)).Value = .Cells(lngRow, 4).Value
Else
Call MsgBox("Suchbegriff ''" & .Cells(lngRow, 2).Text & "'' in Spalte ''" & .Cells(lngRow, 3).Text & _
"''  der Tabelle ''Datenbasis'' nicht gefunden.", vbCritical, "Programmabbruch")
End If
Next
End With
Set objSearch = Nothing
Set objChange = Nothing
End Sub
Der Code gehrt in ein Standardmodul (Menüleiste im VBA-Editor Einfügen - Modul).
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige