Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将单元格值从一个工作表复制到另一个工作表_Excel_Vba - Fatal编程技术网

Excel 将单元格值从一个工作表复制到另一个工作表

Excel 将单元格值从一个工作表复制到另一个工作表,excel,vba,Excel,Vba,我想: 从“E3”开始检查表1 E列中的单元格 如果不为空,将单元格(“E3”)复制到(“B21”)上的表2上,并在表1和(B22,B23,…)表2中的单元格下方(E4,E5,…)重复此操作,直到表1(Ex)上的单元格为空 在最后一张(Bx)下方的表2上填写“完成” 此代码不会将单元格复制到图纸2 Sub bla() Set ar1 = Worksheets("sheet1").Range("E3") Set ar2 = Worksheets("sheet2").Range("B21")

我想:

  • 从“E3”开始检查表1 E列中的单元格
  • 如果不为空,将单元格(“E3”)复制到(“B21”)上的表2上,并在表1和(B22,B23,…)表2中的单元格下方(E4,E5,…)重复此操作,直到表1(Ex)上的单元格为空
  • 在最后一张(Bx)下方的表2上填写“完成”
此代码不会将单元格复制到图纸2

Sub bla()

Set ar1 = Worksheets("sheet1").Range("E3")
Set ar2 = Worksheets("sheet2").Range("B21")

Do While Not IsEmpty(ar1)
    Range(ar1).Copy Worksheets("sheet2").Range("ar2")
    Set dr1 = ar1.Offset(1, 0)
    Set dr2 = ar2.Offset(1, 0)
    Set ar1 = dr1
    Set ar2 = dr2
Loop

ar1.Value = "Complete"
End Sub

试试这个代码。它避免了循环,并且可能更易于维护/理解
End(xlDown)
相当于在键盘上对某个范围使用
Ctrl+向下箭头

Sub bla()

    Dim ws1 as Worksheet, ws2 as Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    Dim copyRange as Range

    With ws1
        Set copyRange = .Range(.Range("E3"),.Range("E3").End(xlDown))
    End With

    With ws2.Range("B21")
        .Resize(copyRange.Rows.Count).Value = copyRange.Value
        .End(xlDown).Offset(1).Value = "Complete"
    End With

End Sub

试试这个代码。它避免了循环,并且可能更易于维护/理解
End(xlDown)
相当于在键盘上对某个范围使用
Ctrl+向下箭头

Sub bla()

    Dim ws1 as Worksheet, ws2 as Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    Dim copyRange as Range

    With ws1
        Set copyRange = .Range(.Range("E3"),.Range("E3").End(xlDown))
    End With

    With ws2.Range("B21")
        .Resize(copyRange.Rows.Count).Value = copyRange.Value
        .End(xlDown).Offset(1).Value = "Complete"
    End With

End Sub

如果我理解您的代码,您可以尝试以下代码:

我想你可以在sheet1的E列中有一个空行,但你不想在sheet2中复制它。。。 在sheet1中执行宏

Sub test()

Dim ws2 As Worksheet
Dim numRowSheet1, rowSheet2, i As Long

Set ws2 = Worksheets("sheet2")

rowSheet2 = 21 'start from row 21 (sheet2)

'count how many rows there are in column E
numRowSheet1 = Cells(rows.count, 5).End(xlUp).Row

With ws2
    For i = 3 To numRowSheet1
        If Cells(i, 5) <> "" Then
            'assign in cell B(sheet2) the value of the cell E of the sheet1
            .Cells(rowSheet2, 2) = Cells(i, 5)
            rowSheet2 = rowSheet2 + 1
        End If
    Next i
    .Cells(rowSheet2,2)="complete"
End With

End Sub
子测试()
将ws2设置为工作表
昏暗的numRowSheet1、rowSheet2、i和长
设置ws2=工作表(“表2”)
第2行=21'从第21行开始(第2行)
'计算E列中有多少行
numRowSheet1=单元格(rows.count,5).End(xlUp).Row
与ws2
对于i=3至numRowSheet1
如果单元格(i,5)“,则
'在单元格B(图纸2)中指定图纸1的单元格E的值
.单元格(第2行,第2行)=单元格(第1行,第5行)
行图纸2=行图纸2+1
如果结束
接下来我
.单元格(第2,2行)=“完成”
以
端接头

希望这有帮助

如果我理解您的代码,您可以尝试以下代码:

我想你可以在sheet1的E列中有一个空行,但你不想在sheet2中复制它。。。 在sheet1中执行宏

Sub test()

Dim ws2 As Worksheet
Dim numRowSheet1, rowSheet2, i As Long

Set ws2 = Worksheets("sheet2")

rowSheet2 = 21 'start from row 21 (sheet2)

'count how many rows there are in column E
numRowSheet1 = Cells(rows.count, 5).End(xlUp).Row

With ws2
    For i = 3 To numRowSheet1
        If Cells(i, 5) <> "" Then
            'assign in cell B(sheet2) the value of the cell E of the sheet1
            .Cells(rowSheet2, 2) = Cells(i, 5)
            rowSheet2 = rowSheet2 + 1
        End If
    Next i
    .Cells(rowSheet2,2)="complete"
End With

End Sub
子测试()
将ws2设置为工作表
昏暗的numRowSheet1、rowSheet2、i和长
设置ws2=工作表(“表2”)
第2行=21'从第21行开始(第2行)
'计算E列中有多少行
numRowSheet1=单元格(rows.count,5).End(xlUp).Row
与ws2
对于i=3至numRowSheet1
如果单元格(i,5)“,则
'在单元格B(图纸2)中指定图纸1的单元格E的值
.单元格(第2行,第2行)=单元格(第1行,第5行)
行图纸2=行图纸2+1
如果结束
接下来我
.单元格(第2,2行)=“完成”
以
端接头

希望这有助于作为注释,而不是
.Range(.Range(“E3”)
您可以同样地编写
.Range(“E3”
.Range稍短一点:)作为注释,而不是
.Range(.Range(“E3”)
您可以同样地编写
.Range(“E3”
稍短一点:)