VBA Excel Выполнение операций над двумя массивами - PullRequest
1 голос
/ 10 марта 2011

У меня проблемы с циклом for в моей программе.Прямо сейчас у меня есть два массива, которые заполнены произвольными числами.Эти два массива имеют одинаковый размер.По сути, я хочу, чтобы пользователь указал, какую операцию он хочет выполнить над массивами, а затем я выполню их (учитывая, что массивы имеют одинаковые размеры).Ниже приведен код, который я пытаюсь заполнить массивом ответов с разницей между исходными двумя массивами:

If (LCase(diffOrPercent = "difference")) Then
    For iRow = 1 To totalRow
        For iCol = 1 To totalCol
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

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

Примечание: та же ошибка возникает, если циклы for переходят от 0 к концу - 1, когда я ставлю следующее:

answerArray(iRow, iCol) = s2Array(iRow, iCol).Value2 - s3Array(iRow, iCol).Value2

А также когдаЯ помещаю Значение вместо Value2.

Спасибо,

Джесси Смотермон

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Я понял, что оператор if был написан неправильно, поэтому часть кода операции даже не была нажата. Я облажался в скобках на LCase, поэтому коррекция ниже

If (LCase(diffOrPercent) = "difference") Then
    For iRow = 1 To totalRow
        For iCol = 1 To totalCol
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

Это делает так, что переменная diffOrPercent будет все в нижнем регистре вместо ..... ну, я не думаю, что что-то случится, когда мой исходный оператор if будет реализован, что имеет смысл, потому что ничего внутри оператора if не получено. Извините, что я полностью потратил впустую время каждого на этом, но я действительно ценю все быстрые ответы

0 голосов
/ 10 марта 2011

Первое, что выскакивает, это то, что вы предполагаете массивы с начальным индексом 1. Если вы явно не указали, что где-то (либо при объявлении массива, либо с помощью Option Base 1), то первыйэлемент в массиве будет иметь индекс 0.

Если вы не знаете границ массива до времени выполнения, обычно безопаснее использовать функции LBound и UBound для программного определения границ:

If (LCase(diffOrPercent) = "difference") Then
    For iRow = LBound(s2Array, 1) To UBound(s2Array, 1)
        For iCol = LBound(s2Array, 2) To UBound(s2Array, 2)
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

Обратите внимание, что здесь я предполагаю, что s2Array, s3Array и answerArray имеют одинаковые размеры.Таким образом, я проверяю только границы s2Array.

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