Добрый день! Не могу нигде найти информацию. Есть типовые листы (заявки) из них надо определенные ячейки перенести на отдельный лист. Можно ли сделать так, чтобы не писать код под каждую ячейку и лист, а просто выбрать активный лист, нажать на макрос и всё сразу загружалось? Я примерно представляю как это сделать, но не выходит. И чтобы каждый лист начинался с новой строки в таблице. Так же в исходных листах есть объединённые ячейки. Спасибо большое!
Вот то что я смогла сделать:
Worksheets("Лист 2").Range("F11:H11").Copy Worksheets("Отчёт").Range("N3")
For Each rCell In Worksheets("Отчёт").Range("N3")
rCell.UnMerge
Next
Worksheets("Лист 2").Range("C12").Copy Worksheets("Отчёт").Range("O3")
For Each rCell In Worksheets("Отчёт").Range("O3")
rCell.UnMerge
Next
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.
Вместо Worksheets("Лист 2") пишите ActiveSheet:
ActiveSheet.Range("F11:H11").Copy Worksheets("Отчёт").Range("N3")
Я пыталась так сделать, но он не копирует ничего. Выделяет этот код желтым. Я только учусь, не понимаю что не так...
Всё получилось, разобралась. спасибо большое!
Как сделать, чтобы вставлялось в пустую ячейку этого столбца? вместо Worksheets("Отчёт").Range("N3")
Нашла вот это, но как использовать не понимаю:
Dim iLastRow As Long
iLastRow = Cells(Rows.Count,2).End(xlUp).Row
cells(iLastRow+1,2).Select
End не ищет в скрытых строках.
Activesheet можно не указывать, можно сразу писать Range.
Sub Макрос()
Dim r As Long
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "N").End(xlUp).Row + 1
Range("F11:H11").Copy Worksheets("Отчёт").Cells(r, "N")
End Sub
Снова ваша помощь нужна...
Ячейки, из которых я копирую, объединенные. А вставить нужно в 1 ячейку без объединения.
Пыталась разными способами, вот последние:
1)Range("A3:D8").MergeCells = False
2)Dim rCell As Range
For Each rCell In Worksheets("Отчёт").Range("D3")
rCell.UnMerge
Но проблема в том, что я не знаю в какую строку будет вставляться, тк будет заполняться следующая пустая.
Если форматы (заливку ячеек, размер шрифта и тому подобное) копировать не надо, то можно не использовать метод Copy:
Sub Макрос()
Dim r As Long
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "N").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "N").Value = Range("F11").Value
End Sub
извините, не вставляется ничего, пустые ячейки
Именно ваш код вставляет, но когда меняю на другие ячейки-ничего не работает
Выложите код, который не вставляет.
Первые 4 кода работает, остальные нет
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "N").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "N").Value = Range("F11").Value
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "M").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "M").Value = Range("E11").Value
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "L").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "L").Value = Range("D11").Value
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "K").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "K").Value = Range("C11").Value
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "J").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "J").Value = Range("G8").Value
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "I").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "I").Value = Range("C8").Value
Этот код не вставляет:?
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "J").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "J").Value = Range("G8").Value
да, верно код ниже тоже не вставляет
Range("G8") объединённая ячейка?
Как я понимаю, дело в том, что заголовки объеденены
Спереди может быть есть пробелы. В целевой ячейке видны только пробелы. Перейдите в целевую ячейку, затем зайдите в строку формул. В строке формул подвигайте курсор. Если двигается, значит что-то есть в ячейке.
Нет, пробелов нет
С какой ячейки начинается строка, которую вы показали в ответе #15?
На скриншоте начало строки не видно, поэтому не известно, что там у вас происходит.
Первый столбец свободный. Когда убираю объединение заголовков, то всё работает. Но если так сделаю, то будет неудобно
В ответе #15 есть скриншот.
Сделайте такой же скриншот, но чтобы было видно начало.
В ответе #19 у вас что-то совсем другое.
Перед тем, как будете делать скрин-шот, не объединяйте, покажите, как у вас есть.
Это начало, просто тут не вставляется ничего
В ответе #15 скриншот начинается со столбца L. Покажите эту же строку в таком же виде, но с начала.
Я могу файлы скинуть, если нужно
В ответе #15 вы выделили объединённую ячейку, с какого столбца начинается эта объединённая ячейка?
Она не объединенная, просто выделила перед удалением
Про объединенные ячейки имела ввиду заголовки, которые объединены построчно. Те А1 и А2, В1 и В2
Я про Range G8 пытаюсь выяснить, а вы про заголовки стали писать. Я сразу не сообразил. Вы пишите про то, что вас спрашивают.
Range("G8") объединённая ячейка?
Вас спросили про G8, значит в следующем сообщении ваш ответ должен содержать какую-то информацию про G8. Это простая логика.
Что вы хотели показать ответом #15? Какая взаимосвязь между моим вопросом про G8 и скриншотом из ответа #15?
Извините, я совсем запуталась... Да, она объединенная
С какого столбца начинается объединённая ячейка? Со столбца G?
да, со столбца G.
Мне кажется, что не вставляется в другие ячейки, потому что заголовки объединены. Вставилось только там, где заголовки не объединены. Только не ругайтесь)
А что находится в G8, какой-то текст или ещё что?
Да, текст, эл.почта
Щёлкните в ячейке G8 и посмотрите, что в адресной строке, какой там адрес?
G8
Эта ячейка объединённая: Worksheets("Отчёт").Cells(r, "J")?
Нет, в Отчёте нет объединенных ячеек (кроме заголовков)
Да, объединение заголовков может иметь значение.
Если строки таблицы ещё не заполнены, а на листе только заголовок и он объединённый, то последняя строка будет определена неправильно. Но у вас в ответе #15 на скриншоте не видно столбца J.
Макрос получается вставляет значение в заголовок, в невидимую ячейку.
Значит последнюю строку ищите по тому столбцу, в котором всегда будут данные или в котором нет объединённых заголовков.
Когда отменяла объединение заголовков, то всё работало. Просто так не очень удобно. Я вас поняла, буду переделывать заголовки. Спасибо большое за терпение!
А зачем вы ищите в отчёте последнюю строку для каждого столбца?
Почему бы не найти её один раз?
Я думала каждый раз нужно. Если планируется большое кол-во новых заявок, чтобы автоматом они подгружались. Я вот разобралась с этим. Единственное, некоторые поля не заполнены в заявке и поэтому ищу как вместо пустой ячейки писать тире. Если вам не сложно показать, буду рада)
Теперь вы будете искать последнюю строку в отчёте один раз? В этом случае тогда вы можете искать последнюю строку по тому столбцу, в котором нет объединённых ячеек в заголовке, и вам не надо менять внешний вид заголовков.
Ого, спасибо))))
Вот так должно получиться:
Макрос
Sub Макрос()
Dim r As Long
r = Worksheets("Отчёт").Cells(Worksheets("Отчёт").Rows.Count, "N").End(xlUp).Row + 1
Worksheets("Отчёт").Cells(r, "N").Value = Range("F11").Value
Worksheets("Отчёт").Cells(r, "M").Value = Range("E11").Value
Worksheets("Отчёт").Cells(r, "L").Value = Range("D11").Value
Worksheets("Отчёт").Cells(r, "K").Value = Range("C11").Value
Worksheets("Отчёт").Cells(r, "J").Value = Range("G8").Value
Worksheets("Отчёт").Cells(r, "I").Value = Range("C8").Value
End Sub
Работает то, что я предложил? Вместо столбца N можете выбрать другой столбец для поиска последней строки.
Да, всё работает! Спасибо огромное! Вы что-то типа курсов проводите?
нет, курсы не провожу
у вас ещё был вопрос или вы уже нашли решение?
Последний вопрос, как сделать чтобы автоматически размер ячеек подтекст подстраивался?
Есть такие варианты:
1. ширину столбцов можно взять из листа-источника;
2. можно использовать метод Range.AutoFit. В Экселе это когда пользователь щёлкает два раза левой кнопкой мыши по правой границе в строке, в которой адреса (номера) столбцов. После вставки данных, примените этот способ вручную и посмотрите, получается ли нужный результат.