Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
Удаление строк макросом, исключая последнюю строку
 
Добрый вечер!
Благодаря знаниям и умениям знатоков удалось добавлять строки макросом в таблицы, расположенные на одном листе, не смещая при этом исходные таблицы: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=111903&a..., за что еще раз всем огромное спасибо.
Теперь появилась необходимость удалять строки в каждой таблице. Не имеет значения есть в них данные или нет.
Важно, чтобы нельзя было удалить строку, если она последняя в данной таблице. Помогите, пожалуйста.
Как избежать смещения таблицы при добавлении строк макросом?
 
Так ведь хочется не просто заполучить готовое решение, а еще и попытаться разобраться в нем, адаптировав под какие-то особенности.
Как избежать смещения таблицы при добавлении строк макросом?
 
Юрий М, спасибо огромное!!!
"подпилил" под свои наименования таблиц -- все работает!!!
Разобрался, как изменить количество копируемых столбцов (или ячеек в данном случае).
Но вот так и не понял, как изменить код, если нужно не одну строку добавить, а три. Причем часть ячеек объединенные, как в прилагаемом примере.
Как избежать смещения таблицы при добавлении строк макросом?
 
ЮрийМ, изначально все таблицы с одной пустой строкой и шапкой. После ее заполнения ползователь может добавить еще одну, если есть необходимость. Но у него могут быть данные только на одну строку в таблице. А может быть такое, что и вовсе не будет заполнять и перейдет к следующей таблице
Изменено: ДмСмирнов - 10.12.2018 21:47:14
Как избежать смещения таблицы при добавлении строк макросом?
 
_Igor_61, здравствуйте.
есть некоторое количество таблиц, которые заполняет пользователь. Например, в таблице 1 вводятся родственники: отец, мать, брат, сват и т.д. Изначально в таблице одна строка. После ее заполнения пользователь добавляет вторую и зполняет ее, затем еще одну. После того, как родственники закончились :) переходит к таблице 2 - например, опыт работы. Там тоже изначально одна строка. Заполнил первую, добавляет вторую и т.д. Далее таблица 3 и т.д.
конечно, он может вернуться к предыдущей таблице и добавить еще сведения.
ну вот как то так. Не очень кратко, но, хотелось бы верить, что понятно :)
Как избежать смещения таблицы при добавлении строк макросом?
 
Z, кнопка добавляет по одной строке, таких добавлений может быть сколь угодно много.
Строки добавляю пустые, внизу таблицы. Но для того, чтобы сохранить форматы делаю это копированием.
Изменено: ДмСмирнов - 10.12.2018 20:09:57
Как избежать смещения таблицы при добавлении строк макросом?
 
Цитата
Ігор Гончаренко написал:
никому еще не удавалось записать мысли макрорекордером
жаль, конечно. в противном случае я бы, вероятнее всего, без знания VBA смог бы справиться
а пока помощи прошу
Как избежать смещения таблицы при добавлении строк макросом?
 
Цитата
Ігор Гончаренко написал:
и если к какой-то строке Вы обращались  Rows(X), то после того как перед нею добавили N строк, обращайтесь к ней Rows(X + N)
тут мне совсем не понятно: как мне отследить сколько строк было добавлено? как определить N?
Как избежать смещения таблицы при добавлении строк макросом?
 
Юрий М, нет, я добавляю по одной строке -- больше нет необходимости
Как избежать смещения таблицы при добавлении строк макросом?
 
Ігор Гончаренко, понимать понимаю, но не контролирую :))))
Другими словами, все мое понимание в том, что макрос добавляет строку именно в том месте, где я ему указал.
Дальше этого мое понимание не простирается :) Потому и записал макрорекодером - знаний не хватает
Изменено: ДмСмирнов - 10.12.2018 19:46:10
Как избежать смещения таблицы при добавлении строк макросом?
 
а как мне его посчитать? ведь добавлений строк может быть сколь угодно много.
может быть нужно "привязаться" к шапке таблицы?
Как избежать смещения таблицы при добавлении строк макросом?
 
Ігор Гончаренко, так ведь с добавлением каждой новой строки адреса будут меняться?
Если, конечно, я под адресом правильно понимаю номер строки.  
Как избежать смещения таблицы при добавлении строк макросом?
 
Добрый всем вечер!
Есть три таблицы на одном листе. В каждую есть необходимость добавлять строки. Записал макрорекодером. Если идти снизу вверх (от Таблицы 3 к Таблице 1), то никаких проблем - строки копируются и добавляются. Но если, например, добавить несколько строк в Таблицу 1, то при выполнении макроса к таблице 2, строки добавляются уже со смещением (не в Таблице 2, а выше). Понимаю, почему это происходит, но не знаю, как это обойти.
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
приятно быть в числе некоторых
менее приятно быть в числе некоторых, о которых говорят в уничижительном смысле

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

