我只是在VBA中调整数据,却陷入一个问题。我试图用“”来插补零值,并用列标题插补非零值。
我的数据如下:
Customer Pasta Sandwich Pizza Burger
X 01 00 01 00
Y 01 01 00 01
Z 00 01 00 01
A 00 00 01 01
B 01 01 01 01
请注意,数据为TSV格式,并且具有许多列。基本上,数据是可变的,并且可以期望不同数据中的列数不同。我想灵活地构建宏,以便可以在任何类似的数据上执行它。
到目前为止,我已经能够实现以下代码:
Sub clearzero()
Dim rng As Range
For Each rng In Range("B2:XFD1048576")
'此外,我还使用XFD1048576作为工作簿的结尾(我知道这是不可行的,如果有人可以建议如何动态选择数据,那我也将很高兴)
If rng.Value = "00" Then
rng.Value = ""
If rng.Value = "01" Then
rng.Value =??
Next
End Sub
我无法在代码中找出??
。我的输出将如下所示:
谢谢
答案 0 :(得分:2)
Sub TestMe()
Dim myCell As Range
Dim wks As Worksheet
Set wks = Worksheets(1)
Application.EnableAnimations = False
For Each myCell In wks.UsedRange
If myCell = "00" Then
myCell = ""
ElseIf myCell = "01" Then
myCell = wks.Cells(1, myCell.Column)
End If
Next myCell
Application.EnableAnimations = True
End Sub
wks.UsedRange
是指第一个工作表的使用范围myCell = wks.Cells(1, myCell.Column)
是指所引用单元格的第一行中的单元格。Application.EnableAnimations
用于加快该过程。答案 1 :(得分:1)
非VBA解决方案。
在E列中,放置公式=IF(B2>0,B$1,"")
(注意$
之前的1
)。然后,您可以上下填充此公式,以覆盖原始数据或预期数据中的列数和行数。
要在VBA中找到范围的终点,请使用SpecialCells(xlCellTypeLastCell)
(感谢https://www.excelcampus.com/vba/find-last-row-column-cell/):
Sub Range_SpecialCells_Method()
MsgBox Range("A1").SpecialCells(xlCellTypeLastCell).Address
End Sub