Excel VBA子字符串 [英] Excel VBA Substring

查看:229
本文介绍了Excel VBA子字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个宏,它使用LDAP格式的名称列表将它们转换为First,Last(region)。对于那些不了解LDAP的人来说,它在下面:

  CN = John Smith(region),OU = Legal,DC = example,DC = comand 

在Excel VBA中,我似乎无法使用string.substring(start,end)。在Google上搜索似乎揭示了Mid(string,start,end)是最好的选择。问题是这样的:在Mid中,end的整数是从start开始的距离,而不是字符的实际索引位置。这意味着不同的名称大小将有不同的结束位置,我不能使用索引)来查找该区域的结尾。由于所有的名称都以CN =开头,我可以正确找到第一个子串的结尾,但是由于名称长度不同,所以我找不到。



我有一些代码如下:

  mgrSub1 = Mid(mgrVal ,InStr(1,mgrVal,=)+ 1,InStr(1,mgrVal,\) -  4)
mgrSub2 = Mid(mgrVal,InStr(1,mgrVal,,),InStr (1,mgrVal,)) - 10)
manager = mgrSub1&有谁知道一个实际使用一个终点而不是一个终点的方法,这么多的价值观远离一开始?

解决方案

这是vba .. no string.substring;)



这更像是VB 6(或下面的任何一个)..所以你被卡在中间,instr,len(以获得一个字符串的总数)..我想你错过了len得到总共的字符在一个串?如果你需要一些澄清,只需发表评论。



编辑:



另一个快速的黑客.. >

  Dim t As String 
t =CN = Smith,John(region),OU = Legal,DC = example,DC = comand
Dim s1 As String
Dim textstart As Integer
Dim textend As Integer
textstart = InStr(1,t,CN =,vbTextCompare)+ 3
textend = InStr(1,t,(,vbTextCompare)
s1 = Mid(t,textstart,textend - textstart)
MsgBox s1
textstart = InStr(1,t, (,vbTextCompare)+ 1
textend = InStr(1,t,),vbTextCompare)
s2 =中(t,textstart,textend - textstart)
MsgBox s2

很明显,你的问题是,由于您需要第二个参数的差异,因此您应该总是为此做一些数学计算。 ..


I am writing a macro that takes a list of names that are in an LDAP format converts them to First, Last (region). For those of you that do not know what LDAP looks like, it is below:

CN=John Smith (region),OU=Legal,DC=example,DC=comand

In Excel VBA, I do not appear to be able to use string.substring(start, end). A search on Google seems to reveal that Mid(string, start, end) is the best option. The problem is this: in Mid, the integer for end is the distance from start, not the actual index location of the character. This means that different name sizes will have different ending locations and I cannot use index of ")" to find the end of the region. Since all of the names start with CN=, I can find the end of the first substring properly, but I cannot find ")" properly because names are different lengths.

I have some code below:

mgrSub1 = Mid(mgrVal, InStr(1, mgrVal, "=") + 1, InStr(1, mgrVal, "\") - 4)
mgrSub2 = Mid(mgrVal, InStr(1, mgrVal, ","), InStr(1, mgrVal, ")") - 10)
manager = mgrSub1 & mgrSub2

Does anyone know of a way to actually use a set end point instead of an end point that is so many values away from the start?

解决方案

This is vba.. no string.substring ;)

this is more like VB 6 (or any one below).. so you are stuck with mid, instr, len (to get the total len of a string).. I think you missed len to get the total of chars in a string? If you need some clarification just post a comment.

edit:

Another quick hack..

    Dim t As String
    t = "CN=Smith, John (region),OU=Legal,DC=example,DC=comand"
    Dim s1 As String
    Dim textstart As Integer
    Dim textend As Integer
    textstart = InStr(1, t, "CN=", vbTextCompare) + 3
    textend = InStr(1, t, "(", vbTextCompare)
    s1 = Mid(t, textstart, textend - textstart)
    MsgBox s1
    textstart = InStr(1, t, "(", vbTextCompare) + 1
    textend = InStr(1, t, ")", vbTextCompare)
    s2 = Mid(t, textstart, textend - textstart)
    MsgBox s2

Clearly your problem is that since you need a diference for the second parameter, you should always do some math for it...

这篇关于Excel VBA子字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