Я новичок re: VBA и макросы (создание или запуск). Мне нужна помощь с кодом, который поможет мне скопировать строку из одной таблицы в другую, оставив ее в оригинальном листе и каким-то образом помечать (я думаю), или иначе, чтобы гарантировать, что она не будет скопирована снова в будущем. Я нашел несколько сообщений о перемещении строк, большинство из которых полагалось на запись даты, но это не работает для моей цели. В моем листе есть столбец (H) с выпадающей проверкой данных - любая запись в ячейку из раскрывающегося списка идентифицирует строку как одну для копирования на следующий лист. Тем не менее, есть также столбец, следующий за (J), где ввод данных является необязательным, и я не хочу, чтобы строка была скопирована, прежде чем дать пользователю возможность войти в этот столбец, чтобы содержимое было скопировано (или, возможно, это набор отдельных кодов?). Строки, скопированные в новую таблицу, должны быть вставлены в следующую доступную строку. спасибо за любую помощь & инструкции, которые вы можете предложить.Excel, VBA и движущиеся строки
ответ
Okay - с информацией. Я собрал из ваших постов, я следующее:
Sub copyRows()
Dim xRow As Integer, xCol As Integer, lastCol As Integer
Dim dataValidation As Range, rowToCopy As Integer, copyRange As Range, destRange As Range
Dim copyWSRow As Integer, jColValue As String
Dim origWS As Worksheet, copyWS As Worksheet
Set origWS = ActiveSheet
' Edit these two lines as needed. If you have the "copy" worksheet already, comment out the first line
' and then change the 'Sheets("Copy")' to 'Sheets("_____")'
Worksheets.Add(after:=Worksheets(1)).Name = "Copy"
Set copyWS = Sheets("Copy")
origWS.Activate
Set dataValidation = origWS.Cells(1, 8) ' Cell H1 has your data validation. Change this as necessary
rowToCopy = dataValidation.Value
'find the last column used, that isn't Col. H. If it's column H, assume G is the last column
lastCol = origWS.Cells(1, 1).End(xlToRight).Column
If lastCol = 8 Then lastCol = lastCol - 1
With origWS
Set copyRange = .Range(.Cells(rowToCopy, 1), .Cells(rowToCopy, lastCol))
End With
'What's the next available row in the Copy WS?
If copyWS.UsedRange.Rows.Count = 1 And copyWS.Cells(1, 1).Value = "" Then
copyWSRow = 1
Else
copyWSRow = copyWS.UsedRange.Rows.Count + 1 ' count the used rows, and add one to make the next blank row the row to copy to
End If
'Set the destination Range
With copyWS
Set destRange = .Range(.Cells(copyWSRow, 1), .Cells(copyWSRow, lastCol))
End With
'Now, just copy the info over (technically, just set values equal)
destRange.Value = copyRange.Value
'Now, check to see if Column J has any info - if so, add to the line we just did in the Copy WS
If origWS.Cells(1, 10).Value <> "" Then
jColValue = origWS.Cells(1, 10).Value
copyWS.Cells(copyWSRow, 10).Value = jColValue
End If
' Add note that the row was copied
origWS.Cells(rowToCopy,13).Value = "Already Copied"
End Sub
Несколько замечаний: Я предположил, что самый правый столбец с данными вы хотите скопировать, будет Колонка G - с H имеет значение строки ,
Кроме того, у меня есть H1 как ячейка с проверкой данных - возможно, вам потребуется отредактировать ее по мере необходимости.
Я проверил это с некоторыми данными в столбцах A-G, где H1 и J1 являются проверкой данных (где он выдает число) и J1 в качестве «дополнительной» информации. Если вы хотите, чтобы «дополнительная информация» была в КАЖДОЙ строке данных, а не в одном абсолютном месте, просто измените формулу jColValue
на jColValue = origWS.Cells(rowToCopy,10).Value
.
И, конечно, если это не работает или нуждается в настройке, просто дайте мне знать.
- 1. Excel VBA - повторяющиеся строки
- 2. Прокрутите строки excel и вызовите функции VBA
- 3. Excel VBA: сопоставить данные строки и удалить
- 4. Excel VBA: Объединить строки и суммарные значения
- 5. Split Дата и строки в Excel VBA
- 6. Excel VBA - Объединить и дублировать строки/столбцы
- 7. Замена часть строки (Excel VBA)
- 8. Объединить строки в Excel & VBA
- 9. Разбор строки в Excel Vba
- 10. Динамические строки Манипуляция VBA Excel
- 11. Excel VBA - Удалить пустые строки
- 12. VBA Excel Регулировка высоты строки
- 13. Excel VBA- удалить часть строки
- 14. Удалить последовательные строки EXCEL VBA
- 15. Формула Excel VBA внутри строки
- 16. метода удаления строки Excel VBA
- 17. Excel VBA; Обновление строки подключения
- 18. Excel Macros и VBA
- 19. выбор второй строки текущей строки excel vba
- 20. Excel номер строки vba из строки
- 21. Графики Excel, мерцающие/движущиеся на экране
- 22. Выбор активной строки и первой строки в VBA Excel 2010
- 23. Статические и движущиеся?
- 24. фона Excel и VBA
- 25. Excel Гиперссылка и VBA
- 26. Excel Вычисления и VBA
- 27. Столбцы VBA и Excel
- 28. VBA и Excel Macro
- 29. Получить все движущиеся k-размерные разделы строки
- 30. Excel VBA фильтрация и группировка строк vba
Являются ли данные в столбце H для проверки числа? Или это какой-то текст, который бы идентифицировал строку для копирования? Ваши данные идут от полковника А до G? Как выглядят данные? – BruceWayne
Я бы использовал цвет, изменения размера шрифта или комментарии. Если есть, например, комментарий, «уже скопированный», ничего не делает, иначе скопируйте строку и добавьте комментарий «уже скопированный». – user3819867
@Rookie: вы можете использовать формулу в скрытом столбце, который отмечает строку для копирования на основе столбцов H и J. Затем запустите макрос, который копирует отмеченные строки. –