Excel精英培训网

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

[已解决]怎样补充循环补充日期

[复制链接]
发表于 2013-10-31 19:43 | 显示全部楼层 |阅读模式
10学分
本帖最后由 追梦人亮 于 2013-11-1 15:46 编辑

大家好,希望大家帮助,下面的工作簿中每个表里数据的时间段相同,但有些表中的日期会少几天,会影响计算,怎样用程序实现循环补充缺少的日期,使所有表的日期都和表399300的一样,对于缺少的日期对应的价格用上一天的代替即可,希望大神帮助哈!非常感谢!
以下是我编,老不能运行,求大神看错在哪儿了,谢谢了
  1. Sub 补充日期()
  2. Dim i
  3. Dim sh
  4.     For Each sh In Sheets                                                       '
  5.         With sh                                                                 '
  6.             If .Name Like "######" Then
  7.             For i = 3 To 400
  8.             If ActiveSheet.Cells(i, 1).Value <> Sheets("399300").Cells(i, 1).Value Then
  9.                Rows(i).Select
  10.                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove         'xlFormatFromLeftOrAbove指定从上方复制单元格的格式
  11.                Sheets("399300").Cells(i, 1).Select
  12.                Selection.Copy
  13.                Cells(i, 1).Select
  14.                ActiveSheet.Paste
  15.                Application.CutCopyMode = False
  16.                Range(Cells(i, 1), Cells(i, 2)).Select
  17.                With Selection.Interior
  18.               .Pattern = xlSolid
  19.               .PatternColorIndex = xlAutomatic
  20.               .Color = 255
  21.               End With
  22.               Rows(i).Select
  23.               Cells(i, 2).Value = 0
  24.                End If
  25.            Next i
  26.         End With
  27.     Next
  28. End Sub
复制代码
最佳答案
2013-11-1 15:00
  1. Sub Test()
  2.     Dim A(), B(), C()
  3.     Dim i&, j&, x&, y&


  4.     '确定数组A
  5.     Sheets(1).Select
  6.     x = Application.Min(Range("a:a"))
  7.     y = Application.Max(Range("a:a"))
  8.     ReDim A(x To y, 1 To 2)
  9.     For i = LBound(A) To UBound(A)
  10.         A(i, 1) = i
  11.     Next i
  12.     C = A
  13.    

  14.     '注:如果其它表的日期并不包含于数组A,下面可能出错
  15.     For j = 2 To Sheets.Count
  16.         A = C
  17.         With Sheets(j)
  18.             '1.输入
  19.             B = .Range("a1").CurrentRegion.Value
  20.             For i = 3 To UBound(B)
  21.                 A(B(i, 1), 2) = B(i, 2)
  22.             Next i
  23.             
  24.             '2.修改
  25.             For i = LBound(A) To UBound(A)
  26.                If A(i, 2) = "" Then A(i, 2) = A(i - 1, 2)
  27.             Next i
  28.             
  29.             '3.输出
  30.             .Range("a3:b65536").ClearContents
  31.             .Range("a3").Resize(y - x + 1, UBound(A, 2)) = A
  32.         End With
  33.     Next j
  34. End Sub
复制代码
证券2.rar (101.54 KB, 下载次数: 12)

证券.zip

109.81 KB, 下载次数: 12

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2013-10-31 22:59 | 显示全部楼层
不是,研究生课程,衍生金融工具与对冲基金,现在做对冲基金要处理大量数据![em31]
回复

使用道具 举报

