Note: The other languages of the website are Google-translated. Back to English

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

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

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


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

Як показано нижче на скріншоті, вам потрібно перемістити весь рядок з Аркуша1 на Аркуш2, якщо в стовпці С. є конкретне слово “Готово”. Ви можете спробувати такий код VBA.

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

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

VBA code 1: Move entire row to another sheet based on cell value

Sub Cheezy()
'Updated by Kutools for Excel 2017/8/28
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            xRg(K).EntireRow.Delete
            If CStr(xRg(K).Value) = "Done" Then
                K = K - 1
            End If
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

примітки: У коді, Sheet1 - аркуш містить рядок, який потрібно перемістити. І Sheet2 - це робочий аркуш призначення, де ви знайдете рядок. “C: C"- стовпець містить певне значення, а слово"Зроблений"- це певне значення, за яким ви перемістите рядок. Будь ласка, змініть їх відповідно до ваших потреб.

3 Натисніть кнопку F5 клавішу для запуску коду, тоді рядок, який відповідає критеріям у Аркуші1, буде негайно переміщено до Аркуша2.

примітки: Наведений вище код VBA видалить рядки з вихідних даних після переміщення на вказаний аркуш. Якщо потрібно лише скопіювати рядки на основі значення комірки, а не видаляти їх. Будь ласка, застосуйте наведений нижче код VBA 2.

VBA code 2: Copy entire row to another sheet based on cell value

Sub MoveRowBasedOnCellValue()
'Updated by Extendoffice 2017/11/10
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
    If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Перемістити весь рядок на інший аркуш на основі значення клітинки за допомогою Kutools for Excel

Якщо ви новачок у коді VBA. Тут я представляю Виберіть певні клітини корисність Kutools for Excel. За допомогою цієї утиліти ви можете легко вибрати всі рядки на основі певного значення комірки або різних значень комірок на аркуші та скопіювати вибрані рядки на робочий аркуш, як вам потрібно. Будь ласка, виконайте наступне.

Перед поданням заявки Kutools for Excel, будь ласка завантажте та встановіть його спочатку.

1. Виберіть список стовпців, що містить значення комірки, на основі якого ви будете переміщувати рядки, а потім натисніть Кутулс > Select > Виберіть певні клітини. Дивіться знімок екрана:

2. На відкритті Виберіть певні клітини діалогове вікно, виберіть Весь ряд в Тип вибору розділ, виберіть Так само в Конкретний тип в розкривному списку, введіть значення комірки в текстове поле, а потім клацніть на OK кнопки.

Інший Виберіть певні клітини спливає діалогове вікно, щоб показати вам кількість вибраних рядків, а тим часом усі рядки містять вказане значення у вибраному стовпці. Дивіться знімок екрана:

3 Натисніть кнопку Ctrl + C , щоб скопіювати вибрані рядки, а потім вставити їх у потрібний вам робочий аркуш.

