Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使用另一列数据映射两列_Vba_Excel - Fatal编程技术网

Vba 如何使用另一列数据映射两列

Vba 如何使用另一列数据映射两列,vba,excel,Vba,Excel,我有五个专栏 例如 第1栏:名称 第二栏:姓氏 第3栏:映射 第4列:映射数据 列包含如下数据: Name Surname Mapping Name1 Surname1 1 ABC 1 AAAA 3 ABC QQQQ 2 XYZ 2 XXXX 1 XYZ AAAA 3 OPQ

我有五个专栏

例如

  • 第1栏:名称
  • 第二栏:姓氏
  • 第3栏:映射
  • 第4列:映射数据
  • 列包含如下数据:

          Name         Surname        Mapping    Name1   Surname1
      1   ABC          1  AAAA          3         ABC      QQQQ
      2   XYZ          2  XXXX          1         XYZ      AAAA
      3   OPQ          3  QQQQ          4         OPQ     RRRR
      4   RST          4  RRRR          2         RST      XXXX
    
    现在,我的目标是使用mappingcolumn将name列映射到姓氏,结果应该存储在Name1和names1列中。我在“姓名”和“姓氏”列中有更多数据,通过在“映射”列中写入数字,它将自动将姓氏映射到名称(用户可以选择在映射列中输入数字,然后相应地映射数据),结果应复制到“名称1”和“姓氏1”


    我不知道如何使用VBA实现这一点。编码Plz帮助我….

    Amar,使用Excel的内置函数,当然有很多方法可以实现这一点,但是,既然您询问了VBA解决方案,那么您可以:

    Function Map(n)
        Map = Cells(n + 1, 2)
    End Function
    
    将上述代码放入项目的VBA编辑器将允许您以与Excel的任何内置函数相同的方式使用此自定义函数。也就是说,在任何单元格中输入
    =Map(C3)
    都会得到您想要的结果(其中C3是包含映射号的单元格)。该函数通过返回[n行(在映射列中定义)+1(用于说明标题行);第2列(包含您姓氏的列)]中的数据来工作。“Name1”列中的数据将始终与“Name”列中的数据相同(看起来如此)。因此,“Name1”列中的函数就是
    =A2

    如果这不能解决您的问题,或者您需要进一步的指导,请让我知道

    补充


    @阿玛,@freakefuer的评论很到位。VBA对于像这样简单的东西来说真是太过分了,正如他指出的,可移植性和安全性都是显著的缺点。偏移量是一个很好的选择。

    名称/姓氏列是否有两个值可能重复?或者您只是将它们一起显示?他们真的有两个单独的栏目来写#和文本吗?可能是我遗漏了什么,但我没有看到您提供的数据中出现任何一致的映射。Sry我在问题陈述中出错了……我将编辑它,感谢ans……名称和姓氏是两个不同的列……共有五列colum1 Name colm2 Name colm3 mapping colm4 Name1 colm 5Surname1@Amar-您可以避免一些缺点如果您不必使用VBA。可移植性和安全性是其中的两个。因此,我建议使用“OFFSET”,除非您确实需要VBA解决方案。