Excel精英培训网

 找回密码
 注册
查看: 8017|回复: 0

在excel中如何利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否...

[复制链接]
发表于 2011-12-5 20:12 | 显示全部楼层 |阅读模式
以前用过VB和VBS语言,这是头一次接触VBA语言,也就是Visul Basic for Application,是excel的宏所使用的一种语言。

    研究这个的目的,是为了解决一个同事在表格编制上的问题,简要介绍如下:

    A列是各个公司名称,B列是项目或者合同的编号,C列是结余款数额。因为结余款数额有的公司有所变动,所以就把变动后的这个文件复制到原excel文件的D、E、F列,对前后文件进行比对,以找出有所变动的部分。

    上午查了半天的资料,模仿着一位网友的命令编制了如下命令:

Private Function FillValue()
For i = 1 To 100 '逐行循环,从第1行至第100行;为防止遗漏数据,可更改为更大的数值
    strA = Worksheets("sheet1").Cells(i, 1).Value '得到第i行第1列的字符
    strB = Worksheets("sheet1").Cells(i, 2).Value '得到第i行第2列的字符
      If Worksheets(1).Cells(i,1).Value="" Then    '如果遇到空行,则退出循环
        Exit For
      End If
    If strB = strA Then                    '如果该行两列内容相同,则在该行第三列中插入相同内容
      Worksheets("sheet1").Cells(i, 3).Value = Worksheets("sheet1").Cells(i, 2).Value
    End If
Next                                             '进行下一次循环,也就是i+1,对下一行进行判断
End Function

    该命令的使用方法介绍:

    第一步:打开一个欲处理的excel文件如下图所示:

    第二步:如上图所示,选中左上角A1单元格,点击主菜单栏 工具->宏

->Visual Basic编辑器,也可以使用快捷键 Alt+F11,打开VB编辑器。

    第三步:双击VB编辑器左侧上方二级子目录下的Sheet1(Sheet1),打开代码编辑窗口,并将上面的代码复制进去。VB编辑器如下图所示:


    第四步,点击VB编辑器菜单 运行—>运行宏,或使用快捷键 F5。宏的执行结果在前面的excel文件里显示,如下图所示:

    从上图可以看出,第三行A、B两列的内容不同,因此没有内容被赋值到C列对应的单元格中。该代码执行效果良好。

   使用下面的代码也可以。就是在第一行插入一行对最大行数赋值的代码,运行该宏的时候,要先手动输入欲处理的最大行数,点击确定后就会出现结果。遇到空行退出循环的那两行命令在这里用不上,所以被去掉了。

Private Function FillValue()
x = InputBox("请在此处输入末行号")           '弹出一个文本框,以在此输入需处理的表格的行数
   For i = 1 To x '逐行循环,从第1行至第x行
    strA = Worksheets("sheet1").Cells(i, 1).Value '得到第i行第1列的字符
    strB = Worksheets("sheet1").Cells(i, 2).Value '得到第i行第2列的字符
    If strB = strA Then      '如果该行两列内容相同,则在该行第三列中插入相同内容
      Worksheets("sheet1").Cells(i, 3).Value = Worksheets("sheet1").Cells(i, 2).Value
    End If
Next                         '进行下一次循环,也就是i+1,对下一行进行判断
End Function

    下图是运行时弹出的对话框:


以上为转载;我改进了一下:

代码如下:

Private Function FillValue()
x = InputBox("请在此处输入末行号")           '弹出一个文本框,输入需处理的表格的总行数
   For i = 1 To x
   strA = Worksheets("sheet1").Cells(i, 1).Value '得到第i行第1列的字符
   
   For j = 1 To x '逐行循环,从第1行至第x行
   
    strB = Worksheets("sheet1").Cells(j, 3).Value '得到第j行第3列的字符
    If strB = strA Then      '如果两列内容相同,则在i行第5列中插入相同内容,并在第i行第6列中插入第4列中的收盘价
      Worksheets("sheet1").Cells(i, 5).Value = Worksheets("sheet1").Cells(i, 1).Value
      Worksheets("sheet1").Cells(i, 6).Value = Worksheets("sheet1").Cells(i, 4).Value
    End If
   
   Next
   
Next                         '进行下一次循环,也就是i+1,对下一行进行判断
End Function


运行前:



运行后:




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

本版积分规则

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

GMT+8, 2025-8-16 13:25 , Processed in 0.179418 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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