Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3051|回复: 9

[已解决]如何删除只有第一列有数据,其他列没数据的行?

[复制链接]
发表于 2017-6-11 23:35 | 显示全部楼层 |阅读模式
本帖最后由 1737947665 于 2017-6-11 23:37 编辑

如图,最左边是人名,只要产量这些项目,随便一个有数据,就不能删除,除人名外,产量项都为空白的,就整行删除,
当然也把下一行往上移动,最后结果是图二的效果,请问如何编写代码呢?

Sub 删空行()
Dim x
Dim y
Dim i
Dim j

x = Cells(Rows.Count, 1).End(xlUp).Row   '第一列,由A1到最后一个非空单元格的行号,其实也就是行数
y = Range("iv1").End(xlToLeft).Column   '总列数

For i = 2 To x
For j = 2 To y

If Cells(i, j) = "" And Cells(i, 1) <> "" Then
Rows(i).EntireRow.Delete
End If

Next
Next

End Sub

最佳答案
2017-6-12 07:17
本帖最后由 327718098 于 2017-6-14 09:27 编辑

sub text()
for h = 2 to Cells(Rows.Count, 1).End(xlUp).Row
if application.counta(range(cells(h,2),cells(h,6))) = 0 then
cells(m,1).EntireRow.delete
end if
next
end sub
手机写的,试试对不
QQ截图20170611232602.png
QQ截图20170611232948.png
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-6-12 07:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 327718098 于 2017-6-14 09:27 编辑

sub text()
for h = 2 to Cells(Rows.Count, 1).End(xlUp).Row
if application.counta(range(cells(h,2),cells(h,6))) = 0 then
cells(m,1).EntireRow.delete
end if
next
end sub
手机写的,试试对不
回复

使用道具 举报

发表于 2017-6-12 09:01 | 显示全部楼层
G2单元格输入=if(count(b2:f2)>=1,"",1),确定。然后点编辑,定位,公式,数字,删除整行即可。
回复

使用道具 举报

 楼主| 发表于 2017-6-12 10:12 | 显示全部楼层
谢谢两位,晚点试试再回复
回复

使用道具 举报

发表于 2017-6-12 10:17 | 显示全部楼层
  1. Sub ek_sky()
  2. Dim i As Integer, j As Integer
  3.   i = Cells(Rows.Count, 1).End(xlUp).Row
  4.      If i < 2 Then Exit Sub
  5.      Application.ScreenUpdating = False
  6.         For j = i To 2 Step -1
  7.            If Cells(j, 2) = "" Then
  8.            Rows(j).EntireRow.Delete
  9.            End If
  10.         Next j
  11.     Application.ScreenUpdating = True
  12. End Sub
复制代码
回复

使用道具 举报

发表于 2017-6-12 11:12 | 显示全部楼层
本帖最后由 idnoidno 于 2017-6-12 17:08 编辑
  1. Option Explicit
  2. Sub ty()
  3. Dim i As Integer, j As Integer, k As Integer, n As Integer
  4. Dim arr

  5. arr = Range("a1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
  6. k = 0
  7. For i = 2 To UBound(arr)
  8.   For j = 2 To UBound(arr, 2) - 1
  9.   If arr(i, j) <> "" Then
  10.   k = k + 1
  11.   Range(Cells(i, 1), Cells(i, UBound(arr, 2))).Copy Worksheets("工作表2").Range("a" & k)
  12.   Exit For
  13.   End If
  14.   Next j
  15. Next i

  16. End Sub
复制代码

回复

使用道具 举报

发表于 2017-6-12 18:35 | 显示全部楼层
把第一列,第二列都有内容的留下就行
回复

使用道具 举报

 楼主| 发表于 2017-6-13 23:22 | 显示全部楼层
327718098 发表于 2017-6-12 07:17
sub text()
for h = 2 to Cells(Rows.Count, 1).End(xlUp).Row
if application.counta(range(cells(h,2 ...

亲,谢谢你!试过你的代码,除了调整一下循环由最大行数到2:
For h = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
这里调整一下就,其他就OK了,非常感谢!
回复

使用道具 举报

 楼主| 发表于 2017-6-13 23:29 | 显示全部楼层

亲,谢谢你的帮忙,不过可能有点误解我,我是要:只要该行的第一格还有内容,其他都没数字就删掉(因为第一列是人名,判断到这个人没产量,就删除该记录的意思),只要该行第一格有内容和其他任何一格有内容,该行都不删掉的。
不是整行空白才删掉的。

回复

使用道具 举报

 楼主| 发表于 2017-6-13 23:30 | 显示全部楼层

谢谢亲的回复,因为我是菜鸟,对于引用到其他表格,有点搞不懂,这次暂时不采纳了,谢谢啦~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 14:12 , Processed in 0.571546 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表