Переместить столбец Excel vba

Обновлено: 05.07.2024

В Excel VBA вы можете перемещать определенные столбцы по вашему выбору с помощью VBA. В этой статье показано, как исключить столбцы. Перемещение данных в Excel не всегда так просто, как перемещение текущего региона или фиксированного диапазона. Довольно часто вы можете захотеть перенести в сводную таблицу только меньший набор данных. Часто этот набор данных не будет последовательным, и здесь все становится немного сложнее. Когда вы знаете, где находятся данные в файле, вы можете присвоить номера столбцов массиву. Это позволяет перебирать каждый столбец и перемещать данные столбец за столбцом. Вы можете сделать это следующим способом;

Sub MoveCol1() 'Excel VBA для перемещения столбцов на основе критериев
Dim ar As Variant
Dim i As Integer

'Установите значения массива на номера копируемых столбцов
ar=Array(1, 5, 7, 9, 11)

For i=0 To UBound(ar) 'Пройтись по массиву


Найти текст столбца и скопировать столбец

Этот процесс немного сложнее, если вы не знаете, где в файле будут находиться заголовки. Если я использую метод поиска, я могу определить местоположение столбца, а затем переместить данные в зависимости от положения столбцов на листе. Вот пример;

Sub MoveCol2() 'Excel VBA для перемещения столбцов на основе критериев
Dim ar As Variant
Dim i As Integer
Dim j As Long

'Задайте значения массива
ar=Array("Продажи", "Отдел 1", "Отдел 8", "Отдел 9")

j=[A1:AW1].Find(ar(i)).Column
Columns(j).Copy Sheet2.Cells(1, i + 1) 'Добавить 1 в конец, так как массив начинается с 0

Не выполнять никаких действий, если не найдено

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

Sub cols() 'Excel VBA для перехвата ошибки, если она не найдена.

Размерьте i как целое
Размерьте ar как вариант
Размерьте sh как рабочий лист
Размерьте lr As Long
Размерьте rng как диапазон

Set sh=Sheet1
ar=sh.Range("A1", sh.Range("IV1").End(xlToLeft))
lr=sh.Range("A" & Rows .Count).End(xlUp).Row

Для i=1 To sh.Range("IV1").End(xlToLeft).Column

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

Захват местоположения столбцов и однократное копирование

Вы можете улучшить описанное выше, если немного подумаете. Идеальной ситуацией было бы зафиксировать местоположение каждой из колонн. Я хочу перемещать и перемещать все данные одновременно в своего рода пакетном процессе. При поиске больших списков данных этот процесс может быть намного эффективнее, поскольку копирование и вставка выполняются один раз в конце. Если бы, например, у меня было 20 элементов с исходным методом, мне потребовалось бы 20 действий для смещения данных. В следующей процедуре требуется только одно действие.

Sub MoveCols3() 'Excel VBA для перемещения столбцов на основе критериев
Dim r As Range
Dim r As Variant
Dim i As Integer
Dim fn As Range
Dim i As Integer
Dim fn As Range
/>Размерить строку как строку

'Задайте значения массива
ar=Array("Продажи", "Отдел 1", "Отдел 8", "Отдел 9")

Далее i 'Возьмите завершающую запятую из строки
str=Left(str, Len(str) - 1)
Set r=Range(str).EntireColumn
r.Copy Sheet2.[a1] 'Скопируйте и вставьте на новый лист в ячейку A1.


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

В основном я хочу переместить столбец из одной позиции в другую.

Мне нужно переместить 3-й столбец в конец справа.

Вот что я пробовал до сих пор:

Но этот метод не работает, так как возникает ошибка выполнения "1004".

Мы будем очень признательны за любую помощь.

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

Я дал код, который пробовал, ожидая, что он вырежет данные из столбца 3/C и вставит их в столбец 6/F. Это не сработало, потому что я получил ошибку времени выполнения в специальной строке paste '1004'.

3 ответа 3

Для тех, кто интересуется, это можно сделать без замены содержимого столбца назначения.

Например, чтобы вырезать столбец B и вставить его слева от столбца F, вы можете использовать

Вы также можете заменить именованные заголовки столбцов индексами столбцов по вкусу (так, Columns("B") станет Columns(2) )

Pastespecial не работает с Cut. Вы можете сделать это:


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

Вместо этого сделайте следующее:

