-1

我发现了一个宏(由 Jerry Beaucaire 提供),它根据给定列中的唯一值将一个工作表拆分为多个工作表。这很好用。然而...

客户提供了一个不同格式的工作表,需要轻轻按摩才能进入我们需要的格式。

首先,让我给你看一段 JB 的代码:

MyArr = Application.WorksheetFunction.Transpose _
    (ws.Columns(iCol).SpecialCells(xlCellTypeConstants))

据我所知(我是一个完全的 VB 新手,所以我知道什么..??),这会用选定的行值填充一个数组

和这个:

For Itm = 2 To UBound(MyArr)

    ...(code removed)

    ws.Range("A" & TitleRow & ":A" & LR).EntireRow.Copy _
        Sheets(MyArr(Itm) & "").Range("A1")


    ...(code removed)

Next Itm

...似乎在进行复制。

好吧。...到目前为止还好。

问题是我需要在流程中添加一个步骤。这将很难解释。请多多包涵...

标题行是第 1 行

数据从第 2 行开始

每行有 9 列:

colA:标识符

colB-colD:x、y、z 值(用于项目顶部)

colE-colG:x、y、z 值(用于项目底部)

colH 和 colI:可以忽略

这些 x、y 和 z 值用于定义用于在 3D 建模程序中绘制线的点。工作表中的每一行实际上定义了一条线(嗯......起点和终点 - “顶部”和“底部”)不幸的是,我们收到的数据(工作表)为每条线定义了两组数据 - 两者起点相同,终点不同。换句话说,从第 3 行和第 4 行开始,BD 列中的数据对于两行都是相同的。这适用于第 5 行和第 6 行、第 7 行和第 8 行等。

由于我们只需要一组数据点,因此我们可以安全地使用 cols EG 中的值。
但是...这就是我需要帮助的地方...我们需要新创建的工作表的第一行以第 2 行 cols BD 中的值开始。(即,我们可以使用终点作为我们的坐标,但我们仍然需要第一个起点)其余的一切都很好。

例如:

源数据:

   | 一个 | 乙| C | D | E | F | 克|
 1 | 编号 | x 顶 | y-顶部 | z-顶部 | x-底部 | y-底部 | z-底部 |
 2 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 |
 3 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 |
 4 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 | B,C,D 与第 3 行相同
 5 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 |
 6 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 | B,C,D 与第 5 行相同

我需要的:

   | 一个 | 乙| C | D | E | F | 克|
 1 | 编号 | x 顶 | y-顶部 | z-顶部 | x-底部 | y-底部 | z-底部 |
 2 | H1 | | | | 101.2 | 0.525 | 54.25 |
 3 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 |
 4 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 |
 5 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 |
 6 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 |
 7 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 |

那么......最好的方法是什么?我可以添加到现有宏来执行此操作吗?如果是这样,最好修改数组?...更好地修改复制例程?...如何??

提前感谢您的帮助,请不要建议手动操作。有 70,000 多行需要解析!

如果您需要更多信息,请告诉我!

4

1 回答 1

0

完整的宏可在此位置免费提供给所有人

为了实现您的连接点,这些添加应该可以做到:

For Itm = 2 To UBound(MyArr)

    ...(code removed)

    ws.Range("A" & TitleRow & ":A" & LR).EntireRow.Copy _
      Sheets(MyArr(Itm) & "").Range("A1")
    Sheets(MyArr(Itm) & "").Rows(2).Insert xlShiftDown
    Sheets(MyArr(Itm) & "").Range("E2").Resize(, 3).Value = Sheets(MyArr(Itm) & "").Range("B3").Resize(, 3).Value

    ...(code removed)

Next Itm
于 2012-02-08T00:08:33.663 回答