使用VBA对值进行分组
我在一个表中获得了以下数据,我想制作一个宏,将所有值分组,并在底部正确显示使用VBA对值进行分组,vba,excel,Vba,Excel,我在一个表中获得了以下数据,我想制作一个宏,将所有值分组,并在底部正确显示#N/a。请帮忙 A B C D E 1 Line Item Quantity Part Number Description 2 Line 1 Fan Motor 0 0 0 3 Line 2
#N/a
。请帮忙
A B C D E
1 Line Item Quantity Part Number Description
2 Line 1 Fan Motor 0 0 0
3 Line 2 Fan #N/A #N/A #N/A
4 Line 3 Fan guard 0 0 0
5 Line 4 Pump 0 0 0
6 Line 5 Access door 0 0 0
7 Line 6 Nozzle grommet 0 0 0
8 Line 7 Nozzle 0 0 0
9 Line 20 SST tube 0 0 0
10 Line 21 Flanges 2 205024M2P HDGFLG
11 Line 22 Part 11 #N/A #N/A #N/A
12 Line 23 Part 12 #N/A #N/A #N/A
16 Line 29 Terminal box 1 31123800P TERMINAL BOX
14 Line 25 Check Valve #N/A #N/A #N/A
15 Line 26 Buttefly Valve #N/A #N/A #N/A
17 Line 30 Solenoid valve 1 31601700P SOLENOID VALVE 1 PER8
18 Line 31 Coil 1 31602000P COIL FOR SOL. VALVE
我最初使用下面的代码删除值为#N/A
Sub GroupRows()
Dim rownum As Long
For rownum = 1 To 1000
If Cells(rownum, 3).Text = "#N/A" Then
Rows(rownum).Delete
Next rownum
Cells(rownum, 3).Activate
End Sub
但是
“编译错误:下一步不带For”
弹出错误消息,问题是我还是VBA新手,还有一些事情我还不太了解,所以我不知道我的编码是否正确。如果您使用最后使用的行而不是固定的最大行号,那么您的代码就是这样的
Sub GroupRows()
Dim iRow As Long, lastRow As Long
Dim ws As Worksheet
Set ws = Worksheets("MySheetName") 'qualify your sheet
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 'find last used row
For iRow = lastRow To 1 Step -1 'run from last used row backwards to row 1
If ws.Cells(iRow, 3).Text = "#N/A" Or _
ws.Cells(iRow, 4).Text = "#N/A" Then
ws.Rows(iRow).Delete
End If
Next iRow
ws.Cells(iRow, 3).Activate
End Sub
您的代码缺少一个
结束if
,您应该始终使用类似ws.Cells
或ws.Range
的工作表来限定单元格
或范围如果您使用最后使用的行而不是固定的最大行号,那么您的代码就是这样的
Sub GroupRows()
Dim iRow As Long, lastRow As Long
Dim ws As Worksheet
Set ws = Worksheets("MySheetName") 'qualify your sheet
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 'find last used row
For iRow = lastRow To 1 Step -1 'run from last used row backwards to row 1
If ws.Cells(iRow, 3).Text = "#N/A" Or _
ws.Cells(iRow, 4).Text = "#N/A" Then
ws.Rows(iRow).Delete
End If
Next iRow
ws.Cells(iRow, 3).Activate
End Sub
您的代码缺少一个结束if
,您应该始终使用类似ws.Cells
或ws.Range
的工作表限定单元格或范围欢迎使用堆栈溢出。首先,这不是一个免费的代码编写服务,所以您需要显示(代码)您已经完成(阅读)的内容。其次,“将所有值分组,并在底部加上#N/A
”并不是一个真正明确的说法。您最终的意思是“将带有#N/A
的行移到底部”吗?如果单元格(rownum,3)为rownum=1到1000,则子组Rows()将rownum变暗。Value=“#N/A”然后是行(rownum)。删除下一个rownum单元格(rownum,3).Activate End Sub起初我想删除所有具有“#N/A”值的行,所以我使用了上面的代码,但它总是给我一个错误,所以我想先在底部对它们进行分组,然后录制一个宏来删除它们。我希望我说的是清楚的。请不要在注释中发布代码(因为它没有格式化,所以不可读)。而是你的问题添加它。然后描述你的代码实际做了什么(结果是什么)以及你期望它做什么(结果应该是什么)。如果有任何错误,请告诉我们错误是怎么说的,以及错误发生在代码的哪一行。如果删除行,则需要从rownum=1000的底部开始循环,直到第1步-1
,否则循环运行时行号会更改。欢迎使用堆栈溢出。首先,这不是一个免费的代码编写服务,所以您需要显示(代码)您已经完成(阅读)的内容。其次,“将所有值分组,并在底部加上#N/A
”并不是一个真正明确的说法。您最终的意思是“将带有#N/A
的行移到底部”吗?如果单元格(rownum,3)为rownum=1到1000,则子组Rows()将rownum变暗。Value=“#N/A”然后是行(rownum)。删除下一个rownum单元格(rownum,3).Activate End Sub起初我想删除所有具有“#N/A”值的行,所以我使用了上面的代码,但它总是给我一个错误,所以我想先在底部对它们进行分组,然后录制一个宏来删除它们。我希望我说的是清楚的。请不要在注释中发布代码(因为它没有格式化,所以不可读)。而是你的问题添加它。然后描述你的代码实际做了什么(结果是什么)以及你期望它做什么(结果应该是什么)。如果有任何错误,请告诉我们错误是怎么说的,以及错误发生在代码的哪一行。如果删除行,则需要从rownum=1000的底部开始循环,直到第1步-1
,否则循环运行时,行数会发生变化。