Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
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
suchen und ersetzen
Detlef
Hallo zusammen,
ich bekomme aus einer Oracle-Datenbank Werte, die ich mir per VBA in das 1. AB importiere. Nun müssen nachträglich die Spalten C - E in Abhängigkeit der Eintragung in Spalte C+D angepasst werden.
Im 2. AB stehen die erforderlichen Korrekturen. In Spalte A steht der Such_Index. Wenn dieser Such_Index im 1. AB (ergibt sich aus Spalte C+D) gefunden wird, sollen die Spalten C - E entsprechend der Eintragung im 2. AB angepasst werden.
Hoffe, das ich mich nicht zu verquer ausgedrückt habe. Eine zusammengedampfte Beispieldatei habe ich hochgeladen.
https://www.herber.de/bbs/user/68046.xls
Im 1. AB habe ich so um die 40.000 Zeilen und 60 Spalten. Die Zeilen im 2. AB halten sich in Grenzen (um die 20 Zeilen).
Mit einem Replace komme ich hier gedanklich nicht weiter, weil ich nicht weiss wie ich den stricken muß. Bin für jede Idee dankbar.
Gruß Detlef

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: suchen und ersetzen
17.02.2010 00:24:47
Josef
Hallo Detlef,

lade bitte das nächste Mal eine Mappe ohne VBA-Schutz ond ohne Makros die beim Öffnen der Datei Fehler produzieren hoch, dann erhöht sich deine Chance auf eine Antwort.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub update()
  Dim objShDaten As Worksheet, objShPARA As Worksheet
  Dim rng As Range, rngFind As Range
  Dim strDone() As String, lngCalc As Long
  
  On Error GoTo ErrExit
  lngCalc = Application.Calculation
  Application.Calculation = xlCalculationManual
  
  Set objShDaten = Sheets("Daten_1_AKTU")
  Set objShPARA = Sheets("PARA")
  
  Redim strDone(0)
  
  With objShPARA
    For Each rng In .Range("C3:C" & Application.Max(3, .Cells(.Rows.Count, _
        3).End(xlUp).Row))
      Set rngFind = Nothing
      Set rngFind = objShDaten.Columns(4).Find(What:=rng, LookIn:=xlValues, _
        LookAt:=xlWhole)
      If Not rngFind Is Nothing Then
        Do
          strDone(UBound(strDone)) = rngFind.Address(0, 0)
          Redim Preserve strDone(UBound(strDone) + 1)
          If rngFind.Offset(0, -1) = rng.Offset(0, 4) Then
            rngFind.Offset(0, -1) = rng.Offset(0, 3)
            rngFind.Offset(0, 1) = rng.Offset(0, 1)
            rngFind = rng.Offset(0, -1)
          End If
          Set rngFind = objShDaten.Columns(4).FindNext(rngFind)
        Loop While Not rngFind Is Nothing And Not _
          (IsNumeric(Application.Match(rngFind.Address(0, 0), strDone, 0)))
      End If
    Next
  End With
  
  ErrExit:
  Application.Calculate
  Application.Calculation = lngCalc
  Set rng = Nothing
  Set rngFind = Nothing
  Set objShDaten = Nothing
  Set objShDaten = Nothing
End Sub

Gruß Sepp

Anzeige
AW: suchen und ersetzen
17.02.2010 10:02:05
Detlef
Hallo Sepp,
natürlich, dachte auch ich hätte alle Module gelöscht. Aber heute Morgen auf der Fahrt ins Büro fielen mir meine Sünden ein. Ich hatte "DieseArbeitsmappe" vergessen. Beim nächsten Mal versuche ich besser zu bereinigen bevor ich hochlade.
Vielen Dank für Deine Hilfe, funktioniert super.
Gruß Detlef
AW: suchen und ersetzen
17.02.2010 11:23:12
Detlef
Hallo Sepp,
so richtig rund läuft es doch noch nicht. Wenn ich im 2. AB mehrere Zeilen habe, wird immer nur die Updateinformation der 1. Zeile genommen und die entsprechenden Zeilen im 1. AB geändert.
Die anderen werden aus dem 2. AB nicht abgearbeitet. Wenn ich dann das Makro erneut starte, wird die 2. Zeile aus dem 2. AB abgearbeitet, usw.
Mir ist nicht klar an welcher Stelle in Deinem Code ich da eingreifen muß.
Gruß Detlef
Anzeige
AW: suchen und ersetzen
17.02.2010 11:57:42
Josef
Hallo Detlef,

