2015-01-01 122 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 

注:上面的代碼沒有經過測試!

您只需將代碼更改爲您的需要即可。祝你好運!