2

我已经为此苦苦挣扎了一段时间,我需要帮助。我是 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。我将按关联角色的顺序对多行运行此代码。

查看我的代码和电子表格的图片,其中包含我正在阅读的值

在此处输入图像描述 感谢您对此的帮助......真的非常感谢任何反馈!

4

3 回答 3

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
于 2015-11-09T19:11:58.140 回答
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
于 2015-11-09T19:16:01.703 回答
0

这应该一次使用一个ActiveCell 属性

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
于 2015-11-09T19:16:51.677 回答