首页 > 解决方案 > 从数组到工作表的数据

问题描述

我有一个将数据绘制到消息框的数组,我怎样才能在不同的工作表上也有相同的数据?

我正在使用的数据是一个线性电缆切割列表。它查看总电缆长度和各个长度,并检查所有单独的单独长度我需要多少卷电缆。

理想情况下,卷轴 1 的长度将进入 A 列,下一个卷轴将进入 B 列,依此类推,在不同电缆类型之间有一个空白列。

    'Message Box Output
    For k = LBound(DetStk, 2) To UBound(DetStk, 2)
       sMsg = sMsg & DetStk(1, k) & vbTab & vbTab _
            & DetStk(0, k) & vbCrLf
    Next k

这就是我在“Splintered-Origins-Dev”的帮助下所做的工作

    'Sheet Output
    n = 3
    q = rC + p - 6
    For k = LBound(DetStk, 2) To UBound(DetStk, 2)
        If k - 1 >= LBound(DetStk, 2) Then
            If DetStk(0, k - 1) <> DetStk(0, k) Then
                'Data line reset
                n = 3
                p = p + 1
                q = rC + p - 6
                wsVG.Cells(1, q).Value2 = cblType
                wsVG.Cells(2, q).Value2 = DetStk(0, k) & " Reels"
            End If
        Else
            wsVG.Cells(1, q).Value2 = cblType
            wsVG.Cells(2, q).Value2 = DetStk(0, k) & " Reels"
        End If
        wsVG.Cells(n, q).Value2 = DetStk(1, k)
        n = n + 1
    Next k

标签: excelvba

解决方案


它既不漂亮也不优雅,但下面的代码将允许您将进入消息框的数据输出到新工作表“Reel Data”。只需将“ loopvar ”替换为您用于迭代每个循环的任何变量。此外,根据您的循环变量的设置方式,可能需要也可能不需要列的 q 变量中的“- 1”。我还建议在子Worksheets("Reel Data").Cells.Clear的开头添加某个位置以清除先前运行留下的任何旧数据,并使用p = 0重置列计数器。

    n = 3 'Row
    q = *loopvar* + p - 1 'Column
    For k = LBound(DetStk, 2) To UBound(DetStk, 2)
        If k - 1 >= LBound(DetStk, 2) Then 'If reel count changes, move over a column
            If DetStk(0, k - 1) <> DetStk(0, k) Then
                n = 3 'Row reset
                p = p + 1 'Increment Column
                q = *loopvar* + p - 1
                Worksheets("Reel Data").Cells(2, q).Value2 = DetStk(0, k)
            End If
        Else
            Worksheets("Reel Data").Cells(2, q).Value2 = DetStk(0, k) 'First Reel
        End If
        Worksheets("Reel Data").Cells(n, q).Value2 = DetStk(1, k)
        n = n + 1 ' Increment Row
    Next k
    p = p + 1 'This will add an extra column before the next iteration

推荐阅读