VBA изменить данные массива с помощью оператора If - PullRequest
0 голосов
/ 02 февраля 2020

Миссия: Рассчитайте соответствующие типы кабелей и проверьте, сколько катушек мне нужно, в зависимости от длины, кол-ва и длины барабана.

В настоящее время: Мой код проверит длину барабана на соответствующей линии, но проверит ее по всем различным типам кабелей.

Как я могу: Изменить заполнение массива только соответствующими элементами?

Я проверяю, есть ли C = J и D = K и E = L. Это потому, что левая сторона листа - это отдельные длины, а правая - общая длина.

rInpStk общая длина барабана.

'Fill array with cable lengths
For i = 0 To UBound(CutArr, 1)
    Dim x As Integer
    For x = 7 To lastrow 'Commenting out this If will get me the same result
        If Cells(x, 3).Value = rInpStk.Offset(, -5) And _
           Cells(x, 4).Value = rInpStk.Offset(, -4) And _
           Cells(x, 5).Value = rInpStk.Offset(, -3) Then 'This does nothing
            CutArr(i, 0) = rInputCuts.Cells(i + 1, 2) 'I want these to only populate the same cable types
            CutArr(i, 1) = rInputCuts.Cells(i + 1, 1) 'If there is not a match then dont add that rows data to the array
            Exit For
        End If
    Next x
Next i

Example of Data

Нужно ли делать автофильтр? Если да, то как бы это реализовать.

После того, как это будет сделано, я хочу перейти к следующему типу кабеля.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 02 февраля 2020

Если ваша цель - создать таблицу, которую вы показываете под заголовком TOTALS , вы можете легко это сделать, используя Power Query, доступный с Excel 2010.

И если ваш Изменения данных в вашей первой таблице. Простой «Refre sh» обновит таблицу результатов и автоматически откорректирует изменения количества данных или типов в первой таблице.

  • Создайте пользовательский столбец общей длины, который является произведением длины ваших исходных данных * кол-во.
  • Затем сгруппируйте по столбцам 3-7 с помощью функции агрегирования SUM.
  • Удалите ненужные столбцы и измените порядок, чтобы получить желаемый порядок столбцов.

Все это можно сделать из пользовательского интерфейса с формулой пользовательского столбца [LENGTH]*[QTY]

MCode

let
    Source = Excel.CurrentWorkbook(){[Name="cableTbl"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"LENGTH", Int64.Type}, {"QTY", Int64.Type}, {"TYPE", type text}, {"SIZE", type text}, {"COL", type text}, {"CU ID", Int64.Type}, {"MAX ID", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each [LENGTH]*[QTY]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"LENGTH", "QTY"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"TYPE", "SIZE", "COL", "CU ID", "MAX ID"}, {{"LENGTH", each List.Sum([Custom]), type number}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Grouped Rows",{"LENGTH", "TYPE", "SIZE", "COL", "CU ID", "MAX ID"})
in
    #"Reordered Columns"

Результаты

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...