注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯的博客

如果你是我眼中的一滴泪,那我永远也不会哭!

 
 
 

日志

 
 
 
 

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

2011-04-11 21:17:53|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 以前用过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文件如下图所示:

在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客

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

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

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

在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客
    第四步,点击VB编辑器菜单 运行—>运行宏,或使用快捷键 F5。宏的执行结果在前面的excel文件里显示,如下图所示:

在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客

    从上图可以看出,第三行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

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

在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客

 

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

代码如下:

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

 

 

运行前:

在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客
 
 运行后:
 
在excel中利用VBA实现不同表格内容的对比和赋值(比较两列同一行的内容是否... - jiaquanluo - 天涯的博客
 
 
 大家仔细看看两张图的差别就知道我修改后的代码的用途的啦,如果还是不明白的话可以在本文后面留言给我哦。
 

 

 

  评论这张
 
阅读(6813)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017