「vba 改行コードかどうか文字列を一文字ずつ調べる」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気が付きました。
文字列の中に改行コードが含まれているかどうかを、1文字ずつ順番にチェックするVBA(Visual Basic for Applications)のコードを探している方による検索です。
どのアプリケーションでの話なのかわかりませんが、参考になりそうなExcelマクロを2つご紹介しておきます。
If文でInStr関数を使って改行を含むかを判定するサンプルマクロ
まず、文字列の中に改行コードが含まれるかどうかを判定するだけならば、わざわざ1文字ずつチェックする必要はありません。
以下のようなInStr関数を使ったマクロで、アクティブセルに改行が含まれているときのみ「改行が含まれています。」というメッセージが表示されます。
Dim txt As String
txt = ActiveCell.Value
If InStr(txt, vbLf) = 0 Then
MsgBox "改行は存在しません。"
Else
MsgBox "改行が含まれています。"
End If
End Sub
VBAではInStr関数を使うと、文字列が含まれているかを調べることができます。
InStr関数は、第1引数に指定された文字列から、第2引数に指定された文字列を探して、みつかった場合には、何文字目に存在するかという数値を返します。
そして、文字列が見つからなかった場合には「0」を返してきます。
上記のマクロでは、この見つからなかったときに「0」を返すということを利用して、
txt = ActiveCell.Value
If InStr(txt, vbLf) = 0 Then
というIf文にしています。
InStr関数の第1引数にアクティブセルの値を代入した変数・txtを、第2引数にExcelの改行コード(Line Feed・0x0A)を定数・vbLfで指定しています。
改行コードかどうかを1文字ずつチェックするサンプルマクロ
上記のマクロように、If文とInStr関数で、改行コードを含むかどうかは判定できますが、
「vba 改行コードかどうか文字列を一文字ずつ調べる」
という検索をなさった方に、そのままお応えするなら、以下のようなマクロでしょうか。
Dim i As Long
Dim txt As String
Dim c As String 'a single character
txt = ActiveCell.Value
For i = 1 To Len(txt)
c = Mid(txt, i, 1)
If c = vbLf Then
MsgBox i & "文字目は改行コードです。"
Else
MsgBox i & "文字目は『" & c & "』です。"
End If
Next i
End Sub
上記のマクロを実行すると、アクティブセルの値を1文字ずつチェックして、改行コードだったときに、
「n文字目は改行コードです。」
改行コードでなかったときには、
「n文字目は『●』です。」
というメッセージボックスが表示されます。
アクティブセルに入力されているデータの、文字数だけFor~Nextループを回して、
txt = ActiveCell.Value
For i = 1 To Len(txt)
Mid関数を使ってアクティブセルの文字列から1文字ずつ取り出して、
c = Mid(txt, i, 1)
取り出した1文字が改行コードかどうかを判定しています。
If c = vbLf Then
Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » VBAのIf文で改行を含むか判定する-InStr関数