我是您的社區的新用戶,我的名字是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
就是這樣。
VBA的修剪僅適用於前導和尾隨空字符。如果字符串中有任何內容,則需要工作表functionfunction.trim – Raystafarian
感謝您的及時答覆,但這並不能解決我的問題。第四欄的長度是53個字,我仍然無法擺脫第二個名字的最後一個字母后留下的內容。我會找到另一種方式,但這讓我很困擾。 – LeKibbitz
一旦你得到'cNamesString',你可以使用'Split(cNamesString,「 - 」)'然後修剪兩個項目 –