что не так с первоначальным названием темы? в пояснении и сообщении я излагаю суть проблемы
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
выложил файл-пример на тысячу строк
работает, но ооочень медленно
если увеличить до 60 тысяч подвисает на неопределенное время
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Цитата
vikttur написал:
Название темы должно отражать суть задачи. Предложите новое. Модераторы заменят.
долго работает макроса при использовании СУММЕСЛИ :)?
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Цитата
Андрей VG написал:
А почему не делаете сводной? В чём смысл именно формулами?
Есть история продаж, например, с января по июль.
Нужно добавить к ней новый месяц, например, август, в котором могли появиться новые артикулы. Как это учесть при формировании сводной?
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Цитата
gling написал:
А макрос где? В формате .xlsx макросы не живут, выложите пример в формате .xls или .xlsm.
выложил.
понимаю, что он корявый :))) но в условиях отсутствия знаний vba приходится пользоваться макрорекодером
P.S. пользовался и макросом 1, и макросом 8
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Цитата
gling написал:... возможно есть формулы на других листа и они тормозят расчеты. СУММЕСЛИ не должна так тормозить
Да в том то и дело, что нет никаких формул, кроме СУММЕСЛИ. Я их с помощью Копировать - Вставить значения убираю в ходе выполнения макроса.
приложил файл
Изменено: ДмСмирнов - 01.09.2018 12:54:22
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Цитата
БМВ написал:
Ответ очевиден. Нужно оптимизировать процесс. Но так как он не описан тут , то помочь в этом мы не сможем.
:) старался не сильно загружать подробностями
Задача следующая: есть продажи артикулов по месяцам (строки - артикулы, столбцы - месяцы),  нужно каждый новый месяц добавлять новые продажи,при этом могут появляться новые артикулы. Я пошел по следующему пути: собрал на новый лист старые артикулы и новые, отсортировал их и удалил дубликаты. Далее на новом листе собираю данные с исходного при помощи СУММЕСЛИ и листа с данными нового месяца.
Вот и весь процесс :)
быстродействие СУММЕСЛИ, при использовании СУММЕСЛИ в диапазоне 60 т. срок на 60 столбцов пересчет происходит очень долго
 
Доброго дня!
С Днем знаний!
Поделитесь, пожалуйста, познаниями и опытом :))

Подтягиваю данные с одного листа на другой с помощью СУММЕСЛИ. Таблица очень большая: 60 тысяч + строк на 60 столбцов.
СУММЕСЛИ использую внутри макроса, написанного макрорекодером.
Запускаю макрос ---  время на выполнение уходит от 20 минут до ...
Попробовал в макрос добавить процедуру выключения/включения обновлений экрана и пересчетов в начале и в конце макроса. Значительно быстрее, но все равно долго.
Подскажите, как можно оптимизировать процесс?
Изменено: ДмСмирнов - 01.09.2018 14:20:39 (другой файл-пример)
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Anchoret, уже разобрался!
все дело в "неправильных" символах "---" в названии листа. Убрал - все заработало:))
Спасибо!
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Anchoret, конечно, как *xlsm сохранил. Он ведь с кучей макросов был.
Чудеса :))) Ваш  файл работает - мой нет :)))
Сначала думал, что дело все в апострофе перед данными в ячейке (кстати, так и не разобрался откуда он взялся и что значит). Апостроф убрал, но результат остался тем же: "Недопустимая ссылка".
файл прилагаю
Изменено: ДмСмирнов - 06.03.2018 22:55:20
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Anchoret, после выполнения макроса в столбце В значения ячеек определяются как гиперссылки, но когда нажимаю на нее появляется сообщение "Недопустимая ссылка"
Inputbox с выпадающим списком
 
Доброго всем дня/ночи))
Возможно ли совместить Inputbox и выпадающий список? Например: в диалоговом окне запрашиваем у пользователя "Введите город", пользователь может выбрать только предложенные варианты (по аналогии с выпадающим списком).
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Спасибо, Юрий!
Получилось вывести список листов, исключая сам "Реестр":
Код
Dim sheet As Worksheet
   Dim cell As Range
   s = 1
   With ActiveWorkbook
      For Each sheet In ActiveWorkbook.Worksheets
         If sheet.Name <> "Реестр" Then
         Set cell = Worksheets("Реестр").Cells(s + 2, 2)
         s = s + 1
         .Worksheets("Реестр").Hyperlinks.Add anchor:=cell, Address:="", SubAddress:="'" & sheet.Name & "'" & "!A1"
         cell.Formula = sheet.Name
         End If
      Next
   End With
