我正在使用在此站点上找到的一些代码来转置表格的一部分
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列)可以正确地转置。代码运行后,我将使用另外两个子项来删除空格和校验和。
我希望能够在不需要校验和列的情况下运行代码,或者在可能的情况下自动消除空白,而无需添加其他子项。
希望这更清楚
答案 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)