なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

現役インフラエンジニアが教えるVBA講座~6.文字列を扱う①~

f:id:nazuna_0124:20180609224553p:plain

このあたりまでは一気に書き溜めていた

講座のつづき。



おつかれさまです。なずなです。



今回は文字列関係の1回目。

どっちかっていうと文字列の条件分岐ですね。



覚えるのみ。そしてしょっちゅうつかいます!



6.文字列を扱う

引き続き基礎勉強になります。
文字列の扱い方は非常に重要です。

極端なことを言えばデータとは文字を決まったルールに
したがって並べただけのものです。

この扱い方、どう扱っていくかを覚えるだけで
できることの幅がとても広がります。

文字の条件分岐

[まとめ]
    ・VBAの比較は 文字 = 文字 イコールです。
    ・LIKE演算子があります。*(ワイルドカード)使えます。
    ・正規表現は参照設定すれば可。ここでは扱いません。


まずはA1セルからA10セル程度まで適当に文字をうめてください。

aaa
ereare
braer
eree
eee
aerea
arae
aerer


みたいなのでオッケーです。


最初に1列をdebug.printする処理を作ります。

```VB
Sub sample1()
Dim sh As Worksheet

Set sh = Worksheets("Sheet1")

Dim i As Long

i = 1

Do While sh.Cells(i, 1).Value <> ""

    Debug.Print sh.Cells(i, 1).Value

    i = i + 1
Loop

End Sub
``` VB

### 通常の条件分岐

    数字と一緒です。 = と <> です。

```VB   
Sub sample2()
Dim sh As Worksheet

Set sh = Worksheets("Sheet1")

Dim i As Long

i = 1

Do While sh.Cells(i, 1).Value <> ""

    If sh.Cells(i, 1).Value = "aaa" Then
        Debug.Print sh.Cells(i, 1).Value, "一致", i

    Else
        Debug.Print sh.Cells(i, 1).Value, "不一致", i
    End If


    i = i + 1
Loop

End Sub
```


### ○○が含まれる。

2種類扱います。Like と inStrです。

補足としてLikeはVBSでは使えないことを軽く覚えておいてください。


#### Like
    Q. 文字「ra」が含まれる行数をdebug.printしてください。

    ```VB
    Sub sample3()
        Dim sh As Worksheet

        Set sh = Worksheets("Sheet1")

        Dim i As Long

        i = 1

        Do While sh.Cells(i, 1).Value <> ""

            If sh.Cells(i, 1) Like "*" & "ra" & "*" = True Then
                Debug.Print i

            End If

            i = i + 1
    Loop

    End Sub

    ```

    Like のところの書き方をおぼえるだけです。

    *はワイルドカードというやつ。なんでもオッケーの意味です。

    = True は省略可能です。


    あ! True or False の話してないかも。。。
    正しいか、正しくないかの2択です。なんとなく雰囲気でOKです。

    [補足]
    もう少し柔軟な使い方ができる演算子です。
    ぐぐって確認してみてください。

    ただし、あまりこれで複雑なことはしないのを推奨です。


### inStr


```VB
Sub sample4()
    Dim sh As Worksheet

    Set sh = Worksheets("Sheet1")

    Dim i As Long

    i = 1

    Do While sh.Cells(i, 1).Value <> ""

        If InStr(sh.Cells(i, 1).Value, "ra") > 0 Then
            Debug.Print i & "行目", InStr(sh.Cells(i, 1).Value, "ra") & "文字目"
        End If

        i = i + 1
    Loop

End Sub
```

書き方が妙にややこしくなりました。

まず判定が0より大きければになっています。

これはInStrがある文字列に、文字が含まれている開始文字数を返してくるためです。

なければ0が帰ってきます。

覚えておくとたまーーーに便利です。

今回はここまで!

いろいろ文字を変えたりして、希望の表示になるか 確認してみてください。