ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 记录较多,想通过宏对应写入标注

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-15 09:24 | 显示全部楼层 |阅读模式
本帖最后由 奔跑之人 于 2020-3-15 09:51 编辑

想通过宏,把《记录》里面的内容自动添加《填入》表格生成批注,见图。

数据来源

数据来源

效果

效果

新建文件夹.rar

8.31 KB, 下载次数: 7

附件

TA的精华主题

TA的得分主题

发表于 2020-3-15 10:49 | 显示全部楼层
每个产品都有两行,区别是什么?

TA的精华主题

TA的得分主题

发表于 2020-3-15 11:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
批注的例子:
2020-3-15批注.png

TA的精华主题

TA的得分主题

发表于 2020-3-15 12:09 | 显示全部楼层
批注    是个很好的功能,但EH里用批注完成别的功能的贴子还不太多,前两天有个单元格记录改动的那个就是 最适用于批注的~~

TA的精华主题

TA的得分主题

发表于 2020-3-15 13:07 | 显示全部楼层
  1. Sub test()
  2.     Dim i, j, d, k, m, arr, brr, s, str
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheets("记录")
  5.         arr = .Range("B4:J" & .Cells(.Rows.Count, "j").End(xlUp).Row)
  6.         For i = 1 To UBound(arr)
  7.             If Not d.Exists(arr(i, 8) & "|" & arr(i, 1)) Then
  8.                 d(arr(i, 8) & "|" & arr(i, 1)) = arr(i, 9)
  9.             Else
  10.                 d(arr(i, 8) & "|" & arr(i, 1)) = d(arr(i, 8) & "|" & arr(i, 1)) & "|" & arr(i, 9)
  11.             End If
  12.         Next
  13.     End With
  14.     With Sheets("填入")
  15.         brr = .Range("A4:U" & .Cells(.Rows.Count, "u").End(xlUp).Row + 1)
  16.         For i = 1 To UBound(brr)
  17.             For j = 10 To UBound(brr, 2) - 1
  18.                 If d.Exists(brr(1, j) & "|" & brr(i, UBound(brr, 2))) Then
  19.                 s = Split(d(brr(1, j) & "|" & brr(i, UBound(brr, 2))), "|")
  20.                 For k = 0 To UBound(s)
  21.                     If UBound(s) = 0 Then
  22.                         str = s(k)
  23.                     Else
  24.                         If m = UBound(s) Then
  25.                             str = str & s(k) & "。"
  26.                         Else
  27.                             str = str & s(k) & ";" & vbCrLf
  28.                         End If
  29.                         m = m + 1
  30.                     End If
  31.                 Next
  32.                 If Not .Cells(i + 4, j).Comment Is Nothing Then .Cells(i + 4, j).Comment.Delete '删除批注
  33.                 .Cells(i + 4, j).AddComment "备注说明:" & vbCrLf & str '添加批注
  34.                 End If
  35.             Next
  36.         Next
  37.     End With
  38. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2020-3-15 13:08 | 显示全部楼层
请参考附件:



Book.rar (17.5 KB, 下载次数: 10)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-15 13:47 | 显示全部楼层

多谢shenjianrong163老师。
刚才测试了一下,能达到效果,但如果记录有误,修正后再写入,则标注不能同时修正(原来错误的标注还存在)。
辛苦了,谢谢。

TA的精华主题

TA的得分主题

发表于 2020-3-15 16:01 | 显示全部楼层
奔跑之人 发表于 2020-3-15 13:47
多谢shenjianrong163老师。
刚才测试了一下,能达到效果,但如果记录有误,修正后再写入,则标注不能同 ...

改一句即可:
  1. Sub test()
  2.     Dim i, j, d, k, m, arr, brr, s, str
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheets("记录")
  5.         arr = .Range("B4:J" & .Cells(.Rows.Count, "j").End(xlUp).Row)
  6.         For i = 1 To UBound(arr)
  7.             If Not d.Exists(arr(i, 8) & "|" & arr(i, 1)) Then
  8.                 d(arr(i, 8) & "|" & arr(i, 1)) = arr(i, 9)
  9.             Else
  10.                 d(arr(i, 8) & "|" & arr(i, 1)) = d(arr(i, 8) & "|" & arr(i, 1)) & "|" & arr(i, 9)
  11.             End If
  12.         Next
  13.     End With
  14.     With Sheets("填入")
  15.         brr = .Range("A4:U" & .Cells(.Rows.Count, "u").End(xlUp).Row + 1)
  16.         For i = 1 To UBound(brr)
  17.             For j = 10 To UBound(brr, 2) - 1
  18.                 If Not .Cells(i + 4, j).Comment Is Nothing Then .Cells(i + 4, j).Comment.Delete '删除批注
  19.                 If d.Exists(brr(1, j) & "|" & brr(i, UBound(brr, 2))) Then
  20.                 s = Split(d(brr(1, j) & "|" & brr(i, UBound(brr, 2))), "|")
  21.                 For k = 0 To UBound(s)
  22.                     If UBound(s) = 0 Then
  23.                         str = s(k)
  24.                     Else
  25.                         If m = UBound(s) Then
  26.                             str = str & s(k) & "。"
  27.                         Else
  28.                             str = str & s(k) & ";" & vbCrLf
  29.                         End If
  30.                         m = m + 1
  31.                     End If
  32.                 Next
  33.                 .Cells(i + 4, j).AddComment "备注说明:" & vbCrLf & str '添加批注
  34.                 End If
  35.             Next
  36.         Next
  37.     End With
  38. End Sub
复制代码


评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-27 03:02 , Processed in 0.044652 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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