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

Inhalte gemäß Liste austauschen

Inhalte gemäß Liste austauschen
01.07.2017 08:13:04
stormlamp
Hallo Zusammen,
ich möchte gerne eine Auswertung anonymisieren.
In der Auswertung stehen in Datei1, Tabelle1, Spalte A die realen Bezeichnungen, bspw.
Apfel
Birne
Banane
Kirsche

In einer anderen Datei2, Tabelle2 stehen in Spalte A und B
Apfel -- Artikel1
Birne -- Artikel2
Banane -- Artikel14
Kirsche -- Artikel9

Nun benötige ich ein Makro, das in Datei1/Tabelle1 die echten Daten alle so ersetzt, wie sie in Datei2/Tabelle2 aufgeführt sind.
Kann mir bitte jemand helfen
Viele Grüße
stormlamp

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

Betreff
Datum
Anwender
Anzeige
AW: Inhalte gemäß Liste austauschen
01.07.2017 08:19:31
Hajo_Zi
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Anzeige
AW: Inhalte gemäß Liste austauschen
01.07.2017 09:02:30
stormlamp
Hallo Hajo,
danke für den Verweis, aber der hilft mir leider nicht weiter.
Wenn ich bspw. eine Präsentstion über Verkäufe mache, dann müssen die zu ersetzenden Begriffe auch nacherher noch aussprechbar sein, also kann ich statt "Apfel" den Begriff "Artikel1" nehmen, aber nicht einen Bergriff, den dieses Anonymisierungsmakr erzeugt "nHFKywibVRjcPxSXQG".
Vor allem müssen in allen Dateien, die präsentiert werden auch alle Begriffe gleichlautend ersetzt werden, also überall statt "Apfel" den Begriff "Artikel1" und nicht irgendwie anders.
Aus diesem Grund benötige ich also ein Makro, das genau so abläuft, wie in meinem ersten Beitrag geschrieben.
Gruß
stormlamp
Anzeige
AW: Inhalte gemäß Liste austauschen
01.07.2017 09:15:34
Hajo_Zi
ich bin dann raus, da meine Beiträge nicht komplett gelesen werden.
Das wird schon seinen Grund haben.
Option Explicit
Sub Ersetzen()
Dim LoLetzte As Long
Dim LoI As Long
Dim Rafound1 As Range
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows. _
Count)
For LoI = 1 To LoLetzte
With Worksheets("Tabelle2")
If Cells(LoI, 1)  "" Then
Set Rafound1 = .Columns(1).Find(Cells(LoI, 1), Range("A" & Rows.Count),  _
xlFormulas, _
xlPart, , xlNext)
If Not Rafound1 Is Nothing Then
If InStr(Rafound1, "--") > 0 Then
Cells(LoI, 1) = Mid(Rafound1, InStr(Rafound1, "--") + 2)
End If
End If
End If
End With
Next LoI
End Sub
Gruß Hajo
Anzeige
AW: Inhalte gemäß Liste austauschen
01.07.2017 09:35:43
stormlamp
Vielen Dank
Freundliche Grüße
stormlamp
AW: Inhalte gemäß Liste austauschen
01.07.2017 10:00:48
Sepp
Hallo Sturmleuchte,
in ein allgemeines Modul von Datei 1.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrPath As String = "E:\Forum\" 'Pfad von Date2
Const cstrFile As String = "Datei2.xlsx" 'Name von Datei2
Const cstrTable As String = "Tabelle2" 'Tabelle in Datei2

Sub replaceNames()
Dim strRef As String, rng As Range, rngC As Range

strRef = "'" & cstrPath & "[" & cstrFile & "]" & cstrTable & "'!"

With Sheets("Tabelle1")
  Set rng = .Range("A2:A" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
  For Each rngC In rng
    rngC.Formula = "=IFERROR(INDEX(" & strRef & "B:B,MATCH(""" & rngC.Value & """," & strRef & "A:A,0)), """ & rngC.Value & """)"
  Next
  rng = rng.Value
End With
End Sub

Sub replaceNames2()
Dim strRef As String, rng As Range, rngC As Range

strRef = "'" & cstrPath & "[" & cstrFile & "]" & cstrTable & "'!"

With Sheets("Tabelle1")
  Set rng = .Range("A2:A" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
  For Each rngC In rng
    rngC.Formula = "=IFERROR(INDEX(" & strRef & "A:A,MATCH(""" & rngC.Value & """," & strRef & "B:B,0)), """ & rngC.Value & """)"
  Next
  rng = rng.Value
End With
End Sub

Gruß Sepp

Anzeige
Datei2 muss nicht geöffnet sein! o.T.
01.07.2017 10:01:46
Sepp
Gruß Sepp

Beide Richtugen mit einem Code
01.07.2017 10:14:45
Sepp
Hallo nochmal,
geht auch mit einem Makro in beide Richtungen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrPath As String = "E:\Forum\" 'Pfad von Date2
Const cstrFile As String = "Datei2.xlsx" 'Name von Datei2
Const cstrTable As String = "Tabelle2" 'Tabelle in Datei2

Sub replaceNames()
Dim strRef As String, rng As Range, rngC As Range

strRef = "'" & cstrPath & "[" & cstrFile & "]" & cstrTable & "'!"

With Sheets("Tabelle1")
  Set rng = .Range("A2:A" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
  For Each rngC In rng
    rngC.Formula = "=IFERROR(INDEX(" & strRef & "B:B,MATCH(""" & rngC.Value & """," & _
      strRef & "A:A,0)), IFERROR(INDEX(" & strRef & "A:A,MATCH(""" & rngC.Value & """," & _
      strRef & "B:B,0)), """ & rngC.Value & """))"
  Next
  rng = rng.Value
End With
End Sub

Gruß Sepp

Anzeige
Schnelle ohne Formeln
01.07.2017 11:37:04
Sepp
Hallo nochmal,
eine schnellere Variant bei vielen Daten.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrPath As String = "E:\Forum\" 'Pfad von Datei2
Const cstrFile As String = "Datei2.xlsx" 'Name von Datei2
Const cstrTable As String = "Tabelle2" 'Tabelle in Datei2

Sub replaceNamesII()
Dim objWB As Workbook, objOpen As Workbook, rng As Range, bolOpen As Boolean
Dim varValues As Variant, lngIndex As Long, varRet As Variant

On Error GoTo ErrExit

Application.ScreenUpdating = False

If Dir(cstrPath & cstrFile, vbNormal) <> "" Then
  With Sheets("Tabelle1")
    Set rng = .Range("A2:A" & Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row))
    varValues = rng
  End With
  
  For Each objOpen In Application.Workbooks
    If objOpen.FullName = cstrPath & cstrFile Then
      Set objWB = objOpen
      bolOpen = True
      Exit For
    End If
  Next
  
  If objWB Is Nothing Then Set objWB = Workbooks.Open(cstrPath & cstrFile)
  
  With objWB.Sheets(cstrTable)
    For lngIndex = 1 To UBound(varValues, 1)
      varRet = Application.Match(varValues(lngIndex, 1), .Columns(1), 0)
      If IsNumeric(varRet) Then
        varValues(lngIndex, 1) = .Cells(varRet, 2)
      Else
        varRet = Application.Match(varValues(lngIndex, 1), .Columns(2), 0)
        If IsNumeric(varRet) Then
          varValues(lngIndex, 1) = .Cells(varRet, 1)
        End If
      End If
    Next
  End With
  
  If Not bolOpen Then objWB.Close False
  
  rng = varValues
End If

ErrExit:

Application.ScreenUpdating = True

Set objWB = Nothing
Set rng = Nothing
End Sub

Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige