Вытащить ненулевые значения из Excel

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

Когда я запускаю симплексный алгоритм через средство решения, то получаются значения в таблице для количества потребляемых изменений, чтобы отразить то, что вы должны есть с учетом ограничений.

Я хочу сделать его гибким, чтобы я мог изменять ограничения и получать разные результаты, но то, что я хочу, - это простой способ показать сделанные выборы. В настоящее время у меня есть совпадение индекса на другой вкладке с таблицей и значениями, к которым я затем применяю фильтр и снимаю все элементы с "0" для потребляемого количества, однако это нужно делать каждый раз, когда я запускаю решатель.

Есть ли способ вытащить ненулевые значения и отобразить, к какому элементу они относятся, без необходимости каждый раз переделывать фильтр?

1 ответ

Вот простая процедура, которую я использую, чтобы найти что-то в таблице электронных таблиц и опубликовать результаты на той же странице (ее легко изменить, чтобы разместить на другом листе). Надеюсь, это поможет или направит вас в правильном направлении. (Грубо, но эффективно)

Private Sub CommandButton3_Click()
    'FIND A VALUE IN THE LIST AND POST RESULTS

Dim myName, myNumber, myComp

  'Clear the results area
With Worksheets("SheetName").Range("H2:J30").ClearContents
End With
x = 2   'The row to start posting results to
y = 0

  'This is the range to search
With Worksheets("SheetName").Range("A1:D300")

   Set found = .Find(What:=y, LookIn:=xlValues,  LookAt:=xlWhole)
      If Not found Is Nothing Then
        firstAddress = found.Address
      Do

        Set ws = Sheets("SheetName")
        myName = ws.Range("A" & found.Row).Value  'Value in column A
        myNumber = ws.Range("B" & found.Row).Value 'Value in column B
        myComp = ws.Range("C" & found.Row).Value   'Value in column C 

               'I use a MsgBox at first for testing, then comment it out  when I know it's working 
               'MsgBox myName & "   " & myNumber & "    " & myComp

                'Post the results to the desired area
                ws.Range("H" & x).Value = myName
                ws.Range("I" & x).Value = myNumber
                ws.Range("J" & x).Value = myComp
            x = x + 1
        Set found = .FindNext(found)
        If found Is Nothing Then
            GoTo DoneFinding
        End If
        Loop While Not found Is Nothing And found.Address <> firstAddress
   End If
DoneFinding:
End With
Range("A2").Select
End Sub
Другие вопросы по тегам