Solved

Return middle part of a string

Posted on 2011-09-07
7
203 Views
Last Modified: 2012-08-14
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
Comment
Question by:ckelsoe
7 Comments
 
LVL 29

Expert Comment

by:Randy Downs
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

by:
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

Open in new window

0
 
LVL 31

Expert Comment

by:Helen_Feddema
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

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 31

Expert Comment

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

Expert Comment

by:nutsch
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

Open in new window

0
 

Author Closing Comment

by:ckelsoe
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

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

Thomas
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

How to quickly and accurately populate Word documents with Excel data, charts and images (including Automated Bookmark generation) David Miller (dlmille) Synopsis In this article you’ll learn how to use ExcelToWord! to copy data,charts, shapes …
Freeze panes is an option within all variants of Excel to enable parts of a sheet to remain stationary when the cursor is in another part of the sheet. This is a very useful feature which is overlooked or under used.
This Micro Tutorial will demonstrate in Google Sheets how to use the HYPERLINK function to create live links inside your spreadsheet.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

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

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

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now