ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA范围内多列内各自配对 ( 有难度 )

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-30 11:10 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA范围内多列内各自配对 ( 有难度 )
*
Sheet2是源数据 ( 父页 ), A~N列是固定给的,
1~8行标题行不参加配对, 往下的行数及资料是变量,
单元格[C9]列往右往下,
除数值之外是关键词/唯一值”, 每列单元格的上一行的A列是对应值( 添加值 )
*
Sheet1Sheet 2是相同的数据结构
除了数值外, 每列的关键词要去掉后缀( :符号, 数字 ), 及做关连的配对
*
代码的逻辑如下,
Sheet1C~N, 左到右, 一列又一列( C列对C列 ),
每一列单元格如不为空,
同时, 关键词如配对上, 需要添加对应值为前缀 添加点号
*
部分模拟结果在Sheet1(2)
*
这题有点绕, 难度高!
恳请大神, 老师帮忙谢谢!

EH2023-0528.zip

11.72 KB, 下载次数: 33

TA的精华主题

TA的得分主题

发表于 2023-5-30 13:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主发了很多问题,大部分的难度在于如何理解楼主的描述信息?
建议楼主结合附件,用通俗易懂的语言逐步举例描述
这样便于大家理解

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-30 14:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我仔细看了下,还没完全看懂,大概能知道一点点,有两个问题:
1、数据结构很诡异,那么多列但又只有2行,为何不转置为两列多行?
2、如果是两列多行的结构,用vlookvp找一下,如果找到再用函数组合一下文本信息我感觉就差不多了;
数据结构合理的话,我感觉就是个简单问题,但楼主这结构还真不好搞。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-30 15:15 | 显示全部楼层
liulang0808 发表于 2023-5-30 13:11
楼主发了很多问题,大部分的难度在于如何理解楼主的描述信息?
建议楼主结合附件,用通俗易懂的语言逐步举 ...

版主好,
以前有发过相似的难题, 褚老师给了答案在下帖, 代码的思路在10楼,  
https://club.excelhome.net/thread-1657960-1-1.html
但是, 现在的新要求是改为两页( Sheet1及Sheet2的列列配对) ,
如C列对C列, D列对D列, 如类推…

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-30 15:16 | 显示全部楼层
fanyoulin 发表于 2023-5-30 14:08
我仔细看了下,还没完全看懂,大概能知道一点点,有两个问题:
1、数据结构很诡异,那么多列但又只有2行, ...

是的, 这题是有点绕…

TA的精华主题

TA的得分主题

发表于 2023-5-30 16:04 | 显示全部楼层
  1. Sub test0()
  2.   Dim ar, i As Long, j As Long
  3.   Dim Dict() As Object, s As String, k
  4.   
  5.   With Sheet2
  6.     ar = .Range("A1:N" & .UsedRange.Find("*", , -4163, , 1, 2).Row)
  7.   End With
  8.   ReDim Dict(3 To UBound(ar, 2))
  9.   For j = 3 To UBound(ar, 2)
  10.     Set Dict(j) = CreateObject("Scripting.Dictionary")
  11.     For i = 9 To UBound(ar)
  12.       s = Trim(ar(i, j))
  13.       If Len(s) Then
  14.         If Val(s) = 0 Then Dict(j).Add s, ar(i - 1, 1)
  15.       End If
  16.     Next
  17.   Next
  18.   
  19.   With Sheet1
  20.     ar = .Range("A1:N" & .UsedRange.Find("*", , -4163, , 1, 2).Row)
  21.   End With
  22.   For j = 3 To UBound(ar, 2)
  23.     For i = 9 To UBound(ar)
  24.       s = Trim(ar(i, j))
  25.       If Len(s) Then
  26.         If Val(s) = 0 Then
  27.           For Each k In Dict(j).Keys
  28.             If InStr(s, k) Then
  29.               ar(i, j) = Dict(j)(k) & ". " & ar(i, j)
  30.               Exit For
  31.             End If
  32.           Next
  33.         End If
  34.       End If
  35.     Next
  36.     Set Dict(j) = Nothing
  37.   Next
  38.   
  39.   Sheet3.Range("A1").Resize(UBound(ar), UBound(ar, 2)) = ar
  40.   Beep
  41. End Sub
复制代码

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-30 17:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

大神, 厉害!
好久没见啦, 感谢您出手帮忙…

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-31 21:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:01 , Processed in 0.037575 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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