so solte es laufen.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub update()
  Dim objShDaten As Worksheet, objShPARA As Worksheet
  Dim rng As Range, rngFind As Range
  Dim strDone() As String, lngCalc As Long
  
  On Error GoTo ErrExit
  lngCalc = Application.Calculation
  Application.Calculation = xlCalculationManual
  
  Set objShDaten = Sheets("Daten_1_AKTU")
  Set objShPARA = Sheets("PARA")
  
  With objShPARA
    For Each rng In .Range("C3:C" & Application.Max(3, .Cells(.Rows.Count, _
        3).End(xlUp).Row))
      Erase strDone
      Redim strDone(0)
      Set rngFind = Nothing
      Set rngFind = objShDaten.Columns(4).Find(What:=rng, LookIn:=xlValues, _
        LookAt:=xlWhole)
      If Not rngFind Is Nothing Then
        Do
          strDone(UBound(strDone)) = rngFind.Address(0, 0)
          Redim Preserve strDone(UBound(strDone) + 1)
          If rngFind.Offset(0, -1) = rng.Offset(0, 4) Then
            rngFind.Offset(0, -1) = rng.Offset(0, 3)
            rngFind.Offset(0, 1) = rng.Offset(0, 1)
            rngFind = rng.Offset(0, -1)
          End If
          Set rngFind = objShDaten.Columns(4).FindNext(rngFind)
        Loop While Not rngFind Is Nothing And Not _
          (IsNumeric(Application.Match(rngFind.Address(0, 0), strDone, 0)))
      End If
    Next
  End With
  
  ErrExit:
  Application.Calculate
  Application.Calculation = lngCalc
  Set rng = Nothing
  Set rngFind = Nothing
  Set objShDaten = Nothing
  Set objShDaten = Nothing
End Sub

Gruß Sepp

Anzeige
AW: suchen und ersetzen
17.02.2010 13:18:15
Detlef
Hallo Sepp,
nein, leider keine Veränderung. Ich habe Dir die Beispieldatei mit Deinem Makro nochmals hochgeladen (jetzt ohne Überraschungen).
https://www.herber.de/bbs/user/68070.xls
Wenn man das Makro mehrfach startet, nimmt es jeweils die nächste Zeile.
Gruß Detlef
AW: suchen und ersetzen
17.02.2010 13:51:52
Josef
Hallo Detlef,

aber jetzt hab ich den "Wurm" gefunden.

' **********************************************************************
' Modul: modUmwandeln Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub update()
  Dim objShDaten As Worksheet, objShPARA As Worksheet
  Dim rng As Range, rngFind As Range
  Dim strDone() As String, lngCalc As Long, strAddr As String
  
  On Error GoTo ErrExit
  lngCalc = Application.Calculation
  Application.Calculation = xlCalculationManual
  
  Set objShDaten = Sheets("Daten_1_AKTU")
  Set objShPARA = Sheets("PARA")
  
  With objShPARA
    For Each rng In .Range("C3:C" & Application.Max(3, .Cells(.Rows.Count, _
        3).End(xlUp).Row))
      Erase strDone
      Redim strDone(0)
      Set rngFind = Nothing
      Set rngFind = objShDaten.Columns(4).Find(What:=rng, LookIn:=xlValues, _
        LookAt:=xlWhole)
      If Not rngFind Is Nothing Then
        Do
          Debug.Print rng.Value, rngFind.Address(0, 0)
          rngFind.Interior.ColorIndex = 6
          If strDone(0) <> Empty Then Redim Preserve strDone(UBound(strDone) + _
            1)
          strDone(UBound(strDone)) = rngFind.Address(0, 0)
          If rngFind.Offset(0, -1) = rng.Offset(0, 4) Then
            rngFind.Offset(0, -1) = rng.Offset(0, 3)
            rngFind.Offset(0, 1) = rng.Offset(0, 1)
            rngFind = rng.Offset(0, -1)
          End If
          Set rngFind = objShDaten.Columns(4).FindNext(rngFind)
          If Not rngFind Is Nothing Then strAddr = rngFind.Address(0, 0)
        Loop While Not rngFind Is Nothing And Not _
          IsNumeric(Application.Match(strAddr, strDone, 0))
      End If
    Next
  End With
  
  ErrExit:
  Application.Calculate
  Application.Calculation = lngCalc
  Set rng = Nothing
  Set rngFind = Nothing
  Set objShDaten = Nothing
  Set objShDaten = Nothing
End Sub

Gruß Sepp

Anzeige
AW: suchen und ersetzen
18.02.2010 10:26:23
Detlef
Hallo Sepp,
besten Dank, das sieht jetzt gut aus.
Gruß Detlef

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige