Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Два взаимосвязанных массива.

Автор Igor_Tr, 14.05.2012, 14:30

« назад - далее »

Igor_Tr

Нужна помощь с решением сортировки.
Просто пример.
Есть два массива взаимосвязанных массива arrNUM() и ARRname()
arrNUM=Array(10, 5, 44),
ARRname=Array("зеленый", "синий", "золотистый") где выдержано условие arrNUM(а) =ARRname(а)
Нужно отсортировать arrNUM() без потери связи с ARRname().
Как действую я средствами VBA.
1. Создал временный лист.
2. Записал на него оба массива рядом.
3. Отсортировал запись по числам.
4. Результат записал в соответствующие массивы.
5. Удалил временный лист.
В результате связь arrNUM(а) =ARRname(а) осталась.
Подскажите, пожалуйста, как это сделать без записи -считывания
массивов на лист. Спасибо.

Poltava

ну не знаю первое что пришло в голову
1) объявить еще два массива
2) первый приравнять массиву чисел
3) отсортировать массив средствами VBA
4) перебрать циклом получившийся масив
в цыкле
5) найти в исходном массиве соответствующий элемент
6) узнать его адрес
7) вернуть в массив 4 элемент из 2 массива под номером который мы выше определили
Все массивы отсортированы если нужно то приравняли получившиеся массивы исходным
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Igor_Tr

Может, кому интересно.
В стандартную процедуру сортировки массива ввел еще одну переменную:

First = LBound(arrNUM) '
    Last = UBound(arrNUM) '
    For i = First To Last - 1
        For j = i + 1 To Last
            If arrNUM(i) > arrNUM(j) Then
                Tmp = arrNUM(j)
                Tmp_1 = ARRname(j)
                arrNUM(j) = arrNUM(i)
                ARRname(j) = ARRname(i)
                arrNUM(i) = Tmp
                ARRname(i) = Tmp_1
            End If
        Next j
    Next i
   
    For i = LBound(arrNUM) To UBound(arrNUM)
   
     Debug.Print arrNUM(i)
     Debug.Print ARRname(i)

    Next i

Все работает, но удовольствия нет. Я слабый в массивах. Чуствую, это можно сделать все одним двухмерным.