ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1182|回复: 5

[求助][VBA]DO While两重如何操作?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-5-20 10:37 来自手机 | 显示全部楼层 |阅读模式
大家好,我是Excel VBA的初学者,我根据自己的工作需求准备编写一个小程序改善工作效率,但是遇到一个问题,不知道怎么解决了,具体如下
● 背景
- 我有两个格式差不多的工作表,需要核对两个工作表的差异
- 核对的条件: 通过两个工作表中A和B列判断是否一样,然后把工作表1中C列的结果写入工作表2的C列
● 程序
Sub SJHE()      
    Dim sht_1, sht_2 As Worksheet         
    Set sht_1 = bok.Worksheets("工作表1")         
    Set sht_2 = bok.Worksheets("工作表2")     
    Dim a, b As Integer         
    a = 3         
    b = 3         
    Dim rng1_1, rng1_2, rng1_3 As Range            
    Set rng1_1 = sht_1.Cells(a, "A")            
    Set rng1_2 = sht_1.Cells(a, "B")            
    Set rng1_3 = sht_1.Cells(a, "C")   
    Dim rng2_1, rng2_2, rng2_3 As Range            
    Set rng5_1 = sht_2.Cells(b, "A")               
    Set rng5_2 = sht_2.Cells(b, "B")            
    Set rng5_3 = sht_2.Cells(b, "C")            
    Do While sht_2.Cells(b, "A") <> ""            
        Do While sht_1.Cells(a, "A") <> ""                        
            If rng1_1 = rng2_1 And rng1_2 = rng5 2_2 Then                        
                rng1_3 = rng2_3                     
            End If                 
            a = a + 1            
        Loop                  
        b = b + 1         
    Loop
End Sub
请各位大神帮忙看一下需要怎么改正?我自己实在是没看出来要怎么修正,谢谢!

TA的精华主题

TA的得分主题

发表于 2017-5-20 18:43 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lss001 于 2017-5-22 19:14 编辑

Sub SJHE()      
    x= Cells(Rows.Count, 1).End.(xlUP).Row'把第a列最后一个单元格地址赋给x
    ReDim cr(1To x - 2,1 To 1)'声明数组cr
    ar = Sheet1.range("a3:c" & x)'把Sheet1表格a列第3行至c列第x行赋给数组ar
    br = Sheet2.range("a3:c" & x)'把Sheet2表格a列第3行至c列第x行赋给数组br
    For i = 1 To x - 2'建立循环
           If ar(i ,1) = br(i , 1) And ar(i , 2) = br(i , 2) Then cr(i , 1) = ar(i , 3)'循环判断数组ar与br是否相同,如果相同把ar(i, 3)赋给数组cr(i , 1)
     Next'结束循环
     Sheet2.[c3].Resize(x-2, 1)= cr'把数组cr写入Sheet2以c3开始的单元格
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-22 13:18 来自手机 | 显示全部楼层
lss001 发表于 2017-5-20 18:43
Sub SJHE()      
    x= [a1].End.Row
    ReDim cr(1To x - 2,1 To 1)

这个代码没接触过,能详细的解释说明吗?我刚才试了试这段代码提示问题挺多的

TA的精华主题

TA的得分主题

发表于 2017-5-22 14:20 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2017-5-22 14:24 编辑
zyl_10 发表于 2017-5-22 13:18
这个代码没接触过,能详细的解释说明吗?我刚才试了试这段代码提示问题挺多的


上楼每行代码做了简要说明

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-22 15:37 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2017-5-22 14:20
上楼每行代码做了简要说明

谢谢,还没开始学习数组,所以理解起来有困难~我参照你给我的程序,操作试了试,提示
"运行错误'9':下标越界",点击调试后光标定位在cr(i,1) = ar(i,3),这个是什么原因造成的呢?

TA的精华主题

TA的得分主题

发表于 2017-5-22 19:13 来自手机 | 显示全部楼层
zyl_10 发表于 2017-5-22 15:37
谢谢,还没开始学习数组,所以理解起来有困难~我参照你给我的程序,操作试了试,提示
"运行错误'9':下 ...

ar = Sheet1.range("a3:b" & x)把此句改为
ar = Sheet1.range("a3:c" & x)即把b改为c
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 11:45 , Processed in 0.041532 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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