Excel精英培训网

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

[已解决]请问如何删除指定单元格附近的行和列

[复制链接]
发表于 2013-11-4 14:23 | 显示全部楼层 |阅读模式
本帖最后由 cionysus 于 2013-11-5 08:49 编辑

一个文件夹内有多个excel文件,每个excel文件含多个worksheet,每个worksheet内都有唯一一个单元格内的内容为“单位存款”。在每个含“单位存款”的worksheet中,现在想把“单位存款”所在单元格左边所有的列和“单位存款”所在单元格上方四行之上的所有的行的内容都删掉。假设“单元存款”原所在的单元格为XN,就是删除1到X-1列,删除1到n-4行,删除操作完成后“单位存款”所在的单元格应是在A4。

注意:所保留下来的单元格中有数据是从被删除的数据中计算得到的。如附件A.xls里面sheet1中的C7就是由C2、C3相加得到。

删除区域.rar (8 KB, 下载次数: 5)
发表于 2013-11-4 14:51 | 显示全部楼层
既然上方要留4行,“单位存款”所在的单元格怎么可能在A1 ??
回复

使用道具 举报

发表于 2013-11-4 15:11 | 显示全部楼层
  1. Sub CheryBTL()
  2.     Dim str As String, rng As Range
  3.     Dim i As Integer, Rrow As Integer, Cclm As Integer
  4.     Stemp = "单位存款"
  5.     str = Dir(ThisWorkbook.Path & "\*xls", vbNormal)
  6.     Do While str <> ""
  7.         If str <> "代码.xls" Then
  8.             Workbooks.Open ThisWorkbook.Path & "" & str
  9.             With Workbooks(2)
  10.                 For i = 1 To .Sheets.Count
  11.                     For Each rng In .Sheets(i).UsedRange
  12.                         If rng.Value = "单位存款" Then
  13.                             Rrow = rng.Row - 1
  14.                             Cclm = rng.Column - 1
  15.                             If Rrow > 0 Then
  16.                                 .Sheets(i).Range(.Sheets(i).Cells(1, 1), .Sheets(i).Cells(Rrow, 1)).Select
  17.                                 Selection.EntireRow.Delete Shift:=xlUp
  18.                             End If
  19.                             If Cclm > 0 Then
  20.                                 .Sheets(i).Range(.Sheets(i).Cells(1, 1), .Sheets(i).Cells(1, Cclm)).Select
  21.                                 Selection.EntireColumn.Delete Shift:=xlToLeft
  22.                             End If
  23.                             Exit For
  24.                         End If
  25.                     Next
  26.                 Next i
  27.                 .Close Savechanges:=True
  28.             End With
  29.         End If
  30.         str = Dir
  31.     Loop
  32. End Sub
复制代码
将此代码工作薄放在同一文件夹中,点击执行按钮即可。
代码.rar (8.89 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2013-11-5 08:10 | 显示全部楼层
zjdh 发表于 2013-11-4 14:51
既然上方要留4行,“单位存款”所在的单元格怎么可能在A1 ??

抱歉,说错了,应该是在A4.
回复

使用道具 举报

 楼主| 发表于 2013-11-5 08:46 | 显示全部楼层
CheryBTL 发表于 2013-11-4 15:11
将此代码工作薄放在同一文件夹中,点击执行按钮即可。

抱歉,我运行时出现以下错误,麻烦您帮我看下。

运行时错误‘1004’:
类Range的Select方法无效

点调试进去,黄色区域显示的是这一行代码:
.Sheets(i).Range(.Sheets(i).Cells(1, 1), .Sheets(i).Cells(Rrow, 1)).Select

另外我之前的问题描述有误,“单位存款”所在单元格最后应该在A4而不是A1。
回复

使用道具 举报

发表于 2013-11-5 08:55 | 显示全部楼层
cionysus 发表于 2013-11-5 08:46
抱歉,我运行时出现以下错误,麻烦您帮我看下。

运行时错误‘1004’:

已调整,
注意,请将将文件放致待处理的文件夹内,并将所有其它工作薄关闭后再当运行。
代码.rar (8.88 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2013-11-5 12:41 | 显示全部楼层
本帖最后由 zjdh 于 2013-11-5 12:45 编辑

看了一下你似乎没对公式做处理。
简单一点吧:
Sub test()
    Dim Fso, Fld, Fl
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set Fld = Fso.getfolder(ThisWorkbook.Path & "\")
    For Each Fl In Fld.Files
        If Fl.Name <> ThisWorkbook.Name Then
            Set MYWB = GetObject(Fl)
            For Each SH In MYWB.Sheets
                SH.UsedRange = SH.UsedRange.Value
                Set RN = SH.UsedRange.Find("单位存款")
                If Not RN Is Nothing Then
                    If RN.Column - 1 > 0 Then SH.Range(SH.Cells(1, 1), RN.Offset(0, -1)).EntireColumn.Delete
                    If RN.Row - 4 > 0 Then SH.Rows("1:" & RN.Row - 4).Delete
                End If
            Next
            Windows(Fl.Name).Visible = True
            MYWB.Close True
        End If
    Next
End Sub
Book1.rar (8.82 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2013-11-5 17:10 | 显示全部楼层
本帖最后由 cionysus 于 2013-11-5 17:12 编辑
CheryBTL 发表于 2013-11-5 08:55
已调整,
注意,请将将文件放致待处理的文件夹内,并将所有其它工作薄关闭后再当运行。

用新代码试过来,还是以下问题,麻烦您再看下

运行时错误‘1004’:
类Range的Select方法无效

点调试进去,黄色区域显示的是这一行代码:
.Sheets(i).Range(.Sheets(i).Cells(1, 1), .Sheets(i).Cells(Rrow, 1)).Select

回复

使用道具 举报

 楼主| 发表于 2013-11-5 17:12 | 显示全部楼层
本帖最后由 cionysus 于 2013-11-5 17:19 编辑
zjdh 发表于 2013-11-5 12:41
看了一下你似乎没对公式做处理。
简单一点吧:
Sub test()

感谢回复!试过了,可以取得最后的处理结果,但是处理完毕后会报错:

运行时错误‘432’:
自动化(Automation)操作时文件名或类名未找到。

点调试进去,黄色区域显示的是这一行代码:
Set MYWB = GetObject(Fl)

不知道是怎么回事?
回复

使用道具 举报

发表于 2013-11-5 17:37 | 显示全部楼层
cionysus 发表于 2013-11-5 17:12
感谢回复!试过了,可以取得最后的处理结果,但是处理完毕后会报错:

运行时错误‘432’:


需要引用控件
Microsoft Scripting Runtime
可能你的系统中 scrrun.dll 位置不同
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:37 , Processed in 1.724287 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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