2016-07-12 6 views
0

Мне нужно переместить ячейки A-M в заданную строку на другой лист, основываясь на определенных критериях. Сейчас я использую код, который перемещает всю строку (см. Ниже). Как я могу отредактировать это, чтобы принимать значения только от A-M? Я был бы признателен за любое понимание, поскольку я очень новичок в этом. Благодаря!Вырезать/вставить ячейки на новый лист с определенными критериями

Option Explicit 

Sub Fr33M4cro() 

Dim sh33tName As String 
Dim custNameColumn As String 
Dim i As Long 
Dim stRow As Long 
Dim customer As String 
Dim ws As Worksheet 
Dim sheetExist As Boolean 
Dim sh As Worksheet 

sh33tName = "New Providers - FPPE" 
custNameColumn = "H" 
stRow = 7 

Set sh = Sheets(sh33tName) 

For i = sh.Range(custNameColumn & sh.Rows.Count).End(xlUp).Row To stRow Step -1 
    customer = sh.Range(custNameColumn & i).Value 
    For Each ws In ThisWorkbook.Sheets 
     If StrComp(ws.Name, customer, vbTextCompare) = 0 Then 
      sheetExist = True 
      Exit For 
     End If 
    Next 
    If sheetExist Then 
     CopyRow i, sh, ws, custNameColumn 
    Else 
     InsertSheet customer 
     Set ws = Sheets(Worksheets.Count) 
     CopyRow i, sh, ws, custNameColumn 
    End If 
    Reset sheetExist 
Next i 

End Sub 

Private Sub CopyRow(i As Long, ByRef sh As Worksheet, ByRef ws As Worksheet, custNameColumn As String) 
Dim wsRow As Long 
wsRow = ws.Range(custNameColumn & ws.Rows.Count).End(xlUp).Row + 1 


ws.Rows(wsRow).EntireRow.Value = sh.Rows(i).EntireRow.Value 
sh.Rows(i).EntireRow.Delete 
End Sub 


Private Sub Reset(ByRef x As Boolean) 
x = False 
End Sub 

Private Sub InsertSheet(shName As String) 
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = shName 
End Sub 

ответ

0

В вашей CopyRow функции, сделать это вместо:

' ws.Rows(wsRow).EntireRow.Value = sh.Rows(i).EntireRow.Value 
ws.Rows(wsRow).Resize(1,13).Value = sh.Rows(i).Resize(1,13).Value 
+0

Весь ряд по-прежнему режет ... Любое понимание того, что может быть происходит? –

+0

Вы ничего не говорили о разрезании (или не разрезании) в своем вопросе, но вы можете использовать тот же подход: 'sh.Rows (i) .Resize (1,13) .Delete Shift: = xlUp' –

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