我已经挣扎了一段时间,我需要帮助。我是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。我将针对多个行运行此代码,以便关联角色。
查看我的代码和电子表格的图片,其中包含正在阅读的值
答案 0 :(得分:1)
您只看到单元格A中显示的第一个值,因为除了活动单元格之外,您永远不会告诉代码移动到任何位置。你确实有一个循环,但它只是遍历数字。
下面的代码将循环遍历B列中的所有单元格,并将角色写入与存储sups编号的位置相邻的A列。它将写出由|
分隔的内容。您可以编辑自己的想法。
我也拿出了一个数组。当你使用它时,它不会给你你想要的东西 - 这是一个连接的值。您可以将单元格范围存储到数组中并循环遍历数组以在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
答案 1 :(得分:0)
一些小的调整,以尽可能接近原始。我不想使用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
答案 2 :(得分:0)
这应该一次与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