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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2011, 14:54   #1
Maryver
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 13
По умолчанию Проверка ячейки на то содержит ли она значение из массива

Макрос выполняет для каждой ячейки в диапазоне следующие действия:
1.запомнить старую формулу
2.изменить значение на определенную величину
3.запомнить результат
4.вернуть формулу на место

Столкнулась с проблемой: если данные заданы в виде массива, макрос выдает ошибку. Как найти ячейки относящиеся к массиву и обработать их так же как и остальные?
Maryver вне форума Ответить с цитированием
Старый 12.04.2011, 19:01   #2
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Уважаемый автор, выкладывайте примеры кода - будет результативнее, уверяю вас!
А)-(дрей вне форума Ответить с цитированием
Старый 13.04.2011, 18:20   #3
Maryver
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 13
По умолчанию

Вот часть, которая запоминает и восстанавливает старые значения, например. Не работает, если в рейндж попадают значения заданные формулой массива.

Вопрос в том, как определить является ли ячейка частью массива и как выделить диапазон относящийся к массиву и работать с ним.

Код:
Set ParamChange = Range(RefEdit1.Value)
    
        If ParamChange.Count = 1 Then
        ParamOld1 = ParamChange.Formula
        Column2 = ParamChange.Value
        
        Else
        ReDim ParamOld(ParamChange.Count)
        ReDim ParamOldValue(ParamChange.Count)
        pch = 0

'Fill array with old formulas
            For Each ParamCell In ParamChange
            pch = pch + 1
            ParamOld(pch) = ParamCell.Formula
            Next ParamCell
        pch = 0

'Fill array with old values
            For Each ParamCell In ParamChange
            pch = pch + 1
            ParamOldValue(pch) = ParamCell.Value
            Next ParamCell
            
            
        End If

'Restore
    If ParamChange.Count = 1 Then
        ParamChange.Formula = ParamOld1
    Else
    pch = 0
      For Each ParamCell In ParamChange
      pch = pch + 1
      ParamCell.Formula = ParamOld(pch)
      Next ParamCell
    End If
Maryver вне форума Ответить с цитированием
Старый 13.04.2011, 18:27   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Попробуйте проверить ячейку на IsArray() - нет примера под рукой...
P.S. Ошибся - с подсказки SAS888 - проверять нужно на HasArray...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 14.04.2011 в 09:17.
Hugo121 вне форума Ответить с цитированием
Старый 14.04.2011, 06:33   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно сделать так:
Запоминать формулы в двумерном массиве. В первой размерности хранить саму формулу, а во второй - признак того, является ли эта формула формулой массива.
При вставке формул из массива на лист, контролировать признак "массивности" и в зависимости от этого, вставлять в ячейку требуемую формулу.
Т.е. приблизительно так:
1. Формирование массива:
Код:
Option Base 1
ReDim ParamOld(ParamChange.Count, 2): pch = 0
For Each ParamCell In ParamChange
    pch = pch + 1
    ParamOld(pch, 1) = ParamCell.Formula
    ParamOld(pch, 2) = IIf(ParamCell.HasArray, 1, 0)
Next
Вставка формул на лист:
Код:
Option Base 1
pch = 0
For Each ParamCell In ParamChange
    pch = pch + 1
    If ParamOld(pch, 2) = 0 Then ParamCell.Formula = ParamOld(pch, 1) Else ParamCell.FormulaArray = ParamOld(pch, 1)
Next
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.04.2011, 14:40   #6
Maryver
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 13
По умолчанию

Спасибо за помощь!
Maryver вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значение на другом листе и подставить значение следующей ячейки ElenaNTro Microsoft Office Excel 12 11.02.2019 12:44
сравнить значение из массива и выбрать значение konrad Microsoft Office Excel 4 15.03.2011 20:40
Как перевести значение ячейки массива char в int в Си SASS Общие вопросы C/C++ 1 10.12.2009 14:44
Проверка ячейки на значение и форматирование диапазона voievod Microsoft Office Excel 5 24.08.2009 11:24
"плавают" ячейки таблицы, если она внутри fieldset barbiturat HTML и CSS 1 26.11.2008 14:01