Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2739|回复: 10

[已解决]修改代码使之动态化

[复制链接]
发表于 2016-5-29 23:13 | 显示全部楼层 |阅读模式
本帖最后由 乐乐2006201506 于 2016-5-30 17:14 编辑

        希望哪位大师能够修改下面这段代码,使得紫色部分数据赋予变量后可以实现动态化,我想要的是1号-31号,只要有相应日期的数据,则动态化提取过来,并进行处理。谢谢!

我的思路是用数组实现,但是数组我一窍不通。
注:此代码在模块2中。
或者将下面这段代码中的紫色部分代码合并,因为总共有31号,所以需要使之动态化,但是1号至31号用for 1号 to 31号 的方法无法实现动态化。
Sub 汇总zi()     If Sheets("总表").[C1] = "1号" Then
        Sheets("总表").[B2: D200].Value = Sheets(Sheets("总表").[C1].Value).[B2: D200].Value
       ElseIf Sheets("总表").[C1] = "2号" Then
          Sheets("总表").[B2: D200].Value = Sheets(Sheets("总表").[C1].Value).[B2: D200].Value
       ElseIf Sheets("总表").[C1] = "3号" Then
          Sheets("总表").[B2: D200].Value = Sheets(Sheets("总表").[C1].Value).[B2: D200].Value
       ElseIf Sheets("总表").[C1] = "4号" Then
          Sheets("总表").[B2: D200].Value = Sheets(Sheets("总表").[C1].Value).[B2: D200].Value
       ElseIf Sheets("总表").[C1] = "5号" Then
          Sheets("总表").[B2: D200].Value = Sheets(Sheets("总表").[C1].Value).[B2: D200].Value
     End If
  Range("C2:C63356").Delete Shift:=xlToLeft
  With Range("B2:C63356")
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
  End With
  Columns("C:C").EntireColumn.AutoFit
  Range("B2").Select
End Sub



最佳答案
2016-5-30 15:04
乐乐2006201506 发表于 2016-5-30 13:55
麻烦您把能达到这个图片中效果的代码发过来,谢谢!

你参考下吧,不知是不是你要的
  1. Sub 汇总zi1不删除列()
  2.     Range("B2:D200").ClearContents
  3. For Each sh In Worksheets
  4. i = Sheets("总表").[B2000].End(xlUp).Row + 2
  5.     If sh.Name <> "总表" Then
  6.        Sheets("总表").Range("B" & i & ":D200").Value = sh.[B2:D200].Value
  7.        Columns("C:C").EntireColumn.AutoFit
  8.        Range("B2").Select
  9.     End If
  10. Next
  11. End Sub
复制代码

总表.rar

257.42 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-5-30 07:08 | 显示全部楼层
可是这个意思,c1输入1号到N号,提取汇总对应工作表的内容
  1. 02761752696:
  2. Sub 汇总zi()
  3. Dim i As Variant
  4.         Sheets("总表").[B2: D200].Value = Sheets([C1].Value).[B2: D200].Value
  5.   Range("C2:C63356").Delete Shift:=xlToLeft
  6.   With Range("B2:C63356")
  7.       .HorizontalAlignment = xlCenter
  8.       .VerticalAlignment = xlCenter
  9.   End With
  10.   Columns("C:C").EntireColumn.AutoFit
  11.   Range("B2").Select
  12. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-5-30 12:54 | 显示全部楼层
02761752696 发表于 2016-5-30 07:08
可是这个意思,c1输入1号到N号,提取汇总对应工作表的内容

下面代码可以运行,但是无法达到目的。请修正,谢谢!

Sub 汇总zi1不删除列()
Dim sr As Variant
    For sr = 1 & 号 To 31 & 号   '此为变量,但好像不起作用。
        If Sheets("总表").[C1] = "1号" Then             ’实现当工作表总表中C1单元格中输入1号,即可将工作表1号中的相应单元格区域数据提取,输入2号时,可以将工作表2号中的相应单元格区域数据提取,以此类推,实现动态化。
           Sheets("总表").[B2:C200].Value = Sheets(Sheets("总表").[C1].Value).[B2:C200].Value
        End If
     Next sr
  Columns("C:C").EntireColumn.AutoFit
  Range("B2").Select
End Sub

回复

使用道具 举报

 楼主| 发表于 2016-5-30 12:57 | 显示全部楼层
02761752696 发表于 2016-5-30 07:08
可是这个意思,c1输入1号到N号,提取汇总对应工作表的内容

您修改的这个代码直接无法运行,同时没有实现动态化,即使用变量。
回复

使用道具 举报

发表于 2016-5-30 13:16 | 显示全部楼层
1、你C1的值怎么来的,是自动赋值,还是手动输入
2、你的for 编写错误,就算没错但是你的变量没有赋值对象
3、你的 IF 条件是C1是“1号”就执行下面代码,如果不是就不可能执行
4、我之前给的代码你试了吗?那个就是手动在C1写入 1号,2号,3号就会自动提取工作表1号2号3号..的内容
5、下面是你3楼的代码改的,效果那看图片,不知是否合你意??看看吧
  1. Sub 汇总zi1不删除列()
  2. Dim sr As Variant
  3.           Sheets("总表").[B2:D200].Value = Sheets([C1].Value).[B2:D200].Value
  4.   Columns("C:C").EntireColumn.AutoFit
  5.   Range("B2").Select
  6. End Sub
复制代码
ww.gif
回复

使用道具 举报

发表于 2016-5-30 13:21 | 显示全部楼层
本帖最后由 02761752696 于 2016-5-30 13:38 编辑
乐乐2006201506 发表于 2016-5-30 12:57
您修改的这个代码直接无法运行,同时没有实现动态化,即使用变量。

或者你是要将工作表:1号到31号的内容全部汇总到总表
1号内容下面接2号内容下面再接3号内容.....???
wq.gif
回复

使用道具 举报

 楼主| 发表于 2016-5-30 13:55 | 显示全部楼层
本帖最后由 乐乐2006201506 于 2016-5-30 14:28 编辑
02761752696 发表于 2016-5-30 13:21
或者你是要将工作表:1号到31号的内容全部汇总到总表
1号内容下面接2号内容下面再接3号内容.....???
...

         wq.gif
        麻烦您把能达到这个图片中效果的代码发过来,谢谢!
回复

使用道具 举报

发表于 2016-5-30 15:04 | 显示全部楼层    本楼为最佳答案   
乐乐2006201506 发表于 2016-5-30 13:55
麻烦您把能达到这个图片中效果的代码发过来,谢谢!

你参考下吧,不知是不是你要的
  1. Sub 汇总zi1不删除列()
  2.     Range("B2:D200").ClearContents
  3. For Each sh In Worksheets
  4. i = Sheets("总表").[B2000].End(xlUp).Row + 2
  5.     If sh.Name <> "总表" Then
  6.        Sheets("总表").Range("B" & i & ":D200").Value = sh.[B2:D200].Value
  7.        Columns("C:C").EntireColumn.AutoFit
  8.        Range("B2").Select
  9.     End If
  10. Next
  11. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-5-30 16:56 | 显示全部楼层
谢谢!试验后给你最佳。
回复

使用道具 举报

发表于 2016-5-30 17:23 | 显示全部楼层
乐乐2006201506 发表于 2016-5-30 16:56
谢谢!试验后给你最佳。

不客气 ,其实你的数据不够完整,所以代码没有通用性,
再有很多事其实可以换个思路,也可以达到目的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 18:28 , Processed in 0.260378 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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