首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要用偏移量函数循环一个公式,直到单元格为空。

我需要用偏移量函数循环一个公式,直到单元格为空。
EN

Stack Overflow用户
提问于 2010-04-20 18:37:13
回答 2查看 3.1K关注 0票数 0

我需要循环下面的公式,直到包含日期的"B“列为空为止。我被卡住了,我似乎无法编写VBA代码来执行循环,直到"B“栏中没有更多的日期。公式是通过使用有收益率的日期来平滑收益率。

我希望任何人都能帮助我。提前感谢

代码语言:javascript
复制
      A      B       C         D
5   Factor Date    Yield     Input
6    3     May-10   .25 
7    1     Jun-10  
8    2     Jul-10  
9    3     Aug-10   0.2000 
10   1     Sep-10  
11   2     Oct-10  
12   3     Nov-10   0.2418 
13   1     Dec-10  
14   2     Jan-11  
15   3     Feb-11   0.3156 
16   1     Mar-11  
17   2     Apr-11  

代码语言:javascript
复制
Sub IsNumeric()
  ' IF(ISNUMBER(C6),C6,
  If Application.IsNumber(range("c6").Value) Then
    range("d6").Value = range("c6")

    ' IF(C6<C5,((OFFSET(C6,2,0)-OFFSET(C6,-1,0))*A6/3+OFFSET(C6,-1,0)),
    If range("c6").Select < range("c5").Select Then
      range("d6").Value = range("c6").Offset(2, 0).Select - range("c6").Offset(-1, 0).Select * (range("a6").Select / 3) + range("c6").Offset(-1, 0).Select

      ' IF(C6<>C7,((OFFSET(C6,1,0)-OFFSET(C6,-2,0))*(A6/3)+OFFSET(C6,-2,0)),"")))
      If range("c6").Select <> range("c7").Select Then
        range("d6").Value = (range("c6").Offset(1, 0).Select) - range("c6").Offset(-2, 0).Select * (range("a6").Select / 3) + range("c6").Offset(-2, 0).Select
      Else
        range("d6").Value = ""
      End If
    End If
  End If
End Sub
EN

回答 2

Stack Overflow用户

发布于 2010-04-21 04:04:04

代码语言:javascript
复制
Sub Test01()
 Dim m, r, cell As Object
 Dim n As Boolean

 Set m = Sheets("Sheet1").Cells(1, 2)
 Do
  Set m = m.Offset(1, 0)
  Set r = m.Resize(20, 1)
  n = False
  For Each cell In r
   If cell.Formula <> "" Then
    n = True
   End If
  Next cell

  MsgBox m.Formula
 Loop Until n = False
End Sub

这将从B1开始,一直循环到B列,直到循环遇到一个单元格,在该单元格下面有20个连续的空白单元格。当循环到达在它下面有20个连续空白单元的单元格时,它只会偏移到它下面的第一个空白单元格并停止。

票数 1
EN

Stack Overflow用户

发布于 2010-05-05 06:02:34

如果我正确理解了..。

  1. 您需要将硬编码范围转换为变量
  2. --您正在正确地使用偏移量

代码语言:javascript
复制
Sub IsNumeric()
  dim tc as range

  set tc = range("B6")   'this is always column B, but the row keeps changing in the loop

  'IF(ISNUMBER(C6),C6,

  while tc <> ""
    If Application.IsNumber(tc.offset(0,1).Value) Then
      tc.offset(0,2).Value = tc.offset(0,1)

      'IF(C6<C5,((OFFSET(C6,2,0)-OFFSET(C6,-1,0))*A6/3+OFFSET(C6,-1,0)),
      If tc.offset(0,1) < tc.offset(-1,1) Then
        tc.offset(0,2).Value = tc.Offset(2, 1) - tc.Offset(-1, 1) * (tc.offset(0,-1) / 3) + tc.Offset(-1, 1)

        'IF(C6<>C7,((OFFSET(C6,1,0)-OFFSET(C6,-2,0))*(A6/3)+OFFSET(C6,-2,0)),"")))
        If tc.offset(0,1) <> tc.offset(1,1) Then
          tc.offset(0,2) = tc.offset(1,1) - tc.offset(-2,1) * (tc.offset(0,-1) / 3) + tc.offset(-2,1)
        Else
          tc.offset(0,2) = ""
        End If
      End If
    End If
    set tc=tc.offset(1,0)
  wend
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2677688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档