Solved

# Return middle part of a string

Posted on 2011-09-07
201 Views
I have a string that looks like the following:

firstword_secondword_thirdword_TheWordIWant_fifthword_sixthword_seventhword.csv

I am looking for a vba function that would be most efficient to return the "TheWordIWant" string.

I am wanting this to look like the following:

Function GetTabName(strFileName as String, strDelimiter as String, intDelimiterOccurance as Integer) as String

End Function
0
Question by:ckelsoe

LVL 29

Expert Comment

ID: 36497044
Try this

http://www.ozgrid.com/VBA/extract-words-function.htm

Extract nth Word From Text in Excel See
Also: Extracting Words From Text in Excel using Excel Built in Function/Formulas and Find Nth Occurrence

With the aid of Excel VBA we can write a custom formula/function, or user defined function to extract out the nth word from a text string. The code below should be placed in a standard Excel Module after entering the VBE. That is, push Alt+F11 and then go to Insert>Module and paste in the code below;

Option Compare Text

Function Get_Word(text_string As String, nth_word) As String

Dim lWordCount As Long

With Application.WorksheetFunction

lWordCount = Len(text_string) - Len(.Substitute(text_string, " ", "")) + 1

If IsNumeric(nth_word) Then

nth_word = nth_word - 1

Get_Word = Mid(Mid(Mid(.Substitute(text_string, " ", "^", nth_word), 1, 256), _
.Find("^", .Substitute(text_string, " ", "^", nth_word)), 256), 2, _
.Find(" ", Mid(Mid(.Substitute(text_string, " ", "^", nth_word), 1, 256), _
.Find("^", .Substitute(text_string, " ", "^", nth_word)), 256)) - 2)

ElseIf nth_word = "First" Then

Get_Word = Left(text_string, .Find(" ", text_string) - 1)

ElseIf nth_word = "Last" Then

Get_Word = Mid(.Substitute(text_string, " ", "^", Len(text_string) - _
Len(.Substitute(text_string, " ", ""))), .Find("^", .Substitute(text_string, " ", "^", _
Len(text_string) - Len(.Substitute(text_string, " ", "")))) + 1, 256)

End If

End With

End Function
0

LVL 39

Accepted Solution

nutsch earned 500 total points
ID: 36497055
here it should be:

``````Function gettabname(strFileName As String, strDelimiter As String, intDelimiterOccurance As Integer) As String
Dim arr As Variant

arr = Split(strFileName, strDelimiter)

sWordIwant = arr(intDelimiterOccurance - 1)

End Function
``````
0

LVL 31

Expert Comment

ID: 36497058
You can use the Split function to do this (I did it in Access, but I think it would work in Excel VBA too):
``````Public Function ThirdName(strFullString As String) As String

Dim strFullText() As String
Dim intUBound As Integer

'Extract third name from full name
strFullText = Split(strFullString, "_", -1, vbTextCompare)
intUBound = UBound(strFullText)
ThirdName = strFullText(2)

End Function
``````
0

LVL 31

Expert Comment

ID: 36497065
The intUBound line is redundant (I modified this from another function that used it)
0

LVL 39

Expert Comment

ID: 36497072
fixing error on line 6

``````Function gettabname(strFileName As String, strDelimiter As String, intDelimiterOccurance As Integer) As String
Dim arr As Variant

arr = Split(strFileName, strDelimiter)

gettabname = arr(intDelimiterOccurance - 1)

End Function
``````
0

Author Closing Comment

ID: 36497403
I am accepting this solution over others as it is simple with the least amount of coding to achieve the intended result. This is not to say that other code presented would not work. I did note the correction in Line 6 and had made the same correction to meet my specific goals.

Thanks for the quick response.
0

LVL 39

Expert Comment

ID: 36497427
Glad to help. Thanks for the grade.

Thomas
0

## Join & Write a Comment Already a member? Login.

Approximate matching with VLOOKUP and MATCH seems to me to be a greatly under-used technique, and one which is vital for getting good performance out of large lookups. Until recently I would always have advised using an exact match for simplicity an…
This tutorial explains how to create a series of drop-down lists that are dependent upon prior selections to guide (“force”) the user to make the correct selection and reduce data errors within Microsoft Excel. Excel 2010 was used for this tutorial;…
The viewer will learn how to simulate a series of coin tosses with the rand() function and learn how to make these “tosses” depend on a predetermined probability. Flipping Coins in Excel: Enter =RAND() into cell A2: Recalculate the random variable…
The viewer will learn how to simulate a series of sales calls dependent on a single skill level and learn how to simulate a series of sales calls dependent on two skill levels. Simulating Independent Sales Calls: Enter .75 into cell C2 – “skill leve…

#### 757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!