Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >VBA中的索引匹配/vlookup

VBA中的索引匹配/vlookup
EN

Stack Overflow用户
提问于 2021-06-08 08:23:55
回答 2查看 334关注 0票数 0

我有一个Excel文档,它有两个不同的工作表。工作表2有列头名和行头名。Sheet 1中的一些列具有确切的标题名称和行头名称,但是它充满了数据。在这里输入图像描述在这里输入图像描述

我想要创建一个宏,它将检查表1中的所有列/行标题,并在Sheet2中找到它们的对应匹配。当找到匹配时,我需要将工作表列/行标题的条目复制到sheet2的匹配头中。Sheet2中的某些条目将没有匹配项,并且将保持空白。我希望它看起来像这样:在这里输入图像描述

到目前为止,这是我的代码,它适用于列标题,但我也不知道如何添加行标题。欢迎任何帮助:)

代码语言:javascript
运行
AI代码解释
复制
Sub CopyData()
    Application.ScreenUpdating = False
    Dim LastRow As Long, header As Range, foundHeader As Range, lCol As Long, srcWS As Worksheet, desWS As Worksheet
    Set srcWS = Sheets("Sheet1")
    Set desWS = Sheets("Sheet2")
    LastRow = srcWS.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lCol = desWS.Cells(3, Columns.Count).End(xlToLeft).Column
    For Each header In desWS.Range(desWS.Cells(3, 2), desWS.Cells(3, lCol))
        Set foundHeader = srcWS.Rows(2).Find(header, LookIn:=xlValues, lookat:=xlWhole)
        If Not foundHeader Is Nothing Then
            srcWS.Range(srcWS.Cells(3, foundHeader.Column), srcWS.Cells(LastRow, foundHeader.Column)).Copy desWS.Cells(4, header.Column)
        End If
    Next header
    Application.ScreenUpdating = True
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-08 08:41:19

最好的解决方案可以设置2个范围,每个范围从Sheet1和Sheet2中的表中提取值。我们叫他们rgSrcTablergDestTable。然后,您需要使用For Each循环遍历每个范围,并比较顶部和左侧标头,当找到匹配时,将rgSrcTable中的单元格的值复制到rgDestTable中的单元格。

编辑:代码示例。可以随意调整范围以满足您的需要。由于这个例程使用了Range.Value属性,所以可以过滤任何数据(字符串、数字等)。

代码语言:javascript
运行
AI代码解释
复制
Option Explicit

Sub CopyDataWithFilter()
    Dim iRowHeader As Integer, iColHeader As Integer
    Dim rngSrc As Range, rngDest As Range, celSrc As Range, celDest As Range
    
    iRowHeader = 2
    iColHeader = 1
    With ThisWorkbook
        ' Set source and destination ranges. Modify ranges according to your needs
        Set rngSrc = .Worksheets("shtSrc").Range("$B$3:$E$5")
        Set rngDest = .Worksheets("shtDest").Range("$B$3:$E$5")
        
        ' Loop through source range and dest range
        For Each celDest In rngDest
            For Each celSrc In rngSrc
            
                ' Compare top headers and left headers respectively. If matching, copy the value in destination table.
                If .Worksheets("shtSrc").Cells(celSrc.Row, iColHeader).Value = .Worksheets("shtDest").Cells(celDest.Row, iColHeader).Value And _
                   .Worksheets("shtSrc").Cells(iRowHeader, celSrc.Column).Value = .Worksheets("shtDest").Cells(iRowHeader, celDest.Column).Value Then
                   celDest.Value = celSrc.Value
                End If
            Next celSrc
        Next celDest
    End With
End Sub

结果:

票数 0
EN

Stack Overflow用户

发布于 2021-06-08 09:08:24

