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

Вход

Регистрация

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

 

= Мир MS Excel/Смещение ячеек по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Смещение ячеек по условию (Макросы/Sub)
Смещение ячеек по условию
alexey-tank98 Дата: Суббота, 24.02.2024, 00:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Всем привет. Есть пример таблицы. Нужно задать условие так, чтобы в зависимости от значения в столбце Е (дадим им переменную Х), ячейки в столбце F (дадим им переменную У) смещались вправо на Х*2. Т.е. Если Х=1, У "смещается на" 2Х. Вот это "смещается на" я не пойму, как задать.

Заранее спасибо!
К сообщению приложен файл: tablica.xlsx (38.8 Kb)


Сообщение отредактировал alexey-tank98 - Суббота, 24.02.2024, 11:19
 
Ответить
СообщениеВсем привет. Есть пример таблицы. Нужно задать условие так, чтобы в зависимости от значения в столбце Е (дадим им переменную Х), ячейки в столбце F (дадим им переменную У) смещались вправо на Х*2. Т.е. Если Х=1, У "смещается на" 2Х. Вот это "смещается на" я не пойму, как задать.

Заранее спасибо!

Автор - alexey-tank98
Дата добавления - 24.02.2024 в 00:41
i691198 Дата: Суббота, 24.02.2024, 10:30 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

Здравствуйте. По правилам форума один вопрос - одна тема. Модераторы могут заблокировать.
Для вопроса по теме попробуйте такой макрос.
[vba]
Код
Sub OffsetColumn()
  Dim Cl As Range
  For Each Cl In Range("E1:E" & Cells(Rows.Count, 4).End(xlUp).Row)
    If Cl > 0 Then Cl.Offset(, 1).Cut Destination:=Cl.Offset(, 1 + Cl * 2)
  Next
End Sub
[/vba]


Сообщение отредактировал i691198 - Суббота, 24.02.2024, 10:31
 
Ответить
СообщениеЗдравствуйте. По правилам форума один вопрос - одна тема. Модераторы могут заблокировать.
Для вопроса по теме попробуйте такой макрос.
[vba]
Код
Sub OffsetColumn()
  Dim Cl As Range
  For Each Cl In Range("E1:E" & Cells(Rows.Count, 4).End(xlUp).Row)
    If Cl > 0 Then Cl.Offset(, 1).Cut Destination:=Cl.Offset(, 1 + Cl * 2)
  Next
End Sub
[/vba]

Автор - i691198
Дата добавления - 24.02.2024 в 10:30
alexey-tank98 Дата: Суббота, 24.02.2024, 11:16 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

i691198, Это работает, спасибо большое. Тему отредактирую по Вашему совету)
А можете пояснить, как и за что отвечают эти 2 строки:

1 For Each Cl In Range("E1:E" & Cells(Rows.Count, 4).End(xlUp).Row)
2 If Cl > 0 Then Cl.Offset(, 1).Cut Destination:=Cl.Offset(, 1 + Cl * 2)


Сообщение отредактировал alexey-tank98 - Суббота, 24.02.2024, 12:13
 
Ответить
Сообщениеi691198, Это работает, спасибо большое. Тему отредактирую по Вашему совету)
А можете пояснить, как и за что отвечают эти 2 строки:

1 For Each Cl In Range("E1:E" & Cells(Rows.Count, 4).End(xlUp).Row)
2 If Cl > 0 Then Cl.Offset(, 1).Cut Destination:=Cl.Offset(, 1 + Cl * 2)

Автор - alexey-tank98
Дата добавления - 24.02.2024 в 11:16
i691198 Дата: Суббота, 24.02.2024, 13:08 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

1. Оператор Cells(Rows.Count, 4).End(xlUp).Row определяет номер строки последней непустой ячейки в столбце D. В вашем примере это 7. Таким образом получаем цикл для переменной CL по всем ячейкам в диапазоне "E1:E7".
2. Если очередное значение ячейки из этого диапазона больше 0 (при нулевом значении ничего делать не нужно), то Cl.Offset(, 1).Cut забирает содержимое ячейки, находящейся в той же строке в столбце F (1 - это смещение по столбцам от текущего значения Cl) в буфер обмена и очищает эту ячейку.
Destination:=Cl.Offset(, 1 + Cl * 2) вставляем данные из буфера в ячейку в ту же строку, а номер столбца определяется по формуле 1 + Cl * 2. (если значение Cl =1, то это столбец H, если 2, то столбец J и т.д.).


Сообщение отредактировал i691198 - Суббота, 24.02.2024, 13:30
 
Ответить
Сообщение1. Оператор Cells(Rows.Count, 4).End(xlUp).Row определяет номер строки последней непустой ячейки в столбце D. В вашем примере это 7. Таким образом получаем цикл для переменной CL по всем ячейкам в диапазоне "E1:E7".
2. Если очередное значение ячейки из этого диапазона больше 0 (при нулевом значении ничего делать не нужно), то Cl.Offset(, 1).Cut забирает содержимое ячейки, находящейся в той же строке в столбце F (1 - это смещение по столбцам от текущего значения Cl) в буфер обмена и очищает эту ячейку.
Destination:=Cl.Offset(, 1 + Cl * 2) вставляем данные из буфера в ячейку в ту же строку, а номер столбца определяется по формуле 1 + Cl * 2. (если значение Cl =1, то это столбец H, если 2, то столбец J и т.д.).

Автор - i691198
Дата добавления - 24.02.2024 в 13:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Смещение ячеек по условию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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