Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Feld kopieren mit Logik

Feld kopieren mit Logik
21.02.2014 14:22:32
Tom
Hy Freunde!
Folgendes Excel Bsp:
Release | Liste | Nummer |Quelle | Bearbeiter
DEPT 2.3.4.3 | Batchänderung | 47112 |Kopie V | Thomas
ROER 6.4.0.0 | Batchänderung | 74762 |Kopie V |
ROER 6.4.0.0 | Inbetriebnahme | 74762 |Kopie V | Clemens
ROER 6.4.0.0 | Mussschrit | 74762 |Kopie V |
ROER 6.4.0.0 | CR | 74762 |Kopie V |
ROER 6.4.0.0 | CR | 75001 |Depmp | Karin
In meinem Excel gibts ca 1000e Zeilen die Unterschiedlich Elemente.
Es geht um die Befüllung leerer Zellen in der Spalte "Bearbeiter"
=> Wenn die Werte in den Zellen der Spalte "Nummer" und Zellen in der Spalte "Quelle" gleich sind und es einen Bearbeiter da drinnen gibt, dann soll dieser auf alle zutreffenden Felder kopiert werden.
=> Es kann aber auch sein, dass im Felder "Bearbeiter" nie was drinne steht, dann soll das auch so bleiben
Bsp von oben => nun das Ergebnis:
Release | Liste | Nummer |Quelle | Bearbeiter
DEPT 2.3.4.3 | Batchänderung | 47112 |Kopie V | Thomas
ROER 6.4.0.0 | Batchänderung | 74762 |Kopie V | Clemens
ROER 6.4.0.0 | Inbetriebnahme | 74762 |Kopie V | Clemens
ROER 6.4.0.0 | Mussschrit | 74762 |Kopie V | Clemens
ROER 6.4.0.0 | CR | 74762 |Kopie V | Clemens
ROER 6.4.0.0 | CR | 75001 |Depmp | Karin
Folgenden CODE hab ich zz, jedoch nehm ich immer den ersten Vorkommenden Namen im Feld und ü _ berschreib mir so die anderen Felder (falls das genommenen Feld leer ist) - :(

Private Sub Bearbeiter()
Dim intZaehler1 As Integer
Dim intZaehler2 As Integer
Dim lngLZeile As Long
Dim strQuelle As String
Dim strBearbeiter As String
Dim strBatch As String
Dim strInbe As String
Dim strMuss As String
Dim strCR As String
Dim lngNummer As Long
strBatch = "Batchänderung"
strInbe = "Inbetriebnahmeschritt"
strMuss = "Mussschritt"
strCR = "CR"
lngLZeile = Worksheets("TODO").Cells(Rows.Count, 1).End(xlUp).Row
For intZaehler1 = 2 To lngLZeile
Select Case Cells(intZaehler1, 2).Value
Case strBatch
strBearbeiter = Cells(intZaehler1, 5).Value
lngNummer = Cells(intZaehler1, 3).Value
For intZaehler2 = 2 To lngLZeile
Select Case Cells(intZaehler2, 3).Value
Case lngNummer
If Cells(intZaehler2, 2).Value = strBatch Or Cells(intZaehler2, 2). _
Value = strInbe Or Cells(intZaehler2, 2).Value = strMuss Or Cells(intZaehler2, 2).Value = strCR  _
_
Then
Cells(intZaehler2, 5).Value = strBearbeiter
End If
End Select
Next
Case strInbe
strBearbeiter = Cells(intZaehler1, 5).Value
lngNummer = Cells(intZaehler1, 3).Value
For intZaehler2 = 2 To lngLZeile
Select Case Cells(intZaehler2, 3).Value
Case lngNummer
If Cells(intZaehler2, 2).Value = strBatch Or Cells(intZaehler2, 2). _
Value = strInbe Or Cells(intZaehler2, 2).Value = strMuss Or Cells(intZaehler2, 2).Value = strCR  _
_
Then
Cells(intZaehler2, 5).Value = strBearbeiter
End If
End Select
Next
Case strMuss
strBearbeiter = Cells(intZaehler1, 5).Value
'Call MsgBox(" " & Cells(intZaehler1, 5).Value)
lngNummer = Cells(intZaehler1, 3).Value
For intZaehler2 = 2 To lngLZeile
Select Case Cells(intZaehler2, 3).Value
Case lngNummer
If Cells(intZaehler2, 2).Value = strBatch Or Cells(intZaehler2, 2). _
Value = strInbe Or Cells(intZaehler2, 2).Value = strMuss Or Cells(intZaehler2, 2).Value = strCR  _
_
Then
If Len(Cells(intZaehler2, 5).Value) = 0 Then
Cells(intZaehler2, 5).Value = strBearbeiter
End If
End If
End Select
Next
End Select
Next
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Feld kopieren mit Logik
21.02.2014 15:49:41
Christian
Hallo,
eine Möglickeit:
In einem ersten Durchlauf:
Wenn im Feld Bearbeiter ein Eintrag vorhanden ist, dann die Einträge aus C und D jeder Zeile zusammen setzen und als Key von Schlüssel-Werte-Paaren in ein Dictionary schreiben. Die zugehörigen Werte sind die Bearbeiter.
In einem zweiten Durchlauf:
Wenn ein Schlüssel (zusammengesetzt aus C&D) existiert, dann in Spalte E den zugehörigen Wert (=Bearbeiter) schreiben.
Fertig - keine Fallunterscheidung und keine verschachtelten Schleifen.
Gruß
Christian

Anzeige
AW: Feld kopieren mit Logik
24.02.2014 07:48:43
Tom
Hy,
ich hab bis dato noch nichts mit Keys und Schlüsselwortpaaren entwickelt bzw. davon nichts gehört.
Wie muss ich dies in meinem Fall konkret anwenden?
lg

AW: Feld kopieren mit Logik
24.02.2014 18:04:23
Christian
Hallo Tom,
das Dictionary Objekt initieren:

Dim objDic As Object
Set objDic = CreateObject("Scripting.Dictionary")

im ersten Durchlauf:
nachdem du den Key zusammengesetzt hast:

objDic(strKey) = .Cells(i, 5)

In zweiten Durchlauf:
auch wieder den Key zusammensetzen und mit
If objDic.Exists(strKey) Then
.Cells(i, 5) = objDic(strKey)
End If
zunächst prüfen, ob ein key existiert und den Wert in Spalte E schreiben.
Am Ende die Variable zurücksetzen:

Set objDic = Nothing

Gruß
Christian
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige