Excel精英培训网

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

[已解决]宏代码:单元格内有多数据如何同位取数

[复制链接]
发表于 2021-12-1 19:16 | 显示全部楼层 |阅读模式
X列 AR列各单元格有多位数据       
若AR2=AP1的数据在第四位,则取X2的第四位数据,写入AU2       
若AR3=AP1的数据在第二位,则取X3的第二位数据,写入AU3       
若AR4=AP1的数据在第七位,则取X4的第七位数据,写入AU4       
若AR5没有数据与AP1相同,则AU5为空       
若AR6=AP1的数据在第五位,而X6的第五位没有数据,则AU6为空

最佳答案
2021-12-1 19:56
  1. Sub test()
  2. Dim s$, arr, arrMa, i&, n&, arrTmp
  3. s = [ap1]
  4. arr = Array([ar2].CurrentRegion.Value, [x2].CurrentRegion.Value)
  5. For i = 1 To UBound(arr(0))
  6.   arrMa = Split(arr(0)(i, 1), ",")
  7.   On Error Resume Next
  8.   arr(1)(i, 1) = Split(arr(1)(i, 1), ",")(Application.Match(s, arrMa, 0) - 1)
  9.   If Err Then arr(1)(i, 1) = ""
  10.   On Error GoTo 0
  11. Next
  12. [au2].Resize(UBound(arr(0))) = arr(1)
  13. End Sub
复制代码

同位取数.rar

14.2 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-1 19:56 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2. Dim s$, arr, arrMa, i&, n&, arrTmp
  3. s = [ap1]
  4. arr = Array([ar2].CurrentRegion.Value, [x2].CurrentRegion.Value)
  5. For i = 1 To UBound(arr(0))
  6.   arrMa = Split(arr(0)(i, 1), ",")
  7.   On Error Resume Next
  8.   arr(1)(i, 1) = Split(arr(1)(i, 1), ",")(Application.Match(s, arrMa, 0) - 1)
  9.   If Err Then arr(1)(i, 1) = ""
  10.   On Error GoTo 0
  11. Next
  12. [au2].Resize(UBound(arr(0))) = arr(1)
  13. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2021-12-1 20:07 | 显示全部楼层
回复

使用道具 举报

发表于 2021-12-1 21:10 | 显示全部楼层
抱歉,这句可能要如下修改:
If Err Then arr(1)(i, 1) = "": Err.clear
我感觉错误码不重置可能导致后续错误,但是我现在没法确认,加一句就肯定没错。
回复

使用道具 举报

发表于 2021-12-2 09:44 | 显示全部楼层


Sub test()
Dim Arr, Brr, Crr(), a, T$, pos%, i&
T = [ap1]
Brr = Range([x2], [x2].End(4))
Arr = Range([ar2], [ar2].End(4))
ReDim Crr(1 To UBound(Arr), 1 To 1)
For i = 1 To UBound(Arr)
    If InStr(Arr(i, 1), T) Then
        a = Split(Arr(i, 1), ",")
        pos = Application.Match(T, a, 0)
        a = Split(Brr(i, 1), ",")
        If UBound(a) < pos Then GoTo 99
        Crr(i, 1) = a(pos - 1)
99: End If
Next
[au2].Resize(UBound(Crr)) = Crr
End Sub

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 10:04 , Processed in 0.373477 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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