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

Страницы: 1
Развернуть числа ОТ и ДО. Вывести название диапазона рядом
 
Добрый день. Приложить Excel файл не имею возможности. Но постараюсь объяснить без него. Вся работа начинается со второй строки.

Дано:
А B C (столбцы)
1 3 зеленый
4 6 красный
8 9 белый

Желаемый результат:
E F (столбцы)  
1 зеленый
2 зеленый
3 зеленый
4 красный
5 красный
6 красный
8 белый
9 белый

Есть макрос, который разворачивает числа (начальное значение в А, конечное B, все промежутчные значения включая A и B выводятся в столбец E. Но он не выводит названия из столбца C. Проблему можно решить с помощью формул поискпоз и индекс, но таких строчек миллион (2-3 часа обработки), хотелось бы, чтобы сразу при развороте числе от и до - выводилось рядом название.
Код
Dim i As Range, j&, k&
ReDim v(1 To 1048576, 1 To 1)
For Each i In [A:A].SpecialCells(xlCellTypeConstants, xlNumbers)
   For j = i To i(, 2)
       k = k + 1
       v(k, 1) = j
   Next
Next
[E2:E1048576].Value = v
End Sub
Изменено: Frosted.one - 26.06.2020 10:54:26
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Добрый день! На просторах интернета я нашёл почти работающий пример.

Необходимо определить название диапазона в котором находится искомое число и вывести его рядом с этим числом на другой лист.
Но все найденные примеры врут и не смотрят на второе столбец ДО, не беря в расчёт, что диапазоны могут идти с разрывами.

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

Объём данных будет очень большой около 22000 строк. Помогите пожалуйста.  
Сократить список путём отбрасывания разрядов чисел.
 
Добрый день!

Задача следующая.
Есть входной массив с огромным количеством подряд идущих числел. Нужно сократить список, путём отбрасывания разрядов чисел.
Например числа
Скрытый текст

Необходимо вывести на новом листе как
Скрытый текст

А если бы числа шли вот так (напр без 305)
Скрытый текст

То на соседний лист выводим весь список без "сворачивания"

Желательно сохранять информацию в строке (для упрощения задачи важно именно такая, которая идёт в начале сворачиваемого диапазона, неважно, что в удаляемых строках.
Во вложении более подробный пример. Готов к диалогу. Задача очень срочная =(
Изменено: Frosted.one - 02.09.2019 22:11:35
Подстановка значений с другого листа. VBA
 
Добрый день!

Есть код, аналог ВПРа... Который на текущий лист, подставляет данные в ячейку с другого, при изменении/вводе значения соседней ячейки той же строки.
Код
Private Sub Worksheet_Change(ByVal Target As Range)

Dim iCell As Range
On Error Resume Next
If Not Intersect(Target, Intersect(Me.UsedRange, Me.Columns(1))) Is Nothing And Target.Count = 1 Then
    Set iCell = Worksheets("СТ-PL").Columns(1).Find(Target.Value)
    If Not iCell Is Nothing Then
        Target.Offset(i, 3).Value = iCell.Offset(i, 3).Value
        Target.Offset(i, 4).Value = iCell.Offset(i, 4).Value
    Else
        Target.Offset(i, 3).Value = Empty
        Target.Offset(i, 4).Value = Empty
    End If
End If


End Sub


Помогите переделать макрос в обычный, запускаемый с кнопки, но чтобы подстановка срабатывала для всего столбца (значений около 1800) в циклах пока не очень силен. Я думаю, что пример не нужен. Нужно лишь адаптировать макрос на выполнение по кнопке для всех строк таблицы, начиная со второй. Можно определять последнюю, можно и для 2000 строк сделать и всё.

С уважением.
Изменено: Frosted.one - 15.05.2019 15:56:41
Определить строку с пустой ячейкой в столбце А и сдвинуть такую строку ниже на 100 строк
 
Добрый день!

Возникла подзадача которую я не могу решить...

Необходимо в таблице макросом определить строку с пустой ячейкой в столбце А и сдвинуть такую строку ниже на 100 строк. (грубо говоря навставлять 100 пустых строк)  (можно сдвигать всю, а можно диапазон А:AS)
Поиск такой строки начинаем с 21ой строки.  
Работа со сводным файлом, импорт строк из другого по условию на разные листы., Требуется макрос.
 
Добрый день...


Очень нужна ваша помощь... Готов обсудить условия.

Дубль задания есть в самом файле СВОДНЫЙ. Файлы прилагаю.


Необходимо написать макрос в файле СВОДНЫЙ, который копирует таблицу из файла ИСТОЧНИК в файл СВОДНЫЙ. Условия:
1.  Структуры у таблиц разные... Необходимо в коде копировать каждый  столбец отдельно, чтобы я смог переназначить допустим копирование  столбца E из ИСТОЧНИК в H в СВОДНЫЙ. Для примера думаю A:E хватит,  сейчас порядок не важен, можно в A:E и копировать плюс Столбец AP из  файла ИСТОЧНИК должен обязательно попадать в Столбец AT в СВОДНОМ файле. Целиком строку скопировать нельзя....


 2. Необходимо копировать (считывать) разные строчки из ИСТОЧНИКА в СВОДНЫЙ в  разные листы. Смотрим по столбцу C в ИСТОЧНИКЕ. Если 0101 то лист  Москва, Если 0202 - Петербург, если 0303 - Псков.

3. Строки из  ИСТОЧНИКА с фамилией Иванов (столбец АP) (она там будет одна) - НИ КОИМ  ОБРАЗОМ не должны заменять строки с фамилией Смирнова (столбец АТ) в СВОДНОМ файле на всех листах. (они встают ниже)

4. При каждом  копировании строк из ИСТОЧНИКА строки скопированные ранее должны быть  ЗАМЕНЕНЫ по признаку ИВАНОВ (В ИСТОЧНИКЕ столбец AP, в СВОДНОМ столбец AT),  т.е. сначала просто спокойно в этом файле удаляем все строки со всех  листов с фамилией ИВАНОВ и копируем из ИСТОЧНИКА.

5. Под  таблицей могут быть какие-то данные. ИХ ни в коем случае нельзя удалить  или перезаписать копируемыми строками. При удалении строк с фамилией  ИВАНОВ эти данные едут выше, а при копировании уезжают на нужное  количество строк. Я думаю алгоритм следующий.


а) удаляем все строки с фамилией ИВАНОВ (ищем по АТ)
б) ищем первую строку с ПУСТЫМ значением в столбце AT
в) Вставляем накопированные строки с фамилией ИВАНОВ на листы по признаку из столбца С (источник)

