Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vasiliy74
    к слову, лучше то, что можно сделать без выделения, делать без него. например:
    Код:
        With Sheets("Лист1").Cells
          .ClearContents
          .ClearComments
        End With



    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 13:40 01-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Спасибо что посвятил!!  РАБОТАЕТ!  ух сколько щя. я поправлю летать просто всё будет
     
    Добавлено:
    Вот типа решил написать удаление строк с нулевыми значениями в столбце D  
     немогу понять как её удалить? удаляю только ячейку
     

    Код:
    Dim start_cell As Range
    Set start_cell = Worksheets("Total_E").Cells(2, "D")
    With Worksheets("Total_E")
        Set in_r = Range(start_cell, start_cell.End(xlDown))
        'in_r.Select 'проверка выбора диапозона
    End With
    index = start_cell.End(xlDown).Row
    While index > 1
        If in_r.Cells(index, 1) = 0 Then
            With Worksheets("Total_E")
            .Cells(index, 1).Delete Shift:=xlUp 'А меня строку удалить нужно как?*
            End With
        End If
        index = index - 1
    Wend

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 14:20 01-08-2007 | Исправлено: vasiliy74, 14:41 01-08-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    Вот типа решил написать удаление строк с нулевыми значениями в столбце D


    Код:
      For Each r In ActiveSheet.UsedRange.Rows
        If Cells(r.Row, 4) = 0 Then r.Delete
      Next


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 15:10 01-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    да но они должны сдвигаться вверх, поэтому делаю цикл от конца

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 15:12 01-08-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    да но они должны сдвигаться вверх, поэтому делаю цикл от конца
    следующие за удаленной строкой строки вверх и сдвигаются. сам же писал
    Цитата:
    удаление строк с нулевыми значениями в столбце D

    Или тебе нужно удалять только ячейки из этого диапазона, удовлетворяющие условию? со сдвигом каждой следующей на позицию вверх? тогда
    Код:
      For Each r In ActiveSheet.UsedRange.Rows
        If Cells(r.Row, 4).Value = 0 Then Cells(r.Row, 4).Delete Shift:=xlUp
      Next

    Или объясни конкретнее.
     
    А. Все вижу. При двойном повторении значения отрабатывает несколько некорректно.
    минутку.
     
     
     
    Добавлено:
    Вот такой код подойдет?
    Код:
      For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
        If Cells(i, 4).Value = 0 Then ActiveSheet.Rows(i).Delete
      Next


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 15:14 01-08-2007 | Исправлено: Troitsky, 15:26 01-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Вот такой код подойдет?

    Сложно
    Вот теперь у меня всё работает!

    Код:
     
    Dim start_cell As Range
    Set start_cell = Worksheets("Total_E").Cells(2, "D")
    With Worksheets("Total_E")
        Set in_r = Range(start_cell, start_cell.End(xlDown))
    End With
    index = start_cell.End(xlDown).Row - 1  
    While index > 1
        If in_r.Cells(index, 1).Value = 0 Then
            With Worksheets("Total_E")
            .Rows(index + 1).Delete Shift:=xlUp
            End With
        End If
        index = index - 1
    Wend
     

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 15:40 01-08-2007
    Nickolasha

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ребята, такая вот ситуация и незнаю как выйти... помогите разобратся:
    есть форма в которую вноситься заказ, из нее при помощи функции "ВПР" количества переносятся в "козу" для составления инвойса, напротив артикулов, которые были заказаны стоят соответствующие количества, напротив тех артикулов, коих не заказывали соответственно стоят нули, а напротив названий групп стоит "Н\Д"....  
    далее приходиться в ручную удалять позиции напротив которых мы имеем 0 или же "Н\Д"...  
    суть вопроса: можно ли както сделать чтобы вручную не удалять строки с артикулом которые отображаються как 0 или "Н\Д".... тоесть это делалось автоматически! или хотябы чтобы выделялось цветом позиции которые подлежат удалению... автофильтр тут неприемлим.
    Заранее спасибо!

    Всего записей: 4 | Зарегистр. 01-08-2007 | Отправлено: 16:43 01-08-2007
    sun888



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Код:
     
    Sub macros()
    n1 = 1 'номер первой колонки'
    n2 = 3 'номер второй колонки'
    For i = 1 To 10000
     
    If (Cells(i, n1) = "Н\Д") Or (Cells(i, n2) = 0) Then
    Range(Cells(i, 1), Cells(i, 10)).Select
    With Selection.Interior
            .ColorIndex = 3 'цвет'
            .Pattern = xlSolid
        End With
    End If
    Next i
    Cells(1, 1).Select
    End Sub
     

    Всего записей: 93 | Зарегистр. 22-05-2007 | Отправлено: 17:29 01-08-2007 | Исправлено: sun888, 17:31 01-08-2007
    Nickolasha

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
     
    Sub macros()  
    n1 = 1 'номер первой колонки'  
    n2 = 3 'номер второй колонки'  
    For i = 1 To 10000  
     
    If (Cells(i, n1) = "Н\Д") Or (Cells(i, n2) = 0) Then  
    Range(Cells(i, 1), Cells(i, 10)).Select  
    With Selection.Interior  
            .ColorIndex = 3 'цвет'  
            .Pattern = xlSolid  
        End With  
    End If  
    Next i  
    Cells(1, 1).Select  
    End Sub  

     
    это я так понимаю только выделение цветом! а что подразумевается под "номер первой колонки" "номер второй колонки"?
     

    Всего записей: 4 | Зарегистр. 01-08-2007 | Отправлено: 17:41 01-08-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nickolasha

    Цитата:
    а что подразумевается под "номер первой колонки" "номер второй колонки"?  

    sun888
    поздразумевал, что у Вас в одном столбце встречается "0" а в другом - "#Н/Д"
     
     
    Вот только я не рекомендую пользоваться этим макросом!!!
    1) он просто не рабочий!!!!!!
    2) зачем перебирать 10000 строк!??! до последней использованной строки вполне достаточно будет.
    например так:
    Код:
     
    Sub WithErrorCells()
    Dim n1, n2, i, MaxRow As Long
    n1 = 2 'номер колонки, где прописаны формулы ВПР (где есть #Н/Д)
    MaxRow = Cells.SpecialCells(xlCellTypeLastCell).Row
    For i = 1 To MaxRow
     If IsError(Cells(i, n1)) Then
       With Range(Cells(i, 1), Cells(i, 10)).Interior
            .ColorIndex = 3 'Красный цвет'
            .Pattern = xlSolid
          End With
     End If
    Next i
    End Sub
     

     
    для удаления строчек с "#Н/Д" сделайте обратный цикл от MaxRow к 1
    и вместо выделения цветом - удаление всей строки
        Cells(i, 1).EntireRow.Delete
     
     
     
     
     
    Добавлено:
    вот, для удаления

    Код:
     
    Sub DeleteErrorCells()
    Dim n1, i, MaxRow As Long
    n1 = 2 'номер колонки, где прописаны формулы ВПР (где есть #Н/Д)
    MaxRow = Cells.SpecialCells(xlCellTypeLastCell).Row
    For i = MaxRow To 1 Step -1
     If IsError(Cells(i, n1)) Then
       ' ОБРАТИТЕ ВНИМАНИЕ - УДАЛЯЕТСЯ ВСЯ СТРОКА!! Т.е. на ней не должно быть нужных данных!!! Иначе удаляйте только часть ячеек! Примеры были тут совсем недавно!
       Cells(i, 1).EntireRow.Delete
     End If
    Next i
    End Sub
     

    ВНИМАНИЕ! Перед выполением макроса лучше сохранится - откат действий, произведенных в макросе НЕВОЗМОЖЕН!

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:39 02-08-2007
    Nickolasha

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    --------------------------------------------------------------------------------
    Nickolasha  
     
    Цитата:а что подразумевается под "номер первой колонки" "номер второй колонки"?    
     
    sun888  
    поздразумевал, что у Вас в одном столбце встречается "0" а в другом - "#Н/Д"  
     
     
    Вот только я не рекомендую пользоваться этим макросом!!!  
    1) он просто не рабочий!!!!!!  
    2) зачем перебирать 10000 строк!??! до последней использованной строки вполне достаточно будет.  
    например так:  
    Код:  
    Sub WithErrorCells()  
    Dim n1, n2, i, MaxRow As Long  
    n1 = 2 'номер колонки, где прописаны формулы ВПР (где есть #Н/Д)  
    MaxRow = Cells.SpecialCells(xlCellTypeLastCell).Row  
    For i = 1 To MaxRow  
     If IsError(Cells(i, n1)) Then  
       With Range(Cells(i, 1), Cells(i, 10)).Interior  
            .ColorIndex = 3 'Красный цвет'  
            .Pattern = xlSolid  
          End With  
     End If  
    Next i  
    End Sub  
       
     
     
    для удаления строчек с "#Н/Д" сделайте обратный цикл от MaxRow к 1  
    и вместо выделения цветом - удаление всей строки  
        Cells(i, 1).EntireRow.Delete  

     
    я должен подметить что в столбце встречается как 0 так и "Н\д"..... и прошу прощения но я совершенно незнаком с макросами... тем более я студент и привык к ctrl+C -> ctrl+v...
    напишите пожалуйста макрос полностью...
    заранее спасибо!

    Всего записей: 4 | Зарегистр. 01-08-2007 | Отправлено: 09:55 02-08-2007
    Doctor_Livsi

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    Doctor_Livsi
    Цитата:Нужно получить при обращении к Картинке, в частности jpg , размер картинки, а имеено Height & Width  
     
    а поясните, пожалуйста, что означает конкретно фраза "при обращении к Картинке"?  
    Как это выглядит в коде на VBA? И какая задача вообще стоит? Есть имя файла JPG, нужно узнать высоту и ширину, чтобы указать при загрузке картинки? Или что надо то?  
     
     
    Добавлено:  
    Вот здесь - http://vbnet.ru/subscribe/showsubscribe.asp?id=25  
    нашёл Определение типа рисунка и его размеров  
    пойдёт?

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

    Всего записей: 248 | Зарегистр. 27-07-2004 | Отправлено: 10:18 02-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    позновательные и прозрачные примеры, спасибо! очень многое узнал от вас, вы можно сказать мой учитель по VBA...  
     
    Добавлено:
    Оптимизация! Есть ли явные рекоминдации по оптимизации кода, например избегать select и т.п. и где их можно почитать? а также как замерить производительность макроса? думаю что онсновным показателем должено быть время выполнения, а вторым возможно колл-во операций или шагов как по ф8..
     

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 10:22 02-08-2007 | Исправлено: vasiliy74, 11:30 02-08-2007
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    Не могу понять как писать переменные в формулах, например:

    Запиши макрос, когда вставляешь формулу вручную на лист и посмотри результат в бейсике. Могу сказать, что со стороны Visual Basic существует свой синтаксис для формул в ячейки. Обрати внимание, в одном случае ставится запятая, как разделитель параметров, в другом - точка с запятой. Все названия функций в бейсике пишутся в английском эквиваленте. Если хочешь в самом коде использовать функции, которые используются в ячейках, то это надо делать так:

    Код:
    Application.WorksheetFunction.Min(myRange)

    это поиск минимального значения.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 11:26 02-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    снял вопрос, но непонял твой ответ,
    записал так и заработало:  
    in_r.Cells(c1.Row, 1).FormulaR1C1 = "=IF(RC[-1]<>0,RC[-1]/SUM(R2C[-1]:R" & index - 1 & "C[-1]),0)"
     
    Добавлено:
    как определить переменная в коде, чётное значение или нет?  

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 11:32 02-08-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    как определить переменная в коде, чётное значение или нет?


    Код:
      If myVariable Mod 2 = 0 Then
        ' четность
      Else
        ' нечетность
      End If

     
     
     
    Добавлено:
    Мужики, ну уж по основам языка вопросы можно, наверное, с помощью поисковиков или литературы для начинающих решать?
     
    И если уж стремиться к изучению языка, то вот в таком случае, например, можно было поинтересоваться что за конструкция такая With ... End With, прежде чем использовать ее не к месту, в том числе и понимание кода затрудняя...


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 13:39 02-08-2007 | Исправлено: Troitsky, 13:51 02-08-2007
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Почему Значение out_r выбирается не из листа Total_E а из того что было активно до запуска макроса, хотя out_r1 выбирается не смотря на это строго из Totol_E?
     

    Код:
    With Worksheets("Total_E")
        Set start_cell = .Cells(1, "O")
        Set out_r1 = Range(start_cell.End(xlDown).Offset(3, 0), start_cell.End(xlDown).Offset(65000, 0))
        Set out_r = Range(Cells(start_cell.End(xlDown).Row + 3, "B"), "B65000")
    End With

     
    Добавлено:
    Troitsky
    к сожалению новичку в VBA и Help не всегда удаётся найти то что нужно и это не говорит о том что он не искал! зная основы Excel я сделал не совсем рационально

    Код:
    If myVariable/2-Round(myVariable/2,0) = 0 Then  
        ' четность  
    Else  
        ' нечетность  
    End If

    а вот ты как опытный VBA показал как стоит это делать рационально! -в шапке не написанно что этот топик только для профисионалов, такие как вы помогают стать такими как вы! спасибо!
     
    Добавлено:
    Про оптимезацию, если код длинный нужно ли очищать объявленные переменные или как их выгружать? может стоит разбить код на несколько макросов и потом их последовательно вызывать в главном?

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 13:46 02-08-2007 | Исправлено: vasiliy74, 13:55 02-08-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    Почему Значение out_r выбирается не из листа Total_E а из того что было активно до запуска макроса, хотя out_r1 выбирается не смотря на это строго из Totol_E?

    потому что, еще раз говорю
    Цитата:
    если уж стремиться к изучению языка, то ... можно было поинтересоваться что за конструкция такая With ... End With, прежде чем использовать ее не к месту, в том числе и понимание кода затрудняя...

    во третей и четвертой строках диапазон у тебя, как раз и берется из "листа по умолчанию", активного...
     

    Цитата:
    Про оптимезацию, если код длинный нужно ли очищать объявленные переменные или как их выгружать? может стоит разбить код на несколько макросов и потом их последовательно вызывать в главном?
    можешь вот тут почитать. есть интересные мысли.
     
     
     
    Добавлено:
    Так же нужно стараться не применять тип Variant (переменные занимают больше памяти), ограничивать область видимости переменных...
    Очень хорошо об оптимизации кода написано у Рода Стивенса в книге "Visual Basic. Тестирование и отладка программ". Многое можно отнести и к VBA.


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:06 02-08-2007
    dummy84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите если можете...
     
    хочу заняться удалением лишних строк и столбцов...
    допустим есть у меня масив данных 8 столбцов на 500 строк
    а над ним или слева от него есть ячейки с какими то данными
    как сделать так что бы этот масив переместился в ячейку А1 а все остальное просто удалить?  
     
    вот так я удаляю все пустые строчки, а вот если есть данные то проблема.... плиз помогите новичку
     
      LastRow = Cells.Find(What:="*", After:=[A1], _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious).Row
            'Search for any entry, by searching backwards by Columns.
                    LastColumn = Cells.Find(What:="*", After:=[A1], _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlPrevious).Column
                         
        For r = LastRow To 1 Step -1
                        Application.ScreenUpdating = False
                        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
        Next r
        For k = LastColumn To 1 Step -1
                        Application.ScreenUpdating = False
                        If Application.CountA(Columns(k)) = 0 Then Columns(k).Delete
        Next k

    Всего записей: 29 | Зарегистр. 11-07-2007 | Отправлено: 00:09 03-08-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dummy84
    1)
    Цитата:
    Application.ScreenUpdating = False  

    Делать это в цикле - только сильно замедлять работу.
    Сделайте один раз в начале макроса
    и не забудьте в конце макроса, после всех действий
    Application.ScreenUpdating = True
     
    2) я вижу что вы пытаетесь удалить данные...
    Только CountA(..) считает ПУСТЫЕ ячейки... т.е. Вы будете удалять ТОЛЬКО пустые ячейки.
     
    не проще ли создать новый лист
    и одной командой скопировать туда начиная с A1 весь ваш диапазон
    "из 8 столбцов на 500 строк" ?...
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 07:22 03-08-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru