想用vba实现一个功能!

狼二羊 2017-10-11 10:38:27
在一个表格下,添加一个commandbutton1的按钮,我想实现的效果是,点击这个按钮,(如图所示)让A列相同的内容合并,取B列最大的数。就变成第二图的效果

...全文
1113 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-10-13
  • 打赏
  • 举报
回复
“需求”说了? 自己看看你是在哪说的!!! 主贴中有提到这个吗! 发个帖子,只提到了两列数据,而现在需要处理的已经有3列数据了,还牵扯到其它列的数据(目前看来还“不用处理”)。 再说了,你在7楼说的那个,不就是一个“字符串的连接”问题吗! 相比我在5楼的代码,也就是多写三、四行代码而已,自己改一下不就行了,这有哪点难度!!!
狼二羊 2017-10-13
  • 打赏
  • 举报
回复
引用 11 楼 Chen8013 的回复:
自己的需求都说不清楚,别人又如何知道你想要达到什么效果?如何知道你有什么样的想法?

自己考虑如何处理吧!!!


啊我的需求说了。。。
比如,给21 ,22行加个小符号(为了明确明确识别,跟效果毫无关系),比如21=21.a。22=22.b。因为这两行D列同样是D8,所以进行合并,变成了21.a22.b
由于22.b行的H列的数(22)> 21.a的H列(20),所以22.b覆盖21.a,原本的21.a22.b变成了22.b。而这个22.b 就是21行。 所以最后就剩下21这一行,而这一行的数就是原来22的数,并且21行以上的20行内容不变,22行以下的往上移动。当然并不是只有21 ,22 这两行,可能还有23,24,25.
舉杯邀明月 2017-10-13
  • 打赏
  • 举报
回复
自己的需求都说不清楚,别人又如何知道你想要达到什么效果?如何知道你有什么样的想法? 自己考虑如何处理吧!!!
狼二羊 2017-10-12
  • 打赏
  • 举报
回复
引用 5 楼 Chen8013 的回复:
如果没有排序,并且是“放原处”,那么比较简单的方法还是只有进行“扫描”。
不过,在“去除重复”时,可能需要“删除并移动单元格”,但更简单的操作是“整行删除”。
如果只有A、B两列有数据,那么就可以用“整行删除”的方法;
否则,只能用删除单元格并上移的方式,才能避免把其它区域的数据删除了。

先给你一段用“整行删除”的吧,参考一下:
' Excel VBA代码:
Public Sub Proc()
Dim strText As String
Dim i&, j&, k As Long
Dim w&, u&, v As Long

u = WorksheetFunction.CountA(Sheet1.Range("A:A"))
i = 1& ' 数据从第1行开始
Do
If (i > u) Then Exit Do
strText = Sheet1.Cells(i, 1).Text
v = Sheet1.Cells(i, 2).Value
k = 0&
j = i
Do
j = 1& + j
If (j > u) Then Exit Do
If (strText = Sheet1.Cells(j, 1).Text) Then
w = Sheet1.Cells(j, 2).Value
If (w > v) Then v = w: k = vbTrue
Call Sheet1.Rows(j).Delete
u = u - 1&
End If
Loop
If (k) Then Sheet1.Cells(i, 2).Value = v
i = 1& + i
Loop
End Sub


狼二羊 2017-10-12
  • 打赏
  • 举报
回复
引用 5 楼 Chen8013 的回复:
如果没有排序,并且是“放原处”,那么比较简单的方法还是只有进行“扫描”。 不过,在“去除重复”时,可能需要“删除并移动单元格”,但更简单的操作是“整行删除”。 如果只有A、B两列有数据,那么就可以用“整行删除”的方法; 否则,只能用删除单元格并上移的方式,才能避免把其它区域的数据删除了。 先给你一段用“整行删除”的吧,参考一下:
' Excel VBA代码:
Public Sub Proc()
   Dim strText As String
   Dim i&, j&, k  As Long
   Dim w&, u&, v  As Long

   u = WorksheetFunction.CountA(Sheet1.Range("A:A"))
   i = 1&   ' 数据从第1行开始
   Do
      If (i > u) Then Exit Do
      strText = Sheet1.Cells(i, 1).Text
      v = Sheet1.Cells(i, 2).Value
      k = 0&
      j = i
      Do
         j = 1& + j
         If (j > u) Then Exit Do
         If (strText = Sheet1.Cells(j, 1).Text) Then
            w = Sheet1.Cells(j, 2).Value
            If (w > v) Then v = w: k = vbTrue
            Call Sheet1.Rows(j).Delete
            u = u - 1&
         End If
      Loop
      If (k) Then Sheet1.Cells(i, 2).Value = v
      i = 1& + i
   Loop
