2015-04-22 3 views
0

Я новичок re: VBA и макросы (создание или запуск). Мне нужна помощь с кодом, который поможет мне скопировать строку из одной таблицы в другую, оставив ее в оригинальном листе и каким-то образом помечать (я думаю), или иначе, чтобы гарантировать, что она не будет скопирована снова в будущем. Я нашел несколько сообщений о перемещении строк, большинство из которых полагалось на запись даты, но это не работает для моей цели. В моем листе есть столбец (H) с выпадающей проверкой данных - любая запись в ячейку из раскрывающегося списка идентифицирует строку как одну для копирования на следующий лист. Тем не менее, есть также столбец, следующий за (J), где ввод данных является необязательным, и я не хочу, чтобы строка была скопирована, прежде чем дать пользователю возможность войти в этот столбец, чтобы содержимое было скопировано (или, возможно, это набор отдельных кодов?). Строки, скопированные в новую таблицу, должны быть вставлены в следующую доступную строку. спасибо за любую помощь & инструкции, которые вы можете предложить.Excel, VBA и движущиеся строки

+0

Являются ли данные в столбце H для проверки числа? Или это какой-то текст, который бы идентифицировал строку для копирования? Ваши данные идут от полковника А до G? Как выглядят данные? – BruceWayne

+0

Я бы использовал цвет, изменения размера шрифта или комментарии. Если есть, например, комментарий, «уже скопированный», ничего не делает, иначе скопируйте строку и добавьте комментарий «уже скопированный». – user3819867

+0

@Rookie: вы можете использовать формулу в скрытом столбце, который отмечает строку для копирования на основе столбцов H и J. Затем запустите макрос, который копирует отмеченные строки. –

ответ

1

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.

И, конечно, если это не работает или нуждается в настройке, просто дайте мне знать.

Смежные вопросы