Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перемещение столбцов из одной части листа в другую - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Перемещение столбцов из одной части листа в другую
ВасилисаЛукьянчикова Дата: Среда, 10.10.2018, 02:57 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Подскажите - как перекинуть столбцы с данными из одной части листа - в другую часть листа ?

Есть лист с информацией. Он разделен на две части - зеленой полосой (закрашенные в зеленый цвет ячейки).
По левую сторону этой полосы - отсортированная информация, по правую сторону - неотсортированная.
В строке "8" - находятся критерии сортировки - это символы Г, C, Ц.
Каждый из разделов с правой стороны - начинается от закрашенной черной ячейки.

Как макросом - проверить каждый столбец, стоящий по правую сторону зеленой линии и перекинуть его целиком - в нужный раздел левой стороны ?
То есть разделы с левой стороны - будут со временем все больше расти, и зеленая линия - соответственно будет все больше сдвигаться вправо.
К сообщению приложен файл: 3014519.xlsb (28.6 Kb)
 
Ответить
СообщениеЗдравствуйте.
Подскажите - как перекинуть столбцы с данными из одной части листа - в другую часть листа ?

Есть лист с информацией. Он разделен на две части - зеленой полосой (закрашенные в зеленый цвет ячейки).
По левую сторону этой полосы - отсортированная информация, по правую сторону - неотсортированная.
В строке "8" - находятся критерии сортировки - это символы Г, C, Ц.
Каждый из разделов с правой стороны - начинается от закрашенной черной ячейки.

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

Автор - ВасилисаЛукьянчикова
Дата добавления - 10.10.2018 в 02:57
boa Дата: Среда, 10.10.2018, 09:11 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
ВасилисаЛукьянчикова,
Цитата ВасилисаЛукьянчикова, 10.10.2018 в 02:57, в сообщении № 1 ()
проверить каждый столбец

Не понятно по какому условию надо проверять.
А колонку можно переместить кодом
[vba]
Код
Columns(120).Cut
Columns(32).Insert Shift:=xlToRight
[/vba]




Сообщение отредактировал boa - Среда, 10.10.2018, 09:11
 
Ответить
СообщениеВасилисаЛукьянчикова,
Цитата ВасилисаЛукьянчикова, 10.10.2018 в 02:57, в сообщении № 1 ()
проверить каждый столбец

Не понятно по какому условию надо проверять.
А колонку можно переместить кодом
[vba]
Код
Columns(120).Cut
Columns(32).Insert Shift:=xlToRight
[/vba]

Автор - boa
Дата добавления - 10.10.2018 в 09:11
ВасилисаЛукьянчикова Дата: Среда, 10.10.2018, 10:05 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Не понятно по какому условию надо проверять.


Макрос действует так.
1)Он проверяет содержимое строки "8" по левую сторону от зеленой линии (столбцы CM,CN).
И видит в этом диапазоне - два вида значений : буквы "Г" и "С".
Запоминает их.

2)Начинает проверку содержимого строки "8" по правую сторону от зеленой линии.
Первая на его пути - ячейка DO8 со значением "Ц".
Такой буквы в памяти макроса нет (только "Г" и "С") - поэтому он пропускает это значение и двигается дальше вправо по строке 8.

Следующая на его пути - ячейка DP8 со значением "С".
А вот такая буква в памяти макроса - есть.
Поэтому он хватает весь столбец DP, вырезает его и перемещает этот столбец в левую часть - туда где находятся столбцы со значениями "С" в строке 8 - на место пока еще пустого столбца BA (со сдвигом вправо).

Таким образом в левой части листа - область включающая в себя столбцы со значениями в строке 8 -"Г" и "С" - будут увеличиваться.
Зеленая граница соответственно будет все больше сдвигаться вправо.
А область по правую сторону зеленой границы - будет все больше редеть, поскольку оттуда будут исчезать столбцы со значениями "Г" и "С" (точнее не исчезать, а переносится в левую часть листа)

То есть просто происходит - перемещение столбцов.


Сообщение отредактировал ВасилисаЛукьянчикова - Среда, 10.10.2018, 10:09
 
