ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1109|回复: 4

求助:如何联动人员分布,各位高手指点下,谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-17 12:12 | 显示全部楼层 |阅读模式
用什么方法可以将附件中sheet2,与sheet1联动,就是在sheet1中调整,sheet2中会自动跟着变,可否做个小样?万分感谢!!
(用透视表只能算出数字,达不到效果)

求助.rar

11.36 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2019-6-18 08:09 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-6-23 20:58 | 显示全部楼层
本帖最后由 sunya_0529 于 2019-6-24 09:31 编辑

这个需求只能用VBA来解决了,效果如下图所示——
微信截图_20190623204738.png



代码如下所示——
  1. Option Explicit

  2. Sub 提取分布名单()
  3. 'On Error Resume Next
  4. Dim dic As Object, rng As Range, a(1 To 19, 2), b(9999, 4), c, d, h%, i%, j%, k%
  5. Dim str1$
  6. Set dic = CreateObject("Scripting.Dictionary")
  7. With Sheets("1人员明细表")
  8.   For Each rng In .Range("A2:A" & .[A65536].End(xlUp).Row)
  9.     If Not dic.exists(rng.Value) Then
  10.       h = h + 1
  11.       dic.Add rng.Value, ""
  12.       a(h, 0) = rng.Value
  13.       a(h, 1) = IIf(rng.Offset(0, 1).Value = "安全", rng.Offset(0, 2).Value, "")
  14.       a(h, 2) = IIf(rng.Offset(0, 1).Value = "安全", "", rng.Offset(0, 2).Value)
  15.     Else
  16.       a(h, 1) = a(h, 1) & IIf(rng.Offset(0, 1).Value = "安全", IIf(Len(a(h, 1)) > 0, ",", "") & rng.Offset(0, 2).Value, "")
  17.       a(h, 2) = a(h, 2) & IIf(rng.Offset(0, 1).Value = "安全", "", IIf(Len(a(h, 2)) > 0, ",", "") & rng.Offset(0, 2).Value)
  18.     End If
  19.   Next
  20. End With
  21. Set dic = Nothing
  22. For i = 1 To UBound(a)
  23.   b(k, 0) = a(i, 0)
  24.   c = Split(a(i, 1), ",")
  25.   d = Split(a(i, 2), ",")
  26.   For j = 0 To Application.Max(Application.RoundUp((UBound(c) + 1) / 2, 0) - 1, Application.RoundUp((UBound(d) + 1) / 2, 0) - 1, 0)
  27.     If UBound(c) >= j * 2 Then b(k, 1) = c(j * 2)
  28.     If UBound(c) >= j * 2 + 1 Then b(k, 2) = c(j * 2 + 1)
  29.     If UBound(d) >= j * 2 Then b(k, 3) = d(j * 2)
  30.     If UBound(d) >= j * 2 + 1 Then b(k, 4) = d(j * 2 + 1)
  31.     k = k + 1
  32.   Next j
  33. Next i
  34. With ActiveSheet
  35.   .[A:E].Clear
  36.   .[A1] = "公司人员分布"
  37.   .[A1:E1].Merge
  38.   .[A2] = "项目名称"
  39.   .[B2] = "安全"
  40.   .[B2:C2].Merge
  41.   .[D2] = "办公室"
  42.   .[D2:E2].Merge
  43.   .[A1:E2].HorizontalAlignment = xlCenter
  44.   '.[A1:E2].VerticalAlignment = xlCenter
  45.   .[A3].Resize(UBound(b), 5) = b
  46. End With
  47. End Sub
复制代码




求助-20190623.rar

18.52 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2019-6-24 16:03 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 03:44 , Processed in 0.032378 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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