Excel精英培训网

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

arr = Range("a2:a" & m) 改自定义变量问题,求老师帮忙看看

[复制链接]
发表于 2020-7-10 14:13 | 显示全部楼层 |阅读模式
本帖最后由 976190982 于 2020-7-10 14:24 编辑
  1. Sub t数据()
  2.     Dim m%, d As Object, d1 As Object, arr, n As Byte, c As Byte, i%
  3.     Application.ScreenUpdating = False
  4.     Set t = Application.InputBox("请选择需要填充颜色的列", "求和条件列设置", Type:=8)
  5.     Range("a2:a").Interior.ColorIndex = xlNone
  6.     m = Range("A" & Rows.Count).End(xlUp).Row
  7.     Set d = CreateObject("Scripting.Dictionary")
  8.     Set d1 = CreateObject("Scripting.Dictionary")
  9.     arr = Range("a2:a" & m)
  10.     For i = 1 To UBound(arr)
  11.         d(arr(i, 1)) = ""
  12.     Next
  13.     c = 1
  14.     For i = 0 To d.Count - 1
  15.         d1(d.keys()(i)) = c
  16.         c = c + 1
  17.         If c = 25 Then c = 1
  18.     Next
  19.     For i = 1 To UBound(arr)
  20.         If d1.exists(arr(i, 1)) Then
  21.            n = d1((arr(i, 1))) + 1
  22.            Cells(i + 1, 1).Interior.Color = Range("e" & n).Interior.Color
  23.         End If
  24.     Next
  25.     Application.ScreenUpdating = True
  26. End Sub
复制代码
Range("a2:a").Interior.ColorIndex = xlNone            选择框t的数据带入进去  带入 "a2:a"
m = Range("A" & Rows.Count).End(xlUp).Row       选择框t的数据带入进去  带入 "A"
arr = Range("a2:a" & m)                             选择t的数据带入进去  带入 "a2:a"





这个是论坛老师帮我写的代码   想改成没有限定区域,使用频率太高   ,老是要搞到模块去   要改,


求老师们帮助我


这个输入框代码都是网上看的资料   实在是不明就里

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2020-7-10 16:18 | 显示全部楼层
本帖最后由 hfwufanhf2006 于 2020-7-10 16:20 编辑

1、这涉及到你参数的设定,你需要自己来规划。参数的录入有多种形式,我就从来不用inputbox来输入参数,没办法表达复杂的形态。就区域来说,起码要有4个坐标,会好几种表达形态,下面三种都可以:
第一种:
输入数据区域:        A5:E10                        

第二种:                                
                           左上角        右下角        
                          行        列        行        列
输入区域坐标:        10        1        20        6
               
第三种:               
输入数据区域:  从单元格        d5               
                        到单元格        h20

2、我认为参数用单元格来输入比inputbox要好些,因为很多参数都是很少变化的,可能只是偶尔变动下,用单元格可以避免重复输入,但inputbox就需要每次反复输入,也容易出错;               

3、关于单元格坐标与代码区域的转换:
    excel支持两种格式 range 和 cells,如果是第一种,就写入range:
      s = Range("b1")   '读出参数 A5:E10
      Range(s).Interior.ColorIndex = xlNone   '对变量 s 的区域操作
    如果是第二种,就用 range 结合 cells
      Range(Cells(Cells(5, 2), Cells(5, 3)), Cells(Cells(5, 4), Cells(5, 5))).ClearContents
      其中:Cells(5, 2)表示单元格 b5的值,Cells(5, 3)是单元格 c5 的值,注意是值,他们组合成:
               Cells(Cells(5, 2), Cells(5, 3))就表示 第10行第1列,就是 a10,这是左上角单元格
               后面Cells(Cells(5, 4), Cells(5, 5))是右下角单元格坐标,这两个就构成了区域;
    如果是第三种,就用&拼接:
      range(cells(5,3) & ":" & cells(6,3)).Interior.ColorIndex = xlNone
         cells(5,3)的值是 d5,cells(6,3)的值是 h20,他们也构成一个区域
回复

使用道具 举报

 楼主| 发表于 2020-7-10 16:19 | 显示全部楼层
hfwufanhf2006 发表于 2020-7-10 16:18
1、这涉及到你参数的设定,你需要自己来规划。参数的录入有多种形式,我就从来不用inputbox来输入参数,没 ...

谢谢老师的解答
回复

使用道具 举报

发表于 2020-7-28 12:27 | 显示全部楼层
本帖最后由 金樽空对月 于 2020-7-28 12:28 编辑

Range("a2:a").Interior.ColorIndex = xlNone            选择框t的数据带入进去  带入 "a2:a"

改为range("a2:a"& val(t)).Interior.ColorIndex = xlNone


m = Range("A" & Rows.Count).End(xlUp).Row       选择框t的数据带入进去  带入 "A"
如果你要用对话框内的数据,此句可以不要


arr = Range("a2:a" & m)                             选择t的数据带入进去  带入 "a2:a"
此句改为arr=range("a2:a"& val(t))



评分

参与人数 1学分 +3 收起 理由
lsyylw + 3 太强大了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-8-26 15:25 | 显示全部楼层
金樽空对月 发表于 2020-7-28 12:27
Range("a2:a").Interior.ColorIndex = xlNone            选择框t的数据带入进去  带入 "a2:a" ...

谢谢老师的帮助
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:59 , Processed in 0.365361 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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