Excel2011 VBA修剪字符串,隐形字符数据透视表

问题描述:

我是您的社区的新用户,我的名字是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,“ - ”)'然后修剪两个项目 –

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