将.End(xlUp)替换为设置值

时间:2018-07-31 01:18:44

标签: vba excel-vba

我正在使用在此站点上找到的一些代码来转置表格的一部分

Copy Partial Table and Insert N-times, then Transpose second part of table

但是我发现它没有将数据转置到转置范围中最后填充的单元格之外,从而导致结果表中的数据未对齐。我相信这是由于代码最后一行中的.End(xlUp)参考所致。

tws.Cells(tws.Rows.Count, dataClmStrt + 2).End(xlUp).Offset(1).Resize(38, 1).Value = _
    Application.Transpose(rng.Offset(, dataClmStrt).Resize(, 38))

这是问题的起因吗?如果可以,可以用一个设定值代替这个术语吗?

编辑------------------------------------------------ -----

要添加更多信息,我有一个带有4个参考列和38个数据列的表

A-D列包含使每个订单项唯一的标识符,第1-38列包含根据该列标题类别的数据。

A B C D | 1 2 3 ... 38

并非所有38个类别列都包含数据,有些是空单元格

我使用的是逐字引用链接中的代码,除了已更改为12s​​至38s以反映列数并将主Arr扩展为38。

该代码将正确地沿行复制数据,并正确添加主要Arr ID,但不会正确转置38列数据。

一旦到达带有数据的单元格,它将将此数据添加到tws表中,返回数据列1,然后再次开始,但是在下一行中。 (即,如果它在原始表的第1行的第12列中找到数据,则会将该数据添加到新表的第12行,但是会开始将数据从原始表的第1列的第2行添加到新表的第13行表格)

我发现通过添加一个校验和列(第39列)可以正确地转置。代码运行后,我将使用另外两个子项来删除空格和校验和。

我希望能够在不需要校验和列的情况下运行代码,或者在可能的情况下自动消除空白,而无需添加其他子项。

希望这更清楚

1 个答案:

答案 0 :(得分:0)

@Scott Craner的代码很好,但是花一些时间来熟悉Excel如何管理范围的逻辑。我建议采用一种方法将Scott的高级表达拆分为多个小片段,然后进行一次操作,然后分析发生的情况:

Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range
Dim r7 As Range, r8 As Range

Set r1 = tws.Cells(tws.Rows.Count, dataClmStrt + 2)
Debug.Print r1.Row, r1.Rows.Count, r1.Column, r1.Columns.Count
Set r2 = r1.End(xlUp)
Debug.Print r2.Row, r2.Rows.Count, r2.Column, r2.Columns.Count
Set r3 = r2.Offset(1)
Debug.Print r3.Row, r3.Rows.Count, r3.Column, r3.Columns.Count
Set r4 = r3.Resize(38, 1)
Debug.Print r4.Row, r4.Rows.Count, r4.Column, r4.Columns.Count
Set r7 = rng.Offset(, dataClmStrt)
Debug.Print r7.Row, r7.Rows.Count, r7.Column, r7.Columns.Count
Set r8 = r7.Resize(, 38)
Debug.Print r8.Row, r8.Rows.Count, r8.Column, r8.Columns.Count
r4.Value = Application.Transpose(r8)