2016-05-26 12 views
-1

Ich suche Richtung auf VBA-Code für Excel.Füllen Sie die erste Gruppe leerer Zellen mit "A" + inkrementierter Zahl, füllen Sie die zweite Gruppe mit "X" + inkrementierter Nummer

Ich habe Informationen aus einem Schaltplan und Teileliste exportiert. Am Anfang der Stückliste befinden sich normalerweise 3-5 Artikel, die keine Referenzbezeichner (ref des) haben, und mehrere Artikel am Ende der Stückliste, die nicht ref des zugewiesen sind.

Die erste leere Gruppe (Anfang der Teileliste) Ich möchte den ref des als "A" und eine inkrementierte Zahl (dh A1, A2, A3) zuweisen.

Ich möchte die nächste Gruppe von leeren Elementen am Ende der Liste als "X" plus die Nummer (X1, X2, X3, X4) zuweisen.

Das einzige, was ich finden konnte, ist mit dem gleichen Text oder nur Zahlen zu füllen. Ich habe keine Möglichkeit gefunden, die verschiedenen Gruppen zu bezeichnen.

Example of file data: 
    Pos RefDes Part Number 
    1   1-234 
    2   2-345 
    3   3-456 
    20 C1 5-678 
    21 C2 6-789 
    22 C3 7-345 
    158 U14 8-456 
    159 U18 8-058 
    167  9-176-1 
    168  9-272-1 
    169  10-349-1 
    171  10-883-1 
    172  11-1441-1 

So wäre es logisch sein wie: wenn Informationen in Spalte A (Po), aber nicht in B (Ref-Bestimmung) dem B = "A1", die nächsten fortlaufende Nummer, bis B (Ref-Bestimmung) nicht leer ist, dann nächste leere Zelle B (Ref Des), wo A (Pos) belegt ist, dann (RefDes) B = "X1" inkrementiert bis A (Pos) leer ist (Ende des Bereichs)

Hoffe, das ist genug Informationen.

Dies ist ein Beispiel von dem, was ich verwendet habe, aber nicht für die zweite Gruppe funktioniert und ich möchte nicht nach bestimmten Text suchen müssen, da es etwas anders sein könnte.

Sub AddRefDes_IfBlank() 

Dim X As String 
Dim n As Integer 

On Error Resume Next 

    Cells.Find(What:="PWA", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
    , SearchFormat:=False).Activate 
Cells.FindNext(After:=ActiveCell).Activate 
    ActiveCell(1, -1).Select 
    ActiveCell.FormulaR1C1 = "A1" 

‚mehr gleich dann End Sub

+0

'Ich bin auf der Suche nach VBA-Code für Excel 'das ist nicht, was SO ist. – findwindow

+0

Wissen Sie, wie man VBA schreibt? Hast du schon etwas probiert? Wenn Sie kein Programmierer sind, ist SO kein guter Ort, um Fragen zu stellen. – Charlie

+0

Ja, ich habe Code geschrieben, das ist das letzte kleine Stück, das ich nicht herausfinden konnte. Ich habe jetzt ungefähr eine Woche lang gesucht und getestet. Ich werde es weiter versuchen. – patRc

Antwort

0

Ihre Beispieldaten zeigt eine durch drei aufeinanderfolgende Spalten von Daten gefolgt Kopfzeile ausgehend von Zelle A2. Ich kann nicht folgen, was der Codeschnipsel, den du zeigst, versucht zu erreichen, wenn ich ehrlich bin, sieht es unabhängig von deiner Frage aus.

Ich habe Ihre Frage interpretiert, dass zu sein: -

  1. Sie müssen leer RefDes werden mit A N gefüllt (wobei N eine ansteigende Zahl von 1 beginnend) von oben nach unten .

  2. Sie müssen RefDes leer mit X N (wobei N eine Inkrementierung Zahl von 1 beginnend) von unten nach oben gefüllt werden.

Das ist, was ich zu erziehen planen und zeigen Sie, wenn ich etwas verpasst haben, weil es nicht in der Frage ist, habe ich beantwortet noch die Frage und eine neue Folge-Frage sollte IF eingereicht werden Sie können mit den Änderungen ohne Unterstützung nicht erfolgreich sein.

Sie benötigen zwei Schleifen, um hier auf die Top-Down-Route zu achten, und auf die andere, um auf die Bottom-Up-Route zu achten. Sie wollen auch eine Variable, die unsere Inkrementierungszahl enthält.

Ich habe Kommentare im Beispielcode hinzugefügt, um Ihnen zu zeigen, was passiert.

Public Sub Test() 
Dim LngCounter As Long 
Dim LngRow  As Long 
Dim WkSht  As Excel.Worksheet 

'First we connect to the worksheet we will be working ing 
Set WkSht = ThisWorkbook.Worksheets("Sheet1") 

    'Loop 1 - Top down 
    'Our row number it the first row of data 
    LngRow = 2 

    'This is the incrementing counter 
    LngCounter = 1 

    'This loop is processing every cell from B2 down until it gets to a non-blank one 
    Do Until WkSht.Cells(LngRow, 2) <> "" 

     'Update the cell with A and the number 
     WkSht.Cells(LngRow, 2) = "A" & LngCounter 

     'Prep the next number 
     LngCounter = LngCounter + 1 

     'Move to the next cell down 
     LngRow = LngRow + 1 
    Loop 


    'Loop 2 - Bottom up 
    'Our row number is worked out based on the last populated row from column A 
    LngRow = WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row 

    'This is the incrementing counter 
    LngCounter = 1 

    'This loop is processing every cell from the column B and last row in 
    'the table upwards until it gets to a non-blank one 
    Do Until WkSht.Cells(LngRow, 2) <> "" 

     'Update the cell 
     WkSht.Cells(LngRow, 2) = "X" & LngCounter 

     'Prep the next number 
     LngCounter = LngCounter + 1 

     'Move to the next cell up 
     LngRow = LngRow - 1 
    Loop 

'When we are finished we disconnect from the worksheet (free resources) 
'This is good practice 
Set WkSht = Nothing 

End Sub 

Ich möchte WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row erklären, wie es eine gute Linie, aber verwirrend. Es sucht nach der Zeilennummer der zuletzt befüllten Zelle vom unteren Ende des Arbeitsblatts nach oben.

Zum Ende des Blattes (Säule A): WkSht.Cells(WkSht.Rows.Count, 1)

das das Ende der leeren Zellen finden (dh Inhalte finden): .End

von der Suche nach oben: (xlUp)

Rückkehr der Zeilennummer des gefundenen: .Row

+0

Vielen Dank für die Hilfe, Gary und Macro Man. Ich hatte noch keine Zeit, es zu versuchen, aber das sieht so aus, als ob es mich in die richtige Richtung weist. Coding ist nicht mein Vollzeitjob, daher bin ich dankbar für die Hilfe der SO-Leute. Ich habe auf dieser Seite viele Informationen zu anderen Themen gefunden, die ich recherchiert habe. – patRc

+0

Das hat super funktioniert. – patRc

+0

@patRc Wenn Sie es als richtig markieren könnten, wäre das hilfreich. –

Verwandte Themen