发表于 2013-11-1 15:00 | 显示全部楼层    本楼为最佳答案   
  1. Sub Test()
  2.     Dim A(), B(), C()
  3.     Dim i&, j&, x&, y&


  4.     '确定数组A
  5.     Sheets(1).Select
  6.     x = Application.Min(Range("a:a"))
  7.     y = Application.Max(Range("a:a"))
  8.     ReDim A(x To y, 1 To 2)
  9.     For i = LBound(A) To UBound(A)
  10.         A(i, 1) = i
  11.     Next i
  12.     C = A
  13.    

  14.     '注:如果其它表的日期并不包含于数组A,下面可能出错
  15.     For j = 2 To Sheets.Count
  16.         A = C
  17.         With Sheets(j)
  18.             '1.输入
  19.             B = .Range("a1").CurrentRegion.Value
  20.             For i = 3 To UBound(B)
  21.                 A(B(i, 1), 2) = B(i, 2)
  22.             Next i
  23.             
  24.             '2.修改
  25.             For i = LBound(A) To UBound(A)
  26.                If A(i, 2) = "" Then A(i, 2) = A(i - 1, 2)
  27.             Next i
  28.             
  29.             '3.输出
  30.             .Range("a3:b65536").ClearContents
  31.             .Range("a3").Resize(y - x + 1, UBound(A, 2)) = A
  32.         End With
  33.     Next j
  34. End Sub
复制代码
证券2.rar (101.54 KB, 下载次数: 12)
回复

使用道具 举报

发表于 2013-11-1 15:05 | 显示全部楼层
“... 对于缺少的日期对应的价格用上一天的代替即可 ...”
如果缺少的日期是2012/10/8,那不是要B3="开盘"  ?
回复

使用道具 举报

 楼主| 发表于 2013-11-1 15:17 | 显示全部楼层
爱疯 发表于 2013-11-1 15:05
“... 对于缺少的日期对应的价格用上一天的代替即可 ...”
如果缺少的日期是2012/10/8,那不是要B3="开盘" ...

嗯,用上一天的收盘,也就是把上一行的复制下来,最终是日期要对应,接下来好做一些分析,谢谢啦

点评

3楼哪儿不符合题意?  发表于 2013-11-1 15:20
回复

使用道具 举报

 楼主| 发表于 2013-11-1 15:42 | 显示全部楼层
追梦人亮 发表于 2013-11-1 15:17
嗯,用上一天的收盘,也就是把上一行的复制下来,最终是日期要对应,接下来好做一些分析,谢谢啦

哈哈,不好意思啊,可以了,刚试了,但有一个地方不懂,
    x = Application.Min(Range("a:a"))       '
    y = Application.Max(Range("a:a"))       '
    ReDim A(x To y, 1 To 2)                 '
    For i = LBound(A) To UBound(A)
        A(i, 1) = i
    Next i
    C = A
这段话的意思是什么,能详细解释下吗,刚查帮助了没有看明白,谢谢啦
回复

使用道具 举报

发表于 2013-11-1 15:52 | 显示全部楼层
重新定义一个二维数组A,
A的下界是第1个工作表A列最小值,
A的下上是第1个工作表A列最大值,

并让数组A第1列的值,依次等于第1个工作表A列的各值
回复

使用道具 举报

 楼主| 发表于 2013-11-1 15:54 | 显示全部楼层
爱疯 发表于 2013-11-1 15:52
重新定义一个二维数组A,
A的下界是第1个工作表A列最小值,
A的下上是第1个工作表A列最大值,

但最小值是日期,可以吗,正常不是A(34,45),这种形式吗

点评

不明白这句话的意思  发表于 2013-11-1 15:57
回复

使用道具 举报

 楼主| 发表于 2013-11-1 16:01 | 显示全部楼层
追梦人亮 发表于 2013-11-1 15:54
但最小值是日期,可以吗,正常不是A(34,45),这种形式吗

他是把日期的最小值给x了还是,单元格的位置的最小值给X了

点评

是把日期的最小值给x了  发表于 2013-11-1 16:34
回复

使用道具 举报

 楼主| 发表于 2013-11-1 16:06 | 显示全部楼层
追梦人亮 发表于 2013-11-1 15:54
但最小值是日期,可以吗,正常不是A(34,45),这种形式吗

再次打扰了,刚看了一下,有点小问题,有的把周六周日的日期也补上了,这两天不开盘,所以没有数据,不用补周六周日的[em07]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 21:27 , Processed in 0.409111 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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