Добрый день. Приложить 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
Добрый день! На просторах интернета я нашёл почти работающий пример.
Необходимо определить название диапазона в котором находится искомое число и вывести его рядом с этим числом на другой лист. Но все найденные примеры врут и не смотрят на второе столбец ДО, не беря в расчёт, что диапазоны могут идти с разрывами.
Самый близкий пример в приложении, он начинает выводить результаты правильно начиная с той строки, с которой заканчивается справочник диапазонов на соседнем листе.
Объём данных будет очень большой около 22000 строк. Помогите пожалуйста.
Задача следующая. Есть входной массив с огромным количеством подряд идущих числел. Нужно сократить список, путём отбрасывания разрядов чисел. Например числа
Скрытый текст
300 301 302 303 304 305 306 307 308 309 411 412
Необходимо вывести на новом листе как
Скрытый текст
30 411 412
А если бы числа шли вот так (напр без 305)
Скрытый текст
300 301 302 303 304 306 307 308 309 411 412
То на соседний лист выводим весь список без "сворачивания"
Желательно сохранять информацию в строке (для упрощения задачи важно именно такая, которая идёт в начале сворачиваемого диапазона, неважно, что в удаляемых строках. Во вложении более подробный пример. Готов к диалогу. Задача очень срочная =(
Есть код, аналог ВПРа... Который на текущий лист, подставляет данные в ячейку с другого, при изменении/вводе значения соседней ячейки той же строки.
Код
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 строк сделать и всё.
Необходимо в таблице макросом определить строку с пустой ячейкой в столбце А и сдвинуть такую строку ниже на 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 потом поправлю.
Добрый день! Час или два бьюсь не могу понять в чём дело.
Есть диапазон ячеек с числами 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
Задачка такая. Есть эталонная строка на другом листе. Её нужно вставлять по особой кнопке после той строки, на которой стоит сейчас курсор на основном листе.
Сейчас код вставляет строку строго в конце таблицы.
Код
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
Помогите исправить код. Огромнейшим бонусом была бы невозможность вставить строку пропустив кучу пустых, если курсор стоит вне таблицы.
т.е. либо на следующей строке после активной, если курсор в таблице (При этом заполненные строки не должны замениться, а подвинуться ниже) либо в конце таблицы, если курсор стоит за пределами не пойми где. (как сейчас в коде)
Если в текущей строке, в любой ячейке которой пользователь внёс любые данные, а ячейки столбцов А и 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 "Работа невозможна, строка будет удалена" и следующим действием удаляем эту строку.
Добрый день! Задача в общем-то вроде и решаемая, но в примерах слишком много но... Буду рад Вашей помощи.
Необходимо скопировать строку с листа Строка(A2:V2). В ней нет лишних данных, при этом некоторые ячейки являются готовыми списками с проверкой данных, подсказками и т.д.
Необходимо сохранить всё форматирование и прочее. Просто скопировать. Вставляем в первую свободную строку на листе "Рабочий". Проверку на "свободность" выполняем по всем ячейкам каждой строки. Т.е. если хотя бы одна ячейка в строке чем-то занята, то строчку вставляем ниже. Проверку можно выполнять в диапазоне столбцов от А до V, а не по всему документу.
В идеале после вставки новой строкой можно несколько раз мигнуть, например залить её красным раза 3 и вернуть вид без заливки, но это совершенно не обязательно.
Копирую необходимый код в свой проект. Но даже без каких-либо изменений при выполнении появляется ошибка - compile error method or data member not found
В моём проекте нет в этом выпадающем списке нужных ListBox1 и TextBox1 и как добавить их туда не представляю... Подскажите пожалуйста.
Необходимо при появлении новых значений в столбце А, чтобы формула в столбце В автоматически протягивалась вниз. (Там формула ВПР, соответственно искомое значение должно зависеть от строки... При этом, чтобы формулу удалить из таблицы было нельзя (или случайно её заменить на другое значение)
По-моему, задачка в 5 строчек, но извините. Не догнать. Везде куча примеров, как вставить формулу в ячейку, но с примеров подобных моему я не встретил.
Работаем на листе 2019. Лист разработчику это некая База Данных.
Можно конечно упростить задачу - указав чтобы формула сразу распространилась на Диапазон C1:C1000... но в идеале первый вариант.
Есть таблица из 42 столбцов и примерно 1500 строчек. Это сводная таблица, выполненная объединением других таблиц с других файлов. В общем не суть. В таблице очень много пустых и строк не по делу. Есть 100% критерий, как можно избавиться от ненужных строк. БЕРЕМ Столбец "B" и вводим условие.
Удаляем строки, если: 1. Значение в столбце B пустое 2. Значение в столбце B НЕ входит в диапазон от 1000 до 2000 Но! Часть значений в искомом столбце B начинается с буквы Q - их нужно обязательно оставить.
Добрый день. Проблема такая. Проще объяснить сразу на примере.
В первой таблице есть три столбца - в каждом из них значения От, До, Название 2000 2003 Люкс 2004 2006 Эконом 2007 2010 Бизнес 2012 2013 Люкс 2014 2015 Люкс
Во второй таблице номера, идущие подряд, эти данные известны 2000 2010 2012 2015
Во второй таблице на выходе необходимо получить следующие данные (формулой, макросом, не думаю, что это важно) 2000 2010 Люкс / Эконом / Бизнес 2012 2015 Люкс
т.е. необходимо сцепить названия номеров идущих подряд и вывести их на новый лист уже к номерам, которые сцеплены. В файле пример файла, описанного выше.
Cложность в том, что необходимо учитывать все промежуточные значения. ВПР по двум столбцам не подходит.