用于列出名称的VBA宏代码
我有一张Excel表格,其中一列是姓名,下一列是工时值 我想将值大于40的名称复制到新工作表中,列中不留空格。新工作表应包括姓名和工作时间;应忽略“值”列中的任何文本用于列出名称的VBA宏代码,vba,excel,for-loop,Vba,Excel,For Loop,我有一张Excel表格,其中一列是姓名,下一列是工时值 我想将值大于40的名称复制到新工作表中,列中不留空格。新工作表应包括姓名和工作时间;应忽略“值”列中的任何文本 Sub CopyCells() Dim sh1 As Worksheet, sh2 As Worksheet Dim j As Long, i As Long, lastrow1 As Long Set sh1 = Worksheets("Sheet1") Set sh2 = Workshe
Sub CopyCells()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim j As Long, i As Long, lastrow1 As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
lastrow1 = sh1.Cells(Rows.Count, "F").End(xlUp).Row
For i = 1 To lastrow1
If sh1.Cells(i, "F").Value > 20 Then
sh2.Range("A" & i).Value = sh1.Cells(i, "F").Value
End If
Next i
End Sub
试试rhis
Sub CopyCells()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim j As Long, i As Long, lastrow1 As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
lastrow1 = sh1.Cells(Rows.Count, "F").End(xlUp).Row
j = 1
For i = 1 To lastrow1
If Val(sh1.Cells(i, "F").Value) > 20 Then
sh2.Range("A" & j).Value = sh1.Cells(i, "F").Value
j = j + 1
End If
Next i
End Sub
试试rhis
Sub CopyCells()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim j As Long, i As Long, lastrow1 As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
lastrow1 = sh1.Cells(Rows.Count, "F").End(xlUp).Row
j = 1
For i = 1 To lastrow1
If Val(sh1.Cells(i, "F").Value) > 20 Then
sh2.Range("A" & j).Value = sh1.Cells(i, "F").Value
j = j + 1
End If
Next i
End Sub
我建议使用
AutoFilter
进行复制和粘贴,因为它比循环更快。请参见下面的示例
我的假设
Option Explicit
Sub Sample()
Dim wsI As Worksheet, wsO As Worksheet
Dim lRow As Long
'~~> Set the input sheet
Set wsI = Sheets("Sheet1"): Set wsO = Sheets("Sheet2")
'~~> Clear Sheet 2 for output
wsO.Cells.ClearContents
With wsI
'~~> Remove any existing filter
.AutoFilterMode = False
'~~> Find last row in Sheet1
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Filter Col B for values > 40
With .Range("A1:B" & lRow)
.AutoFilter Field:=2, Criteria1:=">40"
'~~> Copy the filtered range to Sheet2
.SpecialCells(xlCellTypeVisible).Copy wsO.Range("A1")
End With
'~~> Remove any existing filter
.AutoFilterMode = False
End With
'~~> Inform user
MsgBox "Done"
End Sub
快照
我建议使用
AutoFilter
进行复制和粘贴,因为它比循环更快。请参见下面的示例
我的假设
Option Explicit
Sub Sample()
Dim wsI As Worksheet, wsO As Worksheet
Dim lRow As Long
'~~> Set the input sheet
Set wsI = Sheets("Sheet1"): Set wsO = Sheets("Sheet2")
'~~> Clear Sheet 2 for output
wsO.Cells.ClearContents
With wsI
'~~> Remove any existing filter
.AutoFilterMode = False
'~~> Find last row in Sheet1
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Filter Col B for values > 40
With .Range("A1:B" & lRow)
.AutoFilter Field:=2, Criteria1:=">40"
'~~> Copy the filtered range to Sheet2
.SpecialCells(xlCellTypeVisible).Copy wsO.Range("A1")
End With
'~~> Remove any existing filter
.AutoFilterMode = False
End With
'~~> Inform user
MsgBox "Done"
End Sub
快照
欢迎来到StackOverflow:)您尝试了什么?您在哪里卡住了?子复制单元格()将sh1设置为工作表,将sh2设置为工作表,将sh2设置为工作表,将sh1设置为长,将sh1设置为长,将sh1设置为长,将sh1设置为长sh1=工作表(“Sheet1”)将sh2=工作表(“Sheet2”)设置为sh1。单元格(Rows.Count,“F”).End(xlUp)。如果sh1设置为长,则将i=1的行设置为最后行1。单元格(i,“F”).Value>20,然后是sh2.Range(“A”&i).Value=sh1.Cells(i,“F”)。Value End如果下一个i End Sub我尝试过这个方法,它会起作用,但列中的文本也会复制到新的工作表中,空格保持原样。他们没有被忽视。如果您不介意,请先编辑您的问题,然后将代码粘贴到那里,好吗?阅读注释中的代码确实很困难。:)好的,我知道你在做什么了。等一下。发布回答欢迎使用StackOverflow:)您尝试了什么,您遇到了什么困难?子复制单元格()将sh1设置为工作表,将sh2设置为工作表,将sh2设置为工作表,将sh1设置为长,将sh1设置为长,将sh1设置为长,将sh1设置为长,将sh1设置为长sh1=工作表(“Sheet1”)将sh2=工作表(“Sheet2”)设置为长sh1=sh1。单元格(Rows.Count,“F”).End(xlUp)。如果sh1设置为长,则将i=1的行设置为最后一行。单元格(i,“F”).Value>20,然后是sh2.Range(“A”&i).Value=sh1.Cells(i,“F”)。Value End如果下一个i End Sub我尝试过这个方法,它会起作用,但列中的文本也会复制到新的工作表中,空格保持原样。他们没有被忽视。如果您不介意,请先编辑您的问题,然后将代码粘贴到那里,好吗?阅读注释中的代码确实很困难。:)好的,我知道你在做什么了。等一下。发布回答您向se检查是否应复制值的行应测试
>40
,而不是>20
对吗?:)从OP注释复制的代码-那么OP或注释哪一个是正确的?建议:在中添加第二行,如果。。。如果
也要复制名称列,则结束。Hi。如果我需要添加另一个if条件,我应该怎么做?提前感谢您向se检查是否应复制值的行应测试>40
,而不是>20
对吗?:)从OP注释复制的代码-那么OP或注释哪一个是正确的?建议:在中添加第二行,如果。。。如果
也要复制名称列,则结束。Hi。如果我需要添加另一个if条件,我应该怎么做?提前谢谢回答得好,布局得好回答得好,布局得好