2014-07-09 103 views
1

我正在使用下面的代码将数据转置为列,但是,它仍留下尾随逗号。有人可以帮助清理吗?转置后删除尾随逗号

Sub ReorganizeData() 
    Dim X As Long, LastRow As Long, Index As Long 
    Dim Sheet As Excel.Worksheet 
    Const Interval As Long = 1000 

    LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

    For X = 1 To LastRow Step Interval 
    Index = Index + 1 
    Cells(Index, "B") = Application.Trim(Join(Application.Transpose(Cells(X, "A").Resize(Interval).Value), ",")) 
    Next 

    Range("A:A").Delete xlShiftToLeft 
End Sub 
+0

的确认号码,那么每次结尾逗号的数量是否相同? – tannman357

回答

0

以下是速战速决,但在这个过程中实际上抑制生成的字符串任何两个连续的逗号不管位置 - 如果这可以是任何关注。尾随逗号是由于加入空单元格,所以有可能是一个更好的办法,只是避免在首位joing空单元格

Sub ReorganizeData() 
    Dim X As Long, LastRow As Long, Index As Long 
    Dim Sheet As Excel.Worksheet 
    Const Interval As Long = 1000 

    LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

    For X = 1 To LastRow Step Interval 
    Index = Index + 1 
    Cells(Index, "B") = Application.Trim(Join(Application.Transpose(Cells(X, "A").Resize(Interval).Value), ",")) 
    'Replaces any ",," substring in the above resulting string with an empty string 
    Cells(Index, "B") = Replace(Cells(Index, "B"), ",,", "") 
    'Cleans up any possible extra single trailing "," 
    If Mid(Cells(Index, "B"), Len(Cells(Index, "B")), 1) = "," Then 
     Cells(Index, "B") = Left(Cells(Index, "B"), Len(Cells(Index, "B")) - 1) 
    End If 
    Next 

    Range("A:A").Delete xlShiftToLeft 
End Sub 

编辑:@阿雨果 - 你说这是你后观察把上面的代码加入测试?如果是这样,我很困惑,与原始代码相比,已经添加的额外行只是用一个空字符串替换结果字符串中的任何“,,”子字符串 - 清除任何额外的单个“,”后面仍然是尾随的。如果事实确实如此 - 是否有机会作为替代函数实际按预期工作的方式进行测试?

仅供参考我承认我的工作很好。我还在代码中添加了一些注释以提高清晰度

编辑2:还有可能是您现在看到的0实际上已经存在于您的原始字符串中,但在似乎是一个长序列之后未被注意到如果你可以提供关于这个

+0

这种方法不会删除尾随逗号,它会在它们之间插入零吗? –

+0

现在似乎工作正常,再次感谢。 –