我是VBA的新手(因为我基本上不知道如何在VBA中编码,但我知道python和通用编码逻辑)。我有一张excel电子表格,其中包含纽约证券交易所每天开市时2004 - 2014年的特定股票数据。这个数据包括大约20列,但我只关心3个:日期(col a),具有特定百分比的列(col h)和具有价格的列(col k)。我想写一个简单的程序,以便:
1)从列h中找到第一个正百分比,在列a和k的同一行中找到值(即,如果它是第三行,则从单元格A3,H3和K3中找到值)
2)找到同一列h中步骤1的第一个正百分比后的第一个负百分比,以及来自a和k列的相应值(即,如果它是第7行,则从单元格A7,H7中找到值) ,和K7)
3)从上述两个步骤中找到k列中找到的2个值的%差异,以及从正百分比和负百分比(即7-3 = 4)中行数的差异
4)对具有近3000行数据的整个数据集执行此操作 - 例如,在完成步骤1,2和3之后,程序应在步骤2中找到负百分比之后的第一个正百分比,然后在那之后找到第一个负百分比,然后找到k列中值的%差异和行数的差异
5)将前4个步骤中的信息放入新的电子表格中(A,H和K列中的值,%差异,以及正百分比和负百分比中行数的差异) )
有人可以为我写这个VBA代码,因为我是VBA的新手,但需要明天完成!此外,非常感谢任何有关如何开始学习VBA的提示!提前谢谢,新年快乐!
如果您需要澄清任何内容,请告诉我。
答案 0 :(得分:0)
只是一个想法:
Sub CompareData()
Dim srcwsh as Worksheet, dstwsh as Worksheet
Dim i as Integer, j as Integer
'source worksheet
Set srcWsh = Thisworkbook.Worksheets(1) ' or Thisworkbook.Worksheets("SheetName")
'destination worksheet
Set dstWsh = Thisworkbook.Worksheets.Add(After:=Thisworkbook.Worksheets(Thisworkbook.Worksheets.Count))
'define headers
dstWsh.Range("A1") = "Date"
dstWsh.Range("B1") = "Percentage"
dstWsh.Range("C1") = "Price"
dstWsh.Range("C1") = "Difference"
'start searching from 2. row
i = 2
Do While srcwsh.Range("A" & i)<> ""
'if value of column H is positive
If srcwsh.Range("H" & i)>0 Then
'find first empty row in a destination worksheet
j = GetFirstEmptyRow(dstWsh)
Union(srcWsh.Range("A" & i), srcWsh.Range("H" & i), srcWsh.Range("K" & i)).Copy dstWsh.Range("A" & j)
dstWsh.Range("D" & j).Formula = "=IF(ISERROR(D" & j-1 & "-D" & j & "),'',D" & j-1 & "-D" & j & ")"
End If
i = i+1
Loop
End Sub
Function GetFirstEmptyRow(ByVal wsh as Worksheet, ByVal Optional sCol As String = "A") As Integer
GetFirstEmptyRow = wsh.Range(sCol & wsh.Rows.Count).End(xlShiftUp).Row +1
End Function
注意:上面的代码还没有经过测试!
您需要做的就是根据需要更改代码。祝你好运!