1

Я использую Excel 2010. Предположим, у вас есть эти данные в электронной таблице:

line:   content:
1       data 1
2       data 2
3       data 3
4       data 4
5       data 5

Вы сделали ошибку , и теперь нужно переключать значения в столбце content (но не столбец line между строками 2 и 4. Теперь это должно выглядеть так:

line:   content:
1       data 1
2       data 4
3       data 3
4       data 2
5       data 5

Как переключить столбец без изменения данных в других столбцах?

Чтобы привести другой пример, если я наберу

                               

и затем понимаю, что я перепутал маленькие, кислые цитрусовые, я хочу выбрать строки 2 и 4 (то есть, я хочу выделить все строки),

                               

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

                               

Давайте предположим, что подмножество столбцов является постоянным; например (как показано выше), я всегда хотел бы оставить столбцы A и B на месте и поменять местами столбцы C, D и E.

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

  • row1: abcdefg
  • row2: hijklmn

Теперь после переключения:

  • row1: hijklmn
  • row2: abcdefg

2 ответа2

2

Ленивый способ поменять клетки

Используйте макрос VBA для замены отдельных ячеек или конгруэнтных прямоугольников

Как пользоваться

  1. Открыть Excel »Нажмите Alt+F11 » Скопируйте и вставьте код в новый модуль
  2. Вернитесь в Excel и выберите два диапазона для обмена.
    Они должны совпадать по размеру и количеству клеток, как показано в примере выше
  3. Нажмите Alt+F8 и выполните макрос swap .

Sub swap()

    If Selection.Areas.Count <> 2 Then Exit Sub

    Set range1 = Selection.Areas(1)
    Set range2 = Selection.Areas(2)

    If range1.Rows.Count <> range2.Rows.Count Or _
        range1.Columns.Count <> range2.Columns.Count Then Exit Sub

    range1Address = range1.Address
    range1.Cut
    range2.Insert shift:=xlShiftToRight
    Range(range1Address).Delete shift:=xlToLeft

    range2Address = range2.Address
    range2.Cut
    Range(range1Address).Insert shift:=xlShiftToRight
    Range(range2Address).Delete shift:=xlToLeft

End Sub

Совет: назначьте ярлык + поместите код в надстройку Excel для еще большего удобства. Внутри надстройки новая функция swap доступна во всех ваших листах Excel без необходимости каждый раз копировать код.

1

Я нашел ответ nixda очень полезным для использования в качестве отправной точки, но по какой-то причине он не работал на моем компьютере. Не имея опыта VBA до сегодняшнего дня, я смог придумать это, что определенно работает, а также имеет преимущество в том, что он гораздо более понятен кому-то без опыта VBA:

Sub swap()

    If Selection.Areas.Count <> 2 Then Exit Sub

    Dim temp As Variant

    Set range1 = Selection.Areas(1)
    Set range2 = Selection.Areas(2)

        If range1.Rows.Count <> range2.Rows.Count Or _
        range1.Columns.Count <> range2.Columns.Count Then Exit Sub

    temp = range1.Value
    range1.Value = range2.Value
    range2.Value = temp

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .