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

Вход

Регистрация

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

 

= Мир MS Excel/Смещение текста в ячейках строки - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 212»
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Смещение текста в ячейках строки (Формулы/Formulas)
Смещение текста в ячейках строки
Xelit Дата: Понедельник, 22.02.2016, 16:13 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Прошу вашей помощи, ничего самостоятельно найти не смог.
Суть. Можно ли в таблице (см. файл) сделать "кнопку" (Добавить) при нажатии на которую вся информация справа от нее сдвигалась на две ячейки. Если еще и проверка будет от двойного нажатия (проверить есть ли записи в ячейке) будет вообще супер. Нужно что бы последняя запись была всегда слева, записывать часто приходится.
В файле:
1 - как выглядит до нажатия до нажатия на "кнопку"
2 - после нажатия.
К сообщению приложен файл: 2071652.xlsx(9Kb)


Сообщение отредактировал Xelit - Понедельник, 22.02.2016, 16:19
 
Ответить
СообщениеДобрый день.
Прошу вашей помощи, ничего самостоятельно найти не смог.
Суть. Можно ли в таблице (см. файл) сделать "кнопку" (Добавить) при нажатии на которую вся информация справа от нее сдвигалась на две ячейки. Если еще и проверка будет от двойного нажатия (проверить есть ли записи в ячейке) будет вообще супер. Нужно что бы последняя запись была всегда слева, записывать часто приходится.
В файле:
1 - как выглядит до нажатия до нажатия на "кнопку"
2 - после нажатия.

Автор - Xelit
Дата добавления - 22.02.2016 в 16:13
Pelena Дата: Понедельник, 22.02.2016, 16:54 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11498
Репутация: 2557 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Здравствуйте.
Обязательно кнопку? Выделяете C6:D7 -- правой кнопкой мыши -- Вставить... -- Ячейки со сдвигом вправо -- ОК
Не то?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Обязательно кнопку? Выделяете C6:D7 -- правой кнопкой мыши -- Вставить... -- Ячейки со сдвигом вправо -- ОК
Не то?

Автор - Pelena
Дата добавления - 22.02.2016 в 16:54
Xelit Дата: Понедельник, 22.02.2016, 16:58 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Pelena, не то, но так сейчас и приходится делать, по 50 - 100 записей в день. Я за автоматизацию процессов ))
 
Ответить
СообщениеPelena, не то, но так сейчас и приходится делать, по 50 - 100 записей в день. Я за автоматизацию процессов ))

Автор - Xelit
Дата добавления - 22.02.2016 в 16:58
StoTisteg Дата: Понедельник, 22.02.2016, 17:21 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
[p.s.]Пост больше не актуален.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.

Сообщение отредактировал StoTisteg - Понедельник, 22.02.2016, 17:34
 
Ответить
Сообщение[p.s.]Пост больше не актуален.

Автор - StoTisteg
Дата добавления - 22.02.2016 в 17:21
StoTisteg Дата: Понедельник, 22.02.2016, 17:33 | Сообщение № 5
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
так сейчас и приходится делать, по 50 - 100 записей в день

В одной и той же книге или в разных?


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
Сообщение
так сейчас и приходится делать, по 50 - 100 записей в день

В одной и той же книге или в разных?

Автор - StoTisteg
Дата добавления - 22.02.2016 в 17:33
Xelit Дата: Понедельник, 22.02.2016, 17:42 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
StoTisteg, в одной ит ой же
 
Ответить
СообщениеStoTisteg, в одной ит ой же

Автор - Xelit
Дата добавления - 22.02.2016 в 17:42
МВТ Дата: Понедельник, 22.02.2016, 18:14 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 136 ±
Замечаний: 0% ±

Excel 2007
Как-то так[vba]
Код
Sub tt()
    Application.ScreenUpdating = False
    Range("C5:C11").Insert shift:=xlToRight
    Range("C5:C11").Insert shift:=xlToRight
    [C5] = "Дата": [D5] = "Описание"
    Union(Range("C6:D7"), Range("C10:D11")).Borders.LineStyle = 1
    Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
СообщениеКак-то так[vba]
Код
Sub tt()
    Application.ScreenUpdating = False
    Range("C5:C11").Insert shift:=xlToRight
    Range("C5:C11").Insert shift:=xlToRight
    [C5] = "Дата": [D5] = "Описание"
    Union(Range("C6:D7"), Range("C10:D11")).Borders.LineStyle = 1
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - МВТ
Дата добавления - 22.02.2016 в 18:14
Xelit Дата: Понедельник, 22.02.2016, 18:40 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
МВТ, спасибо, а можно попросить Вас поправить так, чтобы только в этой строке ячейки сдвигались, а не по всему листу. Сверху и снизу будут записи которые двигать не нужно пока не потребуется дописать новые данные,и применить макрос.
 
