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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 17:59   #1
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Обработка массива макросом

Помогите пожалуйста!
Суть проблемы: есть массив данных, в котором ячейки в 1000 строк 1 столбца заполнены названиями (названия клиентов). Также есть 200 ячеек с различными формулами (в строке 1 от столбца 2 до 201). Пример в приложенном файле.
Необходим макрос, который бы проверял наличие названий в столбце 1 по всем строкам (от 2 до 1000) и в случае нахождения любого названия (то есть непустой ячейки) в столбце 1 копировал в ячейки соответствующей строки формулы из строки 1 по этому столбцу (и так по всем 200 столбцам, по 200 формулам). И после этого пересохранял полученный показатель как значение, а не как формулу.
А в том случае, если в 1 столбце не оказывалось значений, нужно чтобы в столбцы 2-201 соответствующей строки не помещалось никаких значений.
То есть на выходе массив по непустым строкам должен быть заполнен данными, полученными исходя из формул из строки 1 (столбцов 2-201) и сохраненных как значения.
В принципе половина проблемы у меня решена. То есть макрос, который обрабатывает определяет непустую ячейку в столбце 1, копирует формулу в определенный столбец и пересохраняет полученные данные как значение.
Проблема в том, что он обрабатывает только один столбец, а надо, чтобы обработал 200. А как сделать обработку не только строк, но и столбцов, я не пойму…
По сути, сначала макрос должен определить, является ли ячейка пустой, затем обработать 200 ячеек соответствующим образом и перейти к следующей строке.
Помогите пожалуйста решить проблему!!!
Заранее спасибо…
Вложения
Тип файла: rar Книга1.rar (23.1 Кб, 18 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 18.04.2009, 18:59   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

А если так:

Private Sub CommandButton1_Click()
Sheets("Массив").Select

If f > 0 Then
Sheets("Массив").Range("B1:GS1").Copy
pivas вне форума Ответить с цитированием
Старый 18.04.2009, 19:20   #3
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Спасибо!
Воистину, все гениальное просто
Иванов_ДМ вне форума Ответить с цитированием
Старый 18.04.2009, 20:09   #4
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
Вопрос

Маленький нюанс! В случае, если ячейка по 1 столбцу пустая, то макрос первый столбец заполняет пустыми значениями (как и надо), а остальные - формулами.
А как и остальные ячейки строки сделать аналогичными?
Иванов_ДМ вне форума Ответить с цитированием
Старый 18.04.2009, 21:32   #5
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Сделайте такое начало:

Private Sub CommandButton1_Click()
Sheets("Массив").Select
Sheets("Массив").Range("B2:GS1000") .Select
Selection.ClearContents
pivas вне форума Ответить с цитированием
Старый 18.04.2009, 22:06   #6
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Попробовал, вот что получилось... Явно попробовал неправильно, ибо не работает.

Private Sub CommandButton1_Click()
Sheets("Массив").Select
Sheets("Массив").Range("B2:GS1000") .Select
Selection.ClearContents

'Sheets("Массив").Cells(1, 1).Select
For r = 2 To 1000
'Sheets("Массив").Cells(r, 1).Select
StrValue = LCase(Sheets("Массив").Cells(r, 1).Value)

col = 2

Sheets("Массив").Cells(r, col).Value = ""

strsearch = ""
f = InStrRev(StrValue, strsearch, , vbTextCompare)
If f > 0 Then
Sheets("Массив").Range("B1:GS1").Co py
Sheets("Массив").Cells(r, col).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If

Next

Sheets("Лист управления").Select
End Sub

Может я не совсем четко сформулировал. Нужно чтобы макрос, найдя в 1 столбце незаполненные ячейки ("прорехи" или просто конец массива, если он закончится строке на 500-й), поместил во все ячейки этих пустых строк вместо формул пустые значения (как значения). С первым столбцом получается, а с остальными - нет.
Иванов_ДМ вне форума Ответить с цитированием
Старый 18.04.2009, 22:09   #7
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Нашел свою ошибку сам! Надо было в копируемом диапазоне не B1:GS1000 ставить, а B1:GS1.
Спасибо за помощь!!!
Иванов_ДМ вне форума Ответить с цитированием
Старый 18.04.2009, 22:14   #8
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Первые строки кода должны полностью очистить все ячейки в диапазоне B2:GS1000. Дальше, если находится пустая я чейка в столбце А, строка не заполняется и все ячейки этой строки остаются пустыми. Что не так?
pivas вне форума Ответить с цитированием
Старый 18.04.2009, 23:04   #9
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Нет, теперь как раз все так как надо! Спасибо!
Иванов_ДМ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка массива, с++ lusuj Помощь студентам 2 11.11.2008 19:27
Delphi - обработка двумерного массива dm.os. Помощь студентам 1 30.09.2008 23:32
[Delphi] создание и обработка двумерного массива screep Помощь студентам 5 16.06.2008 19:27
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44
Обработка вещественного массива Painsector Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 10.12.2007 19:48