Excel BOM项目低级别

时间:2018-01-26 16:42:52

标签: excel excel-vba excel-formula vba

根据父项和子项的简化列表,如何根据列F获得每个项目的低级别。快乐的cosider是公式或vba解决方案。

enter image description here

2 个答案:

答案 0 :(得分:0)

如果数据始终采用您首先显示最低排名项目的格式,您是否可以使用Vlookup?

= VLOOKUP(E2,A:B,2,假)

这会在第一次出现A时将项目拉到A的右侧。如果您需要最后一项,那么您可以使用:

= VLOOKUP(E2,A:B,2,真)

答案 1 :(得分:0)

我已经使用以下vba来查找独立工作的项目的低级别,以便初始排序顺序。每个项目的低级别显示在C列中,我打算复制和删除重复项以获得简明列表。只需要找到一种方法来确定何时停止循环。

enter image description here

Sub setlowlevel()

Dim lowlevel As Integer
Dim StartRow As Long
Dim LastRow As Long

'Find lowlevels
lowlevel = 0
StartRow = 2
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Do

Sheet4.Range("C" & StartRow).Select
ActiveCell.FormulaR1C1 = "=IF(COUNTIF(R" & StartRow & "C2:R" & LastRow & "C2,RC[-2])=0," & lowlevel & "," & lowlevel + 1 & ")"
Selection.AutoFill Destination:=Range("C" & StartRow & ":C" & LastRow)


    Range("A" & StartRow & ":C" & LastRow).Select
    ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("C" & StartRow & ":C" & LastRow) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet4").Sort
        .SetRange Range("A" & StartRow & ":C" & LastRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

lowlevel = lowlevel + 1
StartRow = Sheet4.Range("C:C").Find(what:=lowlevel, after:=Sheet4.Range("C1"), LookIn:=xlValues).Row

Loop Until ???????????

End Sub