End Sub

Но мой алгоритм предусматривает, что сначала создается лист с наименованием АВС, затем в столбце В в листе "Реестр" создается ячейке присваивается значение АВС.
Код
Sheets("Реестр").Select
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=R[1]C+1"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "='АВС'!R[1]C[-1]"
Часть данных в лист "Реестр" подтягивается этим же макросом из листа АВС, а часть вводится вручную. После добавления нового листа запускаем макрос из "Приемов" и данные плывут. С теми, которые заполняются моим макросом проблем быть не должно, а вот данные, введенные руками, сдвинутся.
Возможно ли все-таки не выводить список гиперссылок всех нужных листов, а преобразовать содержимое ячейки в гиперссылку?
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Добрый день!
Есть макрос, который создает новые листы в книге и присваивает им имена по некоторому правилу. В другом листе (назовем его "Реестр") в столбце, например B, присвоенные имена добавляются по мере добавления новых листов.
Другими словами: есть листы ВВА, СВА, АВС и т.д. На отдельном листе "Реестр" в столбце В в ячейках прописаны эти же самые ВВА, СВА, АВС и т.д. Возможно ли в листе реестр в столбце В сделать ВВА, СВА, АВС и т.д гиперссылками на соответствующие листы? Прописывать руками не шибко рационально, т.к. новые листы с новыми именами постоянно создаются пользователем.
возможно, несколько кривовато объяснил, поэтому файл, на всякий случай, прилагаю
Изменено: ДмСмирнов - 06.03.2018 22:54:37
Сбор данных со всех листов книги в один лист по наименованию столбцов
 
Цитата
Kuzmich написал:
У вас уже есть конструкция  With Sht........ End WithВот в нее в конец и вставьте код
Все получилось :) Спасибо!
К сожалению, у меня пока понимание процесса на уровне аналогий и ощущений....
Изменено: ДмСмирнов - 11.02.2018 00:08:45
Сбор данных со всех листов книги в один лист по наименованию столбцов
 
Kuzmich, спасибо большущее!
Одним из предполагаемых вариантов был последний алгоритм :)
В пользовании, по моим ощущениям, он наиболее удобный.

Цитата
Kuzmich написал:
У вас уже есть конструкция  With Sht........ End WithВот в нее в конец и вставьте код
попробую реализовать,
несмотря на то что все работает :)
Сбор данных со всех листов книги в один лист по наименованию столбцов
 
в итоге получился такой макрос:
Код
Sub Zakaz()
Dim Sht As Worksheet
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim Naimenovanie As Range
Dim FoundZakaz As Range
Dim TSena As Range
  Range("A7:E33").ClearContents  'очищаем диапазон под данные
    For Each Sht In Worksheets
      If Sht.Name <> "заказ" Then
        With Sht
         Set FoundZakaz = .Rows("1:2").Find("заказ", , xlValues, xlWhole, 2)
          iLR = .Cells(.Rows.Count, FoundZakaz.Column).End(xlUp).Row
           Set TSena = .Rows("1:2").Find("Цена", , xlValues, xlWhole)
           Set Naimenovanie = .Rows("1:2").Find("Наименование", , xlValues, xlWhole, 2)
         For i = 3 To iLR
           If Not IsEmpty(.Cells(i, FoundZakaz.Column)) Then        'есть заказ
             iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
             If iLastRow < 34 Then
               Cells(iLastRow, 1) = .Cells(i, Naimenovanie.Column)  'наименование
               Cells(iLastRow, 2) = .Name                           'поставщик
               Cells(iLastRow, 3) = .Cells(i, FoundZakaz.Column)    'кол-во
               Cells(iLastRow, 5) = .Cells(i, TSena.Column)         'цена
             Else
               MsgBox "Закончились строки бланка заказа"
               Exit Sub
             End If
           End If
         Next
        End With
      End If
    Next
    For Each Sht In Worksheets
      If Sht.Name <> "Заказ" Then
With Sht
Set FoundZakaz = .Rows("1:2").Find("заказ", , xlValues, xlWhole, 2)
         .Columns(FoundZakaz.Column).ClearContents
         .Cells(1, FoundZakaz.Column) = "заказ"
        End With
        End If
     Next
End Sub

все работает!!!
это чудо :))))
Спасибо!!!
Изменено: ДмСмирнов - 10.02.2018 23:35:39
Страницы: 1 2 3 След.
Наверх