ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aman1516

[求助] 查找连续的数字(继续寻找方法)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-3-2 13:32 来自手机 | 显示全部楼层
手机回复:
s=“若干单元格地址不超255字符长度”
msgbox union(range(s),range(s)).address(0,0)

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-2 13:45 | 显示全部楼层
ggmmlol 发表于 2021-3-2 13:05
既然T字符串是由公式得来的,又要用VBA处理,还不如全程都用VBA处理。

T 不是公式得来的,单元格不是固定而是动态变化的,是代码根据更每次新后的数据及不同条件判断得来,
表格数据全部可用代码一次生成,但由于要方便表格的后继操作及维护需求,才将不同公式写入到特定单元格内,
故需对 T 进行处理,以便能套用公式。此处的字符串仅为示例。

TA的精华主题

TA的得分主题

发表于 2021-3-2 14:30 | 显示全部楼层
本帖最后由 lss001 于 2021-3-2 19:30 编辑
aman1516 发表于 2021-3-2 13:45
T 不是公式得来的,单元格不是固定而是动态变化的,是代码根据更每次新后的数据及不同条件判断得来,
表 ...
Sub no1()
    Dim r As Range, s, t, d, h, i, j, k, m
    t = "D18,D15,D1:D3,D22,D23,D24,D25,D12,D11,D10,D7,D4,D27:D32"
    s = Split(t, ",") '处理字符/字符数>255
    For i = 1 To UBound(s) \ 12 + 1
        k = ""
        For j = 1 To 12
            k = k & s(n) & ",": n = n + 1
            If n > UBound(s) Then Exit For
        Next
        k = Left(k, Len(k) - 1) '合并区域
        If i = 1 Then Set t = Range(k) Else Set t = Union(t, Range(k))
    Next
    Set d = CreateObject("scripting.dictionary")
    For Each h In t.Areas '建立字典/利用Areas属性
        m = m + 1: d.Add h.Row, CStr(m)
    Next
    For i = 1 To t.Areas.Count '查找字典/利用Areas属性
        j = Application.Small(d.keys, i) '
        If r Is Nothing Then '排序区域
            Set r = Range(t.Areas.Item(d.Item(j)).Address)
        Else
            Set r = Union(r, Range(t.Areas.Item(d.Item(j)).Address))
        End If
    Next
    MsgBox r.Address(0, 0)
End Sub

TA的精华主题

TA的得分主题

发表于 2021-3-2 15:30 | 显示全部楼层
本帖最后由 ggmmlol 于 2021-3-2 16:34 编辑

以下代码不限T的长度。仅限D列。

  1. Sub Test()
  2.     Const T = "D23,D22,D35,D12,D72,D20,D39,D5,D75,D3,D69,D45,D2,D46,D51,D1,D21,D78,D7,D13,D31,D97,D52,D17,D65,D82,D71,D56,D58,D33,D60,D6,D43,D95,D40,D53,D87,D63,D4,D92,D76,D8,D81,D70,D99,D74,D24,D38,D55,D27,D96,D79,D89,D77,D36,D11,D37,D59,D42,D73,D18,D93,D62,D44,D68,D50,D57,D9,D90,D94,D85,D30,D34,D15,D54,D98,D67,D29,D66,D49,D80,D41,D88,D10,D28,D64,D84,D83,D16,D86,D47,D91,D25,D32,D26,D14,D48,D61,D19"
  3.     MsgBox MergeAdr(T)
  4. End Sub
  5. Function MergeAdr$(ByVal adr$)
  6.     Const rmax = 1048576
  7.     Ts = Split(Replace(adr, "D", ""), ",")
  8.     r = UBound(Ts)
  9.     Dim rs(0 To rmax) As Boolean
  10.     For i = 0 To r
  11.         p = Val(Ts(i))
  12.         rs(p) = True
  13.     Next
  14.     For i = 1 To rmax
  15.         If rs(i - 1) Then
  16.             If rs(i) Then
  17.                 If i = rmax Then ss = ss & ":D" & i : Exit For
  18.                 n = n + 1
  19.             Else
  20.                 If i - 1 > st Then ss = ss & ":D" & i - 1
  21.             End If
  22.         Else
  23.             If rs(i) Then
  24.                 st = i
  25.                 ss = ss & ",D" & st
  26.                 n = n + 1
  27.             End If
  28.         End If
  29.         If n = r + 1 Then
  30.             If i > st Then ss = ss & ":D" & i
  31.             Exit For
  32.         End If
  33.     Next
  34.     MergeAdr = Mid(ss, 2)
  35. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2021-3-2 15:55 | 显示全部楼层
