Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba Excel:创建新行并插值_Vba_Excel - Fatal编程技术网

Vba Excel:创建新行并插值

Vba Excel:创建新行并插值,vba,excel,Vba,Excel,我正在寻找一个Excel宏,它能够通过列A(时间)并创建一个新行,其中每个整数都应该是。创建新行后,需要为该新行内插列D和E的值。该行也应高亮显示。最后,所有高亮显示的行都应该隐藏(这可以通过按单元格颜色过滤完成) 我遇到的最大问题是何时插入新行,因为它们之间的行数并不总是相同的。我曾考虑过比较相邻行中的单元格,但我不确定如何进行比较 下面是一张图片来帮助解释我需要什么。(减去隐藏的行)以下是您“最大问题”的代码。。。。我不确定“插值”部分需要什么数学: 子插入\u整行\u编号\u行() C=1

我正在寻找一个Excel宏,它能够通过列A(时间)并创建一个新行,其中每个整数都应该是。创建新行后,需要为该新行内插列D和E的值。该行也应高亮显示。最后,所有高亮显示的行都应该隐藏(这可以通过按单元格颜色过滤完成)

我遇到的最大问题是何时插入新行,因为它们之间的行数并不总是相同的。我曾考虑过比较相邻行中的单元格,但我不确定如何进行比较

下面是一张图片来帮助解释我需要什么。(减去隐藏的行)

以下是您“最大问题”的代码。。。。我不确定“插值”部分需要什么数学:

子插入\u整行\u编号\u行()
C=1
R=ActiveCell.Row
如果单元格(R,C)=“”,则退出Sub
直到单元格(R,C)=“
如果Int(Cells(R,C))Int(Cells(R+1,C)),那么
行(R+C)。插入
R=R+1
单元(R,C)=Int(单元(R+1,C))
范围(单元格(R,C),单元格(R,C+5)).Interior.ColorIndex=6
如果结束
R=R+1
环
MsgBox“完成…”
端接头

我想这就是你想要的。不是VBA解决方案,而是Excel解决方案

  • 用要使用的整数值(单元格“E3”及以下)制作一个表格
  • 找到最接近的数字的行
    index=MATCH(E3$B$3:$B$105)
  • 获取上一个和下一个
    t
    t1=索引($B$3:$B$105,$F3)
    t2=索引($B$3:$B$105,$F3+1)
  • 获取上一个和下一个
    x
    x1=索引($C$3:$C$105,$F3)
    t2=索引($C$3:$C$105,$F3+1)
  • 插入
    x
    x=FORECAST(E3,I3:J3,G3:H3)

  • 如果int(.cells(i,“A”).value2)int(.cells(i+1,“A”).value2),那么
    我已经用三次样条曲线完全做到了这一点。对于您的解决方案来说太复杂了。试着用
    VLOOKUP()
    FORECAST()
    做你想做的事。谢谢你,迈克!我添加了一个ElseIf,以便在时间数据已经是整数的情况下不创建新行。插值的形式应为y=y1+(x-x1)*((y2-y1)/x2-x1))。在第一篇文章的照片中,它显示为所选单元格。我试着用Range.Formula和Range.FormulaR1C1来做这个。我在写公式时找不到如何引用某个单元格。
    Sub Insert_whole_Number_row()
        C = 1
        R = ActiveCell.Row
        If Cells(R, C) = "" Then Exit Sub
        Do Until Cells(R, C) = ""
            If Int(Cells(R, C)) <> Int(Cells(R + 1, C)) Then
                Rows(R + C).Insert
                R = R + 1
                Cells(R, C) = Int(Cells(R + 1, C))
                Range(Cells(R, C), Cells(R, C + 5)).Interior.ColorIndex = 6
            End If
            R = R + 1
        Loop
        MsgBox "Done...."
    End Sub