в) ещё как вариант записать строки ниже 21ой БЕЗ ФАМИЛИИ вообще в АТ в какой-то массив затем просто вставить?

Для удобства проверки строки с фамилией "Смирнова все данные цифры", а "Иванов - буквенные"
И да, путь к файлу прописываем в коде M:\.....\ИСТОЧНИК.xls потом поправлю.
Изменено: Frosted.one - 25.04.2019 20:05:17
Суммирование ячеек в строке до последней строки. VBA., Некорректная работа с активными фильтрами.
 
Добрый день! Час или два бьюсь не могу понять в чём дело.

Есть диапазон ячеек с числами AT:BE. Сумма каждой строки этого диапазона вычисляется в BF.
Ну проще говоря
BF2=СУММ(AT2:BE2)
...
BF30=СУММ(AT30:BE30)
и так до последней строки

Суммирование выполняется макросом:
Код
Private Sub Worksheet_Change(ByVal Target As Range)


Dim arr(), lR As Long, i As Long
    
   If Intersect(Target, Columns("AT:BE")) Is Nothing Then Exit Sub
 '      Application.ScreenUpdating = False
        lR = Cells(Rows.Count, "BF").End(xlUp).Row
    Application.EnableEvents = False
    Range("BF1:BF" & lR).ClearContents
    'Application.EnableEvents = True
        lR = Columns("AT:BE").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    ReDim arr(1 To lR, 1 To 1)
    For i = 1 To lR
        arr(i, 1) = WorksheetFunction.Sum(Cells(i, "AT").Resize(, 12))
        
    Next i
    Application.EnableEvents = False
   Range("BF1").Resize(UBound(arr)).Value = arr()
   
   [BF1] = Application.Sum([BF2:BF1000])