本帖最后由 准提部林 于 2021-3-2 15:58 编辑

以圖片例子, 位址如何編排???
使用定位法, 會因選取方式而產生歧異, 也不可能達到目的!!!

                  (1)                                           (2)                        
A001.gif     A002.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-2 16:28 | 显示全部楼层
准提部林 发表于 2021-3-2 15:55
以圖片例子, 位址如何編排???
使用定位法, 會因選取方式而產生歧異, 也不可能達到目的!!!

只有两个规则,不然就没法整了:
小于6行以下的,以行为连续,
大于等于6 行以上的,以列为连续,但6 行以上当跨列为整齐的方形时(4 个及以上单元格区域的,不论横竖),作为一个连片区域
即相当于第(2)种方案

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-2 16:50 | 显示全部楼层
本帖最后由 aman1516 于 2021-3-2 20:53 编辑


测试了一下,似乎 Union 以“最大面积”优先方式合并地址:
  1. Sub t99()
  2. Dim T As String, Rng As Range, ran As Range
  3. T = "D18,E18,D19,E19,C15:D17,B1:E1,B2,B3,B4,C4,D26,D27,D24,D25,D12,D11,D10,D7,C10:C12,D4,A28:D32,B10,B11,B12,A2,A3,A4,A5"
  4. sr = Split(T, ",")
  5. For i = 0 To UBound(sr)
  6.     If Rng Is Nothing Then Set Rng = Range(sr(i)) Else Set Rng = Union(Rng, Range(sr(i)))
  7. Next
  8. Cells(1, 1) = T
  9. Cells(2, 1) = Rng.Address(0, 0)
  10. Rng.Select
  11. Cells(3, 1) = Selection.Address(0, 0)
  12. End Sub
复制代码

而  NoteText 的方法结果是不一样的:
  1. Sub t77()
  2. Dim T$, Rng As Range, A As Range
  3.   T = "D18,E18,D19,E19,C15:D17,B1:E1,B2,B3,B4,C4,D26,D27,D24,D25,D12,D11,D10,D7,C10:C12,D4,A28:D32,B10,B11,B12,A2,A3,A4,A5"
  4. Set Rng = Range(T)
  5. For Each A In Rng
  6.      A.NoteText "test"
  7. Next
  8. With Rng.EntireColumn
  9.       T = .SpecialCells(xlCellTypeComments).Address(0, 0)
  10.       .ClearComments
  11. End With
  12. Cells(4, 1) = T
  13. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2021-3-2 17:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
aman1516 发表于 2021-3-2 16:50
只有两个规则,不然没法整了:
当小于6 行的,以行为准
大于等于6 行以上的,以列为准,但大于6 行且跨 ...

加這兩規則, 反而更難了~~
應該是先清楚哪些單元格需要用哪個公式,
事先分類分組, 取出不同組合~放各自的公式才對


TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-2 19:50 | 显示全部楼层
准提部林 发表于 2021-3-2 17:40
加這兩規則, 反而更難了~~
應該是先清楚哪些單元格需要用哪個公式,
事先分類分組, 取出不同組合~放各自 ...

是的,那就退而求之,不管横竖,只判断里面哪些单元格是方形的连片区域,其他都不管,这样也能暂时分开处理应用。
一点头绪都没有,挀脑壳......也没啥的借鉴




TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-2 21:22 | 显示全部楼层
与 Rng.EntireColumn 和 Rng.EntireRow  相关:
  1. Sub t66()
  2. Dim T$, Rng As Range, A As Range
  3. T = "D18,E18,D19,E19,C15:D17,B1:E1,B2,B3,B4,C4,D26,D27,D24,D25,D12,D11,D10,D7,C10:C12,D4,A28:D32,B10,B11,B12,A2,A3,A4,A5"
  4. Set Rng = Range(T)
  5. For Each A In Rng
  6.      A.NoteText "test"
  7. Next
  8. With Rng.EntireRow
  9.       T = .SpecialCells(xlCellTypeComments).Address(0, 0)
  10.       .ClearComments
  11. End With
  12. Cells(6, 1) = T
  13. End Sub
复制代码

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-17 04:33 , Processed in 0.045104 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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