Вытащить ненулевые значения из 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