粘贴相邻列的宏

如何解决粘贴相邻列的宏

我在Excel中有这两个表:

First Table

enter image description here

我需要粘贴第二个表的“文本”和“代码”列,直到第一个表的“货币”列,其中第一个表的“可选名称”列等于“名称”在第二张表中。

最后,它应该显示如下表:

final Table

显然我的表更大,所以我试图用Excel vba创建一个宏,该宏会自动比较然后粘贴相应的值,但是由于我对使用excel vba很陌生,所以我并没有取得太大的成功:(

解决方法

通过Match

替代使用数组比较

只是为了展示可能耗时的经典(范围)循环的替代方法,我演示了一种使用两个数据字段数组比较不同工作表中的 name 列的方法。

  • 在此示例中,列Sheet1中的C个名称被分配给数组a,而Sheet2个名称被分配给数组b-请参阅0-1

  • 两个数组都通过Application.Match进行比较,从而生成一个(垂直)索引数组,指示在第二个数据集中搜索的位置-请参见2部分。 / p>

  • 最终,数据通过Application.Index重新排列(请参见3部分),并写入任何需要的目标(此处写入Sheet1的列F:G,即C之后的3列;请参见4部分。

示例呼叫

Option Explicit                                         ' declaration head of code module

Sub ExampleCall()
'0. get identifying name column ranges; here using the sheets' Code(Name)
    Dim rngA As Range: Set rngA = getColRange(Sheet1,"C")
    Dim rngB As Range: Set rngB = getColRange(Sheet2,"A")
'1. assign values to variant 1-based 2-dimensional arrays
    Dim a,b                                            ' declare as variant arrays
    a = rngA.Value
    b = rngB.Value
'2. get indices where to search in b
    a = Application.Match(a,b,0)                      ' compare name columns
    'Debug.Print Join(Application.Transpose(a),"|")    ' write search order to immediate window
'3a.get text + code data
    b = rngB.Offset(0,1).Resize(Columnsize:=2).Value   ' get text/code values starting next column
'3b.reorder b-array based on a-indices
    b = Application.Index(b,a,Array(1,2))            ' reorder them based on a-indices
'4. write text + code to target ( col C + 3 cols offset ~> col F)
    rngA.Offset(0,3).Resize(UBound(b),2) = b
End Sub

帮助功能

计算给定工作表列的最后一行并返回整个范围。

Function getColRange(mySheet As Worksheet,_
                     Optional ByVal myColumn As Variant = "A",_
                     Optional ByVal Startrow As Long = 2) As Range
With mySheet
'a) check if sheet exists
    If IsError(Application.Evaluate(mySheet.Name & "!A1")) Then GoTo SHEETERROR
'b) change numeric column no to letter(s)
    If IsNumeric(myColumn) Then myColumn = Split((.Columns(myColumn).Address(,0)),":")(0)
'c) get last row in given column
    Dim lastRow As Long
    lastRow = .Range(myColumn & .Rows.Count).End(xlUp).Row
'd) return data range as function result
'   (a Range is an Object and has to be SET!)
    Set getColRange = .Range(myColumn & Startrow & ":" & myColumn & lastRow)
End With
Exit Function

SHEETERROR:
    MsgBox "Worksheet " & mySheet.Name & vbNewLine & _
           "(CodeName " & mySheet.CodeName & ")" & vbNewLine & _
           "does not exist!",vbExclamation,"Sheet Error"
    Stop
End Function

相关链接

C.f。 Some undocumented pecularities of the Application.Index function

,

最后,事实证明不需要VBA。

我实际上已经使用了VLOOKUP函数。

在这里我学会了如何使用此功能:

https://support.microsoft.com/en-us/office/video-vlookup-when-and-how-to-use-it-9a86157a-5542-4148-a536-724823014785?ui=en-us&rs=en-us&ad=us

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-