Excel - удалить столбцы, но сохранить именованный диапазон

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

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

Что у меня есть до сих пор ...

Рабочие листы ("Вставьте сюда материал"). Диапазон ("A1"). Значение = Рабочие листы ("Ежегодно за год"). Диапазон ("Одна неделя, включая столбец итогов"). Значение

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


person Steamroller60    schedule 16.11.2011    source источник


Ответы (3)


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

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 

[Источник]

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

person JMax    schedule 16.11.2011

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

person Sico    schedule 16.11.2011

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

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

Все мои инстинкты были (есть) использовать именованные ячейки, но в данном случае я пришел к выводу, что это было неправильно. Я просто использовал диапазоны ячеек (A1, K2: K0 и т. Д.) Проблема в том, что имена не являются локальными для каждого листа, поэтому вам придется переместить имена со старого листа на новый, а это просто не так. Стоит усилий. Кроме того, в этом случае альтернатива создания похожих имен, уникальных для каждого листа (например, Mon-FriWeek1, Mon-FriWeek2 и т. Д.), Не дает вам ничего практического по сравнению с Week1! 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

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

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

person minnow    schedule 16.11.2011
comment
пожалуйста, не используйте Select, если это не действительно необходимо (это почти никогда не бывает) - person JMax; 16.11.2011