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

Страницы: 1 2 След.
Развернуть числа ОТ и ДО. Вывести название диапазона рядом
 
Kuzmich, работает. Огромное спасибо!
Развернуть числа ОТ и ДО. Вывести название диапазона рядом
 
Добрый день. Приложить 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
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Ігор Гончаренко,
у меня в первом сообщении это написано про 22к строк...
Работает всё частично как и везде - не используется столбец, в котором пишется важная информация - ОКОНЧАНИЕ диапазона.

Сергей,
Пока отвечал Игорю - посмотрел Ваш пример. Работает! Огромное спасибо!

Спасибо неравнодушным!  
Изменено: Frosted.one - 07.10.2019 16:38:35
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Ігор Гончаренко,у меня строк таких 22000... К сожалению не подходит.  
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Ігор Гончаренко, простите рано обрадовался.

Если ввести число 2049 - отображается "Алиска" ООО
А у Алиски диапазон - От 1930 До 2000 :(
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Ігор Гончаренко, спасибо огромное!!! Постараюсь прикрутить ещё поиск минимального и максимального значений, чтобы подставлялось в формулу. Пол дня думал.
Поиск названия диапазона ОТ и ДО в котором расположено число
 
Добрый день! На просторах интернета я нашёл почти работающий пример.

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

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

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

Но когда подряд идут числа подряд числа с разными разрядами то получаются косяки. В любом случае огромное спасибо за работу! В целом задача принята! Доработаю сам. Можно добить спереди нулями потом вернуть обратно. Может тогда формулы будут корректны для всех случаев. Ещё раз спасибо!
Изменено: Frosted.one - 02.09.2019 17:20:11
Сократить список путём отбрасывания разрядов чисел.
 
Скрытый текст

Если подставить этот набор цифр в первый столбец... то тут 5 мест, где формулы "свернут" диапазон... А тут они срабатывать не должны.

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

а возможно сделать проверку, чтобы допустим привязаться к сумме последних проверяемых цифр в сворачиваемом диапазоне (которые выносим в столбец H) равнялась 45.

Много мест, где сворачивание получилось ложным.
Сократить список путём отбрасывания разрядов чисел.
 
Wiss, буду проверять. Отпишусь. Спасибо. Объём в 30 000 строк)))
Сократить список путём отбрасывания разрядов чисел.
 
Добрый день!

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

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

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

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

Желательно сохранять информацию в строке (для упрощения задачи важно именно такая, которая идёт в начале сворачиваемого диапазона, неважно, что в удаляемых строках.
Во вложении более подробный пример. Готов к диалогу. Задача очень срочная =(
Изменено: Frosted.one - 02.09.2019 22:11:35
Подстановка значений с другого листа. VBA
 
Андрей_26, Условий около 10. Я переделаю. Спасибо большое!
Подстановка значений с другого листа. VBA
 
Андрей_26, Файл во вложении. Интересующий код на Листе 2.
Изменено: Frosted.one - 15.05.2019 16:22:51
Подстановка значений с другого листа. 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 строк
 
casag, Спасибо Вам огромное!!!!  
Определить строку с пустой ячейкой в столбце А и сдвинуть такую строку ниже на 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.ScreenUpdating = False
Application.EnableEvents = False
If Selection.Rows.Count > 1 Then Exit Sub
r_ = Selection.Row
    Sheets("Строка").Rows(2).Copy
    Rows(r_).Insert Shift:=xlDown
    
    
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count    'определяем размеры таблицы
    Application.ScreenUpdating = False
    For r = LastRow To 1 Step -1           'проходим от последней строки до первой
        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete   'если в строке пусто - удаляем ее
    Next r
    
    
Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Новая строка добавлена!"


Вопрос закрыт проверкой на пустые строки и их удалением. Всем спасибо!
Изменено: Frosted.one - 19.04.2019 16:19:14
Копирование и вставка строки после текущей. Макрос
 
Код
Sub CopyVsVsio()
Application.ScreenUpdating = False
Application.EnableEvents = False
If Selection.Rows.Count > 1 Then Exit Sub
r_ = Selection.Row
    Sheets("Строка").Rows(2).Copy
    Rows(r_).Insert Shift:=xlDown
Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Новая строка добавлена!"
End Sub

Таблица самая обычная. Любые данные в диапазоне A:BF
Короче не суть.

Нашёл решение. Вставляет, раздвигает, сохраняет всё что ниже.  
Помогите добить вопрос.

Условие.
Если ВСЕ ячейки А:BF пустые, в строке на которой стоит курсор -

копировать и вставлять строку(2) с листа "Строка" после последней строки таблицы (Последнюю строку таблицы можно так же определяем по наличию хотя бы одного значения в диапазоне А:BF)

В общем не должно быть разрыва межу вставленной строкой этим макросом и последней строкой таблицы. (последняя = если хотя бы одна ячейка в строке A:BF содержит значение)  
Изменено: Frosted.one - 19.04.2019 16:06:59
Копирование и вставка строки после текущей. Макрос
 
Sanja, Код заменяет данные, которые стоят ниже. Нужно чтобы таблица "раздвигалась" при вставке...
Это очень важное условие...  
Копирование и вставка строки после текущей. Макрос
 
Добрый день!

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

Сейчас код вставляет строку строго в конце таблицы.
Код
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 всё что дальше не интересует.  
Если значение в столбце А пустое - при нажатии на строку с пустым значением выводить сообщение
 
Обновил просьбу. Сделал её более понятной. Простите за Ап темы. Вопрос актуален.  
Изменение цвета ячеек по условию, кроме уже покрашенных, Помогите доработать макрос.
 
RAN, Спасибо огромное, работает +/- так же. Скорость устраивает. То что нужно!

БМВ, Попробовал сделать по вашему подобию - была проблема - почему то руками ячейки не красились. Возможно я что-то в УФ напортачил при переносе.

Всем отозвавшимся огромное-огромное спасибо!  
Изменение цвета ячеек по условию, кроме уже покрашенных, Помогите доработать макрос.
 
Ivan.kh, не совсем то что нужно.

Необходимо чтобы закрашивалась вся строка, кроме тех ячеек, которые уже закрашены пользователем. С кодом предоставленным Вами - раскраска строки полностью игнорируется при наличии закрашенной ячейки. А надо оставить цвет этой ячейки и покрасить всю строку в необходимый цвет. И выполнение теперь не 2 секунды, а все 20-30.
Изменение цвета ячеек по условию, кроме уже покрашенных, Помогите доработать макрос.
 
Ivan.kh, мне не удобно Вас просить, но мне кажется нужен код полностью.  :D  
Изменение цвета ячеек по условию, кроме уже покрашенных, Помогите доработать макрос.
 
Добрый день. Есть следующий код:
Код
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
Страницы: 1 2 След.
Наверх