如何将 Excel 列转换为忽略空白单元格的新范围
Posted
技术标签:
【中文标题】如何将 Excel 列转换为忽略空白单元格的新范围【英文标题】:How to transpose Excel columns into a new range ignoring blank cells 【发布时间】:2017-11-07 16:29:51 【问题描述】:我是 VBA 的新手,尝试寻找现有的解决方案,但没有一个能完全满足我的要求: 我的初始列表有孔(空白),我需要将结果列出为没有这些空白字段的转置
A 列有文件 #,然后是 5 列价格,但有些只有一个价格,其他 2 个,其他 3 个等,但价格不超过 3 个。而且这些内容每个月都在变化,有上百行。
我的第一次试验没有成功,因为我找不到预期的总数。 我的初始代码如下,但它没有捕获最后 2 列,因为它们之间有空白字段:
Dim LR As Long, Rw As Long, Col As Long, LastCol As Long, CurRw As Long
Application.ScreenUpdating = False
LR = Range("A" & Rows.Count).End(xlUp).Row
Range("B:B").Insert xlShiftToRight
For Rw = LR To 2 Step -1
If Range("D" & Rw) <> "" Then
LastCol = Cells(Rw, Columns.Count).End(xlToLeft).Column
Rows(Rw + 1).Resize(LastCol - 3).Insert xlShiftDown
Range("A" & Rw).Resize(LastCol - 2) = Range("A" & Rw)
Range("B" & Rw).Resize(LastCol - 2).Value = Range("C" & Rw).Resize(LastCol + 5).Value
Range("C" & Rw).Resize(1, LastCol - 2).Copy
Range("B" & Rw).Resize(LastCol - 2).PasteSpecial xlPasteAll, Transpose:=True
Range("C1").Resize(1, LastCol - 2).Copy
Range("C" & Rw).PasteSpecial xlPasteAll, Transpose:=True
Else
Range("C" & Rw).Copy Range("B" & Rw)
Range("C1").Copy Range("C" & Rw)
End If
Next Rw"
感谢您的帮助。希望现在更容易理解和帮助;-)
结果到达:
【问题讨论】:
你的第一次尝试是什么> 无法在此处粘贴公式 将表格数据转换为列数据 '将第 1 行中的标题添加为新的值列 啊,现在清楚多了,谢谢。但我仍然不明白出了什么问题以及“但它没有捕获最后两列”是什么意思。您还可以添加代码实际结果的图像,以便我们查看它的实际作用吗? 是的,如果您逐步运行宏,您可以发现它跳过了例如 50 美元的金额。而且我无法理解确保考虑所有列的指令在哪里(Last Col 停止到每行的第一个 emtpy 字段。否? 【参考方案1】:将您的图像与 A1 中的文件一起使用,将遵循这些原则
Sub Example()
Range("b2").Resize(1, 10).SpecialCells(xlCellTypeConstants, xlNumbers).Copy
Range("m2").Value = Range("b2").Resize(1, 10).SpecialCells(xlCellTypeConstants, xlNumbers).Count
Range("n2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=True
End Sub
计数将在 M 中并在 N 中转置
【讨论】:
顺便提一下:这仅在所有值都是常量时才有效,如果使用了公式则无效。 太好了,如果我需要将文件 a 在每行前面列出 4 次?所以我想在这 4 行中的每一行中查看文件 a 而不是 count 只是基于显示的图像,并假设一个定价矩阵。正如 Peh 建议的那样,它需要调整,它目前也只适用于 1 行:) 确实,我有一个包含 5000 行的列表 @LAtropy 这不是一个“其他人为我编写整个代码”的网站。这个网站非常适合回答一个很好的详细而具体的问题。但是您至少应该付出一些努力来解决您的问题,因为没有人会为您编写可以复制和粘贴的整个代码。尝试编写您的代码,然后编辑您的问题添加您的代码并向您的代码提出特定问题,例如你在哪里卡住了,你遇到了什么错误,在哪里等等。【参考方案2】:你可以使用公式,像=IFERROR(INDEX($B$2:$J$2,1,SMALL(IF($B$2:$J$2<>"",COLUMN($B$2:$J$2)-1),ROWS($L$1:L1))),"---")
这样填写
【讨论】:
以上是关于如何将 Excel 列转换为忽略空白单元格的新范围的主要内容,如果未能解决你的问题,请参考以下文章
如果某列范围内的所有单元格均为空白,则删除 Excel 中的一行