Excel精英培训网

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

[已解决]请问怎么从一个单元格对象变量里去掉第一个单元格

[复制链接]
发表于 2016-4-1 14:22 | 显示全部楼层 |阅读模式
比如,我现在有个变量里面的单元格是 A4,A3933:A3934,我想去掉第一个单元格,只得到A3933:A3934,类似union的反向作用。
QQ图片20160401141031.png

我试过直接处理文字,通过address的取字符操作,一般情况下倒是可以得到正确结果,只是遇到A4:A18这种,我原来想要的是A5:A18,但是这么做的结果就只得到了A18。。。。。。。。
QQ图片20160401141039.png

我再能想到的方法是用for循环挨个弄了,不过想想就一点也不美
请问大大们有没有别的方法啊
最佳答案
2016-4-1 15:08
  1. Sub tt()
  2.     Dim Temp As Range, Temp1 As Range
  3.     Set Temp = Range("$A$1:$B$5,$C$3:$D$5,$F$1:$F$2")
  4. '    Set Temp = Range("$A$1,$C$3:$D$5,$F$1:$F$2")
  5. '    Set Temp = Range("$C$3:$D$5")
  6. '    Set Temp = Range("$C$3")
  7.     p = InStr(Temp.Address, ",")
  8.     If p = 0 Then fst = Temp.Address Else fst = Left(Temp.Address, p - 1)      '第一个字符
  9.     Set Temp1 = Range(fst): n = Temp1.Cells.Count
  10.     If n > 1 Then Set Temp1 = Range(Temp1.Cells(2), Temp1.Cells(n)) Else Set Temp1 = Nothing
  11.     If p = 0 Then
  12.         If Not Temp1 Is Nothing Then Set Temp = Temp1
  13.     Else
  14.         If Not Temp1 Is Nothing Then Set Temp = Union(Temp1, Range(Mid(Temp.Address, p + 1))) Else Set Temp = Range(Mid(Temp.Address, p + 1))
  15.     End If
  16.     Debug.Print Temp.Address
  17. End Sub
复制代码
发表于 2016-4-1 14:29 | 显示全部楼层
  1. Sub tt()
  2.     Dim Temp As Range
  3.     Set Temp = Range("$A$1,$C$3:$D$5,$F$1:$F$2")
  4.     p = InStr(Temp.Address, ",")
  5.     Set Temp = Range(Mid(Temp.Address, p + 1))
  6.     Debug.Print Temp.Address
  7. End Sub
复制代码
回复

使用道具 举报

发表于 2016-4-1 14:29 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-4-1 14:32 | 显示全部楼层
grf1973 发表于 2016-4-1 14:29

如果遇到我后来说的那种情况   比如A4:A18  你这个处理方式就无能为力了
回复

使用道具 举报

发表于 2016-4-1 15:08 | 显示全部楼层    本楼为最佳答案   
  1. Sub tt()
  2.     Dim Temp As Range, Temp1 As Range
  3.     Set Temp = Range("$A$1:$B$5,$C$3:$D$5,$F$1:$F$2")
  4. '    Set Temp = Range("$A$1,$C$3:$D$5,$F$1:$F$2")
  5. '    Set Temp = Range("$C$3:$D$5")
  6. '    Set Temp = Range("$C$3")
  7.     p = InStr(Temp.Address, ",")
  8.     If p = 0 Then fst = Temp.Address Else fst = Left(Temp.Address, p - 1)      '第一个字符
  9.     Set Temp1 = Range(fst): n = Temp1.Cells.Count
  10.     If n > 1 Then Set Temp1 = Range(Temp1.Cells(2), Temp1.Cells(n)) Else Set Temp1 = Nothing
  11.     If p = 0 Then
  12.         If Not Temp1 Is Nothing Then Set Temp = Temp1
  13.     Else
  14.         If Not Temp1 Is Nothing Then Set Temp = Union(Temp1, Range(Mid(Temp.Address, p + 1))) Else Set Temp = Range(Mid(Temp.Address, p + 1))
  15.     End If
  16.     Debug.Print Temp.Address
  17. End Sub
复制代码
回复

使用道具 举报

发表于 2016-4-1 15:08 | 显示全部楼层
拿各种情况测试过了,无误。
回复

使用道具 举报

 楼主| 发表于 2016-4-1 15:24 | 显示全部楼层
grf1973 发表于 2016-4-1 15:08
拿各种情况测试过了,无误。

非常非常感谢。。。。。试过了可以用。。。不过看起来好麻烦啊。。。。。。。。。。。我以为有什么比较特别的函数什么的可以解决呢



回复

使用道具 举报

 楼主| 发表于 2016-4-2 08:38 | 显示全部楼层
额,最佳答案选错楼层了

点评

已修改  发表于 2016-4-2 10:57
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:12 , Processed in 0.444168 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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