End Sub
Всё работает отлично! Но, при включенном фильтре - при изменении значений ячеек в диапазоне AT:BE - Макрос работает некорректно и выводит в столбец BF = 0 у всех отфильтрованных ячеек, когда фильтр отключаешь и вносишь изменения - всё пересчитывается нормально.

Как заставить работать код корректно при включенном фильтре по строкам???





P.S. Решение. Мистика.
Код
Dim arr(), lR As Long, i As Long

   If Intersect(Target, Columns("AT:BE")) Is Nothing Then Exit Sub
 '      Application.ScreenUpdating = False
        lR = Cells(Rows.Count, "BF").End(xlUp).Row
    Application.EnableEvents = False
    Range("BF1:BF" & lR).ClearContents
    'Application.EnableEvents = True
        lR = Columns("AT:BE").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    'ReDim arr(1 To lR, 1 To 1)
    For i = 1 To lR
        Cells(i, 58) = Cells(i, 46) + Cells(i, 47) + Cells(i, 48) + Cells(i, 49) + Cells(i, 50) + Cells(i, 51) + Cells(i, 52) + Cells(i, 53) + Cells(i, 54) + Cells(i, 55) + Cells(i, 56) + Cells(i, 57)
    Next i
    Application.EnableEvents = False
   Range("BF1").Resize(UBound(arr)).Value = arr()

   [BF1] = Application.Sum([BF2:BF1000])
   ' Application.EnableEvents = True
Изменено: Frosted.one - 26.04.2019 09:01:13
Копирование и вставка строки после текущей. Макрос
 
Добрый день!

Задачка такая. Есть эталонная строка на другом листе. Её нужно вставлять по особой кнопке после той строки, на которой стоит сейчас курсор на основном листе.

Сейчас код вставляет строку строго в конце таблицы.
Код
Sub CopyVsVsio()
Application.EnableEvents = False
    Worksheets("Строка").Range("A2:BF2").Copy Worksheets("Заполнять").Range("A" & Worksheets("Заполнять"). _
    UsedRange.Rows.Count + 1)
    Application.CutCopyMode = False
    Application.EnableEvents = True
    MsgBox "Новая строка добавлена!"
End Sub

Помогите исправить код. Огромнейшим бонусом была бы невозможность вставить строку пропустив кучу пустых, если курсор стоит вне таблицы.

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

Очень надеюсь на вашу помощь!
Сообщение MsgBox и Удаление ТЕКУЩЕЙ строки, если ячейки А и K в этой строке пустые.
 
Помогите пожалуйста.

Помогите с кодом который делал бы следующее:


Если в текущей строке, в любой ячейке которой пользователь внёс любые данные, а ячейки столбцов А и K пустые (именно И ) - выводить сообщение MsgBox "Работа невозможна, строка будет удалена"
и следующим действием удаляем эту строку.  

Диапазон работы A:BF всё что дальше не интересует.  
Изменение цвета ячеек по условию, кроме уже покрашенных, Помогите доработать макрос.
 
Добрый день. Есть следующий код:
Код
Sub COLOR()
Dim Rng As Range
Dim n
Dim rData
 
'Dim RndMY
    With Worksheets("Заполнять")
        Set Rng = .Range("G:G")
 
        For Each n In Rng
                   
        Select Case n
                Case "сущ"
                     Range(Cells(n.Row, 1), Cells(n.Row, 58)).Interior.ColorIndex = 0
                Case "план"
                     Range(Cells(n.Row, 1), Cells(n.Row, 58)).Interior.ColorIndex = 19
                Case "откл"
                     Range(Cells(n.Row, 1), Cells(n.Row, 58)).Interior.ColorIndex = 15
    
            End Select
        Next n
    End With
End Sub

Этот макрос вызывается с помощью изменения значения ячеек в определенном столбце
Код
If Not Intersect(Target, Range("G:G")) Is Nothing Then
   If Target > 0 Then
     Call COLOR
   End If
 End If

Помогите сделать, так чтобы скрипт не трогал уже закрашенные ячейки пользователем. Пусть красит всё, кроме этих ячеек. Знаю процесс не оптимизирован, но значение в столбцах меняется крайне редко и задержка в 2 секунды на работу макроса устраивает.  
Если значение в столбце А пустое - при нажатии на строку с пустым значением выводить сообщение
 
Помогите пожалуйста.


Разрешите обновить вопрос. Я попытаюсь сделать его понятнее.


