![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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 ячеек соответствующим образом и перейти к следующей строке. Помогите пожалуйста решить проблему!!! Заранее спасибо… |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 412
|
![]()
А если так:
Private Sub CommandButton1_Click() Sheets("Массив").Select If f > 0 Then Sheets("Массив").Range("B1:GS1").Copy |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
![]()
Спасибо!
Воистину, все гениальное просто ![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
![]()
Маленький нюанс! В случае, если ячейка по 1 столбцу пустая, то макрос первый столбец заполняет пустыми значениями (как и надо), а остальные - формулами.
А как и остальные ячейки строки сделать аналогичными? |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 412
|
![]()
Сделайте такое начало:
Private Sub CommandButton1_Click() Sheets("Массив").Select Sheets("Массив").Range("B2:GS1000") .Select Selection.ClearContents |
![]() |
![]() |
![]() |
#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-й), поместил во все ячейки этих пустых строк вместо формул пустые значения (как значения). С первым столбцом получается, а с остальными - нет. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
![]()
Нашел свою ошибку сам! Надо было в копируемом диапазоне не B1:GS1000 ставить, а B1:GS1.
Спасибо за помощь!!! |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 412
|
![]()
Первые строки кода должны полностью очистить все ячейки в диапазоне B2:GS1000. Дальше, если находится пустая я чейка в столбце А, строка не заполняется и все ячейки этой строки остаются пустыми. Что не так?
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 96
|
![]()
Нет, теперь как раз все так как надо! Спасибо!
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обработка массива, с++ | 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 |