是这样的,有类似以下的数据五万行左右,要求把名称最后的英文字母去掉,表如下。 中国邮政D 
中国政法大厦H 
中国工行 
中国财税大楼A 
... ... 我编写了以下程序是去掉一行的最后一个英文字母的,但是下面就不大会了,想请教下各位高手,如何把程序补充修改完整,可以实现列的操作,感激不尽。 
Sub bb() 
Dim ss(1 To 50) As String 
Dim i As Integer 
Dim msum As String 
For i = 1 To Len(Cells(1, 1)) '获取文本长度 
ss(i) = Mid(Cells(1, 1), i, 1) '把文本内容存到数组中 
If Not (Asc(ss(i)) >= 0 And Asc(ss(i)) <= 255) Then '判断!如果ascii码不在0-255中就是汉字 
msum = msum + ss(i)  '把数组不是英文的存入变量 
Cells(1, 2) = msum  '输出汉字 
End If Next 
End Sub 
下面怎样实现 列 的操作?不大会,我的数据处理列是在cells(i,2)  i=1 to 50000;

解决方案 »

  1.   

    Sub bb()
        Dim ss(1 To 50) As String
        Dim i As Integer
        Dim j As Integer
        Dim msum As String
        
        For j = 1 To [L65536].End(xlUp).Row
            For i = 1 To Len(Cells(j, 1)) '获取文本长度
                ss(i) = Mid(Cells(j, 1), i, 1) '把文本内容存到数组中
                
                If Not (Asc(ss(i)) >= 0 And Asc(ss(i)) <= 255) Then '判断!如果ascii码不在0-255中就是汉字
                    msum = msum + ss(i)  '把数组不是英文的存入变量
                    Cells(j, 2) = msum  '输出汉字
                End If
                
            Next i
        Next j
    End Sub
      

  2.   

    直接用Left和right函数是不是比mid函数要快呢?right(len(Cells(j, 1)),1)'取出最后一个字符,然后判断是否为字母,如果不是字母全部保留,如果是则用left(Cells(j, 1),len(cells(j,1)-1) 怎样实现 列 的操作?这一句没有看明白
      

  3.   

    中间含有字母?
    仅仅最后一位可能是字母?同时满足的话觉得选择right来处理不错select case asc(right(str,1))
     case >0 <255
    end select
      

  4.   

    jhone99 英雄,谢谢你帮我改了代码,但是咋的输不出呢?
      

  5.   

    如果只是去掉最后一个字符为英文字母的话,可以这样处理,在VB6中测试通过    Open "f:\yyyy.txt" For Input As #1
        Dim tt As String
        Do While Not EOF(1)
            Line Input #1, tt
            tt = Trim(tt)
            If Asc(Right(tt, 1)) > 0 And Asc(Right(tt, 1)) < 255 Then
                Text2.Text = Text2.Text & Left(tt, Len(tt) - 1) & vbCrLf
            Else
                Text2.Text = Text2.Text & tt & vbCrLf
            End If
        Loop
        Close #1
      

  6.   

    依楼主的说明
    只能说再加一个循环就行了
    因为不知道你的行列是啥意思
    你是从EXCEL里读出来???
    还是msFlexGrid?
      

  7.   


    Sub bb()
        Dim ss(1 To 50) As String
        Dim i As Integer
        Dim j As Integer
        Dim msum As String
        Dim intRows As Integer
        
        With NewSheet 'Newsheet 是你打开excel的那个变量
            intRows=.UsedRange.Rows.Count 
            For j = 1 To intRows
                For i = 1 To Len(.Cells(j, 1)) '获取文本长度
                      ss(i) = Mid(.Cells(j, 1), i, 1) '把文本内容存到数组中
                
                      If Not (Asc(ss(i)) >= 0 And Asc(ss(i)) <= 255) Then '判断!如果ascii码不在0-255中就是汉字
                           msum = msum + ss(i)  '把数组不是英文的存入变量
                           .Cells(j, 2) = msum  '输出汉字
                      End If
                
                Next i
            Next j
        End With
    End Sub
      

  8.   

    Sub bb()
        Dim s As String
        Dim ch As Integer
        Dim i As Long
        Dim j As Long
        For i = UsedRange.Row To UsedRange.Row + UsedRange.Rows.Count - 1
            s = Cells(i, 1)
            For j = 1 To Len(s)
                ch = Asc(Mid$(s, j, 1))
                If (0 <= ch) And (ch <= 255) Then
                    Mid$(s, j, 1) = " " '非汉字转为空格
                End If
            Next
            Cells(i, 1) = Replace(s, " ", "") '一次性删除空格
        Next
    End Sub