Перейти до основного матеріалу
Note: The other languages of the website are Google-translated. Back to English

Як перемістити весь рядок до нижньої частини активного аркуша на основі значення комірки в Excel?

Для переміщення цілого рядка внизу активного аркуша на основі значення комірки в Excel, спробуйте код VBA у цій статті.

Перемістіть цілий рядок унизу активного аркуша на основі значення комірки з кодом VBA


Перемістіть цілий рядок унизу активного аркуша на основі значення комірки з кодом VBA

Наприклад, як показано на знімку екрана нижче, якщо клітинка в стовпці C містить певне значення “Готово”, перемістіть весь рядок у нижню частину поточного аркуша. Будь ласка, виконайте наступне.

1. прес інший+ F11 клавіші одночасно, щоб відкрити Microsoft Visual Basic для додатків вікна.

2 В Microsoft Visual Basic для додатків вікна, натисніть Insert > Модулі. Потім скопіюйте та вставте наведений нижче код VBA у вікно.

Код VBA: Перемістіть весь рядок унизу активного аркуша на основі значення комірки

Sub MoveToEnd()
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xEndRow As Long
    Dim I As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
lOne:
    Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    If xRg.Columns.Count > 1 Or xRg.Areas.Count > 1 Then
        MsgBox " Multiple ranges or columns have been selected ", vbInformation, "Kutools for Excel"
        GoTo lOne
    End If
    xEndRow = xRg.Rows.Count + xRg.Row
    Application.ScreenUpdating = False
    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "Done" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
End Sub

примітки: У коді VBA "Зроблений"- це значення клітинки, за яким ви перемістите весь рядок. Ви можете змінити його, як вам потрібно.

3 Натисніть кнопку F5 клавіша для запуску коду, а потім у спливаючому вікні Kutools for Excel діалоговому вікні, виберіть діапазон стовпців, у якому існує певне значення, а потім клацніть на OK кнопки.

Після натискання OK Кнопка, весь рядок, що містить значення "Готово" у зазначеному стовпці, автоматично переміщується в нижню частину діапазону даних.


Статті по темі:


Найкращі інструменти для підвищення продуктивності офісу

Kutools for Excel Вирішує більшість ваших проблем і підвищує вашу продуктивність на 80%

  • Повторне використання: Швидко вставте складні формули, діаграми і все, що ви використовували раніше; Шифрувати комірки з паролем; Створити список розсилки та надсилати електронні листи ...
  • Супер формула бар (легко редагувати кілька рядків тексту та формули); Макет читання (легко читати та редагувати велику кількість комірок); Вставте у відфільтрований діапазон...
  • Об’єднати клітинки / рядки / стовпці без втрати даних; Вміст розділених комірок; Об'єднати повторювані рядки / стовпці... Запобігання дублюючим клітинам; Порівняйте діапазони...
  • Виберіть Повторюваний або Унікальний Рядки; Виберіть Пусті рядки (усі клітинки порожні); Супер знахідка та нечітка знахідка у багатьох робочих зошитах; Випадковий вибір ...
  • Точна копія Кілька клітинок без зміни посилання на формулу; Автоматичне створення посилань на кілька аркушів; Вставте кулі, Прапорці та інше ...
  • Витяг тексту, Додати текст, Видалити за позицією, Видаліть пробіл; Створення та друк проміжних підсумків підкачки; Перетворення вмісту комірок та коментарів...
  • Супер фільтр (зберегти та застосувати схеми фільтрів до інших аркушів); Розширене сортування за місяцем / тижнем / днем, частотою та іншим; Спеціальний фільтр жирним, курсивом ...
  • Поєднайте робочі зошити та робочі аркуші; Об’єднати таблиці на основі ключових стовпців; Розділіть дані на кілька аркушів; Пакетне перетворення xls, xlsx та PDF...
  • Понад 300 потужних функцій. Підтримує Office / Excel 2007-2021 і 365. Підтримує всі мови. Легке розгортання на вашому підприємстві чи в організації. 30-денна безкоштовна пробна версія повних функцій. 60-денна гарантія повернення грошей.
вкладка kte 201905

