VBA для цикла, возвращающего только одно значение, когда есть больше, которые соответствуют критериям - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь перенести операции с акциями из рабочей книги транзакций в другую книгу с нужным мне форматированием.Я хочу иметь возможность изменить имя клиента и запас в верхней части кода, чтобы его было легче запускать для нескольких человек.проблема в том, что когда я запускаю это, он возвращает только одну дату в моем отформатированном рабочем листе, когда я вижу, что есть 3 сделки с акциями для данного тикера с разными датами в книге транзакций.кажется, что функция FOR не проходит по всем строкам в книге транзакций, но я не уверен, почему

Sub SortTransactionData()


Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks("Allen Smith Transactions.xlsx")
Set ws = wb.Sheets("Sheet1")

Dim wb1 As Workbook 
Dim ws1 As Worksheet

Set wb1 = Workbooks("Allen Smith HI.xlsm")
Set ws1 = wb1.Sheets("MO")

Dim ticker As String
ticker = ws1.Range("A2")

Dim a As Integer
a = ws.Cells(Rows.Count, 6).End(xlUp).Row

Dim b As Integer
b = Application.WorksheetFunction.CountIf(ws1.Range("B1:B7"), "*")

For i = 2 To a
    'copy date for stock transaction'
    If ws.Cells(i, 6).Value = ticker Then
    ws1.Cells(b + 1, 2).Value = ws.Cells(i, 1)
    End If

Next
End Sub

1 Ответ

1 голос
/ 25 марта 2019

Как уже упоминалось в комментариях, проблема в том, что ячейка ws1.Cells(b + 1, 2) никогда не меняется, поэтому вы продолжаете перезаписывать старые значения, пока проходите цикл

Измените свой код для увеличения индекса, b, каждый раз в цикле:

For i = 2 To a
    'copy date for stock transaction'
    If ws.Cells(i, 6).Value = ticker Then
        ws1.Cells(b + 1, 2).Value = ws.Cells(i, 1)
        b = b + 1
    End If
Next i
...