我是你们社区的新成员,我叫托马斯。几年前我曾经是一名 VisualFoxPro 开发人员,但现在我正在尝试学习如何处理 Excel(Mac 上的 2011)和 VBA。只在我的业余时间;-)。自开始以来,我已经在 Google 上搜索了很多,并且经常在这里找到答案,所以我来了。
这是(几乎)全貌:我正在从 HTML 文件(桥牌比赛结果)中检索数据,在某个点(行)有固定的列数据,一列包含 2 个用“-”分隔的玩家姓名。检索第一个没有问题,但无法修剪第二个。我已经尝试过,TRIM、CLEAN、SUBSTITUE 与所有 CHAR -> 31 和 CHAR 127、129、141、143、144 和 157。我什至尝试过这个,在 google 的某个地方找到:
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 Claude 是目标)。
Rang Paire Score Nom Equipe
302 1,83 Mme NIMSGERN Monique - BAPTISTE Claude Mme EMERIQUE
Rang Paire Score Nom Equipe
8 101 0,92 BAPTISTE Claude - Mme NIMSGERN Monique Mme EMERIQUE
而已。