VBA-如何用列标题替换非零值?

时间:2018-07-30 19:27:52

标签: excel vba excel-vba

我只是在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

我无法在代码中找出??。我的输出将如下所示:

FinalOutPutRequired 有人可以建议吗?

谢谢

2 个答案:

答案 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