примітки: Якщо ви хочете перемістити рядки на інший аркуш на основі двох різних значень комірок. Наприклад, переміщуючи рядки на основі значень комірок або "Готово", або "Обробка", ви можете ввімкнути Or стан в Виберіть певні клітини діалогове вікно, як показано нижче:

  Якщо ви хочете отримати безкоштовну пробну версію (30-день) цієї утиліти, натисніть, щоб завантажити, а потім перейдіть до застосування операції, як описано вище.


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


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

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

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

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

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (299)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Привіт! Я вважаю, що цей посібник дуже корисний порівняно з іншими, які я бачив. Дякую! Проблема, яку я маю, полягає в тому, що якщо я зміню бажане значення на "Closed", мені потрібно запустити F5, щоб перемістити рядок. Я хотів би, щоб він рухався автоматично. Я новачок у Excel, тому будемо дуже вдячні за вашу допомогу. Sub Cheezy() Dim xRg As Range Dim xCell Як діапазон Dim I As Long Dim J As Long I = Worksheets("ECR Incident Tracker").UsedRange.Rows.Count J = Worksheets("Resolved Issues").UsedRange.Rows. Рахувати, якщо J = 1, тоді якщо Application.WorksheetFunction.CountA(Worksheets("Вирішені проблеми").UsedRange) = 0 Тоді J = 0 End If Set xRg = Worksheets("ECR Incident Tracker").Range("B1:B" & I) При помилці Відновити наступне Application.ScreenUpdating = False для кожного xCell в xRg Якщо CStr(xCell.Value) = "Закрито", Тоді xCell.EntireRow.Copy Destination:=Worksheets("Resolved Issues").Range("A") & J + 1) xCell.EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Цей коментар був мінімізований модератором на сайті
Привіт, я намагаюся автоматизувати переміщення клітинок, не відкриваючи модуль і натискаючи F5. Ви коли-небудь вирішували це питання? Заздалегідь спасибі!
Цей коментар був мінімізований модератором на сайті
Crystal надала інформацію про те, як це зробити сьогодні – перегляньте першу сторінку цієї теми, щоб побачити її відповідь. Він автоматично переміщує рядок із сьогоднішньою датою в стовпці (у моєму випадку L) на інший аркуш.
Цей коментар був мінімізований модератором на сайті
Я виконую цей код і намагаюся перемістити рядок на основі сьогоднішньої дати, яка з’являється в стовпці I - я змінив Range("B1:B" & I) на читання Range(I1:I" & I). Я змінив " Готово" у вашому прикладі до Date. Однак, коли сьогоднішня дата з'являється в будь-якому місці рядка, а не лише в стовпці I, як потрібно, рядок переміщається на альтернативний аркуш. Будь-яка уявлення, чому це відбувається і як я можу перемістити рядок лише тоді, коли сьогоднішня дата вказана в колонці I, незалежно від того, чи є сьогоднішня дата в інших стовпцях?
Цей коментар був мінімізований модератором на сайті
Якби я хотів мати багато значень і багато аркушів для переміщення рядка, мені довелося б написати весь код знову з іншим значенням для цієї клітинки? Це означає, що якщо я вставлю NA в одну клітинку, він перейде до аркуша Na, а якщо я поставлю W#, він перейде до неправильного номера аркуша тощо.
Цей коментар був мінімізований модератором на сайті
привіт, це було дуже корисно. Чи є спосіб зробити це, не переміщаючи рядок даних на другий аркуш, а скопіювавши його? Отже, дані залишаться на обох аркушах?
Цей коментар був мінімізований модератором на сайті
Привіт, код був дуже корисним, але замість копіювання всього рядка мені потрібно, щоб певний вибір рядка був переміщений на наступний аркуш. як я можу визначити діапазон замість цілого рядка Sub Cheezy() Dim xRg As Range Dim xCell Як діапазон Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets(" Sheet2").UsedRange.Rows.Count Якщо J = 1 Тоді Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Тоді J = 0 End If Set xRg = Worksheets("Sheet1").Range( "C1:C" & I) При помилці Відновити наступне Application.ScreenUpdating = False для кожної xCell в xRg Якщо CStr(xCell.Value) = "Готово", то xCell.Цілий ряд.Призначення копії:=Робочі аркуші("Аркуш2").Діапазон("A" & J + 1) J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Цей коментар був мінімізований модератором на сайті
яким буде код, якщо я хочу скопіювати рядки (конкретні клітинки) на інший аркуш до певних клітинок? АЛЕ також на основі значення Приклад: кольорові зображення продукту рядок білий блендер 2 whiteblender2 чорна соковижималка 3 blackjuicer3 червоний tv 1 redtv1 зелене залізо 4 greeniron4 Я хотів би, щоб рядок було скопійовано на інший аркуш, але число в стовпці зображень вказує, скільки разів його потрібно скопіювати (тому в цьому випадку рядок блендера слід скопіювати в 2 рядки
Цей коментар був мінімізований модератором на сайті
Привіт! Дуже гарний фрагмент коду, працює дуже добре. Як змінити цей код, щоб перемістити рядки з однієї таблиці в іншу, а не з одного аркуша на інший? Велике дякую !
Цей коментар був мінімізований модератором на сайті
Привіт, я намагаюся використати код, але отримую синтаксичну помилку на Dim xCell As Range. Чи можете ви допомогти, будь ласка?
Цей коментар був мінімізований модератором на сайті
Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets("Sheet2").UsedRange.Rows.Count Якщо J = 1 Тоді якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Тоді J = 0 End, якщо встановити xRg = Worksheets("Sheet1").Range("C1:C" & I) При помилці відновити Наступне Application.ScreenUpdating = False для кожної xCell в xRg Якщо CStr(xCell.Value) = "Готово", Тоді xCell.EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) xCell. EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub, як можна додати другий аркуш, щоб рядки переміщувалися на sheet2?
Цей коментар був мінімізований модератором на сайті
Що потрібно ввести, якщо я хочу включити будь-яку дату як своє значення? Отже, рядок залишається на аркуші 1, якщо він не має дати, і переміщається до аркуша 2, якщо має?
Цей коментар був мінімізований модератором на сайті
[quote]привіт, це було дуже корисно. Чи є спосіб зробити це, не переміщаючи рядок даних на другий аркуш, а скопіювавши його? Отже, дані залишаться на обох аркушах?Від Медді[/quote] хтось вирішив це
Цей коментар був мінімізований модератором на сайті
Видаліть цей "xCell.EntireRow.Delete" з коду
Цей коментар був мінімізований модератором на сайті
Коли я видаляю цей рядок коду та знову запускаю макрос, Excel зависає. Чому і як це виправити?? Я хочу, щоб дані були на обох аркушах і не видалялися з оригіналу. TIA
Цей коментар був мінімізований модератором на сайті
чи є відповідь на це? Мій також зависає. Я хотів би скопіювати, але не видаляти рядок
Цей коментар був мінімізований модератором на сайті
Хороший день,
Наведений нижче код VBA може допомогти вам лише скопіювати рядки, а не видаляти їх.

Sub Cheezy()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, тоді J = 0
End If
Установіть xRg = Worksheets("Sheet1").Діапазон("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = Невірний
Для K = 1 До xRg.Count
Якщо CStr(xRg(K).Value) = "Готово", Тоді
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
End If
Далі
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт, я шукаю варіацію на це. Мені потрібно, щоб сценарій запускався безперервно або не працював щоразу, коли значення в цьому конкретному полі змінюється. Сам код працює, але його потрібно запускати незалежно. Я хотів би, щоб це було автоматизовано. Хтось може допомогти?

Крім того, якщо я хочу, щоб він копіював лише певні клітинки в діапазоні, як це досягається?
Цей коментар був мінімізований модератором на сайті
Шановний Роб,

Якщо вам потрібно, щоб сценарій запускався автоматично при зміні клітинок у цьому полі, наведений нижче код VBA може допомогти вам. Клацніть правою кнопкою миші поточний аркуш (аркуш із рядками, які ви переміщуєте автоматично), а потім виберіть Перегляд коду з контекстного меню. Потім скопіюйте та вставте наведений нижче сценарій VBA у вікно коду.

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

Dim xCell As Range

Dim I As Long
On Error Resume Next

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

Встановити xCell = Target(1)
Якщо xCell.Value = "Готово", Тоді
I = Worksheets("Sheet2").UsedRange.Rows.Count
Якщо I = 1 Тоді

Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, то I = 0

End If

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
End If

Application.ScreenUpdating = True

End Sub


Для вашого другого запитання, ви маєте на увазі просто скопіювати кілька клітинок замість цілого рядка? Або ви надайте скріншот свого запитання? Дякую!

З повагою, Кристал
Цей коментар був мінімізований модератором на сайті
кришталь,


Ваша допомога більш ніж потрібна :)



Як ми можемо додати тут ще один критерій, наприклад, я хотів би перенести Завершено поруч із Готово:


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

Dim xCell As Range

Dim I As Long
On Error Resume Next

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

Встановити xCell = Target(1)
Якщо xCell.Value = "Готово", Тоді
I = Worksheets("Sheet2").UsedRange.Rows.Count
Якщо I = 1 Тоді

Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, то I = 0

End If

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
End If

Application.ScreenUpdating = True

End Sub
Цей коментар був мінімізований модератором на сайті
Привіт Кристал
Це найкорисніша інформація, яку я знайшов в Інтернеті, і цей макрос робить те, що я хочу. Але я переміщу рядки з однієї таблиці в іншу - і з цим макросом інформація переміщається з першого вільного рядка за межами таблиці, а не з наступного вільного рядка в таблиці? Ви можете допомогти?
Цей коментар був мінімізований модератором на сайті
Я виконую цей код і намагаюся перемістити рядок на основі сьогоднішньої дати, яка з’являється в стовпці I - я змінив Range("B1:B" & I) на читання Range(I1:I" & I). Я змінив " Готово" у вашому прикладі до Date. Однак, коли сьогоднішня дата з'являється в будь-якому місці рядка, а не лише в стовпці I, як потрібно, рядок переміщається на альтернативний аркуш. Будь-яка уявлення, чому це відбувається і як я можу перемістити рядок лише тоді, коли сьогоднішня дата вказана в колонці I, незалежно від того, чи є сьогоднішня дата в інших стовпцях?
Цей коментар був мінімізований модератором на сайті
Шановний Девід,

Код працює добре для мене після зміни діапазону та значення змінної на сьогоднішній день. Формат дати у вашому коді має відповідати формату дати, який ви використовували на аркуші. Або вам зручно прикріпити свій аркуш?
Цей коментар був мінімізований модератором на сайті
Привіт Кристал,


Мені незрозуміло, що ви маєте на увазі, коли кажете, що формати дати коду та електронної таблиці повинні збігатися - я не експерт з VB, скоріше початківець. У своїй електронній таблиці я вводжу сьогоднішню дату в стовпець F як дату введення рядка у форматі ctrl + :. Я вводжу термін придатності в колонку "I" у форматі мм/дд/рррр. Однак це спричиняє проблеми під час створення нового запису в рядку та введення сьогоднішньої дати в стовпець F, оскільки, щойно він введений, рядок переміщується на новий робочий аркуш. Крім того, не з’являється додатковий код, який запускається під час відкриття книги. бігти, не змушуючи мене це робити. Вибачте за те, що для вас можуть бути дуже тривіальними, але я просто не можу почути ці проблеми. Будемо вдячні за будь-яку допомогу.
Цей коментар був мінімізований модератором на сайті
Шановний Девід,

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

З повагою, Кристал
Цей коментар був мінімізований модератором на сайті
Crystal, це ті робочі аркуші. У скопійованому коді ви побачите, що я шукаю "до " сьогоднішньої дати в стовпці L, і якщо "до" і включаючи сьогоднішню дату в цьому стовпці, я хочу перемістити рядок, що містить цю дату, на новий аркуш. Наразі, коли я вводжу сьогоднішню дату в будь-якому місці рядка (наприклад, стовпець F, якщо запит опубліковано сьогодні), він автоматично переміщує весь рядок до архівованої електронної таблиці. Зазвичай я вводжу сьогоднішню дату за допомогою комбінації ctrl + :, зазвичай у стовпці F.
Крім того, я хотів би, щоб цей рух відбувся, коли я відкрию робочу книгу. Зараз мені потрібно перейти, щоб показати код, а потім натиснути F5. Будь-які поради щодо того, як це зробити, будуть вітатися.
Цей коментар був мінімізований модератором на сайті
На жаль, моя книга з підтримкою макросів не завантажиться, оскільки вказано, що формат не підтримується. Вони є в Excel 2016
Цей коментар був мінімізований модератором на сайті
Шановний Девід,

Наступний код VBA може допомогти вам досягти цього.

Приватна додаткова робоча книга_Open()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
I = Worksheets("CURRENT OASIS OPPORTUNITIES").UsedRange.Rows.Count
J = Worksheets("АРХІВНІ МОЖЛИВОСТІ OASIS").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0, тоді J = 0
End If
Установіть xRg = Worksheets("CURRENT OASIS OPPORTUNITIES").Діапазон("L1:L" & I)
On Error Resume Next
Application.ScreenUpdating = Невірний
Для кожного xCell In xRg
Якщо CStr(xCell.Value) = Дата, то
xCell.EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Діапазон("A" & J + 1)
xCell.EntireRow.Delete
J = J + 1
End If
Далі
End Sub

Примітки:
1. Вам потрібно помістити скрипт VBA у вікно коду ThisWorkbook;
2. Вашу книгу потрібно зберегти як книгу з підтримкою макросів Excel.

Після наведеної вище операції кожного разу, коли ви відкриваєте книгу, цілий рядок буде переміщено в АРХІВНИЙ робочий аркуш, якщо клітинка в стовпці L досягне сьогоднішньої дати.

З повагою, Кристал
Цей коментар був мінімізований модератором на сайті
Дякую Кристал,
Це чудово працює, якщо сьогоднішню дату досягнуто в стовпці L. Чи є спосіб включити до сьогоднішньої дати також у стовпець L, щоб, якщо я не перевірю робочу книгу протягом кількох днів, вона автоматично включала попередні дати до сьогоднішній? Велике спасибі за вашу допомогу.
Цей коментар був мінімізований модератором на сайті
Шановний Девід,

Вибачте, я не впевнений, що отримав ваше запитання. Якщо так, усі рядки будуть переміщені, доки в стовпці L з’являться попередні дати?
Цей коментар був мінімізований модератором на сайті
Привіт Кристал,

Якщо я не відкрию свій робочий аркуш протягом кількох днів, і дата, введена в стовпець L, пройшла, тобто дата в клітинці в стовпці L – 11 вересня 2017 року, але я не відкрию свій аркуш до 13 вересня, я б як і всі записи в стовпці L, які потрібно перевірити для кожної дати до сьогоднішньої дати, потім перемістіть відповідні рядки на новий аркуш. Наразі з кодом, який ви люб’язно надали, лише рядки з поточною датою в стовпці L переміщуються на новий аркуш, залишаючи позаду рядки з більш ранньою датою в стовпці L, які я зараз переміщу вручну на новий аркуш. Спасибі за вашу допомогу.
Цей коментар був мінімізований модератором на сайті
Шановний Девід,



Я розумію вашу думку. Спробуйте наведений нижче сценарій VBA. Після відкриття книги всі рядки з датами до сьогоднішньої дати в стовпці L будуть переміщені на новий вказаний аркуш.



Приватна додаткова робоча книга_Open()
Dim xRg As Range
Dim xRgRtn як діапазон
Dim xCell As Range
Dim xLastRow As Long
Dim I As Long
Dim J As Long
On Error Resume Next
xLastRow = Worksheets("ПОТОЧНІ МОЖЛИВОСТІ OASIS").UsedRange.Rows.Count
Якщо xLastRow < 1, то вийдіть із Sub
J = Worksheets("АРХІВНІ МОЖЛИВОСТІ OASIS").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0, тоді J = 0
End If
Установіть xRg = Worksheets("CURRENT OASIS OPPORTUNITIES").Діапазон("L1:L" & xLastRow)
Для I = 2 до xLastRow
Якщо xRg(I).Value > Date, то вийдіть із Sub
Якщо xRg(I).Значення <= Дата Тоді
xRg(I).EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Діапазон("A" & J + 1)
xRg(I).EntireRow.Delete
J = J + 1
Я = Я - 1
End If
Далі
End Sub

Вам потрібно помістити скрипт VBA у вікно коду ThisWorkbook і зберегти книгу як книгу Excel з підтримкою макросів.
Цей коментар був мінімізований модератором на сайті
Дякую, Кристал, це працює чудово.
Цей коментар був мінімізований модератором на сайті
Кристал, я трохи поспішав відповісти, що код працює. Сьогодні я відкрив свою робочу книгу, і рядки, що містять попередні записи дати в клітинці стовпця L, все ще знаходяться в «аркуші поточних можливостей оазису» і не переміщено в «архівований аркуш оазису», як очікувалося. Будь-які ідеї, чому це так?
Цей коментар був мінімізований модератором на сайті
Виділені клітинки знаходяться в стовпці L стосовно вищезазначеного питання і є критеріями (до сьогоднішньої дати) для переміщення рядка на новий аркуш. Сподіваюся, це зображення допоможе.
Цей коментар був мінімізований модератором на сайті
Це також копія вікна VBA, пов’язаного з вищезазначеним.
Цей коментар був мінімізований модератором на сайті
Кристал, я трохи поспішав відповісти, що код працює. Сьогодні я відкрив свою робочу книгу, і рядки, що містять попередні записи дати в клітинці стовпця L, все ще знаходяться в «аркуші поточних можливостей оазису» і не переміщено в «архівований аркуш оазису», як очікувалося. Будь-які ідеї, чому це так?
Цей коментар був мінімізований модератором на сайті
кришталь,

Оскільки я не можу завантажити свою робочу книгу, я відтворю тут рядки та стовпці

ABCDEFGHIJKL
# Тип Запит на відкладення Поправка # Дата випуску Питання Замовник Місце поставки Проектна пропозиція.

1 SS SB 1234567 1 09 No Army Name Place Drive Танк 6

Використовуючи наведений нижче код, я хочу, щоб він переміщав цілий рядок на новий аркуш, коли стовпець L досягає сьогоднішньої дати. Крім того, якщо я не заповнював робочий аркуш протягом кількох днів, я хотів би, щоб він використовував пошук «до сьогоднішньої дати» у стовпці L, щоб зробити те ж саме. Я також хотів би, щоб це робилося автоматично, коли я відкриваю книгу, якщо це можливо. Наразі, якщо я введу сьогоднішню дату в будь-яку клітинку рядка, наприклад, стовпець F під час введення даних, весь рядок переміститься на аркуш архіву. (За допомогою Excel 2016)

[Код модуля 1]

Sub DaveV()

Dim xRg As Range

Dim xCell As Range

Dim I As Long

Dim J As Long

I = Worksheets("CURRENT OASIS OPPORTUNITIES").UsedRange.Rows.Count

J = Worksheets("АРХІВНІ МОЖЛИВОСТІ OASIS").UsedRange.Rows.Count

Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0, тоді J = 0

End If

Установіть xRg = Worksheets("CURRENT OASIS OPPORTUNITIES").Діапазон("L1:L" & I)

On Error Resume Next

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

Для кожного xCell In xRg

Якщо CStr(xCell.Value) = Дата, то

xCell.EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Діапазон("A" & J + 1)
xCell.EntireRow.Delete

J = J + 1
End If

Далі
Application.ScreenUpdating = True

End Sub
Цей коментар був мінімізований модератором на сайті
[Код аркуша 1]

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xCell As Range
Dim I As Long
On Error Resume Next
Application.ScreenUpdating = Невірний
Встановити xCell = Target(1)
Якщо xCell.Value = Дата Тоді
I = Worksheets("АРХІВНІ МОЖЛИВОСТІ OASIS").UsedRange.Rows.Count
Якщо I = 1 Тоді
Якщо Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0, тоді I = 0 End If
xCell.EntireRow.Copy Worksheets("АРХІВНІ МОЖЛИВОСТІ OASIS").Діапазон("A" & I + 1)
xCell.EntireRow.Delete
End If
Application.ScreenUpdating = True
End Sub

Сподіваюся, що наведене вище допоможе, але я не є користувачем VBA, тому не розумію, як змусити код виконувати те, що мені потрібно. Будемо вдячні за вашу допомогу.
Цей коментар був мінімізований модератором на сайті
У вашому сценарії велика помилка!

Скажімо, ви виявили, що рядок 7 містить слово «Готово» у стовпці C, тому ви скопіюєте його та видалите рядок.
Після того, як ви видалили рядок, наступним рядком у списку буде рядок 9, а не 8, тому що як тільки ви видалили 7-й рядок, тепер вміст 8-го рядка знаходиться в рядку 7, і всі рядки піднялися на 1 рядок вгору. Таким чином, наступний рядок для перевірки мав бути рядком №8, але тепер він містить дані, які раніше були в рядку №9, тому щоразу, коли ви видаляєте рядок, ви фактично пропускаєте рядок для перевірки!!!
Цей коментар був мінімізований модератором на сайті
Шановний Шау Алон,

Дякуємо за коментар. Код оновлено з виправленою помилкою. Дуже дякую за вашого помічника.

З повагою, Кристал
Цей коментар був мінімізований модератором на сайті
Я думаю, що це відбувається зі мною, він постійно копіює той самий рядок знову і знову, навіть якщо повідомляє, що код оновлено. Ось що я маю:

Sub Cheezy()
'Оновлено Kutools for Excel 2017/8/28
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Тоді J = 0
End If
Встановіть xRg = Робочі аркуші ("ПРОГНОЗ ПОКУПКИ").Діапазон ("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = Невірний
Для K = 1 До xRg.Count
Якщо CStr(xRg(K).Value) = "Так" Тоді
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).Весь рядок.Видалити
Якщо CStr(xRg(K).Value) = "Так" Тоді
К = К - 1
End If
J = J + 1
End If
Далі
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт Фред
Кожного разу, коли ви запускаєте код, код шукає вказаний діапазон, тому він копіює той самий рядок знову і знову, оскільки він не може визначити, який рядок уже скопійовано. Щоб уникнути повторного копіювання одного й того самого рядка, можна налаштувати автоматичний запуск коду, коли відповідне значення вводиться у вказану клітинку.
На робочому аркуші під назвою «ПРОГНОЗ ПОКУПКИ» клацніть правою кнопкою миші вкладку аркуша та натисніть Переглянути код з контекстного меню. Потім скопіюйте наведений нижче код VBA у вікні аркуша (код).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Kutools for Excel 20220830
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Yes" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Yes" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Чи може хтось допомогти мені зробити цю роботу? Я намагався змінити частину, яка повинна відповідати моєму файлу, але це з’являється, і я не знаю, що робити.
Цей коментар був мінімізований модератором на сайті
він каже, що файл не підтримується, коли я намагаюся завантажити файл Excel. Вибачте... борюся з цим сьогодні.
Цей коментар був мінімізований модератором на сайті
Я хотів би отримати допомогу для подібного завдання, але трохи іншого. У мене є 5 стовпців чисел, приблизно 25000 на стовпець, кожен стовпець із заголовком 1-5. Я хотів би скопіювати весь рядок на інший аркуш, якщо значення стовпця 1 більше нуля, АБО стовпець 2 більше нуля , АБО стовпець 3 менший за нуль, АБО стовпець 4 більший за п’ять АБО стовпець 5 більше двох тощо. Чи можливо це?
Цей коментар був мінімізований модератором на сайті
завантаження зображення не працює... вибачте.
Цей коментар був мінімізований модератором на сайті
Здравствуйте,
Будь ласка, використовуйте цю кнопку завантаження.
Цей коментар був мінімізований модератором на сайті
Отже, мета полягає в тому, щоб побачити, чи перевищив якийсь із газів межу, яку я встановлю у формулі, вся ікра КОПІЮЄТЬСЯ на новий аркуш.

Щиро дякую за будь-яку допомогу.
Цей коментар був мінімізований модератором на сайті
Зображення додається
Цей коментар був мінімізований модератором на сайті
Шановний Михайло,
Можливо, ви можете вирішити цю проблему за допомогою надбудови Excel. Тут я рекомендую вам утиліту Select Specific Cells Kutools for Excel. За допомогою цієї утиліти ви можете легко вибрати всі рядки в певному діапазоні, якщо значення вказаного стовпця більше або менше числа. Вибравши всі необхідні рядки, ви можете вручну скопіювати та вставити їх на новий аркуш. Дивіться прикріплене зображення нижче.

Ви можете дізнатися більше про цю функцію, перейшовши за гіперпосиланням нижче.
https://www.extendoffice.com/product/kutools-for-excel/excel-select-specific-cells-rows.html
Цей коментар був мінімізований модератором на сайті
дякую за цю формулу, але у мене виникла проблема: коли я хочу перемістити рядок на інший аркуш, це не відбувається автоматично. ви можете дати мені іншу формулу? тому щоразу, коли я змінюю значення комірки, воно переміщається автоматично.


Дякую
Цей коментар був мінімізований модератором на сайті
Шановний Джананг,
Доза коду не відбувається автоматично, доки ви не активуєте кнопку запуску вручну.
Цей коментар був мінімізований модератором на сайті
привіт,

Я хотів би налаштувати цей макрос, але з 2 аргументами. Мені вдалося змусити макрос працювати у моєму файлі на основі значення клітинок у стовпці O. Однак я хотів би, щоб макрос також перевірив, чи заповнений стовпець S (або <> ""), перш ніж перемістити рядок . Нарешті, я також хотів би, щоб скопійовані рядки мали те саме форматування, що й рядки на другому аркуші. Чи це повністю змінює макрос?
Цей коментар був мінімізований модератором на сайті
Шановний Хьюг,
Я не знаю, чи правильно я вас розумію. Ви маєте на увазі, що якщо клітинка в стовпці S заповнена, а клітинка в стовпці O містить певне значення одночасно, то перемістити рядок із форматуванням? Інакше не рухатися?
Цей коментар був мінімізований модератором на сайті
Привіт Кристал,

Так, це саме те, що я маю на увазі. Насправді мої дані стосуються проектів. Мій стовпець O — це статус мого проекту, а S — дата завершення мого проекту.
Я хочу, щоб мої користувачі, люди, які володіють інформацією та мають вставити її, мали змогу «Архівувати» проект ТІЛЬКИ, якщо у них є статус «Закритий» і вони вставили «Дата завершення».


Сподіваюся, це допоможе прояснити речі
Цей коментар був мінімізований модератором на сайті
Шановний Хьюг,
Вибачте за таку пізню відповідь. Наведений нижче код VBA може допомогти вам вирішити проблему. Щоб застосувати сценарій VBA, виконайте дії, описані в цій статті.

Sub MoveRowBasedOnCellValue()
Dim xRgStatus як діапазон
Dim xRgDate як діапазон
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, тоді J = 0
End If
Встановити xRgStatus = Worksheets("Sheet1").Range("O1:O" & I)
Встановити xRgDate = Worksheets("Sheet1").Range("S1:S" & I)
On Error Resume Next
Application.ScreenUpdating = Невірний
Application.CutCopyMode = Неправда
xRgStatus(1).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Для K = 2 До xRgStatus.Count
Якщо CStr(xRgStatus(K).Value) = "Закрито", Тоді
Якщо (xRgDate(K).Value <> "") і (TypeName(xRgDate(K).Value) = "Date"), то
xRgStatus(K).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
End If
End If
Далі
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
Шановна Кристал,

Велике вам спасибі за вашу допомогу!

З повагою,

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


Як скопіювати рядки замість переміщення?
Цей коментар був мінімізований модератором на сайті
Здравствуйте,


Я знаю, що це було опубліковано кілька разів, але я не можу знайти відповідь. Як я можу скопіювати матеріал на новий аркуш і НЕ видаляти його з вихідного аркуша?
Цей коментар був мінімізований модератором на сайті
Дорогий Майк,
Якщо ви хочете скопіювати рядки, а не видаляти їх, наведений нижче код VBA може допомогти вам. Дякуємо за коментар!

Sub Cheezy()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Якщо J = 1, то
Якщо Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, тоді J = 0
End If
Установіть xRg = Worksheets("Sheet1").Діапазон("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = Невірний
Для K = 1 До xRg.Count
Якщо CStr(xRg(K).Value) = "Готово", Тоді
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
End If
Далі
Application.ScreenUpdating = True
End Sub
Цей коментар був мінімізований модератором на сайті
привіт,

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

Перевести «Синій» після «Колір»

A1 = синій
A5= Колір
A6= (перенесіть "синій" тут)
і так далі...
Цей коментар був мінімізований модератором на сайті
Дорогий Джон
Ви маєте на увазі, що якщо клітинка містить «Колір» у стовпці, то скопіюйте текст першої клітинки в клітинку під «Колір» і повторіть копіювання цього тексту до кінця стовпця?
There are no comments posted here yet
Load More

Слідуй за нами

Copyright © 2009 - WWW.extendoffice.com. | Всі права захищені. На основі ExtendOffice. | Карта сайту
Microsoft та логотип Office є товарними знаками або зареєстрованими товарними знаками Microsoft Corporation у США та / або інших країнах.
Захищений Sectigo SSL