2015-09-04 104 views
2

我是您的社區的新用戶,我的名字是Thomas。 我以前是VisualFoxPro開發人員,但現在我試圖學習如何處理Excel(2011在Mac上)和VBA。只在我的業餘時間;-)。 自從我創業以來,我搜索了很多,經常在這裏找到答案,所以我來了。 (幾乎)全部圖片: 我從HTML文件(橋競賽結果)中刪除數據,在某些點(行)有固定的列數據,一列包含2個由「 - 」分隔的球員名字, 。 我沒有問題來檢索第一個,但不能修剪第二個。 我都試過了,TRIM,CLEAN,SUBSTITUE所有CHAR - > 31和CHAR 127,129,141,143,144和157 我甚至嘗試這個,發現某處在谷歌:Excel2011 VBA修剪字符串,隱形字符數據透視表

Sub Clean_and_Trim_Cells() 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 
    Dim s As String 
    For Each c In ActiveSheet.UsedRange 
     s = c.Value 
     If Trim(Application.Clean(s)) <> s Then 
      s = Trim(Application.Clean(s)) 
      c.Value = s 
     End If 
    Next 
    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 

所以,對於同一名球員來說,我會得到不同長度的字符串,一個被正確修剪,另一個更長。 我不明白。

這裏是我如何定義列的長度和提取名稱。

Sub PieceOfCode 

    If Left(Trim(cDataString), 4) = "Rang" Then  ‘Header row 

     'Here we define the columns width and initiate data collection 
     nScore = 0 
     cTeamName = "" 
     cTeam = "" 
     cP1 = "" 
     cP2 = "" 
     nCol1 = InStr(cDataString, "Rang") 
     nCol2 = InStr(cDataString, "Paire") 
     nCol3 = InStr(cDataString, "Score") 
     nCol4 = InStr(cDataString, "Nom") 
     nCol5 = InStr(cDataString, "Equipe") 
     nCol1Length = nCol2 - 1 
     nCol2Length = nCol3 - nCol2 
     nCol3Length = nCol4 - nCol3 
     nCol4Length = nCol5 - nCol4 
     nCol5Length = Len(cDataString) - nCol5 + 1 

     'And further in the process... 

     nScore = Val(Mid(Replace(cDataString, ",", "."), nCol3, nCol3Length)) 
     cNamesString = Mid(cDataString, nCol4, nCol5 - nCol4) 
     nSplitTeamNamesPos = InStr(cNamesString, " - ") 
     cP1 = Trim(Mid(cNamesString, 1, nSplitTeamNamesPos - 1)) 
     cP2 = Trim(Mid(cNamesString, nSplitTeamNamesPos + 3)) 

    End If 

End Sub 

當我用這個建立數據透視表時,我得到了同一個玩家的2個條目。

這裏的代碼,我必須創建數據透視表,我承認,在錄音機的幫助下,但即使這就是爲什麼,我會知道如何修剪我的字符串。

Sub CreatePivotTable() 

    Dim nRowCount As Integer 
    Dim cRowCount As String 

    Sheets("Data").Select 
    Range("A1").Select 
    nRowCount = GetRowCount("Data") 
    cRowCount = Trim(CStr(nRowCount)) 

    Range("A1:B" & cRowCount).Select 

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "Data!R1C1:R" & cRowCount & "C2", Version:=xlPivotTableVersion14).CreatePivotTable _ 
TableDestination:="TempPvt!R1C1", TableName:="PivotTable8", DefaultVersion _ 
    :=xlPivotTableVersion14 

    Sheets("TempPvt").Select 

    Cells(3, 1).Select 
    With ActiveSheet.PivotTables("PivotTable8").PivotFields("Nom") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 

    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable8").PivotFields("Score"), "Total", xlSum 
    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable8").PivotFields("Score"), "Sum of Score2", xlSum 
    ExecuteExcel4Macro _ 
    "PIVOT.FIELD.PROPERTIES(""PivotTable8"",""Sum of Score2"",""# Tours"",,4)" 
    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable8").PivotFields("Score"), "Sum of Score2", xlSum 
    ExecuteExcel4Macro _ 
    "PIVOT.FIELD.PROPERTIES(""PivotTable8"",""Sum of Score2"",""Moyenne"",,8)" 

End Sub 

最後這裏是兩個字符串與測試頭(BAPTISTE克勞德是目標)。

穰帕爾雷分數喃隊報
302 1,83夫人NIMSGERN莫妮克 - BAPTISTE克勞德夫人EMERIQUE

穰帕爾雷分數喃隊報
8 101 0.92 BAPTISTE克勞德 - 夫人NIMSGERN莫妮剋夫人EMERIQUE

就是這樣。

+0

VBA的修剪僅適用於前導和尾隨空字符。如果字符串中有任何內容,則需要工作表functionfunction.trim – Raystafarian

+0

感謝您的及時答覆,但這並不能解決我的問題。第四欄的長度是53個字,我仍然無法擺脫第二個名字的最後一個字母后留下的內容。我會找到另一種方式,但這讓我很困擾。 – LeKibbitz

+0

一旦你得到'cNamesString',你可以使用'Split(cNamesString,「 - 」)'然後修剪兩個項目 –

回答

0

2種方式來提取名稱

1.

nSplitTeamNamesPos = InStr(cNamesString, " - ") 

cP1 = Trim(Mid(cNamesString, 1, nSplitTeamNamesPos - 1)) 
cP2 = Trim(Mid(cNamesString, nSplitTeamNamesPos + 3)) 

2.

nSplitTeamNamesPos = Split(cNamesString, " - ") 

cP1 = Trim(nSplitTeamNamesPos(0)) 
cP2 = Trim(nSplitTeamNamesPos(1)) 

(DIM nSplitTeamNamesPos作爲字符串()或變體)

當修整所述第二名稱,
+0

對不起,我已經縮小了我的問題,它不是一個修剪。 – LeKibbitz

+0

我仍在尋找它,我會保持你的發佈。 – LeKibbitz

+0

我對此感到羞恥,因爲沒有更多理由存在。這是沒有問題的。道歉。托馬斯 – LeKibbitz