【问题标题】:Range Selection Using Excel Macro使用 Excel 宏进行范围选择
【发布时间】:2015-02-24 03:26:51
【问题描述】:
  A      B        C

123455  XXX     99999
123456  XX      100000
123457  XXX     100001
174564  XXXX    100002
184567          100003
194570          100004
204573          100005
214576          100006
224579          100007
                100008

我想编写一个宏来使用<ctrl> + <down arrow> 选择范围

流程应该是这样的

  1. 选择单元格 A1
  2. 使用<shift> + <ctrl> + <page down> 选择一个范围
  3. 在不取消范围选择的情况下选择单元格 A1(使用 <ctrl>
  4. ActiveCell.Offset(0, 2).Select
  5. 然后用<shift> + <ctrl> + <page down>然后<shift> + <up arrow>从C1到C9进行范围选择

按照我的示例数据中的这些步骤,在同一行选择了 224579 和 100007,未选择 100008。

我想选择 A1 到 A9 以及 C1 到 C9 之间的范围,但我希望宏在不定义 A1 和 A9 之类的范围的情况下执行此操作,因为该范围可能会发生变化,就像 A1 在经过一些更改后会变为 A5 一样.所以,我希望宏能够相应地调整和抓取数字。

【问题讨论】:

  • 供其他人参考这个问题,使用Office内置的Macro Recorder可以让你很容易找到这种解决方案。

标签: excel range selection vba


【解决方案1】:

如果 A1 是活动单元格,这应该可以工作。

Union(Range(ActiveCell, ActiveCell.End(xlDown)), Range(ActiveCell.Offset(0, 2), ActiveCell.End(xlDown).Offset(0, 2))).Select

【讨论】:

  • 我想选择 A1 到 A9 以及 C1 到 C9 之间的范围。但我希望宏在没有像 A1 和 A9 那样定义范围的情况下执行此操作,因为可能范围会像 A1 一样在经过一些更改后更改为 A5,所以我希望宏能够相应地适应并获取数字
  • @eggplant_parm 谢谢,但这将选择包括 B 列在内的整个范围。我不想选择该列。
  • @user768199 这只会选择列 A 和 C。
  • 哦,是的,eggplant_parm 你已经更改了代码 :) 例如,如果我想再次添加 E 列直到同一行怎么办? A C E 选择直到同一行?
  • @user768199 您可以在 union() 中添加另一个范围,并将偏移量设置为 4 而不是 2。
【解决方案2】:

不确定,但你想要这个吗?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Static self_protect As Boolean

  If self_protect Then Exit Sub

  self_protect = True
  Set Target = Target.Areas(1)
  Application.Union(Target, Target.Offset(0, 2)).Select
  self_protect = False
End Sub

将代码粘贴到工作表代码模块中,然后在工作表上选择一个范围。

【讨论】:

  • 我不明白?我将此代码复制并粘贴到宏模块,然后单击运行它打开经典的宏运行/创建/取消窗口,其中没有任何按钮处于活动状态(取消除外)
  • @user768199 复制到工作表代码模块(以您希望代码工作的工作表命名的代码模块),而不是宏模块。您不必显式运行它。只需在该工作表上选择一个范围即可。
  • 哇。我怎么能在宏中做到这一点?另外,如果我想在选择中添加更多列,例如第 4 列和第 6 列?
猜你喜欢
  • 2020-01-18
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多