VBA代码高手来,判断黄色背景色的表格引用数据?

如图,引用表格中有黄色背景色的数据表A列的名字到“月统计”表中来,而且只对“黄色”的表格起作用,黄色表格中A列的名字新增和删除会自动更新到月统计表B列中来。这个代码应该怎么写。高手求指教?还是说用什么函数?上附件:链接:https://pan.baidu.com/s/1i1IX6rtuMmbgdNemdGVEcw 提取码:6evd

写一个SUB来更新吧,程序代码如下:

程序代码为:

Sub 更新名单()

    Dim arr, list$(1 To 100, 1 To 1), i&, j&, n&, nm$, st As Worksheet

    For Each st In Worksheets

        If Len(st.Name) = 1 Then '单字母名称的表为清单表

            arr = st.UsedRange

            For i = 6 To UBound(arr)

                nm = Trim(arr(i, 1))

                If nm <> "" Then

                    For j = 1 To n

                        If list(j, 1) = nm Then Exit For

                    Next j

                    If j > n Then

                        n = n + 1

                        list(n, 1) = nm

                    End If

                End If

            Next i

        End If

    Next st

    With Me.Range("B5").Resize(n, 1)

        .Select

        .Value = list

    End With

End Sub

如果愿意,也可以设置工作表的Change事件来自动修改【月统计表】的名单,看起来那样高级一点。

追问

Change事件我设置可以实现了,但是你这个代码会把“合计”引用过来,应该怎么改呢???

追答

If nm ≠ "" Then
修改为
If nm≠ "" And nm≠"合计" Then
≠要用英文的字符,刚才输入了不显示

追问

黄色表格新增两个名称然后把上一行的名称删除会出现如下情况。

应该说是删除部分名称,[统计表] 最后一个名称会出问题

追答

不是最后一个出现了问题,我的代码专门选择了填充区域,就是希望你能明白其中原因:选择区域以外的之前的数据,不是新统计的,如果大批量删除姓名就会更加明显。这是没有删除统计表现有行造成的,可以在下面的语句
With Me.Range("B5").Resize(n, 1)
之前添加一个删除所有行的语句,例如:
me.range("5:65536").delete

追问

我加了这个语句解决了-
Range("B5:B100").Select
Selection.ClearContents

但是还是有问题 如果新增一个黄色工作表就没办法更新

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-12

    首先明确是可以用VBA解决的,但是不是最佳解决方案

    也可以用公式来解决,比VBA简单,但是还是不是最简单高效的方法

    其实这个问题Excel中有一个自动化的功能可以非常简单的解决,我测试过,完美解决

    解决问题的核心在于对表格进行一下稍微的改造就行

追问

可以来点干货吗?理论都懂,要求黄色的表,名字引用去重合并

追答

既然你问道了VBA说明你对Excel前台的功能已经很了解了,如果是这样的化我简单说一下实现思路,你应该一下子就会明白怎么做(前提是我前面说的成立,也就是你对Excel本身的功能很了解了),一共三步搞定,根据我的操作时间估计大概两分钟搞定。

    用ER关系来改造表格,使得基础数据表格从源头上规范

    用SQL的交叉表查询功能进行Pivot去重统计

    返回Excel得到结果,只要又新的数据贴到基础数据的后面,每月就可以自动更新

回答完毕

第2个回答  2021-04-12

Sub demo()

    Dim Sht As Worksheet, Cell As Range, sl As Object, arr()

    Set sl = CreateObject("System.Collections.SortedList")

    For Each Sht In Worksheets

        With Sht

            If .Tab.Color = vbYellow Then

                For Each Cell In .Range("A6:A" & .Cells(Rows.Count, 1).End(xlUp).Row - 1)

                    If Not IsEmpty(Cell) Then sl.Item(Cell.Value) = ""

                Next Cell

            End If

        End With

    Next Sht

    With sl

        ReDim arr(.Count - 1)

        For i = 0 To .Count - 1

            arr(i) = .GetKey(i)

        Next i

    End With

    With Sheets("月统计")

        .Range("B5:B" & .Cells(Rows.Count, 2).End(xlUp).Row).ClearContents

        .Range("B5").Resize(UBound(arr) + 1, 1) = Application.Transpose(arr)

    End With

End Sub

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网