能不能提取某一列下的数据,而不要那么多空白行。

狼二羊 2017-08-07 02:30:06
这是大神当时给我的代码,但是后来我发现会有很多没有用的空白格,能不能只提取有用的数据而不要那么多空白格。
' MS Excel / VBA代码示例:

' 整列复制操作:
' 把 “b2”的 Sheet1的C列,复制到 “b1”的 Sheet1的D列
Workbooks("b2").Sheets("Sheet1").Range("C:C").EntireColumn.Copy _
Workbooks("b1").Sheets("Sheet1").Range("D1")
' 单元格区域复制操作:
' 把“b2”的 Sheet1的C1:C20这20个单元格,复制到 “b1”的 Sheet1的D7开始处
Workbooks("b2").Sheets("Sheet1").Range("C1:C20").Copy _
Workbooks("b1").Sheets("Sheet1").Range("D7")
...全文
316 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-08-08
  • 打赏
  • 举报
回复
可以啊,但并不会“省事”,其实需要多做一些事才行! 既然做到这一步了,倒不如“结合起来”: 先按上面说的,判断一下“源数据”(排除掉空行)多少行; 再检查“目标区域”有多少空间(“空行”);    当然在这一步不用“无限”的检查,比如“源数据”有25个,检查“目标区域”25行了仍然是空行,    也就没必要再“继续查”了,因为说明“目标区域”空间足够,不会被覆盖数据。 如果目标区域的空行数不够,计算一下“差多少行”(源数据有多少行、目标区有多少空间,在上面有数据了), 在“目标区”的首行后面插入多少行就行了。
狼二羊 2017-08-08
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
[quote=引用 5 楼 qq_30519247 的回复:]
. . . . . . . .

我的天,原来下面都是空格!恍然大悟....

那有没有办法就是让那些空格自动清除啊....

你不是从“模板”中复制数据的吗?
你把你的“模板”做好,把那个“空格”单元格删除就行了。

如果是因为那个“外部程序”造成,那没法了。另一个“笨办法”就是:
  从你要复制数据的单元格开始,用循环检查“单元格”的文本值,
  用Trim$( )处理一下,一个个挨着判断,如果Trim$()之后为空串就表示数据结束了,同时记下这个行号。
这样就知道应该复制从哪到哪的区域了。
反正检查几百上千的单元格,也是瞬间完成的事。
如果你对“速度”要求不是很苛刻的话,这样也是可以的。
只是多写了几行代码而已…… 
[/quote]

那能不能让被覆盖的值的那一列自动往下移,就按您的图来说,E那一列,如果数据很多,多到超过Bbdkek,那当E列多的覆盖掉Bbdkek的时候,能否让Bbdkek这一行往整体往下移(是整个一行,包括AAAA、123456,当然如果这一行下面还有一行的数据就接着往下移,‘类似于图2’),这样的话就不用覆盖了也能显示完整,多余的空格我也可以等生成出来的表格给全部删掉。
舉杯邀明月 2017-08-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_30519247 的回复:
. . . . . . . . 我的天,原来下面都是空格!恍然大悟.... 那有没有办法就是让那些空格自动清除啊....
你不是从“模板”中复制数据的吗? 你把你的“模板”做好,把那个“空格”单元格删除就行了。 如果是因为那个“外部程序”造成,那没法了。另一个“笨办法”就是:   从你要复制数据的单元格开始,用循环检查“单元格”的文本值,   用Trim$( )处理一下,一个个挨着判断,如果Trim$()之后为空串就表示数据结束了,同时记下这个行号。 这样就知道应该复制从哪到哪的区域了。 反正检查几百上千的单元格,也是瞬间完成的事。 如果你对“速度”要求不是很苛刻的话,这样也是可以的。 只是多写了几行代码而已…… 
狼二羊 2017-08-07
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
自己看看,我这儿的执行结果,完全正常! 你确定你说的“C2”开始,只有5个数据?C6之下,是“空白”而不是“空格”??? 你可以在上面2楼代码“第6行”那儿设置断点, 看看你的运行结果,那个返回值 w 等于多少啊!!! 你确定是6,而不是一个“比较大的值”???
我的天,原来下面都是空格!恍然大悟.... 那有没有办法就是让那些空格自动清除啊....
舉杯邀明月 2017-08-07
  • 打赏
  • 举报
回复
自己看看,我这儿的执行结果,完全正常!


你确定你说的“C2”开始,只有5个数据?C6之下,是“空白”而不是“空格”???

你可以在上面2楼代码“第6行”那儿设置断点,
看看你的运行结果,那个返回值 w 等于多少啊!!!
你确定是6,而不是一个“比较大的值”???
狼二羊 2017-08-07
  • 打赏
  • 举报
