2016-06-04 13 views
3

ich will n Zellen in Spalte C und D, wobei n-Wert in Spalte BWie Werte mit dem Referenzwert in einer Spalte zu erhöhen, in einer anderen Spalte

mein Code hinzuzufügen:

Sub mycode() 
Dim lastrow1 As Long 
    lastrow1 = Range("A" & Rows.Count).End(xlUp).Row 

Dim lastrow2 As Long 
    lastrow2 = Range("C" & Rows.Count).End(xlUp).Row 

For h = 2 To lastrow1 
    For i = 2 To lastrow2 
     If Sheet1.Cells(h, 1).Value = Sheet1.Cells(i, 3).Value Then 
      P = 10 
      t = i + 1 
       For j = 1 To Cells(i, 2).Value 
        Sheet1.Cells(t, 3).Insert shift:=xlDown 
        Sheet1.Cells(t, 4).Insert shift:=xlDown 
        Sheet1.Cells(t, 3).Value = Sheet1.Cells(i, 3).Value 
        Sheet1.Cells(t, 4).Value = Sheet1.Cells(i, 4).Value + P 
        P = P + 10 
        t = t + 1 
       Next j 
     End If 
    Next i 
Next h 
End Sub 

Probe Eingang 1:

Input

Nach dem obigen Code ausgeführt wird, ausgegeben wird

Output after running macro

Problem: Jetzt, als ich in Zeile 3 und Ausführen von Code zweiten Eintrag hinzufügen etwas schief läuft:

Eingang:

enter image description here

Falscher Ausgang erzeugt durch Code:

enter image description here

richtige Ausgabe sollte sein:

enter image description here

Ich bin nicht in der Lage zu bekommen, wo mein Code nicht in Ordnung ist. Bitte helfen.

EDITED: Probe 2: Eingang:

enter image description here

Ausgang:

enter image description here

+0

Entschuldigt unklar Titel. – Abhijeet

+0

Vielen Dank für Ihr Feedback. Ich habe den Titel jetzt bearbeitet. Entschuldigung für Unannehmlichkeiten. – Abhijeet

+0

Sehr nett. :-) Vielen Dank. –

Antwort

2

bearbeitet ich Ihren Code und Kommentare hinzugefügt.

Aktualisiert Code:

Sub mycode() 
Application.ScreenUpdating = False 'Optional speedup code 
Dim lastrow1 As Long 
lastrow1 = Range("B" & Rows.Count).End(xlUp).Row 
Dim Inputs() As Variant   'Create an array to hold positions 
ReDim Inputs(lastrow1 - 1)  'Make it big enough to hold all positions 
For x = 2 To lastrow1   'For each Position 
    Inputs(x - 1) = Cells(x, 4) 'Store The Position 
Next x 
OutRow = 2  'Row to output to 
Increment = 10 'Increment 
For Each c In Range("B2:B" & lastrow1) 'For each "count" 
    For j = 0 To c.Value 
     Cells(OutRow, 3).Value = c.Offset(0, -1).Value 'Put the letter in column C 
     If j = 0 Then 'If it's the first new letter, start at the position 
      Cells(OutRow, 4).Value = Inputs(c.Row - 1) 
     Else 'Otherwise, just add our increment to the number above 
      Cells(OutRow, 4).Value = Cells(OutRow - 1, 4).Value + Increment 
     End If 
     OutRow = OutRow + 1 
    Next j 
Next c 
Application.ScreenUpdating = True 'Optional speedup code 
End Sub 

fertige Ausgabe:

Pic4

+1

Vielen Dank user1274820. Vielen Dank !!!! Das Verschieben war unnötig. Ihr Code funktioniert sehr gut. Vielen Dank für den Code und Ihre großartige Hilfe. – Abhijeet

+0

Ich habe diesen Code für das zweite Beispiel ausprobiert (siehe bearbeiteter Beispiel 2) Aber der Code gibt nicht die erwartete Ausgabe. Die Ausgabe sollte wie im bearbeiteten Teil angegeben sein. Können Sie bitte helfen? – Abhijeet

+1

Ja, diese zweiten Eingänge ändern sich und sind relevant. – Abhijeet

Verwandte Themen