VBA for循环仅在满足条件的情况下返回一个值

问题描述 投票:0回答:1

我正在尝试将股票交易从交易工作簿转移到另一本具有我想要的格式的书。我希望能够在代码顶部更改客户端名称和库存,以便更容易为多人运行。问题是,当我运行它时,它只返回格式化工作表中的一个日期,当我可以看到交易手册中有不同日期的给定股票代码有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
excel vba for-loop if-statement worksheet-function
1个回答
1
投票

正如评论中所提到的,问题是单元格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
© www.soinside.com 2019 - 2024. All rights reserved.