Office Tab Надає інтерфейс із вкладками в Office і значно полегшує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (28)
Оцінено 4.75 з 5 · рейтинги 2
Цей коментар був мінімізований модератором на сайті
Як я міг зробити це таким kutools вибирає певні рядки без введення користувача?
Цей коментар був мінімізований модератором на сайті
Привіт Анон,
Вибачте, я не впевнений, що ви маєте на увазі. Було б добре, якби ви могли пояснити це ще раз або надати знімок екрана, щоб показати, що ви намагаєтеся зробити.
Дякую за ваш коментар.
Цей коментар був мінімізований модератором на сайті
Привіт Crystal, цей код чудово працює, дякую. Я хотів би перемістити всі рядки, які містять слово "Завершено" в стовпці D, у верхню частину таблиці (вставити в рядку 3). Це можливо? тоді я хотів би видалити всі ці повні рядки, які містять "вчорашню дату" в стовпці V.
Цей коментар був мінімізований модератором на сайті
Привіт. Це майже ідеально для того, що я хочу. У мене є частина того самого запиту, оскільки Anon мав виконати цю роботу без участі користувача разом із деякими додатками.

Мені цікаво, чи можливо, щоб єдиний стовпець шукався як i4–i50, і він автоматично запускався при відкритті або в будь-який час, коли редагується стовпець i. Також якщо можна було б перемістити рядки в нижню частину аркуша без порожніх рядків між рядками "зроблено" і "ні". Наразі, якщо я виберу i4:i50, і якщо у мене є дані лише до рядка 25, він вставить "зроблені" рядки, зростаючі з рядка 50 замість рядка 25. Кількість рядків у моєму аркуші постійно змінюється і не має доходити до більше 50. Дякую за допомогу.
Цей коментар був мінімізований модератором на сайті
Привіт, Брендон,
Вибачте, можу вам у цьому допомогти. Дякуємо за коментар.
Цей коментар був мінімізований модератором на сайті
Привіт, чи є спосіб налаштувати це так, щоб він переміщав рядок в інше місце на тому самому аркуші, крім кінця? У мене є аркуш із інформацією про замовлення для датованих замовлень та майбутніх замовлень, які ще не мають дати, і я маю його, щоб, коли я ставлю «X» у стовпці A, речі виділяються жирним шрифтом залежно від номерів частин і місць доставки. Тепер мені потрібно фізично вирізати та вставити нову дату (дату відправлення), щоб вона вписувалася вгорі, відсортована за датою (з 1 по кінець місяця). До цього моменту мені вдалося умовно відформатувати все, але я не думаю, що можу таким чином переміщувати рядки. Мені було цікаво, чи може VBA це зробити, перемістити рядок, коли вводиться дата, щоб відповідати іншим датованим рядкам?
Цей коментар був мінімізований модератором на сайті
Привіт! Єдиний спосіб, яким я можу змусити це запрацювати, — це «запустити» макрос на підекрані Visual Basic. Чи можливо, щоб цей код VBA запускався автоматично, коли користувач вводить "Готово"? Кожного разу я отримую Kutools for Excel з’явиться спливаюче діалогове вікно, щоб запитати параметри, за якими я запитую код для пошуку. Я якось обійшов це, замінивши : xTxt = ActiveSheet.UsedRange.AddressLocal параметрами, які мені потрібні, і натиснувши клавішу Enter. Але було б зручніше, якби він автоматично вносив зміни після введення «Готово». Дякую тобі!
Цей коментар був мінімізований модератором на сайті
Привіт Анон,
Наведений нижче код VBA може зробити вам послугу. Будь ласка, спробуйте.
Клацніть правою кнопкою миші вкладку аркуша (аркуш містить дані, які ви будете переміщати вниз), виберіть «Переглянути код» у контекстному меню та скопіюйте наведений нижче код у вікно «Код».

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
'Оновлено Extendoffice 20190925
Dim xRg As Range
Dim xIRg As Range
Dim xTxt як рядок
Dim xCell As Range
Dim xEndRow As Long
Dim I As Long
Dim xDStr як рядок
On Error Resume Next
xDStr = "C:C"
Встановити xRg = Me.Range(xDStr)
Встановити xIRg = Application.Intersect(Target, xRg)
Якщо xIRg — це нічого, вийдіть із Sub
Application.ScreenUpdating = Невірний
Application.EnableEvents = False

