Excel - удалить столбцы, но сохранить именованный диапазон - PullRequest
0 голосов
/ 16 ноября 2011

Моя цель - создать макрос, который собирает данные за неделю, вставляет итоги / итоги в другой лист, а затем скрывает / удаляет только что скопированную неделю (или перемещает ее на другой лист, но не уход). В конце года вы должны были в основном копировать каждую неделю с Sheet1 на Sheet2

В данный момент я назвал ячейки, захватывающие с понедельника по пятницу - я бы хотел, чтобы это переместилось после запуска макроса.

Что у меня пока ...

Рабочие листы ("Вставить сюда"). Диапазон ("A1"). Значение = Рабочие листы ("YearlyDaily"). Диапазон (" в неделю, включая общий столбец "). Значение

Рабочие листы ("YearlyDaily"). Диапазон (" Пн-Пт "). Выбор Selection.Delete Shift: = xlToLeft

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Вы можете изменить именованные диапазоны так же, как вы их определяете:

Option Explicit 

Sub NamedRange() 

    Dim Rng1            As Range 

     'Change the range of cells (A1:B15) to be the range of cells you want to define
    Set Rng1 = Sheets("Sheet1").Range("A1:B15") 
    ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 

End Sub 

[ Источник ]

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

1 голос
/ 16 ноября 2011

Я знаю, что это хорошая практика, но есть ли причина, по которой вы используете именованный диапазон для пн-пт?Если вы используете ссылки на ячейки, они всегда будут указывать на одну и ту же область, даже после удаления.Если я что-то упустил.Трудно увидеть, не видя ваши столбцы.

0 голосов
/ 16 ноября 2011

Я предполагаю, что то, что вы подразумеваете под «я хотел бы, чтобы это переместилось после запуска макроса».это то, что вы хотите, чтобы именованные диапазоны перемещались.

У меня есть электронная таблица для отслеживания времени по неделям, и «первый» лист является активным.По истечении недели я копирую весь активный лист на новый лист.Есть итоги, которые я хочу перенести с предыдущей недели, поэтому я сохраняю эти данные.Я делаю это, имея 3 столбца: итоги текущей недели, итоги старых (предыдущих недель), итоги новых.Я вставляю значения от нового итога до старого итога.Затем я очищаю ячейки, используемые для ввода.

Каждый мой инстинкт был (есть) использовать именованные ячейки, но в этом случае я пришел к выводу, что это было неправильно.Я просто использовал диапазоны ячеек (A1, K2: K0 и т. Д.). Проблема в том, что имена не являются локальными для каждого листа, поэтому вам придется перемещать имена со старого листа на новый, а это просто не так.Стоит усилий.Кроме того, в этом случае альтернатива создания похожих имен, уникальных для каждого листа (например, Mon-FriWeek1, Mon-FriWeek2 и т. Д.), Не принесет вам ничего практичного в течение недели 1! A1: A10 и т. Д. -за исключением, может быть, самоудовлетворения тем, что вы использовали имена, как вы «должны».В любом случае, это мое мнение!

И, возможно, это может помочь: в моей таблице могут быть добавлены / удалены строки из одной недели в следующую.Чтобы учесть это и при этом избежать именованных диапазонов, я имитирую переход к столбцу с формулой в каждой строке и нажимаю Shift + End, а затем стрелку вниз.Выбор остановится на последней ячейке, в которую что-то введено.Вот код для этого (первая строка - заголовок / метка):

    'Copy New Total Hours as PasteValues to Old Total
    Dim lastRow As Long
    Range("K1").Select
    Range(Selection, Selection.End(xlDown)).Select
    lastRow = Selection.Rows(Selection.Rows.Count).Row + 1
    Range("K2:K" & CStr(lastRow)).Select
    Selection.Copy
    Range("J2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

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

Надеюсь, это поможет.

...