我是VBA的新手...如果此行中的第一个单元格表示X,则我要将Sheet2中的一行复制到Sheet1,然后对符合此条件的所有行执行此操作.我在If条件中有错误...我不知道如何解决它.
Sub LastRowInOneColumn()
'Find the last used row in a Column: column A in this example
Worksheets("Sheet2").Activate
Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
MsgBox (LastRow)
For i = 1 To LastRow
If Worksheet.Cells(i, 1).Value = "X" Then
ActiveSheet.Row.Value.Copy _
Destination:=Hoja1
End If
Next i
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在努力处理一些陷入循环的代码.我试图让代码复制BD列中的值为1的任何行,并将整行的值粘贴到另一个工作表中的下一个空行.我使用的代码如下
Sub FindIssues()
Dim LR As Long, i As Long
LR = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LR
Sheets("Macro Worksheet").Select
If Range("BD" & i).Value = "1" Then Rows(i).Select
Selection.Copy
Sheets("Macro Worksheet 2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Do Until IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Macro Worksheet").Select
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我的主要目标是复制自动过滤器的可见单元格,然后将可见单元格的尺寸复制到新工作表中.我正在使用此代码:
Sheets(1).AutoFilterMode = False
Sheets(1).Range("A1:A1").AutoFilter Field:=columnaNumeroIntervalo, criteria1:=CDec(paramCantidadCriterio)
Sheets(1).Range("A1:A1").AutoFilter Field:=columnaNumeroIntervaloUnidades, Criteria1:=paramUnidadesCriterio
MsgBox AutoFilter.Range.SpecialCells(xlCellTypeVisible)(2, 11).Value
Run Code Online (Sandbox Code Playgroud)
在最后一行,我想检查单元格的值.如果我使用Cells(2,11)而不是SpecialCells我可以看到细胞具有片材的所有细胞,可见且不可见.所以我想用SpecialCells.
如果我使用特殊单元格,我会收到以下错误:
error '-2147417848 (80010108) in runtime. Automatization error.
对于执行类型的时间,它似乎进入一个循环,最后给出了这个错误.也许SpecialCells修改自动过滤器然后在每次修改中再次执行自动过滤器?
我希望有人可以帮助解决这段代码.如果我在A栏中找到文本'FemImplant',我想删除整行.棘手的部分是这个文本是由'$'链接的句子的一部分.所以我需要代码在'$'之前解析单元格内容,看看它是否与'FemImplant'匹配并删除该行.这是我到目前为止所做的,但它是无法工作的.
Dim cell As Excel.Range
RowCount = DataSheet.UsedRange.Rows.Count
Set col = DataSheet.Range("A1:A" & RowCount)
Dim SheetName As String
Dim ParsedCell() As String
For Each cell In col
ParsedCell = cell.Value.Split("$")
SheetName = ParsedCell(0)
If SheetName = "FemImplant" Then
cell.EntireRow.Delete Shift:=xlUp
End If
Run Code Online (Sandbox Code Playgroud)
下一个
我正在处理一些非常大的数据集(各种表格,每行65K +行和多列).我正在尝试编写一些代码,以尽可能快地将过滤后的数据从一个工作表复制到一个新的空工作表,但到目前为止还没有取得多大成功.
我可以按请求包含其余代码,但它所做的只是计算源和目标范围(srcRange和destRange).计算这些的时间可以忽略不计.绝大部分时间都花在这条线上(确切地说是4分50秒):
srcRange.Rows.SpecialCells(xlCellTypeVisible).Copy Destination:=destRange
Run Code Online (Sandbox Code Playgroud)
另外我试过这个:
destRange.Value = srcRange.Rows.SpecialCells(xlCellTypeVisible).Value
Run Code Online (Sandbox Code Playgroud)
但是当有过滤器时,它无法正常工作.
Function FastCopy(srcSheet As String, srcCol As String, destSheet As String, destCol As String)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim srcRange As Range
Dim destRange As Range
Set srcRange = GetColumnRangeByHeaderName(srcSheet, srcCol, -1)
Set destRange = GetColumnRangeByHeaderName(destSheet, destCol, srcRange.Rows.Count)
'destRange.Value = srcRange.Rows.SpecialCells(xlCellTypeVisible).Value
srcRange.Rows.SpecialCells(xlCellTypeVisible).Copy Destination:=destRange
Application.ScreenUpdating = True
Application.Calculation = xlCalculationManual
End Function
Run Code Online (Sandbox Code Playgroud)
这是一款速度较慢的双核机器,运行excel 2010时运行2GB内存.结果显然会在更快的机器上发生变化.