Якщо ціль = "Готово", Тоді
xEndRow = ActiveSheet.UsedRange.Rows.Count + 1
Target.EntireRow.Cut
Рядки(xEndRow).Вставте Shift:=xlDown
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт кристал,

Дякуємо, що опублікували цей код. Я хотів би знати, як отримати код, щоб перемістити рядок угору, якщо «Готово» було введено помилково. Чи можна додати додатковий код для "переміщення", щоб перемістити його вгору, і "зроблено" для нижнього?
Цей коментар був мінімізований модератором на сайті
привіт, кристал, код, який ти дав анону, щоб код запуску vba автоматично запускався, чудовий, але я не можу вставити аркуш рядків, чи є можливий спосіб це виправити
Цей коментар був мінімізований модератором на сайті
Привіт Сара,
Вибачте за незручності. Будь ласка, спробуйте наведений нижче VBA. Спасибі.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)

'Оновлено Extendoffice 20200424

Dim xRg As Range

Dim xIRg As Range

Dim xTxt як рядок

Dim xCell As Range

Dim xEndRow As Long

Dim I As Long

Dim xDStr як рядок

Помилка GoTo Err1

xDStr = "C:C"

Встановити xRg = Me.Range(xDStr)

Встановити xIRg = Application.Intersect(Target, xRg)

Якщо xIRg — це нічого, вийдіть із Sub

Application.ScreenUpdating = Невірний

Application.EnableEvents = False



Якщо Target.Value = "Готово", Тоді

'xEndRow = ActiveSheet.UsedRange.Rows.Count + 1

xEndRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Рядок + 1

Target.EntireRow.Cut

Рядки(xEndRow).Вставте Shift:=xlDown

End If

Err1:

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub
Цей коментар був мінімізований модератором на сайті
Я спробував скопіювати цей код, але він продовжує говорити про неправильне використання Мене.
Цей коментар був мінімізований модератором на сайті
Що робити, якщо вам потрібно лише перемістити рядки під стовпці A і B; тоді стовпець C має зберегти? чи варто все ще використовувати EntireRow?
Цей коментар був мінімізований модератором на сайті
Привіт Джерел!
Спробуйте наведений нижче код. Сподіваюся, що зможу допомогти.

Підсумок MoveToEnd()

'Оновлено Extendoffice 20200717

Dim xRg As Range

Dim xTxt як рядок

Dim xCell As Range

Dim xEndRow As Long

Dim xIntR як ціле число

Dim I As Long

Dim xWs як робочий аркуш

On Error Resume Next

Якщо ActiveWindow.RangeSelection.Count > 1 Тоді

xTxt = ActiveWindow.RangeSelection.AddressLocal

Ще

xTxt = ActiveSheet.UsedRange.AddressLocal

End If

один:

Встановіть xRg = Application.InputBox("Виберіть діапазон:", "Kutools for Excel", xTxt, , , , , 8)

Якщо xRg — нічого, вийдіть із Sub

Якщо xRg.Columns.Count > 1 або xRg.Areas.Count > 1, то

MsgBox " Вибрано кілька діапазонів або стовпців ", vbInformation, "Kutools for Excel"

GoTo lOne

End If

xEndRow = xRg.Rows.Count + xRg.Row

xWs = xRg.Робочий аркуш

xWs.Активувати

Application.ScreenUpdating = Невірний

Для I = xRg.Rows.Count To 1 Step -1

Якщо xRg.Item(I) = "Готово", Тоді