您可以使用内置的Range.Consolidate方法(https://learn.microsoft.com/en-us/office/vba/api/excel.range.consolidate):(Edit2)

代码语言:javascript
运行
AI代码解释
复制
Option Explicit

Sub ConsolidateThis()
    Dim rng1 As Range, rng2 As Range, addr As String
    With ThisWorkbook
        ' determine source and destination ranges
        Set rng1 = getTableRange(.Worksheets("Sheet1").Range("A2"))
        Set rng2 = getTableRange(.Worksheets("Sheet2").Range("A3"))
        
        ' make full address of consolidated range like "'[Consolidate.xlsm]Sheet1'!R3C1:R6C5"
        addr = "'[" & .Name & "]" & rng1.Parent.Name & "'!" & rng1.Address(ReferenceStyle:=xlR1C1)
        
        ' do consolidation
        rng2.Consolidate Sources:=Array(addr), Function:=xlSum, TopRow:=True, LeftColumn:=True
    End With
End Sub

' Returns the range that starts with the top left corner cell and is bounded
' on the right and bottom by empty cells
Function getTableRange(LeftTopCornerCell As Range) As Range
    Dim ws As Worksheet, rightEdge As Long, downEdge As Long
    With LeftTopCornerCell(1)
        Set ws = .Parent
        rightEdge = ws.Cells(.Row, ws.Columns.Count).End(xlToLeft).Column
        downEdge = ws.Cells(ws.Rows.Count, .Column).End(xlUp).Row
    End With
    Set getTableRange = ws.Range(LeftTopCornerCell(1), ws.Cells(downEdge, rightEdge))
End Function

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67890930

复制
相关文章
\[vscode issue\] Golang Debug 无法命中断点
Kevinello
2023/10/18
6391
\[vscode issue\] Golang Debug 无法命中断点
MySQL的order by该如何避免“未命中索引“
  要学会如何使用,你先要搞清楚:1、怎么看SQL是否用上了索引;2、怎么写SQL能避开出错点。
陈哈哈
2022/05/31
2.6K0
MySQL的order by该如何避免“未命中索引“
GPU编程(四): 并行规约优化
如果之前没有用过gdb, 可以速学一下, 就几个指令. 想要用cuda-gdb对程序进行调试, 首先你要确保你的gpu没有在运行操作系统界面, 比方说, 我用的是ubuntu, 我就需 要用sudo service lightdm stop关闭图形界面, 进入tty1这种字符界面. 当然用ssh远程访问也是可以的. 接下来, 使用第二篇中矩阵加法的例子. 但是注意, 编译的使用需要改变一下, 加入-g -G参数, 其实和gdb是相似的.
sean_yang
2019/03/04
1.7K1
GPU编程(四): 并行规约优化
CUDA编程.内核调用
首先我说一下什么叫内核,这里的内核很狭义就是ANSI C关键字+CUDA扩展关键字编写的设备代码~
云深无际
2021/03/12
9460
CUDA编程.内核调用
Unity3D 判断点击命中物体对象和命中环境
一个大的空对象包含很多小的物体,在大的空对象上面添加一个脚本,这个脚本核心就是通过 Update 方法里面拿到鼠标点击,判断当前是不是点击这个对象
林德熙
2022/08/12
4180
linux内核断点调试入门
上篇文章 编译一个默认输出hello world的linux内核 中,我们已经知道如何编译一个可以自运行的linux内核,这篇文章我们来看下如何对内核进行断点调试。
KINGYT
2020/04/13
3.5K0
GIS算法—判断点在面内
牛老师讲GIS
2023/05/27
7790
GIS算法—判断点在面内
CUDA编程之线程模型
一个kernel结构如下:Kernel<<>>(param1, param2, …)
AI异构
2020/07/29
2.8K0
CUDA编程之线程模型
CUDA编程.配置内核参数+API函数
为了我们获得并行能力,需要做一些配置CIA可以,这个配置在内核启动中写。它们指定了Grid中块的数量,和每一个块中线程的数量。每个快上面有512或者1024个线程。
云深无际
2021/03/12
7490
CUDA编程.配置内核参数+API函数
CUDA 02 - 逻辑模型
CUDA逻辑模型是异构模型, 需要CPU和GPU协同工作. 在CUDA中, host和device是两个重要概念, host是指CPU及其内存, device是指GPU及其内存. 典型的CUDA程序的执行流程如下:
Reck Zhang
2021/08/11
5290
CUDA 02 - 逻辑模型
腾讯云CDN+日志服务统计URL未命中top10
文章参考自官方文档,但无奈官方文档写的demo未联合说明怎么改,顺便mark下来做记录
105号运维实习生
2020/11/13
1.5K2
腾讯云CDN+日志服务统计URL未命中top10
使用显卡程序加速(opencl、cuda)
CPU使用冯诺依曼结构,缓存大,处理单元少 GPU处理图像每个像素可以单独处理,缓存小,处理单元很多
sofu456
2020/12/08
1.4K0
AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,也可以把GPU看成是CPU的协处理器,因此当在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起进行协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下图所示。
集智书童公众号
2022/01/05
2.8K0
AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
新手,想用Nisight调试CUDA代码,但断点无效怎么破?
新手,刚接触CUDA编程,搭好了环境,想用nsight来调试,在vs里面,在核函数里面设置了断点,用CUDA Debugging,但断点就是不生效,电脑左下角会弹出Night 连接成功,程序跑完后,Night会提示Disconnected 整个电脑环境: 显卡: GF GTX1050 CPU: i3-4170 3.70GH 硬盘: 2T 软件:VS2013 + CUDA9.1 + Nsight 5.4 GPU世界论坛 bbs.gpuworld.cn Hi, 楼主, 这个
GPUS Lady
2018/04/24
3.2K0
《GPU高性能编程 CUDA实战》(CUDA By Example)读书笔记
写在最前 这本书是2011年出版的,按照计算机的发展速度来说已经算是上古书籍了,不过由于其简单易懂,仍旧被推荐为入门神书。先上封面: 由于书比较老,而且由于学习的目的不同,这里只介绍了基础
用户1148523
2018/01/09
2.9K0
《GPU高性能编程 CUDA实战》(CUDA By Example)读书笔记
CUDA-GDB安装+环境配置
在GPU上开发大规模并行应用程序时,需要一个调试器,GDB调试器能够处理系统中每个GPU上同时运行的数千个线程。CUDA-GDB提供了无缝的调试体验,可以同时调试应用程序的CPU和GPU部分。
云深无际
2021/03/12
2.6K0
CUDA-GDB安装+环境配置
CUDA编程.打印
首先是注意,所有的cuda代码都是cu的后缀 #include<iostream> #include<cuda_runtime.h> __global__ void myfirstkernel(voi
云深无际
2021/03/12
7470
CUDA编程.打印
判断点在多边形内算法的C++实现
判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。如下图所示:
charlee44
2019/08/13
6.1K0
DAY36:阅读”执行空间&扩展修饰符
B. C Language Extensions B.1. Function Execution Space Specifiers Function execution space specifiers denote whether a function executes on the host or on the device and whether it is callable from the host or from the device. B.1.1. __device__ The __dev
GPUS Lady
2018/06/25
5460
Udacity并行计算课程笔记-The GPU Programming Model
一、传统的提高计算速度的方法 faster clocks (设置更快的时钟) more work over per clock cycle(每个时钟周期做更多的工作) more processors(更多处理器) 二、CPU & GPU CPU更加侧重执行时间,做到延时小 GPU则侧重吞吐量,能够执行大量的计算 更形象的理解就是假如我们载一群人去北京,CPU就像那种敞篷跑车一样速度贼快,但是一次只能坐两个人,而GPU就像是大巴车一样,虽然可能速度不如跑车,但是一次能载超多人。 总结起来相比于CPU,GPU有
marsggbo
2018/01/23
1.2K0
Udacity并行计算课程笔记-The GPU Programming Model

相似问题

CUDA __global__函数未调用

13

断点未命中

40

Firebug -断点未命中

1123

未命中javascript断点

59

MonoDevelop -断点未命中

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档