2013-04-02 12 views
0

下面是我的數據的一個例子(列向量):VBA通​​過定界符轉列向量和包括nullstrings

NAME

Ç

B

Ç

[空白單元格]

Ç

NAME

Ç

注意,我的文檔中的[空白單元格]實際上只是一個空白單元格,沒有公式數據等

最終,我只需要通過轉NAME分隔的數據。 NAME細胞是唯一的細胞:

Left(rngCell.Value, 2) = Left(StrConv(rngCell.Value, vbUpperCase), 2) 

我的代碼是打破我的轉置,使一個新行所有的名字和所有[空白單元格]秒。

我試圖讓:

NAME A B C A B C B C 

NAME A B C A B C A B C 

NAME A B C B C B C 

但我的代碼返回:

NAME A B C A B C 

B C 

NAME A B C A B C A B C 

NAME A B C 

B C 

B C 

這裏是我使用的代碼:

Sub Dataclean() 

Dim lngRowLast As Long, _ 
lngRowPaste As Long, _ 
lngColOffset As Long 
Dim rngCell As Range, _ 
rngDataSet As Range 
Dim strSourceTab As String, _ 
strOutputTab As String 

'Tab name containing source data. Change to suit. 
strSourceTab = "sheet2pull" 
'Tab name for data output. Change to suit. 
strOutputTab = "transposed" 

lngRowLast = Sheets(strSourceTab).Cells(Rows.Count, "A").End(xlUp).Row 

'Assumes the original dataset is in Column A and starts at Row 1. Change to suit. 
Set rngDataSet = Sheets(strSourceTab).Range("A1:A" & lngRowLast) 

Application.ScreenUpdating = False 

For Each rngCell In rngDataSet 

    If Left(rngCell.Value, 2) = Left(StrConv(rngCell.Value, vbUpperCase), 2) Then 
     If lngRowPaste = 0 And lngColOffset = 0 Then 
      lngRowPaste = 1 
      lngColOffset = 1 
     Else 
      lngRowPaste = lngRowPaste + 1 
      lngColOffset = 1 
     End If 
    ElseIf lngRowPaste = 0 And lngColOffset = 0 Then 
     lngRowPaste = 1 
     lngColOffset = 1 
    End If 

    Sheets(strOutputTab).Cells(lngRowPaste, lngColOffset).Value = rngCell.Value 
    lngColOffset = lngColOffset + 1 

Next rngCell 

Application.ScreenUpdating = True 


End Sub 

請讓我知道我是否不清楚或困惑。我試圖儘可能明確,但解釋起來往往很困難!非常感謝。

我對VBA有點新,但是學習。

+1

添加此(在您的第一個IF詞後):rngCell.value <>「」和 – 2013-04-02 15:58:32

+0

謝謝!隨意發佈這個答案,我會給它一個檢查! – user2224949

回答

0

你的錯誤是當第一個if比較空白。這將永遠是真實的,因爲空白和大寫空白是相等的。用下面的替換你的第一個。

If Left(rngCell.Value, 2) = Left(StrConv(rngCell.Value, vbUpperCase), 2) And _ 
    Not IsBlank(rngCell.Value) Then