Ответить
Сообщение
Не понятно по какому условию надо проверять.


Макрос действует так.
1)Он проверяет содержимое строки "8" по левую сторону от зеленой линии (столбцы CM,CN).
И видит в этом диапазоне - два вида значений : буквы "Г" и "С".
Запоминает их.

2)Начинает проверку содержимого строки "8" по правую сторону от зеленой линии.
Первая на его пути - ячейка DO8 со значением "Ц".
Такой буквы в памяти макроса нет (только "Г" и "С") - поэтому он пропускает это значение и двигается дальше вправо по строке 8.

Следующая на его пути - ячейка DP8 со значением "С".
А вот такая буква в памяти макроса - есть.
Поэтому он хватает весь столбец DP, вырезает его и перемещает этот столбец в левую часть - туда где находятся столбцы со значениями "С" в строке 8 - на место пока еще пустого столбца BA (со сдвигом вправо).

Таким образом в левой части листа - область включающая в себя столбцы со значениями в строке 8 -"Г" и "С" - будут увеличиваться.
Зеленая граница соответственно будет все больше сдвигаться вправо.
А область по правую сторону зеленой границы - будет все больше редеть, поскольку оттуда будут исчезать столбцы со значениями "Г" и "С" (точнее не исчезать, а переносится в левую часть листа)

То есть просто происходит - перемещение столбцов.

Автор - ВасилисаЛукьянчикова
Дата добавления - 10.10.2018 в 10:05
RAN Дата: Среда, 10.10.2018, 14:26 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Мяу()
    Dim arFind()
    Dim borderline&, colCut&, colInsert&, i&
    arFind = Array("г", "с")

    With Application
        .ScreenUpdating = False
        With .FindFormat
            .Interior.Color = 10092441
            On Error Resume Next
            For i = 0 To 1
                Do
                    colCut = 0: colInsert = 0
                    borderline = Rows(8).Find(What:="", After:=Rows(8).Cells(1), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=True).Column
                    colCut = Rows(8).Find(What:=arFind(i), After:=Rows(8).Cells(borderline), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).Column
                    If colCut < borderline Then Exit Do
                    colInsert = Rows(8).Find(What:=arFind(i), After:=Rows(8).Cells(borderline), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:= _
                    False, SearchFormat:=False).Column + 1
                    Columns(colCut).Cut
                    Columns(colInsert).Insert
                    DoEvents
                Loop Until Err
            Next
            .Clear
        End With
        .ScreenUpdating = False
    End With

End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Мяу()
    Dim arFind()
    Dim borderline&, colCut&, colInsert&, i&
    arFind = Array("г", "с")

    With Application
        .ScreenUpdating = False
        With .FindFormat
            .Interior.Color = 10092441
            On Error Resume Next
            For i = 0 To 1
                Do
                    colCut = 0: colInsert = 0
                    borderline = Rows(8).Find(What:="", After:=Rows(8).Cells(1), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=True).Column
                    colCut = Rows(8).Find(What:=arFind(i), After:=Rows(8).Cells(borderline), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).Column
                    If colCut < borderline Then Exit Do
                    colInsert = Rows(8).Find(What:=arFind(i), After:=Rows(8).Cells(borderline), LookIn:=xlValues, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:= _
                    False, SearchFormat:=False).Column + 1
                    Columns(colCut).Cut
                    Columns(colInsert).Insert
                    DoEvents
                Loop Until Err
            Next
            .Clear
        End With
        .ScreenUpdating = False
    End With

End Sub
[/vba]

Автор - RAN
Дата добавления - 10.10.2018 в 14:26
ВасилисаЛукьянчикова Дата: Среда, 10.10.2018, 14:40 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
RAN, вот это и нужно было.
В общем огромное вам спасибо и просто низкий поклон.
 
Ответить
СообщениеRAN, вот это и нужно было.
В общем огромное вам спасибо и просто низкий поклон.

Автор - ВасилисаЛукьянчикова
Дата добавления - 10.10.2018 в 14:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!