Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从阵列到工作表的数据_Excel_Vba - Fatal编程技术网

Excel 从阵列到工作表的数据

Excel 从阵列到工作表的数据,excel,vba,Excel,Vba,我有一个数组可以将数据打印到messagebox,我怎么能在不同的工作表上也有相同的数据呢 我正在处理的数据是一个线性电缆切割列表。它查看电缆的总长度和各个长度,并检查所有单独长度需要多少卷电缆 理想情况下,第1卷的长度将位于A列,下一卷的长度将位于B列,以此类推,在不同电缆类型之间有一个空白列 'Message Box Output For k = LBound(DetStk, 2) To UBound(DetStk, 2) sMsg = sMsg & D

我有一个数组可以将数据打印到messagebox,我怎么能在不同的工作表上也有相同的数据呢

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

理想情况下,第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
这就是我在“Splinted Origins Dev”的帮助下得到的

”工作表输出
n=3
q=rC+p-6
对于k=LBound(DetStk,2)到UBound(DetStk,2)
如果k-1>=LBound(DetStk,2),则
如果DetStk(0,k-1)DetStk(0,k),那么
'数据线重置
n=3
p=p+1
q=rC+p-6
wsVG.Cells(1,q).Value2=cblType
wsVG.Cells(2,q).Value2=DetStk(0,k)和“卷轴”
如果结束
其他的
wsVG.Cells(1,q).Value2=cblType
wsVG.Cells(2,q).Value2=DetStk(0,k)和“卷轴”
如果结束
wsVG.Cells(n,q).Value2=DetStk(1,k)
n=n+1
下一个k

DetStk数组的2行和k列。因此,您应该切换矩阵以使其更易于查看


它既不美观也不优雅,但下面的代码将允许您将数据输出到消息框中的新工作表“卷筒数据”。只需将“loopvar”替换为迭代每个循环所使用的任何变量。此外,根据循环变量的设置方式,列的q变量中可能需要“-1”,也可能不需要“-1”。我还建议在子工作表(“卷轴数据”).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
n=3'行
q=*loopvar*+p-1'列
对于k=LBound(DetStk,2)到UBound(DetStk,2)
如果k-1>=LBound(DetStk,2),则“如果卷盘计数发生变化,则移动到列上
如果DetStk(0,k-1)DetStk(0,k),那么
n=3'行重置
p=p+1'增量列
q=*loopvar*+p-1
工作表(“卷轴数据”)。单元格(2,q)。值2=DetStk(0,k)
如果结束
其他的
工作表(“卷轴数据”)。单元格(2,q)。值2=DetStk(0,k)“第一卷
如果结束
工作表(“卷轴数据”)。单元格(n,q)。值2=DetStk(1,k)
n=n+1'增量行
下一个k
p=p+1'这将在下一次迭代之前添加一个额外的列

我们不需要完整的代码,我们需要一个。。。强调“最小”:-@BigBen第一组代码仅用于用数据填充msgbox。第二组是如何获取数据。对。。。但这些与您的主要问题无关,即如何将数据从数组传输到工作表。。。你能把你的问题缩减到你是如何尝试的吗?@BigBen这是第一个代码集末尾注释掉的部分。然后请删除所有其他内容,谢谢。
'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
'Sheet Output
Sheets.Add
Range("a1").Resize(UBound(DetStk, 2) + 1, UBound(DetStk, 1) + 1) = WorksheetFunction.Transpose(DetStk)
    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