Excel精英培训网

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

[已解决]求一个自动填充的宏

[复制链接]
发表于 2015-10-30 15:36 | 显示全部楼层 |阅读模式
求一个自动填充的宏

需求:
1.从鼠标选择的单元格开始自动向下填充,所有的内容都一样就可以,比如都填入一个“A”。
2.如果遇到非空的单元格,不填入
3.如果遇到“↑”这个符号,填充结束。

以上,求大神指教

最佳答案
2015-10-30 16:39
供参考
  1. Sub a()
  2. Dim i&, rng
  3. rng = ActiveCell.Value
  4. i = ActiveCell.Row
  5. Do Until Cells(i, 6) = "↑"
  6.    If Cells(i, 6) = "" Then
  7.       Cells(i, 6) = rng
  8.     End If
  9.       i = i + 1
  10. Loop
  11. End Sub
复制代码
发表于 2015-10-30 15:45 | 显示全部楼层
如果遇不到“↑”这个符号呢?

填充区域会不会有其他情况?比如,合并单元格。

回复

使用道具 举报

 楼主| 发表于 2015-10-30 15:54 | 显示全部楼层
不会有合并单元格的情况,
“↑”这个符号也就是让宏停止用的,因为要填充的行数是不固定的,当然有其他好方法也好的。
回复

使用道具 举报

发表于 2015-10-30 16:27 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim k&, rg As Range, m&

  3.     If Target.Cells(1, 1).Value = "" Then Exit Sub
  4.     If Target.End(xlDown).Row = Cells.Rows.Count Then Exit Sub
  5.     Application.EnableEvents = False    '表示禁用事件
  6.     Set rg = Target.Cells(1, 1)
  7.     m = Cells(Cells.Rows.Count, rg.Column).End(xlUp).Row
  8.     k = rg.Row
  9.     Do
  10.         k = k + 1
  11.         If rg.Offset(k, 0) = "↑" Then Exit Do
  12.         If rg.Offset(k, 0) = "" Then
  13.             rg.Offset(k, 0) = rg.Value
  14.         End If
  15.     Loop While k <= m
  16.     Application.EnableEvents = True    '表示不禁用事件
  17. End Sub
复制代码
回复

使用道具 举报

发表于 2015-10-30 16:28 | 显示全部楼层
最简单的做法:循环判断要填充区域,只要是空白单元格,就填上"A"

但你还是没明确填充到哪儿结束,遇不到这符号怎么办,所以无法在没确定需求的情况下写代码。

建议上传附件,好明白需求。
回复

使用道具 举报

发表于 2015-10-30 16:39 | 显示全部楼层    本楼为最佳答案   
供参考
  1. Sub a()
  2. Dim i&, rng
  3. rng = ActiveCell.Value
  4. i = ActiveCell.Row
  5. Do Until Cells(i, 6) = "↑"
  6.    If Cells(i, 6) = "" Then
  7.       Cells(i, 6) = rng
  8.     End If
  9.       i = i + 1
  10. Loop
  11. End Sub
复制代码
回复

使用道具 举报

发表于 2015-10-30 16:39 | 显示全部楼层
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Application.EnableEvents = False
  3.     Dim x%, y%
  4.     x = Target.Row: y = Target.Column
  5.     Do While Cells(x, y) <> "↑"
  6.         If Cells(x, y) = "" Then Cells(x, y) = "A"
  7.         x = x + 1: If x > 65535 Then Exit Do
  8.     Loop
  9.     Application.EnableEvents = True
  10. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-10-30 17:11 | 显示全部楼层
@wp8680:
谢谢^_^,不过为什么运行的时候会报错呀?

@爱疯:
>最简单的做法:循环判断要填充区域,只要是空白单元格,就填上"A"
>但你还是没明确填充到哪儿结束,遇不到这符号怎么办,所以无法在没确定需求的情况下写代码。
>建议上传附件,好明白需求。
&#8658;想在Excel加一个小工具,因为要用的Excel还没做出来,所以没有具体例子。
如果遇不到这符号可能会死循环吧,本来想靠认为控制的,确保符号一定出现,
不过也可以做成循环2千次后自动停止什么的,因为要自动填充的一定有几千个。
以上,谢谢。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 00:06 , Processed in 0.296137 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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