2016-09-28 79 views
0

enter image description here有2张工作表Sheet1和Sheet2。 Sheet1包含10列和5行,数据包括空白。将数据复制到工作表中

的要求是将数据从表1复制并把在另一片表2,其中,仅填充其不是空白的单元格。

我得到运行时错误1004-应用程序或对象定义的错误。

的代码片段是: -

Set wsht1 = ThisWorkbook.Worksheets("Sheet1") 
Set wsht2 = Sheets("Sheet2") 
finalrow = wsht1.Cells(wsht1.Rows.Count, 1).End(xlUp).Row 

For i = 1 To finalrow 
If wsht1.Cells(i, 1).Value <> " " Then 
    Range(Cells(i, 2), Cells(i, 2)).Copy 
     Worksheets("Sheet2").Select 
     wsht2.Range(Cells(1, i)).PasteSpecial Paste:=xlPasteFormats 

    End If 
Next i 

u能帮助我在整理了这一点?

+0

更换For j = 1 To 5你看看被切换到工作表2,所以第二次循环运行时,范围(单元格...将参考并从工作表2复制而不是wsht1。错误在哪里? –

+0

当我尝试运行代码时发生错误! 运行时错误 - 1004 应用程序定义或对象定义的错误 – Prabhu

+0

@Prabhu这是什么线'范围(细胞(I,2),将细胞(I,2))Copy'。?你是否想要复制单个单元格的范围? –

回答

1

不能定义一系列这样的:

wsht2.Range(Cells(1, i)) 

您可以使用:

wsht2.Cells(1, i).PasteSpecial Paste:=xlPasteFormats 

BTW:这个代码,你不会找到空单元格:

If wsht1.Cells(i, 1).Value <> " " Then 

你应该使用:

If wsht1.Cells(i, 1).Value <> "" Then 

(所不同的是在引号之间缺少空间),如果你想只复制值,并用循环,使其我会做以下

Sub copying() 

    Set wsht1 = ThisWorkbook.Worksheets("Sheet1") 
    Set wsht2 = Sheets("Sheet2") 
    finalrow = wsht1.Cells(wsht1.Rows.Count, 1).End(xlUp).Row 

For i = 1 To finalrow 
    If wsht1.Cells(i, 1).Value <> "" Then 
     For j = 1 To 5 
      wsht2.Cells(i, j).Value = wsht1.Cells(i, j).Value 
     Next j 
    End If 
Next i 


End Sub 
+0

我更改了代码,但是当我放下休息时,我可以看到cellis被复制但未被正确粘贴到目的地 wsht2.Cells(i,1).PasteSpecial粘贴:= xlPasteFormats – Prabhu

+0

您需要的格式或值只? – tretom

0

代码下面将从表1复制在列A(非空细胞)只值到Sheet:

Dim j       As Long 

Set wsht1 = ThisWorkbook.Worksheets("Sheet1") 
Set wsht2 = Sheets("Sheet2") 
finalrow = wsht1.Cells(wsht1.Rows.Count, 1).End(xlUp).Row 

j = 1 
For i = 1 To finalrow 
    With wsht1 
     ' if you compare to empty string, you need to remove the space inside the quotes 
     If .Cells(i, 1).Value <> "" And .Cells(i, 1).Value <> " " Then 
      .Cells(i, 1).Copy ' since you are copying a single cell, there's no need to use a Range 
      wsht2.Range("A" & j).PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats 
      j = j + 1 
     End If 
    End With 
Next i 
+0

嗨,感谢您的代码。 当我运行代码,并确实我得到他的价值观,但与空白仍然:( – Prabhu

+0

@Prabhu也许你也有空格内的单元格,尝试编​​辑代码 –

+0

此代码将始终创建'wsht2'空白,因为你正在使用'我'说要在哪里粘贴数据,你需要一个单独的计数器,例如'j = 1,wsht2.Range(“A”&j).PasteSpecial,j = j + 1' –

1

如果只有5个细胞与在表1中的数据和仅希望这些5行复制到表2使用的以下类似于Shai的回答在表的行额外的柜台已经2

Sub copying() 

Set wsht1 = ThisWorkbook.Worksheets("Sheet1") 
Set wsht2 = Sheets("Sheet2") 
finalrow = wsht1.Cells(wsht1.Rows.Count, 1).End(xlUp).Row 
k = 1 

For i = 1 To finalrow 
    If wsht1.Cells(i, 1).Value <> "" Then 
     For j = 1 To 5 
      wsht2.Cells(k, j).Value = wsht1.Cells(i, j).Value 
     Next j 
     k = k + 1 
    End If 
Next i 
End Sub 

编辑

根据你的评论,如果你想动态改变j

For j = 1 To wsht1.Cells(i, Columns.Count).End(xlToLeft).Column 
+0

我可以使j值动态吗? – Prabhu

+0

您的意思是,如果工作表1中的每一行的每行数据量不同? –

+0

确实是正确的:) – Prabhu

相关问题