0

嗨,我有一个问题要解决。感谢有人可以在以下方面帮助我。

Master Sheet我有类似的东西

Item        Price 1   Price 2    Price 3
Apple        12         25          30
Orange       20         12          13
Berry         5          6           3

然后在同一个 excel 文档上我说 Sheet1、Sheet2 和 Sheet3。我需要运行一个宏,这样一旦它运行了 3 张纸就会如下所示。当它复制到工作表中时,位置(单元格)应该是预先确定的。有人可以给我一个线索吗?

表 1:

Apple
12
25
30

表2:

Orange
20
12
13

表 3:

Berry
5
6
3

编辑:此编辑与Alex P的回答有关

 Item        Price 1   Price 2    Price 3
Apple        12                     30
Orange       20         12          13
Berry         5          6           3

在Apple下, Price 2没有价格。那么在打印时如何在表 1 中反映如下?换句话说,如果序列中有空白,当数据复制到所选工作表时,应该忽略空白单元格,以便数据处于序列中,中间没有空单元格。

           **Apple**
Price 1       12
Price 3       30

而不是拥有;

           **Apple**
Price 1       12
Price 2     (Blank cell)
Price 3       30

此外,我希望将 Price1,2,3... 打印在上面显示的数字旁边。

编辑 2

如果表的位置如下,则 Alex 的解决方案有效; 在此处输入图像描述

如果我将表格位置更改为以下,您能否告诉我如何更改代码Set items = Range("A2:A" & Range("A1").End(xlDown).Row)以获得相同的结果。我一直在努力破解它,但无法通过。我尝试将其更改为Set items = Range("C8:C" & Range("C7").End(xlDown).Row)但打印时结果不佳

在此处输入图像描述

4

1 回答 1

0

我对此进行了测试,它对我有用。

您可能需要更改范围引用以满足您的需要。

Sub SplitTableData()
    Dim items As Range, item As Range, sht As Long

    Set items = Range("A2:A" & Range("A1").End(xlDown).Row)
    sht = 1

    For Each item In items

        With Worksheets("Sheet" & sht)
            .Range("A1") = item
            .Range("A2") = item.Offset(0, 1)
            .Range("A3") = item.Offset(0, 2)
            .Range("A4") = item.Offset(0, 3)
        End With

        sht = sht + 1
    Next item
End Sub

编辑根据修改后的请求更新代码

Sub SplitTableData()
    Dim items As Range, item As Range, sht As Long, col As Long, rw As Long

    Set items = Range("A2:A" & Range("A1").End(xlDown).Row)
    sht = 1
    rw = 2

    For Each item In items

        With Worksheets("Sheet" & sht)
            .Range("B1") = item

                For col = 2 To 4
                    If item.Offset(0, col - 1) <> vbNullString Then
                        .Range("A" & rw) = Cells(1, col)
                        .Range("B" & rw) = item.Offset(0, col - 1)
                        rw = rw + 1
                    End If
                Next col

        End With

        sht = sht + 1
        rw = 2
    Next item
End Sub
于 2013-06-16T09:57:16.290 回答