Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2412|回复: 8

[已解决]求大神帮忙写个宏命令,SUB

[复制链接]
发表于 2017-7-5 16:43 | 显示全部楼层 |阅读模式

D列等于C列在右侧条件中相对应的名称,,

右侧对应的项目,要在宏中显示,不显示在表格的.要求:使用宏命令,

最佳答案
2017-7-6 08:49
Sub test()
    Dim A, B, i, j
    A = Array("DG1=(01,53,58,41,40,44,52)", _
              "DG2=(43,49,45,46,42)", _
              "DG3=(16,28,80,19,55)", _
              "GM1=(21,23,93,32,33,22,95,68)", _
              "GM2=(05,81,06,61,31,03,10,11)", _
              "GM3=(02,24,47,54,13,08,94)", _
              "GM4=(14,12,20,15,17,18,07,09,70)", _
              "FR1=(56,38,57,39,48,77)", _
              "FR2=(75,86,76,91,79,72)")
    B = [c1].CurrentRegion
    For i = 2 To UBound(B)
        For j = 0 To UBound(A)
            If InStr(A(j), Format(B(i, 3), "00")) Then B(i, 4) = VBA.Split(A(j), "=")(0): Exit For
        Next j
    Next i
    [a1].Resize(i - 1, UBound(B, 2)) = B
End Sub

蓝色是变动过的

工作簿1.zip

8.94 KB, 下载次数: 12

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-7-5 17:55 | 显示全部楼层
本帖最后由 爱疯 于 2017-7-5 17:57 编辑

Sub test_1()
    Dim A, B, i, j
    A = Array("DG1=(01,53,58,41,40,44,52)", _
              "DG2=(43,49,45,46,42)", _
              "DG3=(16,28,80,19,55)", _
              "GM1=(21,23,93,32,33,22,95,68)", _
              "GM2=(05,81,06,61,31,03,10,11)", _
              "GM3=(02,24,47,54,13,08,94)", _
              "GM4=(14,12,20,15,17,18,07,09,70)", _
              "FR1=(56,38,57,39,48,77)", _
              "FR2=(75,86,76,91,79,72)")
    B = [c1].CurrentRegion
    For i = 2 To UBound(B)
        For j = 0 To UBound(A)
            If InStr(A(j), Format(B(i, 1), "00")) Then B(i, 2) = VBA.Split(A(j), "=")(0): Exit For
        Next j
    Next i
    [c1].Resize(i - 1, 2) = B
End Sub

回复

使用道具 举报

发表于 2017-7-5 18:12 | 显示全部楼层
除非这些是中间得到的值,不然这样还不如单独建1个表,查询时用VLOOKUP就行了

这么写,只为图方便。
回复

使用道具 举报

 楼主| 发表于 2017-7-5 21:21 | 显示全部楼层
本帖最后由 falcon9999 于 2017-7-5 21:35 编辑
爱疯 发表于 2017-7-5 18:12
除非这些是中间得到的值,不然这样还不如单独建1个表,查询时用VLOOKUP就行了

这么写,只为图方便。

您说的对,C列的值,是在一个宏命令工作中,我只是想在D列,再引用那些值,A列到U列都有数值,您帮忙 写的命令单独运行没有问题,但我加入到表格中,就引用错误了.会将A列和B列的数据覆盖到C列和D列.      有办法解决吗?还有就是工作表是从第三行开始的.不是第二行.
麻烦您了.
回复

使用道具 举报

发表于 2017-7-5 21:56 来自手机 | 显示全部楼层
不清楚你说实际的情况,建议上传你说的不行的附件,更主要的是写清需求,如果其他朋友都好理解你的问题,自然会有人给出好的解决办法的。
回复

使用道具 举报

 楼主| 发表于 2017-7-5 22:09 | 显示全部楼层
爱疯 发表于 2017-7-5 21:56
不清楚你说实际的情况,建议上传你说的不行的附件,更主要的是写清需求,如果其他朋友都好理解你的问题,自 ...

附件,我上传了.麻烦您帮忙看下,我添加了一个按键,你可以试一下,

副本.rar

114.84 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2017-7-5 22:34 | 显示全部楼层

宏命令错误

D列等于C列在右侧相对应的名称,,
右侧对应的项目,要在宏中显示,不显示在表格的.要求:使用宏命令,不要公式.
以下命令,总是会把A和B列的数据复制到C和D列.但是把A和B列的数据清空,以下公式,又运行正常,
请求大神帮忙 修改一下.
Sub test_1()
    DimA, B, i, j
    A =Array("DG1=(01,53,58,41,40,44,52)", _
             "DG2=(43,49,45,46,42)", _
             "DG3=(16,28,80,19,55)", _
             "GM1=(21,23,93,32,33,22,95,68)", _
             "GM2=(05,81,06,61,31,03,10,11)", _
             "GM3=(02,24,47,54,13,08,94)", _
             "GM4=(14,12,20,15,17,18,07,09,70)", _
             "FR1=(56,38,57,39,48,77)", _
             "FR2=(75,86,76,91,79,72)")
    B =[c1].CurrentRegion
    Fori = 2 To UBound(B)
       For j = 0 To UBound(A)
           If InStr(A(j), Format(B(i, 1), "00")) Then B(i, 2) =VBA.Split(A(j), "=")(0): Exit For
       Next j
    Nexti
   [c1].Resize(i - 1, 2) = B

End Sub


副本.rar

118.5 KB, 下载次数: 7

回复

使用道具 举报

发表于 2017-7-6 08:49 | 显示全部楼层    本楼为最佳答案   
Sub test()
    Dim A, B, i, j
    A = Array("DG1=(01,53,58,41,40,44,52)", _
              "DG2=(43,49,45,46,42)", _
              "DG3=(16,28,80,19,55)", _
              "GM1=(21,23,93,32,33,22,95,68)", _
              "GM2=(05,81,06,61,31,03,10,11)", _
              "GM3=(02,24,47,54,13,08,94)", _
              "GM4=(14,12,20,15,17,18,07,09,70)", _
              "FR1=(56,38,57,39,48,77)", _
              "FR2=(75,86,76,91,79,72)")
    B = [c1].CurrentRegion
    For i = 2 To UBound(B)
        For j = 0 To UBound(A)
            If InStr(A(j), Format(B(i, 3), "00")) Then B(i, 4) = VBA.Split(A(j), "=")(0): Exit For
        Next j
    Next i
    [a1].Resize(i - 1, UBound(B, 2)) = B
End Sub

蓝色是变动过的

评分

参与人数 1 +1 收起 理由
falcon9999 + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-7-6 09:05 | 显示全部楼层
爱疯 发表于 2017-7-6 08:49
Sub test()
    Dim A, B, i, j
    A = Array("DG1=(01,53,58,41,40,44,52)", _

非常感谢.完美的解决了我的问题,辛苦了.
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 08:23 , Processed in 0.345929 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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