Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我需要用偏移函数循环一个公式,直到单元格为空_Excel_Vba - Fatal编程技术网

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

Excel 我需要用偏移函数循环一个公式,直到单元格为空,excel,vba,Excel,Vba,我需要循环下面的公式,直到包含日期的列“B”为空。 我被卡住了,在“B”列中没有更多日期之前,我似乎无法编写VBA代码来执行循环。公式是使用那些有收益的日期来平滑收益率 我希望任何人都能帮助我。提前谢谢 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-

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

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

      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  

Sub-IsNumeric()
'如果(ISNUMBER(C6),C6,,
如果Application.IsNumber(范围(“c6”).值),则
范围(“d6”)。值=范围(“c6”)
'如果(C6
Sub Test01()
将m、r、单元格作为对象
Dim n为布尔型
设置m=板材(“板材1”)。单元(1,2)
做
设置m=m.Offset(1,0)
设置r=m。调整大小(20,1)
n=错误
对于r中的每个单元格
如果是cell.Formula“”,则
n=正确
如果结束
下一个细胞
MsgBox m.公式
循环直到n=False
端接头

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

如果我理解正确

  • 您需要将硬编码范围转换为变量
  • 您正在正确使用偏移量
  • 我知道while/wend已经过时了,对不起:)

  • Sub-IsNumeric()
    dim tc as范围
    设置tc=range(“B6”)'这始终是B列,但行在循环中不断变化
    '如果(ISNUMBER(C6),C6,,
    而tc“
    如果应用程序.IsNumber(tc.offset(0,1).Value),则
    tc偏移量(0,2).值=tc偏移量(0,1)
    
    '如果(C6),请重新格式化,使您的代码看起来与文本不同,并使缩进清楚地显示what.CEMG下嵌套的内容,我们很乐意提供帮助,但通过适当的缩进,这将更容易理解。我需要IF语句从D6循环到D17。因此,我希望循环在“B”列停止一次是空的,只要“B”列中有数据,我就希望If语句进行计算。
    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
    
    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
    
    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