2015-01-01 205 views
-1

我是VBA的新手(正如我基本上不知道如何在VBA中编写代码,但我知道Python和一般编码逻辑)。我有一个Excel电子表格,其中包含了纽约证券交易所每天开放的2004年至2014年期间的特定股票数据。这些数据包括大约20栏,但我只关注3栏:日期(栏a),具有特定百分比(栏h)的栏和栏(栏k)。我想写一个简单的程序,如下:VBA循环遍历列的正负号

1)找到列h中的第一个正数百分比,以及列a和k的同一行中的值(即,如果它是第三行,则从单元格中查找值A3,H3和K3)

2)找到第一个负数的百分比,跟在第一个正数百分比之后的第一个在同一列h中,以及第a和第k列的相应数值(如果是第7行,然后找到来自单元格A7,H7和K7的值)

3)从上述两个步骤中找出在k列中找到的2个值的差异百分比,以及从正数和负的百分比(即。 7-3 = 4)

4)对包含近3000行数据的整个数据集执行此操作 - 例如,在完成步骤1,2和3后,程序应查找以下第一个正数百分比在步骤2中计算负值百分比,然后找到第一个负值百分比,然后找到k列中值的差异百分比和行数差异

5)将信息从第4位步骤到一个新的电子表格(A,H和K列中的值,%差异,以及来自正百分比和负百分比的行数差异)

有人可以请wr为我这里迭代VBA代码,因为我是VBA新手,但需要明天完成这个任务!此外,如何开始学习VBA的任何提示将非常感谢!提前致谢,新年快乐!

请让我知道你是否需要任何澄清。

回答

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 

注:上面的代码没有经过测试!

您只需将代码更改为您的需要即可。祝你好运!