Ответить
СообщениеМВТ, спасибо, а можно попросить Вас поправить так, чтобы только в этой строке ячейки сдвигались, а не по всему листу. Сверху и снизу будут записи которые двигать не нужно пока не потребуется дописать новые данные,и применить макрос.

Автор - Xelit
Дата добавления - 22.02.2016 в 18:40
StoTisteg Дата: Понедельник, 22.02.2016, 18:44 | Сообщение № 9
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Просто измените диапазон "C5:C11" на нужный Вам.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеПросто измените диапазон "C5:C11" на нужный Вам.

Автор - StoTisteg
Дата добавления - 22.02.2016 в 18:44
МВТ Дата: Понедельник, 22.02.2016, 19:05 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 136 ±
Замечаний: 0% ±

Excel 2007
Xelit, напишите конкретно, что нужно сдвигать - С5:D7?
 
Ответить
СообщениеXelit, напишите конкретно, что нужно сдвигать - С5:D7?

Автор - МВТ
Дата добавления - 22.02.2016 в 19:05
Xelit Дата: Понедельник, 22.02.2016, 20:02 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
StoTisteg,прошу прощения, за то что не очень понятно получилось описать суть.
В файлике два шага: 1-исходные данные, 2-как должно быть после применения макроса. Сдвигаться ячейки вправо должны только в строке (стол), в соседних (сверху и снизу) остаться на местах. В следующий раз может потребоваться в другие строки записи делать или в ней же и уже там сдвигать. Поэтому я и попросил если возможно сделать в каждой строке "кнопку" (между наименованием и датой, которую потом можно будет протянуть по всей таблице) нажимая на которую, происходил бы сдвиг на две ячейки в выбранной строке, но если и через горячую клавишу макрос будет работать, после того как выделяешь ячейку в строке, где нужен "сдвиг", всё лучше чем сейчас приходится в "ручную" сдвигать.
P.S.Надеюсь не запутал вас еще больше.
К сообщению приложен файл: 8157613.xlsx(10Kb)


Сообщение отредактировал Xelit - Понедельник, 22.02.2016, 20:03
 
Ответить
СообщениеStoTisteg,прошу прощения, за то что не очень понятно получилось описать суть.
В файлике два шага: 1-исходные данные, 2-как должно быть после применения макроса. Сдвигаться ячейки вправо должны только в строке (стол), в соседних (сверху и снизу) остаться на местах. В следующий раз может потребоваться в другие строки записи делать или в ней же и уже там сдвигать. Поэтому я и попросил если возможно сделать в каждой строке "кнопку" (между наименованием и датой, которую потом можно будет протянуть по всей таблице) нажимая на которую, происходил бы сдвиг на две ячейки в выбранной строке, но если и через горячую клавишу макрос будет работать, после того как выделяешь ячейку в строке, где нужен "сдвиг", всё лучше чем сейчас приходится в "ручную" сдвигать.
P.S.Надеюсь не запутал вас еще больше.

Автор - Xelit
Дата добавления - 22.02.2016 в 20:02
Xelit Дата: Вторник, 23.02.2016, 14:35 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Апну тему
 
Ответить
СообщениеАпну тему

Автор - Xelit
Дата добавления - 23.02.2016 в 14:35
StoTisteg Дата: Вторник, 23.02.2016, 15:01 | Сообщение № 13
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Понятно. Только кнопки сами не появляются, их ещё кто-то повесить должен :) Я бы просто обрабатывал двойной клик по содержимому ячейки со словом "сдвиг".


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеПонятно. Только кнопки сами не появляются, их ещё кто-то повесить должен :) Я бы просто обрабатывал двойной клик по содержимому ячейки со словом "сдвиг".

Автор - StoTisteg
Дата добавления - 23.02.2016 в 15:01
StoTisteg Дата: Вторник, 23.02.2016, 16:42 | Сообщение № 14
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Примерно так, как в примере.
В модуле Лист1 лежит код
[vba]
Код

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim i As Integer
    
    If MsgBox(prompt:="Сдвинуть ячейки?", Buttons:=vbQuestion + vbYesNo, Title:="Сдвиг ячеек") = vbYes Then 'Запрос подтверждения. Если не нужен, эту и последнюю строки можно закомментировать
        i = ActiveSheet.UsedRange.Columns.Count 'Запоминаем число столбцов до сдвига
        With Target.Offset(, 1)
            If Target.Value = "Сдвиг" And .Value <> "" Then 'Проверяем, есть ли "кнопка" и не было ли сдвига раньше
                .Insert shift:=xlToRight  'Дважды вставляем ячейку...
                .Borders.LineStyle = 1 ' ... и восстанавливаем границу
                .Insert shift:=xlToRight
                .Borders.LineStyle = 1
                Target.Clear 'Убираем "кнопку", чтобы киворукие не сдвинули второй раз
                Columns(i + 1).Delete 'Убираем лишнее
                Columns(i + 1).Delete
                .Activate ' Перемещаемся в соседнюю ячейку
            End If
        End With
    End If ' Если запрос подтверждения не нужен, эту строку можно закомментировать
    