End Sub
好像和我想的不是一样 你看这个图,在21和22行上有这两条数据,我只是想让D列相同的这两个D8合并成一行,而H这一列谁的数最大就让哪一行覆盖数小的, 比如,给21 ,22行加个小符号(为了明确明确识别,跟效果毫无关系),比如21=21.a。22=22.b。因为这两行D列同样是D8,所以进行合并,变成了21.a22.b 由于22.b行的H列的数(22)> 21.a的H列(20),所以22.b覆盖21.a,原本的21.a22.b变成了22.b。而这个22.b 就是21行。 所以最后就剩下21这一行,而这一行的数就是原来22的数,并且21行以上的20行内容不变,22行以下的往上移动。当然并不是只有21 ,22 这两行,可能还有23,24,25.
赵4老师 2017-10-12
  • 打赏
  • 举报
回复
在Excel中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。
狼二羊 2017-10-12
  • 打赏
  • 举报
回复
引用 9 楼 Chen8013 的回复:
“跟想象的不一样”,这怪我啊!!!! 自己的实际需求,跟你的帖子中的描述根本就不等价!
主要是我也不知道怎描述 我这个要求该怎么搞
舉杯邀明月 2017-10-12
  • 打赏
  • 举报
回复
“跟想象的不一样”,这怪我啊!!!! 自己的实际需求,跟你的帖子中的描述根本就不等价!
舉杯邀明月 2017-10-11
  • 打赏
  • 举报
回复
如果没有排序,并且是“放原处”,那么比较简单的方法还是只有进行“扫描”。 不过,在“去除重复”时,可能需要“删除并移动单元格”,但更简单的操作是“整行删除”。 如果只有A、B两列有数据,那么就可以用“整行删除”的方法; 否则,只能用删除单元格并上移的方式,才能避免把其它区域的数据删除了。 先给你一段用“整行删除”的吧,参考一下:
' Excel VBA代码:
Public Sub Proc()
   Dim strText As String
   Dim i&, j&, k  As Long
   Dim w&, u&, v  As Long

   u = WorksheetFunction.CountA(Sheet1.Range("A:A"))
   i = 1&   ' 数据从第1行开始
   Do
      If (i > u) Then Exit Do
      strText = Sheet1.Cells(i, 1).Text
      v = Sheet1.Cells(i, 2).Value
      k = 0&
      j = i
      Do
         j = 1& + j
         If (j > u) Then Exit Do
         If (strText = Sheet1.Cells(j, 1).Text) Then
            w = Sheet1.Cells(j, 2).Value
            If (w > v) Then v = w: k = vbTrue
            Call Sheet1.Rows(j).Delete
            u = u - 1&
         End If
      Loop
      If (k) Then Sheet1.Cells(i, 2).Value = v
      i = 1& + i
   Loop
End Sub
狼二羊 2017-10-11
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
1. “源数据”排序与否(也就是A列“相同”的是否全部在一起),处理方法有差异。   (当然不顾运行效率,把“源数据”一遍又一遍的进行全扫描的垃圾代码除外 ) 2. “处理结果”存放于“原处”,还是“另外的地方”(比如新创建一个表),方法也不一样。 提个“问题”,什么都不说清楚……
处理结果是放在原处,你看本来是4.5两列,结果合到4列,就算有4 5 6 7 8 9 也是合到第4列,至于排序.......应该是不全都在一起。。。 啊至于问题没说清楚我也不知道需要这么详细的说明,我错了
舉杯邀明月 2017-10-11
  • 打赏
  • 举报
回复
1. “源数据”排序与否(也就是A列“相同”的是否全部在一起),处理方法有差异。   (当然不顾运行效率,把“源数据”一遍又一遍的进行全扫描的垃圾代码除外 ) 2. “处理结果”存放于“原处”,还是“另外的地方”(比如新创建一个表),方法也不一样。 提个“问题”,什么都不说清楚……
狼二羊 2017-10-11
  • 打赏
  • 举报
回复
引用 1 楼 qq574221329 的回复:
...这不是合并吧,是A列去重.保留B列最大值....
那怎么搞~
小噤 2017-10-11
  • 打赏
  • 举报
回复
...这不是合并吧,是A列去重.保留B列最大值....

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