ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

按料号整理参数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:00 | 显示全部楼层 |阅读模式
各位大佬好,本人小白,遇到一个问题向各位老师请教。
左表是料号和参数配置,每个料号的参数条目不同。
右表是目标样式。
我想用字典和数组处理,但没有思路,理不清其中的逻辑。
请各位大佬不吝赐教。多谢!





测试.jpg

测试.rar

7.34 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:14 | 显示全部楼层
image.jpg

测试.rar

14.65 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:42 | 显示全部楼层
Sub 按钮1_Click()
    Dim brr()
    Set d = CreateObject("scripting.dictionary")
    Set dd = CreateObject("scripting.dictionary")
    arr = [a1].CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To UBound(arr))
    r = 0
    For j = 2 To UBound(arr)
        If Not d.exists(arr(j, 1)) Then
            r = r + 1
            brr(r, 1) = arr(j, 1)
            brr(r, 2) = arr(j, 2)
            dd(arr(j, 1)) = 2
            d(arr(j, 1)) = r
        Else
            dd(arr(j, 1)) = dd(arr(j, 1)) + 1
            brr(d(arr(j, 1)), dd(arr(j, 1))) = arr(j, 2)
        End If
    Next j
    [d2].Resize(d.Count, WorksheetFunction.Max(dd.items)) = brr
End Sub

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:43 | 显示全部楼层
供参考。。。。。。。。

测试.zip

15 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:48 | 显示全部楼层
参与一下..

测试.zip

17.17 KB, 下载次数: 8

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-17 07:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 quqiyuan 于 2024-5-17 08:18 编辑

供参考
image.png
image.png


测试(24).zip

18.88 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-5-17 09:08 | 显示全部楼层
参与一下,全表自动生成。

测试2.7z

19.23 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-5-17 09:09 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()  '//2024.5.17
  2.     Dim arr, brr, d
  3.     Application.ScreenUpdating = False
  4.     Application.DisplayAlerts = False
  5.     Set d = CreateObject("scripting.dictionary")
  6.     With Sheets("Sheet1")
  7.         r = .Cells(Rows.Count, 1).End(3).Row
  8.         arr = .Range("a1").Resize(r, 2)
  9.     End With
  10.     ReDim brr(1 To UBound(arr), 1 To 100)
  11.     brr(1, 1) = arr(1, 1): brr(1, 2) = arr(1, 2)
  12.     m = 1: n = 1
  13.     For i = 2 To UBound(arr)
  14.         s = arr(i, 1)
  15.         If Not d.exists(s) Then
  16.             m = m + 1
  17.             d(s) = m
  18.             brr(m, 1) = s
  19.         End If
  20.         r = d(arr(i, 1))
  21.         s = arr(i, 2)
  22.         If Not d.exists(s) Then
  23.             n = n + 1
  24.             d(s) = n
  25.         End If
  26.         c = d(arr(i, 2))
  27.         brr(r, c) = s
  28.     Next
  29.     With Sheets("Sheet2")
  30.         .UsedRange.Clear
  31.         .[b1].Resize(1, n - 1).Merge
  32.         .[a1].Resize(1, n).Interior.Color = 49407
  33.         .[a2].Resize(m - 1, 1).Interior.Color = 5296274
  34.         With .[a1].Resize(m, n)
  35.             .Value = brr
  36.             .Borders.LineStyle = 1
  37.             .HorizontalAlignment = xlCenter
  38.             .VerticalAlignment = xlCenter
  39.             With .Font
  40.                 .Name = "微软雅黑"
  41.                 .Size = 11
  42.             End With
  43.         End With
  44.     End With
  45.     Set d = Nothing
  46.     MsgBox "OK!"
  47. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2024-5-17 10:48 | 显示全部楼层
提取A列唯一值,对应B列数据横向写入单元格。

TA的精华主题

TA的得分主题

发表于 2024-5-18 11:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub TEST2()
    Dim ar, br, i&, j&, r&, iColSize, vKey, dic As Object
   
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")
   
    ar = [A1].CurrentRegion.Value
    For i = 2 To UBound(ar)
        dic(ar(i, 1)) = dic(ar(i, 1)) & "," & ar(i, 2)
    Next i
   
    ReDim ar(1 To dic.Count + 1, 1 To UBound(ar))
    ar(1, 1) = "料号": ar(1, 2) = "配置": r = 1
   
    For Each vKey In dic.keys
        r = r + 1
        ar(r, 1) = vKey
        br = Split(dic(vKey), ",")
        For j = 1 To UBound(br)
            ar(r, j + 1) = br(j)
        Next j
        If iColSize < UBound(br) + 1 Then iColSize = UBound(br) + 1
    Next
   
    [D1].CurrentRegion.Clear
    With [D1].Resize(UBound(br), iColSize)
        .Cells(1, 2).Resize(, iColSize - 1).Merge
         .HorizontalAlignment = xlCenter
        .Borders.LineStyle = xlContinuous
        .Rows(1).Font.Bold = True
        .Value = ar
    End With
    Application.ScreenUpdating = True
    Beep
End Sub

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

本版积分规则

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

GMT+8, 2024-11-17 13:58 , Processed in 0.044125 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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