Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 12:48   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

doober, спасибо, уловил. Хотя на практике чаще Dim M6() As Variant, что смысла не имеет задавать - массивы одинаковые...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.04.2011, 14:07   #12
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Код:
Data = Application.CountIf([B:B], ">0")

Dim M6()
ReDim M6(1 To Data)
M6(i) = i

Dim M7()
ReDim M7(1 To Data + 1)
M7(i) = Application.Max(Range(Cells(i + 1, 2), Cells(i + 1, 5)))

' Вот теперь есть массив значений M7 и чтобы не обращаться к ячейкам
' хочу сравнить массивы
Dim M8()
    ReDim M8(1 To Data)
    M8(i) = IIf(M7(i) = M7(i + 1), 1, 0)
Ну вот опять, здесь то где ошибка?
А)-(дрей вне форума Ответить с цитированием
Старый 02.04.2011, 14:21   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Нет. Проверил при i=10 и числах в [B:B].
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.04.2011, 14:25   #14
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

А я вот подозреваю ошибку, потому что временно дабавляю такие куски кода, чтобы видеть массивы:
Код:
Cells(i + 1, 100) = M6(i)

Cells(i + 1, 101) = M7(i)

Cells(i + 1, 102) = M8(i) 'не обрабатывается должным образом
Массив M8 выдает все значения "0", и не одному значению не присваивает "1"

Последний раз редактировалось А)-(дрей; 02.04.2011 в 14:28.
А)-(дрей вне форума Ответить с цитированием
Старый 02.04.2011, 14:46   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В окне Locals легче массив отслеживать.
В итоге M8(10)=0

Код:
Sub tt()
i = 10
Data = Application.CountIf([B:B], ">0")

Dim M6()
ReDim M6(1 To Data)
M6(i) = i

Dim M7()
ReDim M7(1 To Data + 1)
M7(i) = Application.Max(Range(Cells(i + 1, 2), Cells(i + 1, 5)))

' Вот теперь есть массив значений M7 и чтобы не обращаться к ячейкам
' хочу сравнить массивы
Dim M8()
    ReDim M8(1 To Data)
    M8(i) = IIf(M7(i) = M7(i + 1), 1, 0)

End Sub
Но если так:
M7(i) = Application.Max(Range(Cells(i + 1, 2), Cells(i + 1, 5)))
M7(11) = Application.Max(Range(Cells(i + 1, 2), Cells(i + 1, 5)))
то в итоге M8(10)=1.

В приведённом выше куске кода ведь нет цикла, и как на деле меныется i - мы не знаем.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.04.2011 в 14:52.
Hugo121 вне форума Ответить с цитированием
Старый 02.04.2011, 15:36   #16
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Цитата:
В окне Locals легче массив отслеживать.
Вы уж не ругайте сильно, не умею я им пользоваться

Вот файл, своими примитивными способами я вывожу в 100-том столбце CX результаты полученного массива M8, там все "0", хотя должно получиться по аналогии с 8-ым столбцом H.
Вложения
Тип файла: rar файл обработки.rar (61.3 Кб, 7 просмотров)
А)-(дрей вне форума Ответить с цитированием
Старый 02.04.2011, 17:24   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Почему на каждом шаге цикла Вы создаёте массив заново? Не в этом ли причина?
Насчёт окна Locals - в режиме отладки, т.е. при пошаговом прогоне или на паузе можно просмотреть содержимое массива, кликая по дереву.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.04.2011 в 17:26.
Hugo121 вне форума Ответить с цитированием
Старый 02.04.2011, 19:13   #18
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Это что надо сделать, объявление массива перед объявлением цикла задавать? Просто я щас думаю тоже что на каждом этапе цикла, задается массив, а не только очередное его значение...
А)-(дрей вне форума Ответить с цитированием
Старый 02.04.2011, 19:21   #19
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Сделал объявление массивов перед началом открытия цикла... не помогло однако.. мда
Кстати с окном Locals я разобрался - останавливаю цикл и смотрю просчитанные значения массивов на "+"

Последний раз редактировалось А)-(дрей; 02.04.2011 в 19:31.
А)-(дрей вне форума Ответить с цитированием
Старый 02.04.2011, 19:29   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну а если так:
Код:
    '=====================================Объявление цикла==================================================
    Dim M6()
    ReDim M6(1 To Data)
    Dim M7()
    ReDim M7(1 To Data + 1)
    Dim M8()
    ReDim M8(1 To Data)

    For i = 1 To Data
    '======================================================================================================
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.04.2011 в 19:33.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать код C++ slim>>> Помощь студентам 10 25.01.2011 00:05
Очень большой цикл, как оптимизировать? Marsel737 Общие вопросы Delphi 3 06.09.2010 10:08
Как оптимизировать код Delphi OST_K Помощь студентам 1 30.05.2010 06:59
Как оптимизировать плиззз alex181264 Microsoft Office Excel 3 13.04.2009 06:27
как может оптимизировать в фунцию? w1ze Помощь студентам 2 07.01.2008 23:19