PR

【ExcelVBA】文字列を抽出する①

記事内に広告が含まれています。

長い文字列のうち、途中から途中までを抽出したい時にどうするか?

ちょっと複雑なので備忘録を作りました。

何文字目からがわかっていればLeftやRightが使えますが、

何文字目にあるかわからない時にはInstrで見つけます。

スポンサーリンク

見つけたい文字をInstrで調べてMIDで抽出する

例えばA1セルに「2024/5/5_みかん」という文字があり

「みかん」だけを抽出したい場合

Instrで_の位置を調べます。

Dim wkUnderber As Long

wkUnderber = InStr(Cells(1, 1), “_”)

MsgBox wkUnderber

wkUnderber には9が入ります。

2024/5/5_みかん

    ↑アンダーバーは9文字目

そしてMIDを使います。

Dim wkUnderber As Long

Dim wkString As String

wkUnderber = InStr(Cells(1, 1), “_”)

wkString = Mid(Cells(1, 1).Value, wkUnderber + 1)

MsgBox wkString

Dim wkUnderber As Long

Dim wkString As String

wkUnderber = InStr(Cells(1, 1), "_")

wkString = Mid(Cells(1, 1).Value, wkUnderber + 1)

MsgBox wkString

結果は下記のと折りです。

応用編:文字の途中から途中までを抽出する(InstrとMid)

上記のように6文字目から果物の名前があり、さらに_と数字がある場合

果物の名前だけを抽出したいとします。

    Dim wkUB1 As Long
    Dim wkUB2 As Long
    Dim wkString As String
    
    wkUB1 = InStr(Cells(1, 1), "_")
    wkUB2 = InStr(wkUB1 + 1, Cells(1, 1), "_")
    
    wkString = Mid(Cells(1, 1).Value, wkUB1 + 1, wkUB2 - wkUB1 - 1)
    MsgBox wkString

結果は下記のようになります。

さらにA列最後までの内容も出力するには下記のようにfor nextを使います

    Dim wkUB1 As Long
    Dim wkUB2 As Long
    Dim wkString As String
    Dim i As Long

    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        wkUB1 = InStr(Cells(i, 1), "_")
        wkUB2 = InStr(wkUB1 + 1, Cells(i, 1), "_")
        
        wkString = Mid(Cells(i, 1).Value, wkUB1 + 1, wkUB2 - wkUB1 - 1)
        MsgBox wkString
    Next i

結果

コードの説明 Instr

コードを細かく説明します。

Instr(文字列, 探したい文字) 

または

Instr(探し始めの位置, 文字列, 探したい文字

というように記述します。

wkUB1 = InStr(Cells(i, 1), “_”) で最初の_の位置を探してwkUB1に入れます。

さらに2回目の_を探すには、

wkUB2 = InStr(wkUB1 + 1, Cells(i, 1), “_”)で、

最初の_の位置に1を足したところから探し始めます。

wkUB2には、2回目の_の位置が入ります。

例として、

aaaa_みかん_1100 という文字列の最初の_の位置は5

5文字目から、さらに_を探すと9文字目にあります。

コードの説明 Mid

Midは文字の途中から途中、また最後まで抽出するときによく使用します。

Mid(文字列, 抽出の開始文字位置, 文字数

文字数は省略すると最後の文字まで抽出できます。

※_の位置検索方法は、については前の項目をご覧ください。

コードの説明 Cells(Rows.Count, 1).End(xlUp).Rowで最終行を調べる

Cells(Rows.Count, 1).End(xlUp).Rowは

最終行を調べる時に使います。

途中で空白が入っている時に使います。

例は、A列の最終行です。

ちなみに途中に空白が入っていない場合は

End(xlDown)でも大丈夫です。

コードの説明 For Next

いずれループの記事でまとめて書きますが

一番理解しやすいループです。

For i = 1 to 100

(繰り返す処理)

Next i

上のように記述すると、iという変数が

繰り返す処理が一回終わるたびに

1ずつ増えて、100になるまで繰り返します。

Next i が、ここでiの値が1つ加算されると考えると

理解しやすいかもしれません。

にほんブログ村 小説ブログ ライトノベル(小説)へ にほんブログ村 小説ブログへ にほんブログ村 アニメブログへ にほんブログ村 アニメブログ アニメ情報へ にほんブログ村 漫画ブログへ にほんブログ村 漫画ブログ 漫画備忘録へ
タイトルとURLをコピーしました