End Sub
[/vba]

Работает от двойного клика по кнопке с текстом "Сдвиг". Если текст надо изменить, меняете строку
[vba]
Код

            If Target.Value = "Сдвиг" And .Value <> "" Then
[/vba]
на
[vba]
Код

            If Target.Value = "<Ваш_Текст>" And .Value <> "" Then
[/vba]
Сдвиг привязан к "кнопке", т. е. сдвигается всегда то, что справа от неё. Если нужна возможность сдвигать ячейки, где в первом поле Дата пусто, замените
[vba]
Код

            If Target.Value = "<Ваш_Текст>" And .Value <> "" Then
[/vba]
на
[vba]
Код

            If Target.Value = "<Ваш_Текст>" Then
[/vba]
Если "кнопка" не должна исчезать, закомментируйте строку
[vba]
Код

Target.Clear
[/vba]
К сообщению приложен файл: Offdent.xlsm(15Kb)


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеПримерно так, как в примере.
В модуле Лист1 лежит код
[vba]
Код

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim i As Integer
    
    If MsgBox(prompt:="Сдвинуть ячейки?", Buttons:=vbQuestion + vbYesNo, Title:="Сдвиг ячеек") = vbYes Then 'Запрос подтверждения. Если не нужен, эту и последнюю строки можно закомментировать
        i = ActiveSheet.UsedRange.Columns.Count 'Запоминаем число столбцов до сдвига
        With Target.Offset(, 1)
            If Target.Value = "Сдвиг" And .Value <> "" Then 'Проверяем, есть ли "кнопка" и не было ли сдвига раньше
                .Insert shift:=xlToRight  'Дважды вставляем ячейку...
                .Borders.LineStyle = 1 ' ... и восстанавливаем границу
                .Insert shift:=xlToRight
                .Borders.LineStyle = 1
                Target.Clear 'Убираем "кнопку", чтобы киворукие не сдвинули второй раз
                Columns(i + 1).Delete 'Убираем лишнее
                Columns(i + 1).Delete
                .Activate ' Перемещаемся в соседнюю ячейку
            End If
        End With
    End If ' Если запрос подтверждения не нужен, эту строку можно закомментировать
    
End Sub
[/vba]

Работает от двойного клика по кнопке с текстом "Сдвиг". Если текст надо изменить, меняете строку
[vba]
Код

            If Target.Value = "Сдвиг" And .Value <> "" Then
[/vba]
на
[vba]
Код

            If Target.Value = "<Ваш_Текст>" And .Value <> "" Then
[/vba]
Сдвиг привязан к "кнопке", т. е. сдвигается всегда то, что справа от неё. Если нужна возможность сдвигать ячейки, где в первом поле Дата пусто, замените
[vba]
Код

            If Target.Value = "<Ваш_Текст>" And .Value <> "" Then
[/vba]
на
[vba]
Код

            If Target.Value = "<Ваш_Текст>" Then
[/vba]
Если "кнопка" не должна исчезать, закомментируйте строку
[vba]
Код

Target.Clear
[/vba]

Автор - StoTisteg
Дата добавления - 23.02.2016 в 16:42
Xelit Дата: Вторник, 23.02.2016, 16:50 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо, завтра попробую, отпишусь.
 
Ответить
СообщениеСпасибо, завтра попробую, отпишусь.

