如何记录范围内连续单元格之间的差异?

时间:2016-01-12 11:10:31

标签: excel-vba vba excel

我有一个正常运行的宏,它会将实时数据表(Sheet)中的实时数据的静态值每秒粘贴到单独的工作表(Sheet2)上。代码如下。对于您的信息,范围(" B2:B2195和#34;)是股票代码,而范围(" H2:H2195和#34;)是股票报价。

Sub copypaste_RECENT()

Dim ab As Integer



Worksheets("Sheet").Range("B2:B2195").Copy


With Sheets("Sheet2")
    .Range("B1").PasteSpecial Transpose:=True

    ab = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

    .Cells(1, 1).Value = "Time"
    .Cells(ab, 1).Value = Now


    Worksheets("Sheet").Range("H2:H2195").Copy
    .Range("B" & ab).PasteSpecial Paste:=xlPasteValues, Transpose:=True


End With


Application.OnTime Now + TimeSerial(0, 0, 1), "copypaste_RECENT"

End Sub

我的下一步是我遇到麻烦的一步。我想记录股票报价之间的差异。这意味着计算某个单元格与其上方单元格之间的差异,并将该差异记录到单独的工作表(Sheet3)上。这将与上面的代码同时运行,因此我尝试在结束时和应用程序之前包含其他代码。代码如下。

Worksheets("Sheet").Range("B2:B2195").Copy

With Sheets("Sheet3")

    .Range("B1").PasteSpecial Transpose:=True

    Dim xy As Long, yz As Long

    ab = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    bc = .Cells(1, .Columns.Count).End(x1toleft).Column + 1


    .Cells(1, 1).Value = "Time"
    .Cells(ab, 1).Value = Now

    xy = Worksheets("Sheet2").Cells(.Rows.Count, 1).End(x1up).Row
    yz = Worksheets("Sheet2").Cells(.Rows.Count, 1).End(x1up).Row.Offset(-1, 0)


    For ab = 1 To Cells(Rows.Count, 1).End(x1up).Row + 1
    For bc = 1 To Cells(1, Columns.Count).End(x1toleft).Column + 1
        .Cells(ab, bc).Value = xy - yz
    Next ab
    Next bc



End With

我对VBA很新,我知道这是完全错误的。我已经挣扎了一段时间,但我希望它有某种意义。

提前致谢!

捐赠

EDIT1:这是一个简单的计算,用于计算某个单元格与其上方单元格之间的差异,并将该值记录到单独的工作表上。对该范围内的每个单元格进行此计算。

1 个答案:

答案 0 :(得分:0)

我并不完全理解你想要达到的目标。它是alog,所以你写连续的复制和计算条目行,或者只是一些计算。因此,根据这一点,您至少有三个选项:

1)使用数学函数复制/粘贴

使用具有特殊数学函数的复制/过去(加,减,乘,除)

2)公式

你将sheet3中的formuala输入到B2 = + sheet2!B4-sheet2!B3中,它将自动计算。

3)计算商店差异

进行如上所述的计算,并将结果复制/粘贴到最终目的地。

修改

Excel旨在进行计算!那你为什么要重做呢?

您可以将所有提到的解决方案都用作VBA。与您一样的方法是使用上面的复制和粘贴。

这是一个简短的makro,它显示了我的意思。

Sub Makro1()
'
' Makro1 Makro
'

'
    ActiveCell.FormulaR1C1 = "Line 1"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "8"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "6"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "4"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "6"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "12"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "Line 2"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "15"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "456"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "23"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "42"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "45"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "77"
    Range("A1:G1").Select
    Selection.Copy
    Range("A5").Select
    ActiveSheet.Paste
    Range("B2:G2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("B5").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _
        SkipBlanks:=False, Transpose:=False
End Sub