Помогите с кодом который делал бы следующее:


Если в текущей строке, любую ячейку которой выбрал пользователь Столбцы А и B пустые - выводить сообщение MsgBox "Работа невозможна, строка будет удалена"
и следующим действием удаляем эту строку.  
Изменено: Frosted.one - 09.04.2019 16:44:17
Копирование эталонной строки на другой лист в первую свободную. VBA.
 
Добрый день! Задача в общем-то вроде и решаемая, но в примерах слишком много но... Буду рад Вашей помощи.

Необходимо скопировать строку с листа Строка(A2:V2). В ней нет лишних данных, при этом некоторые ячейки являются готовыми списками с проверкой данных, подсказками и т.д.

Необходимо сохранить всё форматирование и прочее. Просто скопировать. Вставляем в первую свободную строку на листе "Рабочий". Проверку на "свободность" выполняем по всем ячейкам каждой строки. Т.е. если хотя бы одна ячейка в строке чем-то занята, то строчку вставляем ниже. Проверку можно выполнять в диапазоне столбцов от А до V, а не по всему документу.

В идеале после вставки новой строкой можно несколько раз мигнуть, например залить её красным раза 3 и вернуть вид без заливки, но это совершенно не обязательно.


Во вложении файл пример с комментариями.  
Ошибка VBA при переносе кода из одной книги в другую
 
Копирую необходимый код в свой проект.
Но даже без каких-либо изменений при выполнении появляется ошибка - compile error method or data member not found

В моём проекте нет в этом выпадающем списке нужных ListBox1 и TextBox1 и как добавить их туда не представляю...
Подскажите пожалуйста.

 
Автопротягивание формулы в столбце. VBA + защита от удаления формулы
 
Добрый день!

Имеется таблица со столбцами А Б В Г

Необходимо при появлении новых значений в столбце А, чтобы формула в столбце В автоматически протягивалась вниз. (Там формула ВПР, соответственно искомое значение должно зависеть от строки...
При этом, чтобы формулу удалить из таблицы было нельзя (или случайно её заменить на другое значение)

По-моему, задачка в 5 строчек, но извините. Не догнать. Везде куча примеров, как вставить формулу в ячейку, но с примеров подобных моему я не встретил.

Работаем на листе 2019. Лист разработчику это некая База Данных.
 

Можно конечно упростить задачу - указав чтобы формула сразу распространилась на Диапазон C1:C1000... но в идеале первый вариант.
Изменено: Frosted.one - 27.03.2019 15:55:37
Сохранить строки по определенному условию. VBA, Нужен Макрос.
 
Добрый день.

Есть таблица из 42 столбцов и примерно 1500 строчек. Это сводная таблица, выполненная объединением других таблиц с других файлов. В общем не суть.
В таблице очень много пустых и строк не по делу. Есть 100% критерий, как можно избавиться от ненужных строк. БЕРЕМ Столбец "B" и вводим условие.

Удаляем строки, если:
1. Значение в столбце B пустое
2. Значение в столбце B НЕ входит в диапазон от 1000 до 2000
Но! Часть значений в искомом столбце B начинается с буквы Q - их нужно обязательно оставить.

Прошу помочь. Спасибо!
Изменено: anton1f - 21.03.2019 14:13:28
Сравнить две таблицы и сцепить названия, соответствующие диапазону чисел.
 
Добрый день. Проблема такая. Проще объяснить сразу на примере.

В первой таблице есть три столбца - в каждом из них значения От, До, Название
2000 2003 Люкс
2004 2006 Эконом
2007 2010 Бизнес
2012 2013 Люкс
2014 2015 Люкс

Во второй таблице номера, идущие подряд, эти данные известны
2000 2010
2012 2015

Во второй таблице на выходе необходимо получить следующие данные (формулой, макросом, не думаю, что это важно)
2000 2010 Люкс / Эконом / Бизнес
2012 2015 Люкс

т.е. необходимо сцепить названия номеров идущих подряд и вывести их на новый лист уже к номерам, которые сцеплены.
В файле пример файла, описанного выше.

Cложность в том, что необходимо учитывать все промежуточные значения. ВПР по двум столбцам не подходит.  
Изменено: anton1f - 12.12.2016 20:59:59
Страницы: 1
Наверх