Как суммировать два значения из разных строк и получить комбинацию значений, близких к определенному значению? - PullRequest
0 голосов
/ 28 июня 2019

Сумма должна иметь одно значение из строки 1 и другое значение из столбца 1. Нужен список комбинаций, сумма которых близка к 1309. [Значения строки 1] = [720 830 924,1192,1208,1232,1493,1908, 2086, 2361] [значения в столбце 1] = [85,5 108,8 136,7 169,5 207,3 251,3 301,7 359,2 424,4 497,9 579,7]

Sub ExtractValues()

    Dim iLowVal As Integer
    Dim iHighVal As Integer

    iLowVal = InputBox("Lowest value wanted?")
    iHighVal = InputBox("Highest value wanted?")

    For Each cell In Range("A16:A26", "C15:L15")
        If cell.Total <= iHighVal And cell.Value >= iLowVal Then
            ActiveCell.Value = cell.Value
            ActiveCell.Offset(1, 0).Activate
        End If
    Next
End Sub

1 Ответ

0 голосов
/ 28 июня 2019

Я не совсем уверен, что вы пытаетесь сделать здесь (или почему), но я попробую это сделать.

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

Dim targetrow() as variant 
dim targetcol() as variant

cell.total это не вещь, вы, вероятно, имели в виду cell.value.

Если вы хотите добавить один элемент из строки и один из столбца, ваш текущий код не сделает этого. Он просто перебирает все ячейки в вашем диапазоне и сравнивает значение с ihighval и ilowval.

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

ActiveCell.Value = cell.Value
ActiveCell.Offset(1, 0).Activate
Sub ExtractValues()

    dim iLowVal as integer
    dim iHighVal as integer
    dim TargetRow() as variant
    dim TargetCol() as variant
    dim RowElem as variant
    dim ColElem as variant
    dim CurrentRow as integer
    dim CurrentCol as integer    


    iLowVal = InputBox("Lowest value wanted?")
    iHighVal = InputBox("Highest value wanted?")

    TargetRow = Range("A16:A26").value
    TargetCol = Range("C15:L15").value

    CurrentRow = 16

    for each RowElem in TargetRow
        if RowElem >= iLowVal and RowElem <= iHighVal then
            CurrentCol = 3
            for each ColElem in TargetCol
               if ColElem >= iLowVal and ColElem <= iHighVal then
                   cells(CurrentRow, CurrentCol).value = RowElem + ColElem
               end if
               CurrentCol = CurrentCol + 1
            Next
         end if
         CurrentRow = CurrentRow + 1
     Next
End Sub

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

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