Обратите внимание, что если есть ссылки на существующий столбец, они будут разорваны и не будут обновлены.


Не тот ответ, который вы ищете? Просмотрите другие вопросы с тегами excel vba или задайте свой вопрос.

Связано

Связанные

Горячие вопросы о сети

Чтобы подписаться на этот RSS-канал, скопируйте и вставьте этот URL-адрес в программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.18.41718

Я импортирую текстовый файл, который автоматически обновляется. Я хочу создать макрос, который после открытия отчета будет перемещать столбец (скажем, Z) для вставки перед столбцом A.
Кто-нибудь знает, как это сделать?

Факты об Excel

Если написать ИНДЕКС в Func. Аргументы, введите ПОИСКПОЗ(. Используйте мышь, чтобы щелкнуть внутри ПОИСКПОЗ в строке формул. Диалог переключается на ПОИСКПОЗ.

Обычная доска

Если вы хотите сделать всю колонку.

Столбцы("Z:ZJ").Выбрать
Выделение.Вырезать
Столбцы("A:A").Выбрать
Выделение.Вставить Shift:=xlToRight

Похожие темы

Master Excel Bundle

Excel содержит более 450 функций, и с каждым годом их становится все больше. Это огромная цифра, так с чего же начать? Прямо здесь, с этим набором.

Статистика форума

Поделиться этой страницей

Мы обнаружили, что вы используете блокировщик рекламы.

Какой блокировщик рекламы вы используете?

Отключить AdBlock

Следуйте этим простым шагам, чтобы отключить AdBlock

1)Нажмите значок на панели инструментов браузера.
2)Нажмите значок на панели инструментов браузера.
2)Нажмите кнопку «Приостановить на этом сайте».


Отключить AdBlock Plus

Следуйте этим простым шагам, чтобы отключить AdBlock Plus

1)Нажмите значок на панели инструментов браузера.
2)Нажмите на переключатель, чтобы отключить его для «mrexcel.com».


Отключить источник uBlock

Следуйте этим простым шагам, чтобы отключить uBlock Origin

1)Нажмите значок на панели инструментов браузера.
2)Нажмите кнопку "Питание".
3)Нажмите кнопку "Обновить".


Отключить uBlock

Следуйте этим простым шагам, чтобы отключить uBlock

1)Нажмите значок на панели инструментов браузера.
2)Нажмите кнопку "Питание".
3)Нажмите кнопку "Обновить".

Простой скрипт VBA для изменения порядка столбцов в электронной таблице Excel.

В следующем примере листа столбцы расположены в следующем порядке: Заголовок 1, Заголовок 2, Заголовок 3, Заголовок 4, Заголовок 5 и Заголовок 6.

Снимок экрана Excel.

Электронная таблица Excel, для которой необходимо изменить порядок столбцов.

Следующий скрипт Visual Basic для приложений (VBA) переупорядочивает их в следующем порядке: Заголовок 6, Заголовок 2, Заголовок 1, Заголовок 4, Заголовок 5 и Заголовок 3. Просто измените параметры в коде в соответствии с электронной таблицей, которую вы работаем над. Неуказанные или отсутствующие столбцы будут игнорироваться.

Результат этого скрипта показан ниже:

Снимок экрана Excel

Столбцы переставлены в электронной таблице Excel

Активация скрипта

Шаг 1

Откройте лист Excel, который необходимо изменить.

Шаг 2

Нажмите Alt + F11 или перейдите на ленту "Разработчик" и выберите значок "Visual Basic", если вкладка "Разработчик" включена.

Шаг 3

На панели инструментов Visual Basic для приложений выберите Вставка > Модуль

Снимок экрана Visual Basic для приложений

Вставка модуля в Visual Basic для приложений.

Шаг 4

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

Комментарии

17 ответов на вопрос «Измените порядок столбцов Excel с помощью Visual Basic»

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

Неважно. Я изменил имена столбцов на заголовок 1 и т. д., и это сработало. Большое спасибо за код.

Если вы собираетесь публиковать мои комментарии, замените мою фамилию на начальную букву «П».

Здравствуйте, Майкл! Пожалуйста, ознакомьтесь с редакционной политикой. Комментарии будут публиковаться по мере их поступления. Если вы не хотите, чтобы ваша фамилия была опубликована, не указывайте ее.

Спасибо! Это был отличный пример. Это было легко понять, и это было именно то, что я искал.

Читайте также: