我有一个正常运行的宏,它会将实时数据表(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:这是一个简单的计算,用于计算某个单元格与其上方单元格之间的差异,并将该值记录到单独的工作表上。对该范围内的每个单元格进行此计算。
答案 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