Автор - Xelit
Дата добавления - 23.02.2016 в 16:50
StoTisteg Дата: Вторник, 23.02.2016, 21:42 | Сообщение № 16
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Прошу пардону, забыл восстановить границы бывшей "кнопки". Добавилась одна строчка.
[vba]
Код

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim i As Integer
    
    If MsgBox(prompt:="Сдвинуть ячейки?", Buttons:=vbQuestion + vbYesNo, Title:="Сдвиг ячеек") = vbYes Then 'Запрос подтверждения. Если не нужен, эту и последнюю строки можно закомментировать
        i = ActiveSheet.UsedRange.Columns.Count 'Запоминаем число столбцов до сдвига
        With Target.Offset(, 1)
            If Target.Value = "Сдвиг" And .Value <> "" Then 'Проверяем, есть ли "кнопка" и не было ли сдвига раньше
                .Insert shift:=xlToRight  'Дважды вставляем ячейку...
                .Borders.LineStyle = 1 ' ... и восстанавливаем границу
                .Insert shift:=xlToRight
                .Borders.LineStyle = 1
                Target.Clear 'Убираем "кнопку", чтобы киворукие не сдвинули второй раз
                Columns(i + 1).Delete 'Убираем лишнее
                Columns(i + 1).Delete
                Target.Borders.LineStyle = 1 'Восстанавливаем границу в "кнопке"
                .Activate ' Перемещаемся в соседнюю ячейку
            End If
        End With
    End If ' Если запрос подтверждения не нужен, эту строку можно закомментировать
    
End Sub
[/vba]
К сообщению приложен файл: 6751325.xlsm(15Kb)


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеПрошу пардону, забыл восстановить границы бывшей "кнопки". Добавилась одна строчка.
[vba]
Код

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim i As Integer
    
    If MsgBox(prompt:="Сдвинуть ячейки?", Buttons:=vbQuestion + vbYesNo, Title:="Сдвиг ячеек") = vbYes Then 'Запрос подтверждения. Если не нужен, эту и последнюю строки можно закомментировать
        i = ActiveSheet.UsedRange.Columns.Count 'Запоминаем число столбцов до сдвига
        With Target.Offset(, 1)
            If Target.Value = "Сдвиг" And .Value <> "" Then 'Проверяем, есть ли "кнопка" и не было ли сдвига раньше
                .Insert shift:=xlToRight  'Дважды вставляем ячейку...
                .Borders.LineStyle = 1 ' ... и восстанавливаем границу
                .Insert shift:=xlToRight
                .Borders.LineStyle = 1
                Target.Clear 'Убираем "кнопку", чтобы киворукие не сдвинули второй раз
                Columns(i + 1).Delete 'Убираем лишнее
                Columns(i + 1).Delete
                Target.Borders.LineStyle = 1 'Восстанавливаем границу в "кнопке"
                .Activate ' Перемещаемся в соседнюю ячейку
            End If
        End With
    End If ' Если запрос подтверждения не нужен, эту строку можно закомментировать
    
End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 23.02.2016 в 21:42
StoTisteg Дата: Вторник, 23.02.2016, 21:57 | Сообщение № 17
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Блин. Запрос на каждый даблклик — это явно лишнее.
К сообщению приложен файл: 9422244.xlsm(15Kb)


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеБлин. Запрос на каждый даблклик — это явно лишнее.

Автор - StoTisteg
Дата добавления - 23.02.2016 в 21:57
МВТ Дата: Вторник, 23.02.2016, 22:19 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 136 ±
Замечаний: 0% ±

Excel 2007
Советую еще прописать Cancel = true, чтобы не "проваливаться" в ячейку
 
Ответить
СообщениеСоветую еще прописать Cancel = true, чтобы не "проваливаться" в ячейку

Автор - МВТ
Дата добавления - 23.02.2016 в 22:19
StoTisteg Дата: Вторник, 23.02.2016, 22:44 | Сообщение № 19
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
А я всё равно там в конце делаю
[vba]
Код

Target.Offset(, 1).Activate
[/vba]
в размышлении, что сдвигают не для красоты, а чтобы данные добавить.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.

Сообщение отредактировал StoTisteg - Вторник, 23.02.2016, 22:45
 
Ответить
СообщениеА я всё равно там в конце делаю
[vba]
Код

Target.Offset(, 1).Activate
[/vba]
в размышлении, что сдвигают не для красоты, а чтобы данные добавить.

Автор - StoTisteg
Дата добавления - 23.02.2016 в 22:44
Xelit Дата: Среда, 24.02.2016, 07:59 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
StoTisteg, спасибо. Все работает, только "кнопку" убирать не нужно, чтобы когда в след раз данные добавлять в строку, снова воспользоваться ей можно было бы. Но благодаря Вашему описанию, сам поправил )))
 
Ответить
СообщениеStoTisteg, спасибо. Все работает, только "кнопку" убирать не нужно, чтобы когда в след раз данные добавлять в строку, снова воспользоваться ей можно было бы. Но благодаря Вашему описанию, сам поправил )))

Автор - Xelit
Дата добавления - 24.02.2016 в 07:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Смещение текста в ячейках строки (Формулы/Formulas)
Страница 1 из 212»
Поиск:

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