Получите те же результаты на прилагаемой первой картинке - PullRequest
0 голосов
/ 20 июня 2020

Pi c 2 показывает, каким должно быть решение, а Pi c 1 показывает, что дал мне мой код, различия проявляются в столбцах «Годовое изменение», «Процентное изменение» и «Общий объем запасов».

Созданный мною l oop работает для всех листов, но мои цифры в указанном столбце отключены, могу ли я получить помощь в исправлении моего кода, прикрепленного для получения чисел, похожих на Pi c 2? Спасибо

Option Explicit
Sub Stockmarket()
    'Declare and set worksheet
    Dim ws          As Worksheet
    
    'Loop through all stocks for one year
    For Each ws In Worksheets
        
        'Create the column headings
        ws.Range("I1").Value = "Ticker"
        ws.Range("J1").Value = "Yearly Change"
        ws.Range("K1").Value = "Percent Change"
        ws.Range("L1").Value = "Total Stock Volume"
        
        ws.Range("P1").Value = "Ticker"
        ws.Range("Q1").Value = "Value"
        ws.Range("O2").Value = "Greatest % Increase"
        ws.Range("O3").Value = "Greatest % Decrease"
        ws.Range("O4").Value = "Greatest Total Volume"
        
        'Define Ticker variable
        Dim Ticker  As String
        
        'Set initial and last row for worksheet
        Dim Lastrow As Long
        Dim i       As Long
        Dim j       As Integer
        Dim x       As Double
        j = 2
        x = 2
        
        'Define Lastrow of worksheet
        Lastrow = ws.Cells(Rows.Count, 1).End(xlUp).Row
        
        'Set new variables for prices and percent changes
        Dim open_price As Double
        'open_price = 0
        Dim close_price As Double
        'close_price = 0
        Dim price_change As Double
        'price_change = 0
        Dim price_change_percent As Double
        'price_change_percent = 0
        
        'Create variable to keep the ticker row in
        Dim TickerRow As Long
        TickerRow = 1
        
        Dim stock_volume As Double
        stock_volume = 0
        
        'Do loop of current worksheet to Lastrow
        For i = 2 To Lastrow
            
            'Ticker symbol output
            If ws.Cells(i + 1, 1).Value <> ws.Cells(i, 1).Value Then
                TickerRow = TickerRow + 1
                Ticker = ws.Cells(i, 1).Value
                ws.Cells(TickerRow, "I").Value = Ticker
                
                'Stock Volume output
                If ws.Cells(i, 1).Value = ws.Cells(i + 1, 1).Value Then
                    stock_volume = stock_volume + ws.Cells(i, 7).Value
                    
                ElseIf ws.Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
                    stock_volume = stock_volume + ws.Cells(i, 7).Value
                    
                    ws.Cells(j, 9).Value = ws.Cells(i, 1).Value
                    ws.Cells(j, 12).Value = stock_volume
                    j = j + 1
                    stock_volume = 0
                End If
                
                'Creating the Yearly change and Percent change output
                open_price = ws.Cells(i, 3).Value
                close_price = ws.Cells(i, 6).Value
                
                ws.Cells(x, 10).Value = open_price - close_price
                
                If close_price <= 0 Then
                    ws.Cells(x, 11).Value = 0
                Else
                    ws.Cells(x, 11).Value = (close_price / open_price) - 1
                End If
                
                ws.Cells(x, 11).Style = "Percent"
                If ws.Cells(x, 10).Value >= 0 Then
                    ws.Cells(x, 10).Interior.ColorIndex = 4
                Else
                    ws.Cells(x, 10).Interior.ColorIndex = 3
                End If
                
                x = x + 1
                ws.Cells(x, 9).Value = ws.Cells(i, 1).Value
                
                ws.Cells(x, 10).Value = close_price - open_price
                If close_price <= 0 Then
                    ws.Cells(x, 11).Value = 0
                Else
                    ws.Cells(x, 11).Value = (close_price / open_price) - 1
                End If
                ws.Cells(x, 11).Style = "Percent"
                If ws.Cells(x, 10).Value >= 0 Then
                    ws.Cells(x, 10).Interior.ColorIndex = 4
                Else
                    ws.Cells(x, 10).Interior.ColorIndex = 3
                End If
                
            End If
            
        Next i
        
    Next ws
End Sub
 

enter image description here

введите описание изображения здесь

1 Ответ

0 голосов
/ 20 июня 2020

Похоже, у вас возникла проблема с логином c - см. Две отмеченные строки ниже

        'Ticker symbol output
        If ws.Cells(i + 1, 1).Value <> ws.Cells(i, 1).Value Then '<<<<<<<<<
            
            TickerRow = TickerRow + 1
            Ticker = ws.Cells(i, 1).Value
            ws.Cells(TickerRow, "I").Value = Ticker
            
            'Stock Volume output
            If ws.Cells(i, 1).Value = ws.Cells(i + 1, 1).Value Then '<<< never true!
                stock_volume = stock_volume + ws.Cells(i, 7).Value
                
            ElseIf ws.Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
                stock_volume = stock_volume + ws.Cells(i, 7).Value
                
                ws.Cells(j, 9).Value = ws.Cells(i, 1).Value
                ws.Cells(j, 12).Value = stock_volume
                j = j + 1
                stock_volume = 0
            End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...