Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2017, 14:36   #1
krestsoft
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 10
Печаль Как автоматически перенести ячейку в другую без формулы?

Пример:
A1 - текст
B1 - текст
С1 - сцепка текста формулой
D1 - Вставка значения автоматически и чтобы его можно было править сразу как попало.

Поянть не могу, возможно ли такое?
Пардон за тупость, если что
Вложения
Тип файла: xlsx Пример.xlsx (9.2 Кб, 11 просмотров)
krestsoft вне форума Ответить с цитированием
Старый 26.03.2017, 15:36   #2
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Код в модуле листа
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:B99"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = IIf(Cells(Target.Row, 1) <> Empty, Cells(Target.Row, 1) & " ", "") & Cells(Target.Row, 2)
    Cells(Target.Row, 4) = Cells(Target.Row, 1) & IIf(Cells(Target.Row, 2) <> Empty, " " & Cells(Target.Row, 2), "")
End Sub
Вложения
Тип файла: rar Пример_01.rar (11.9 Кб, 12 просмотров)
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 26.03.2017, 16:03   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

krestsoft,
Вашу схему можно упростить на четверть, если удалить их нее элемент С1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.03.2017, 16:30   #4
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Можно короче
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:B99"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Trim(Join(Split(Cells(Target.Row, 1) & " " & Cells(Target.Row, 2))))
End Sub
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 26.03.2017, 17:46   #5
krestsoft
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 10
По умолчанию

СПАСИБО РЕБЯТ! ВСЁ КРУТО!
krestsoft вне форума Ответить с цитированием
Старый 26.03.2017, 19:37   #6
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Еще проще
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:B99"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Trim(Cells(Target.Row, 1) & " " & Cells(Target.Row, 2))
End Sub
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 29.03.2017, 13:11   #7
krestsoft
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 10
По умолчанию

Цитата:
Сообщение от AlexM12 Посмотреть сообщение
Еще проще
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:B99"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Trim(Cells(Target.Row, 1) & " " & Cells(Target.Row, 2))
End Sub
Алексей, у меня почему-то не получается воспроизвести это в другом документе.
Вставляю код в другой документ через Alt+F11 в Лист1 (Лист1) и код не работает, так, как в примере. Вообще не работает.

Но мне нужны другие столбцы, не A2:B99, а допустим, B2:C9999.

Можете подсказать, что я не так делаю?
П.С. а в самом коде не вижу, как вставляются строки в ячейки D )
krestsoft вне форума Ответить с цитированием
Старый 29.03.2017, 13:44   #8
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Если изменение значения произойдет в диапазоне A2:B99 (задано во второй строке кода), то будет выполнена третья строка кода.
Cells(Target.Row, 4) - 4 это номер столбца в которой записывается сцепка ячеек.
Cells(Target.Row, 1) - 1 это номер столбца в котором первое значение
Cells(Target.Row, 2) - 2 это номер столбца в котором второе значение
Под диапазон B2:C9999 код будет такой
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("B2:C9999"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Trim(Cells(Target.Row, 2) & " " & Cells(Target.Row, 3))
End Sub
Сцепка осталась в столбце D
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 29.03.2017, 14:31   #9
krestsoft
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 10
По умолчанию

Цитата:
Сообщение от AlexM12 Посмотреть сообщение
Если изменение значения произойдет в диапазоне A2:B99 (задано во второй строке кода), то будет выполнена третья строка кода.
Cells(Target.Row, 4) - 4 это номер столбца в которой записывается сцепка ячеек.
Cells(Target.Row, 1) - 1 это номер столбца в котором первое значение
Cells(Target.Row, 2) - 2 это номер столбца в котором второе значение
Под диапазон B2:C9999 код будет такой
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("B2:C9999"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Trim(Cells(Target.Row, 2) & " " & Cells(Target.Row, 3))
End Sub
Сцепка осталась в столбце D
Спасибо. Поучительно.

Получается, чтобы сделать перенести текст из A в С и из B в D необходимо сделать примерно следующее?

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:A9999"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row,3) = Cells(Target.Row, 1)
    If Intersect(Range("B2:B9999"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 4) = Cells(Target.Row, 2)
End Sub
А если в полях в столбцах A и B будут формулы, макрос сработает?
krestsoft вне форума Ответить с цитированием
Старый 29.03.2017, 14:45   #10
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

If Intersect(Range("A2:A9999"), Target) Is Nothing Then Exit Sub
В этой строке делается проверка. Если изменение значения произошло не в диапазоне A2:A9999, то макрос завершает работу.
Если вы измените значение в диапазоне B2:B9999, то макрос не сработает
Поэтому нужно так
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("A2:B9999"), Target) Is Nothing Then Exit Sub
    Cells(Target.Row, 3) = Cells(Target.Row, 1)
    Cells(Target.Row, 4) = Cells(Target.Row, 2)
End Sub
Алексей М.
AlexM12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести часть данных с ячейки в другую ячейку 5mrs Microsoft Office Excel 18 27.01.2015 12:53
Перенести часть данных до определенного слова в другую ячейку maksden Microsoft Office Excel 3 28.02.2013 11:34
автоматически выбрать ячейку без заливки Karponen Помощь студентам 1 20.02.2013 14:48
Как автоматически протягивать формулы? АлександрМГ Microsoft Office Excel 16 17.09.2012 10:55
скопировать результат формулы в другую ячейку johny_03 Microsoft Office Excel 5 15.05.2011 05:17