遍历单元格并将值添加到数组中,然后显示到 VBA 中的活动单元格中
Loop through cells and add values into an array then display into activecell in VBA
我已经为此苦苦挣扎了一段时间,我需要帮助。我是 vba 的新手,希望就此问题提供一些指导。我的电子表格已设置好,所以我在单元格 a2 中读取 b2 中的值,它是一个整数,告诉我存在多少补充配置文件 (sups)。假设数字 3 在 b2 中。然后我希望 c2 下面的 2 行在 c3 和 c4 中也输入一些文本(角色)。
在 a2 上,我正在读取 b2 以了解补充配置文件的数量,然后循环显示在 a2 上在 c2、c3 和 c4 中找到的角色。这可能会改变,因为在某些情况下只会有 2 个或 3 个角色,依此类推。
为此,我编写了以下代码:
Sub testarray()
Dim sups As Integer
Dim role, resultrole As String
Dim test() As String
role = ActiveCell.Offset(i, 2).Value
sups = ActiveCell.Offset(0, 1).Value
i = 0
Do While i <= sups
test() = Split(role)
i = i + 1
ActiveCell.Value = test()
Loop
End Sub
问题是我只显示了 c2 行,而不是下面的所有内容。我希望 a2 显示值 c2、c3 和 c4。我会 运行 此代码针对许多行以便关联角色。
查看我的代码图片和包含我正在阅读的值的电子表格
感谢您对此的帮助...非常感谢任何反馈!
您只能看到单元格 A 中显示的第一个值,因为您从未告诉代码移动活动单元格以外的任何地方。您确实有一个循环,但它只是遍历数字。
下面的代码将遍历 B 列中的所有单元格,并将角色写入与存储 sups 编号的位置相邻的 A 列中。它将写入由 |
分隔的内容。您可以随意编辑。
Array的使用我也拿出来了。当您使用它时,它不会给您您想要的 - 这是一个串联值。您可以将单元格范围存储到一个数组中,然后遍历该数组以将单元格值写入 A 列,但鉴于您的问题,这似乎没有真正的优势。
Sub testarray()
Dim sups As Long, x As Long
Dim role As String
Dim lRow As Long
lRow = Range("B" & Rows.Count).End(xlUp).Row
Dim cel As Range
For Each cel In Range("B2:B" & lRow)
role = ""
If Len(cel) Then
sups = cel
For x = 1 To sups
role = role & "|" & cel.Offset(x - 1, 1)
Next
role = Mid(role, 2, Len(role) - 1)
cel.Offset(, -1) = role
End If
Next
End Sub
一些小的调整,以使其尽可能接近原始版本。我不喜欢使用 ActiveCell
,但是@ScottHoltzman 有一个解决方案可以这样做。
Sub testarray()
Dim sups As Integer, i&
Dim role, resultrole As String
Dim test As String
role = ActiveCell.Offset(i, 2).Value
sups = ActiveCell.Offset(0, 1).Value
i = 0
Do While i <= sups - 1
If i = 0 Then
test = ActiveCell.Offset(i, 2)
Else
test = test & ", " & ActiveCell.Offset(i, 2)
End If
i = i + 1
Loop
ActiveCell.Value = test
End Sub
这应该一次与 ActiveCell property 一起使用。
Sub testarray()
Dim sups As Long, roles As Variant
With ActiveCell
sups = .Offset(0, 1).Value
ReDim roles(sups - 1)
For sups = LBound(roles) To UBound(roles)
roles(sups) = .Offset(sups, 2)
Next v
.Cells = Join(roles, Chr(10))
End With
End Sub
我已经为此苦苦挣扎了一段时间,我需要帮助。我是 vba 的新手,希望就此问题提供一些指导。我的电子表格已设置好,所以我在单元格 a2 中读取 b2 中的值,它是一个整数,告诉我存在多少补充配置文件 (sups)。假设数字 3 在 b2 中。然后我希望 c2 下面的 2 行在 c3 和 c4 中也输入一些文本(角色)。
在 a2 上,我正在读取 b2 以了解补充配置文件的数量,然后循环显示在 a2 上在 c2、c3 和 c4 中找到的角色。这可能会改变,因为在某些情况下只会有 2 个或 3 个角色,依此类推。
为此,我编写了以下代码:
Sub testarray()
Dim sups As Integer
Dim role, resultrole As String
Dim test() As String
role = ActiveCell.Offset(i, 2).Value
sups = ActiveCell.Offset(0, 1).Value
i = 0
Do While i <= sups
test() = Split(role)
i = i + 1
ActiveCell.Value = test()
Loop
End Sub
问题是我只显示了 c2 行,而不是下面的所有内容。我希望 a2 显示值 c2、c3 和 c4。我会 运行 此代码针对许多行以便关联角色。
查看我的代码图片和包含我正在阅读的值的电子表格
您只能看到单元格 A 中显示的第一个值,因为您从未告诉代码移动活动单元格以外的任何地方。您确实有一个循环,但它只是遍历数字。
下面的代码将遍历 B 列中的所有单元格,并将角色写入与存储 sups 编号的位置相邻的 A 列中。它将写入由 |
分隔的内容。您可以随意编辑。
Array的使用我也拿出来了。当您使用它时,它不会给您您想要的 - 这是一个串联值。您可以将单元格范围存储到一个数组中,然后遍历该数组以将单元格值写入 A 列,但鉴于您的问题,这似乎没有真正的优势。
Sub testarray()
Dim sups As Long, x As Long
Dim role As String
Dim lRow As Long
lRow = Range("B" & Rows.Count).End(xlUp).Row
Dim cel As Range
For Each cel In Range("B2:B" & lRow)
role = ""
If Len(cel) Then
sups = cel
For x = 1 To sups
role = role & "|" & cel.Offset(x - 1, 1)
Next
role = Mid(role, 2, Len(role) - 1)
cel.Offset(, -1) = role
End If
Next
End Sub
一些小的调整,以使其尽可能接近原始版本。我不喜欢使用 ActiveCell
,但是@ScottHoltzman 有一个解决方案可以这样做。
Sub testarray()
Dim sups As Integer, i&
Dim role, resultrole As String
Dim test As String
role = ActiveCell.Offset(i, 2).Value
sups = ActiveCell.Offset(0, 1).Value
i = 0
Do While i <= sups - 1
If i = 0 Then
test = ActiveCell.Offset(i, 2)
Else
test = test & ", " & ActiveCell.Offset(i, 2)
End If
i = i + 1
Loop
ActiveCell.Value = test
End Sub
这应该一次与 ActiveCell property 一起使用。
Sub testarray()
Dim sups As Long, roles As Variant
With ActiveCell
sups = .Offset(0, 1).Value
ReDim roles(sups - 1)
For sups = LBound(roles) To UBound(roles)
roles(sups) = .Offset(sups, 2)
Next v
.Cells = Join(roles, Chr(10))
End With
End Sub