回复
引用 2 楼 Chen8013 的回复:
不明白你说的这个“空白行”指的是什么!
如果“原始数据”就是有那么多的空白在里面,那“复制过去”的结果自然也是很多空白啊!
另外一个问题,就是要保证你“复制区域”的单元格中,是输入的“初始数据”而不是公式。
  否则把“公式”复制到另一个“目标”的地方去,未必能正常显示出“数据”。

在“被复制区域”是输入的“初始数据”的情况下,用“整列复制操作”应该不会有问题吧?

万一真的“效果不理想”,也可以用“只复制一片有效数据区”的方式。
参考这段代码:
' MS Excel / VBA代码示例:

' 单元格“有效数据区域”复制操作:
' 把“b2”的 Sheet1中从C2起“连续的、有数据的单元格”,复制到 “b1”的 Sheet1的E5开始处
Dim strRange As String, w As Long
w = Workbooks("b2").Sheets("Sheet1").Range("C2").Rows.End(xlDown).Row
strRange = "C2:C" & w ' 组合出“有效数据区”的区域表示
Workbooks("b2").Sheets("Sheet1").Range(strRange).Copy _
Workbooks("b1").Sheets("Sheet1").Range("E5")

还差一点点,您说的把有效数据复制到E5开始处。
比如b2的c2列往下就有5个数据吧,也就是说,c2、c3、c4、c5、c6,下面的都是没有数据的,都是空白的毫无数据,那我只需要提取这五个复制到b1的E5开始处,但是我现在在E18写了几个数,当把b2的数据复制过来的时候,E18的数据就没了~您看看是怎么个回事

舉杯邀明月 2017-08-07
  • 打赏
  • 举报
回复
不明白你说的这个“空白行”指的是什么! 如果“原始数据”就是有那么多的空白在里面,那“复制过去”的结果自然也是很多空白啊! 另外一个问题,就是要保证你“复制区域”的单元格中,是输入的“初始数据”而不是公式。   否则把“公式”复制到另一个“目标”的地方去,未必能正常显示出“数据”。 在“被复制区域”是输入的“初始数据”的情况下,用“整列复制操作”应该不会有问题吧? 万一真的“效果不理想”,也可以用“只复制一片有效数据区”的方式。 参考这段代码:
' MS Excel / VBA代码示例:
  
' 单元格“有效数据区域”复制操作:
'     把“b2”的 Sheet1中从C2起“连续的、有数据的单元格”,复制到 “b1”的 Sheet1的E5开始处
Dim strRange As String, w As Long
w = Workbooks("b2").Sheets("Sheet1").Range("C2").Rows.End(xlDown).Row
strRange = "C2:C" & w         ' 组合出“有效数据区”的区域表示
Workbooks("b2").Sheets("Sheet1").Range(strRange).Copy _
            Workbooks("b1").Sheets("Sheet1").Range("E5")
赵4老师 2017-08-07
  • 打赏
  • 举报
回复
全部显示

Delete 方法
请参阅 应用于 示例 特性 
应用于 Range 对象的 Delete 方法。

删除对象。

expression.Delete(Shift)

expression   必需。该表达式返回上面的对象之一。

Shift   Variant 类型,可选。仅用于 Range 对象。指定删除单元格时替补单元格的移位方式。可为以下 XlDeleteShiftDirection 常量之一:xlShiftToLeft 或 xlShiftUp。如果省略该参数,则 Microsoft Excel 将根据区域的图形决定移位方式。

应用于 ShapeNodes 对象的 Delete 方法。

删除对象。

expression.Delete(Index)

expression   必需。该表达式返回上面的对象之一。

Index   Integer 类型,必需。

应用于“应用于”列表中的其他所有对象的 Delete 方法。

删除对象。

expression.Delete

expression   必需。该表达式返回上面的对象之一。

说明
删除 Point 对象或 LegendKey 对象将删除整个数据系列。

可删除自定义文档属性,但是无法删除内置文档属性。

示例
本示例删除 Sheet1 的 A1:D10 单元格区域,并将其右侧单元格向左移位。

Worksheets("Sheet1").Range("A1:D10").Delete Shift:=xlShiftToLeft
本示例删除活动工作簿的 Sheet3 工作表,并且不显示确认对话框。

Application.DisplayAlerts = False
Worksheets("Sheet3").Delete
Application.DisplayAlerts = True
本示例对 Sheet1 第一列的数据进行排序,然后删除包含重复数据的行。

Worksheets("Sheet1").Range("A1").Sort _
        key1:=Worksheets("Sheet1").Range("A1")
Set currentCell = Worksheets("Sheet1").Range("A1")
Do While Not IsEmpty(currentCell)
    Set nextCell = currentCell.Offset(1, 0)
    If nextCell.Value = currentCell.Value Then
        currentCell.EntireRow.Delete
    End If
    Set currentCell = nextCell
Loop

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