Получение различных значений из столбца Dynami c на другой лист - PullRequest
0 голосов
/ 26 мая 2020

У меня есть лист под названием Inventory, в котором есть список номеров образцов. Этот список растет автоматически, поэтому мне нужно включить весь столбец. Это выглядит примерно так: enter image description here

I have another sheet named Inventory Count in which I want to count the unique sample numbers. For this data, the inventory count should look something like this:

введите описание изображения здесь

Я пробовал сделать это с помощью расширенного фильтра, но он не позволяет мне иметь 2 отдельных листа, что очень важно в моем случае.

Пожалуйста, помогите мне с любой формулой или кодом VBA . Заранее спасибо

1 Ответ

0 голосов
/ 26 мая 2020

Ссылка на ссылку

Вы можете определить имя для столбца B на листе «Инвентарь», например InventoryRecords

InventoryRecords = =OFFSET(Inventory!$B$1,,,COUNTA(Inventory!$B:$B),1)

В листе «инвентаризация», введите формулу в A2

=IFERROR(INDEX(InventoryRecords,MATCH(0,INDEX(COUNTIF($A$1:A1,InventoryRecords),0,0),0)),"")

Скопируйте ее, пока не получите пробелы и дополнительные, скажем, 100 строк. Я бы скопировал количество строк, эквивалентное количеству соответствующих предметов инвентаря в мастере инвентаризации.

В столбце B введите формулу counttif.

Предложение Рона Розенфельда в комментариях к вопросу выбрать уникальное элементы с помощью расширенного фильтра, вы также можете записать макрос. Это более эффективно, чем приведенная выше формула, которая будет продолжать вычисления каждый раз.

В листе «Инвентарь»

Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayAlerts = False
If Not Intersect(Target, Range("B:B")) Is Nothing Then
    Dim SourceSh As Worksheet, DestSh As Worksheet
    Set SourceSh = Worksheets("Inventory"): Set DestSh = Worksheets("Inventory Count")

    Dim FilterRng As Range, UniqueRng As Range, DestRng As Range, Cl As Range
    Set FilterRng = SourceSh.Range("B1:B" & Range("B" & SourceSh.Rows.Count).End(xlUp).Row)
    FilterRng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True

    Set UniqueRng = FilterRng.SpecialCells(xlCellTypeVisible)
    Set DestRng = DestSh.Range("A1")

    UniqueRng.Copy DestRng
    Application.CutCopyMode = False

    Set DestRng = DestSh.Range("A2:A" & UniqueRng.Cells.Count)
    For Each Cl In DestRng
    Cl.Offset(0, 1) = WorksheetFunction.CountIf(FilterRng, Cl)
    Next

    FilterRng.AdvancedFilter Action:=xlFilterInPlace, Unique:=False
End If
Application.DisplayAlerts = True
End Sub
...