2017-03-29 2 views
-1

HI, also habe ich eine Reihe von Daten, die ich gerne kopieren würde. Grundsätzlich möchte ich eine if-Funktion erstellen. Wenn wir in Spalte B nach einer leeren Zeile suchen und diese leer ist, führen Sie eine Schleife zur nächsten Zeile durch und fahren Sie fort bis zur ersten nicht leeren Zeile. Wenn wir eine nicht leere Kopie treffen, werden alle Zellen aus allen leeren Zeilen in Spalte c kopiert.Kopieren Sie eine Liste mit nicht leeren und leeren Zeilen als Kopf- und Endlosschleife

Sub NotReadys() 

' NotReadys Macro' 
Dim Z As Integer 'Supplier Beginning Row' 
Dim X As Integer 'Next Non Blank row' 
Dim Q As Integer '# of suppliers' 
Dim Y As Integer 'Paste Row' 
Y = 6 
'For T = 1 To 195 


ActiveWindow.SmallScroll Down:=-33 


Range("B" & Y).Select 
Selection.Copy 

Range("E" & Y).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("F" & Y).Select 
Application.CutCopyMode = False 
ActiveCell.FormulaR1C1 = "=TEXTJOIN(CHAR(10),FALSE,RC[-3]:R[30]C[-3])" 
Range("F" & Y).Select 
ActiveWindow.SmallScroll Down:=-30 
Range("F" & Y).Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
    Y = Y + 1 
    Next T 

    End Sub 

http://imgur.com/XGwB4XR

+0

Sie müssen Ihren bereits vorhandenen Code anzeigen, da es sich bei StackOverflow nicht um einen kostenlosen Code-Schreibservice handelt. –

+0

Es sieht so aus, als ob Sie versuchen, eine Liste aller nicht leeren Werte in Spalte B zu erstellen. Die Liste wird durch Zeilenvorschübe getrennt, sodass alle Werte in eine einzelne Zelle übertragen werden können. Versuchen Sie, eine Anzahl von Listen aus den Gruppen von Werten in Spalte B zu erstellen, die durch Leerzeichen oder nur eine Liste getrennt sind? – Jeeped

+0

@Jeeped Einige Kontext Ich habe eine Liste von Lieferanten und mehrere Bestellungen (Bestellungen) Ich habe die Daten organisiert, um eine Spalte Lieferanten und andere POs zu sein. Ziel ist es, den Lieferanten und alle zugehörigen Pos in einer Zelle zu kopieren, bis das Skript einen neuen Lieferanten findet. daher ein neues, nicht leeres und es übernimmt alle oben genannten Zellen, weil diese POs diesem Lieferanten entsprechen. Ich möchte eine nicht leere Liste in Spalte B mit allen Leerzeichen in B erstellen eine Aktion, um alle Zellen in der nächsten Spalte zu kopieren. Ich hoffe, das hilft. –

Antwort

0

Ich habe Schwierigkeiten, die Struktur Ihrer Daten zu verstehen, aber For Each x In Selection mit Ihnen helfen könnte. Ich gehe davon aus, dass Ihre Daten zumindest ähnlich dem unten, wo die Lieferanten Namen in der Spalte A sind, und POs sind in Spalte B

 
    | A | B | C | D | 
-----|-------|-------|-------|-------| 
    1 | s1 | PO1 |  |  | 
-----|-------|-------|-------|-------| 
    2 | s2 | PO2 |  |  | 
-----|-------|-------|-------|-------| 
    3 | s3 |  |  |  | 
-----|-------|-------|-------|-------| 
    4 | s4 | PO3 |  |  | 
-----|-------|-------|-------|-------| 

Dieser Code wird jeder Lieferant und PO kopieren (wo PO nicht leer ist) zu den Spalten C und D:

outRow = 1 ' Set this to the index of the first row you want to output to 

' Run through each cell in Selection, left to right, top to bottom 
For Each selCell In Selection 
    ' Check for non-blank, but only if we're looking at column 2 (B) 
    If selCell.Column = 2 & selCell <> "" then 
    ' Store the selected Row and Column 
    sRow = selCell.Row 
    sCol = selCell.Column 

    ' Has the effect of prefixing ActiveSheet to any values that start with "." 
    With ActiveSheet 
     ' Copy value from cols 1 and 2 (A & B) to col 3 and 4 (C & D) 
     .Cells(outRow, 3).Value = .Cells(sRow, sCol - 1).Value 
     .Cells(outRow, 4).Value = selCell.Value 
    End With 

    outRow = outRow +1 ' Moves to next output row 
    End If 
Next 

In meinem Beispiel vorausgesetzt, Sie A1 ausgewählt: B4, bevor die Funktion ausgeführt wird, werden Sie die folgende Ausganges.

 
    | A | B | C | D | 
-----|-------|-------|-------|-------| 
    1 | s1 | PO1 | s1 | PO1 | 
-----|-------|-------|-------|-------| 
    2 | s2 | PO2 | s2 | PO2 | 
-----|-------|-------|-------|-------| 
    3 | s3 |  | s4 | PO3 | 
-----|-------|-------|-------|-------| 
    4 | s4 | PO3 |  |  | 
-----|-------|-------|-------|-------| 

Ich nehme an, dass Sie die Macro Aufnahmeoption verwenden, um den Code zu produzieren, den Sie haben; Dies ist ein guter Weg, um zu lernen, wie VBA funktioniert (die meisten von uns haben dies irgendwann getan), produziert aber keinen guten Code. Die eingebaute Dokumentation in Excel ist wirklich sehr gut und es lohnt sich, sie anzuschauen, wenn Sie die Beschränkungen des Rekorders treffen.

Edit: Je mehr ich auf Ihre Frage schaue, desto weniger sicher bin ich über das, was Sie fragen, aber hoffentlich drückt das oben genannte zumindest Sie in die richtige Richtung.

+0

Ich habe angehängt, was die Daten in der Frage mögen mögen. Bitte klicken Sie auf den Link. Grundsätzlich ist es das Ziel, das Kopieren und Einfügen von Bestellungen pro Lieferant zu automatisieren. Wenn der Code also einen neuen Lieferanten findet, werden alle oben genannten Bestellungen ausgeführt. Ich hoffe, das hilft. –

+0

Also ich denke, was Sie tun, wäre mit einer PivotTable leichter zu erreichen. Oder Sie könnten ändern, was ich geschrieben habe, um die Werte in Ihre Spalte F zu verketten. Wenn Sie nicht ändern können, was ich geschrieben habe, dann würde ich Ihre Hausaufgaben für Sie machen und Sie wären nicht in der Lage, es zu ändern, wenn Dinge ändern sich. –

Verwandte Themen