使用" A" +增加数字填充第一组空白单元格,使用" X" +增加数字

时间:2016-05-26 19:28:33

标签: excel vba excel-vba auto-increment is-empty

我正在寻找关于Excel的VBA代码的方向。

我从原理图和零件清单中导出信息。零件清单开头通常有3-5个项目没有参考标志(ref des),零件清单末尾有几个项目没有参考指定。

第一个空白组(部件列表的开头)我想将ref des分配为" A"和递增的数字(即A1,A2,A3)。

我想将列表末尾的下一组空白项目分配为" X"加上数字(X1,X2,X3,X4)。

我唯一能找到的就是填写所有相同的文字,或只是数字。我发现无法指定不同的群体。

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

所以它就像逻辑一样:如果列A(Pos)中的信息而不是B(RefDes)中的信息B =" A1",则下一个递增的数字直到B(RefDes)不为空,然后然后填充A(Pos)的下一个空B(Ref Des)单元格(RefDes)B =" X1"递增,直到A(Pos)为空(范围结束)

希望这是足够的信息。

这是我使用的一个例子,但对第二组不起作用,我不想搜索特定文本,因为它可能略有不同。

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"

'更多与End Sub相同

1 个答案:

答案 0 :(得分:0)

您的示例数据显示一个标题行,后跟从单元格A2开始的三个连续数据列。我无法按照您展示的代码段尝试实现的目标,如果我说实话它看起来与您的问题无关。

我已将您的问题解释为: -

  1. 您需要空的RefDes从上到下填充A N (其中 N 是从1开始的递增数字)。

  2. 您需要空的RefDes从下到上填充X N (其中 N 是从1开始的递增数字)。

  3. 这就是我计划教育并向您展示的内容,如果我错过了某些内容,因为它不在问题中,我仍然回答了问题,并且应该提交一个新的后续问题 IF 如果没有支持,您无法成功完成更改。

    你需要在这里发生两个循环来处理自上而下的路线,而另一个循环来处理自下而上的路线,你还需要一个变量来保存我们的递增数字。

    我在示例代码中添加了注释,以向您展示正在发生的事情。

    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
    

    我想解释一下WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row因为这是一条好线但令人困惑。它正在查找工作表底部的最后一个填充单元格的行号。

    转到表格的底部(A栏):WkSht.Cells(WkSht.Rows.Count, 1)

    找到空白单元格的结尾(即查找内容):.End

    向上看:(xlUp)

    返回该查找的行号:.Row