如图,引用表格中有黄色背景色的数据表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
ä½æ¯è¿æ¯æé®é¢ å¦ææ°å¢ä¸ä¸ªé»è²å·¥ä½è¡¨å°±æ²¡åæ³æ´æ°
首先明确是可以用VBA解决的,但是不是最佳解决方案
也可以用公式来解决,比VBA简单,但是还是不是最简单高效的方法
其实这个问题Excel中有一个自动化的功能可以非常简单的解决,我测试过,完美解决
解决问题的核心在于对表格进行一下稍微的改造就行
可以来点干货吗?理论都懂,要求黄色的表,名字引用去重合并
追答既然你问道了VBA说明你对Excel前台的功能已经很了解了,如果是这样的化我简单说一下实现思路,你应该一下子就会明白怎么做(前提是我前面说的成立,也就是你对Excel本身的功能很了解了),一共三步搞定,根据我的操作时间估计大概两分钟搞定。
用ER关系来改造表格,使得基础数据表格从源头上规范
用SQL的交叉表查询功能进行Pivot去重统计
返回Excel得到结果,只要又新的数据贴到基础数据的后面,每月就可以自动更新
回答完毕
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