Рядки(xEndRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

xIntR = xRg.Cells(I).Row

Діапазон("A" & xIntR & ":B" & xIntR).Виберіть

Виділення.Розріз

Діапазон("A" & xEndRow).Вибрати

ActiveSheet.Paste

xEndRow = xEndRow + 1



End If

Далі

Application.ScreenUpdating = True

End Sub
Цей коментар був мінімізований модератором на сайті
Здравствуйте,



У мене виникають проблеми з використанням наданого коду, і постійно з’являється синтаксична помилка. Я новачок у досягненні успіху і намагався самостійно навчитися тому, що мені потрібно для ведення домашнього бізнесу. У мене є ідентифікатор електронної таблиці інвентаризації, щоб мати можливість позначати елементи в стовпці як ВИХОДИЛИ? так/ні, а якщо так, то вони переміщуються в нижню частину аркуша в алфавітному порядку, не залишаючи порожнього місця в основній таблиці. у нас є елементи, які повністю вилучаються, а потім повертаються для спеціального повторного випуску в обмеженій кількості та ідентифікатор, як ці елементи, які зберігаються в нижній частині мого аркуша, доки вони знову не стануть доступними. Дякую.
Цей коментар був мінімізований модератором на сайті
Привіт, у мене є завдання, яке дав мені шеф. Спочатку це здавалося досить простим, але тепер я не знаю, як діяти. У нас є аркуш прогнозу можливих вакансій, і для них є стовпець «Ймовірність замовлення» на %. Він хоче, щоб я налаштував 3 різні аркуші зі 100-70%, 69%-41 і 40-0%. Ідея полягає в тому, що коли інформація вводиться в основний аркуш, коли вводиться відсоток, вона автоматично копіюється в поточний аркуш, що відповідає цьому процентилю. Я зробив це за допомогою простої IF (і формули. Однак мені потрібно відсортувати, щоб позбутися порожніх клітинок і зробити їх більш чистими. Потім, коли я сортую, якщо я додаю нову пропозицію ймовірності Одера до основного аркуша, це не відбувається автоматично показати його, не відсортуючи, а потім знову сортуючи. Прошу вибачення, якщо це питання не належить їй. Але чи є рядок коду, який я міг би додати, щоб простіше вирішити цю проблему? Єдине значення, яке визначає, чи буде переміщено весь рядок, — це Колонка K. здається простим, але складним для цього новачка в Excel. Наперед дякуємо за допомогу.
Цей коментар був мінімізований модератором на сайті
Як це зробити, якщо «Готово» є лише частиною рядка стовпця. Припустимо, що мої стовпці містять такі значення: XYZDone, ABCDone, 123Done тощо, чи можу я просто відфільтрувати на основі часткового рядка "Done"?
Цей коментар був мінімізований модератором на сайті
Привіт Кристал,
Дякую за допомогу, код працює чудово, але замість того, щоб переміщувати рядок у нижню частину сторінки, як перемістити його на іншу вкладку, тобто на вкладку «Закрита»?
Цей коментар був мінімізований модератором на сайті
привіт,
Вибачте за таку пізню відповідь.
У коді потрібно просто змінити рядок "Якщо xRg.Cells(I) = "Готово", ТодіЯкщо xRg.Cells(I) подобається "*Done*", Тоді щоб це зробити.
Цей коментар був мінімізований модератором на сайті
У мене є список із прапорцями, що коли один стовпець позначено, мені потрібно, щоб він перейшов до одного розділу електронної таблиці, а якщо замість цього поставлено прапорець, він переходить до кінця. Я спробував сотню різних способів зробити це, чи може хтось допомогти з цим?
Цей коментар був мінімізований модератором на сайті
Привіт! Я щойно купив kutools щоб я міг *** цей код vba до свого аркуша Excel, оскільки це буде чудова функція для використання! Наведені вище інструкції прості та корисні; однак, коли я переходжу до кроку, де код копіюється та вставляюся у вікно, і натискаю F5, мене скеровує до вікна, щоб назвати та створити макрос. Я зробив це, але тепер це не призведе до діалогового вікна, щоб я міг вибрати діапазон клітинок. З’являється помилка компіляції «недійсна зовнішня процедура». Будь ласка, допоможіть!
Цей коментар був мінімізований модератором на сайті
привіт,
Вибачте, що ввів вас в оману. Код можна використовувати самостійно і не потребує покупки Kutools. Якщо він вам не потрібен, будь ласка, надішліть електронний лист на sales@extendoffice.com, щоб попросити відшкодування.
Щоб код працював безперебійно, вам потрібно переконатися, що ваш курсор знаходиться у вікні коду (клацніть будь-яке слово в коді), потім натисніть кнопку F5 ключ для запуску коду. Після цього з’явиться діалогове вікно для вибору діапазону комірок.
Ще раз вибачте за незручності.
Цей коментар був мінімізований модератором на сайті
знову я! Я зрозумів код. Я вручну скопіював та вставив код, а не використовував кнопку копіювання у верхньому правому куті екрана. Я змінив "зроблено" на "х". Я запустив код на кожному робочому аркуші. Коли я починаю вводити «x» у цих клітинках у межах вибраних діапазонів комірок у діалоговому вікні, нічого не відбувається (рядки автоматично не переміщуються вниз). Я ДУЖЕ НОВИЙ у цьому....дякую за вашу допомогу!
Цей коментар був мінімізований модератором на сайті
привіт,
Якщо ви хочете автоматично перемістити рядок вниз під час введення вказаного слова, спробуйте ввести наступний код VBA.
примітки: потрібно ввести код у вікно «Код аркуша» (клацніть правою кнопкою миші вкладку аркуша та виберіть «Переглянути код» у контекстному меню).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Extendoffice 20220520
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xEndRow As Long
    Dim I As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
lOne:
    Set xRg = Range("C2:C18")
    If xRg Is Nothing Then Exit Sub
    If xRg.Columns.Count > 1 Or xRg.Areas.Count > 1 Then
        MsgBox " Multiple ranges or columns have been selected ", vbInformation, "Kutools for Excel"
        GoTo lOne
    End If
    xEndRow = xRg.Rows.Count + xRg.Row
    Application.ScreenUpdating = False
    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "Done" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт Кристал,

Дякую за всі чудові коди. Чи є спосіб зробити це без Kutools? Я також не бачу діалогового вікна для вибору діапазону клітинок, воно не з’являється для мене.

Спасибі,
Джаз
Оцінено 5 з 5
Цей коментар був мінімізований модератором на сайті
Привіт Джаз,
Ви можете вказати діапазон комірок безпосередньо в коді, не відкриваючи спливаюче вікно Kutools діалогове вікно для вибору діапазону.
У коді замініть наступний рядок:
Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)

з:
Set xRg = Range("C2:C13")
Цей коментар був мінімізований модератором на сайті
Чи є спосіб перемістити рядки назад у вихідне місце, коли статус введення змінюється? Наприклад, якщо хтось змінить його з «Готово» на «незавершено», чи є спосіб запрограмувати Excel, щоб повернути його назад?
Також ця зміна є постійною? Я помітив, що після першої роботи він перестав працювати.

Дякуємо за допомогу та публікацію!
Оцінено 4.5 з 5
Цей коментар був мінімізований модератором на сайті
привіт зої,

Дякуємо за ваш коментар.
1. За перше питання:
Рядок, який було переміщено, не можна повернути на початкове місце;
2. До другого питання:
Цей код VBA потрібно запускати вручну кожного разу, коли вам потрібно перемістити рядки. Якщо ви хочете автоматично перемістити рядок, коли значення клітинки відповідає умові, ви можете спробувати такий код VBA.
примітки: вам потрібно розмістити цей код у редакторі аркуша (коду) (клацніть правою кнопкою миші вкладку аркуша та виберіть «Переглянути код», щоб відкрити редактор). І змініть діапазон стовпців B2:B12 на свій власний діапазон.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated Extendoffice 20230111
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xEndRow As Long
    Dim I As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
lOne:
    Set xRg = Range("B2:B12")
    If xRg Is Nothing Then Exit Sub
    If xRg.Columns.Count > 1 Or xRg.Areas.Count > 1 Then
        MsgBox " Multiple ranges or columns have been selected ", vbInformation, "Kutools for Excel"
        GoTo lOne
    End If
    xEndRow = xRg.Rows.Count + xRg.Row
    Application.ScreenUpdating = False
    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "Done" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True

End Sub
There are no comments posted here yet