「うわっ、この『A-1234-X』みたいな商品コードから、真ん中の数字だけ3000件分取り出さなきゃいけないの…?手作業でコピペしたら何時間かかるの…?もう帰りたい…」
そんな心の叫びが、今にも漏れ聞こえてきそうです。
長時間の作業で目は疲れ、集中力が切れて思わぬミスを招いてしまう。「自分は一体、何をしているんだろう」と、虚しさを感じることもあるはずです。
でも安心してください。Excelの自動化プログラムであるVBAの「文字抽出の3大関数」をマスターすれば、その悩みは一瞬で解決します。
今回は初心者の方でも、そのままコピー&ペーストで活用できるよう、ステップバイステップで解説していきます。
文字の取り出しは「ロールケーキの切り分け」と同じ!
今回活用するのは、Left(レフト)、Right(ライト)、Mid(ミッド)という3つの関数です。
英語が並ぶと難しく感じるかもしれませんが、考え方は非常にシンプル。「長いロールケーキをどう切り分けるか」というイメージを持つだけで十分です。
- Left(左): ロールケーキの「左端」から指定した分だけ切り取る。
- Right(右): ロールケーキの「右端」から指定した分だけ切り取る。
- Mid(真ん中): ロールケーキの「途中のここ!」から指定した分だけ切り取る。
【実践】3秒で終わらせるコピペ用コード
例えば、A列に「A-1234-X」のような商品コードが3,000行あるとします。
ルールは以下の通りです。
- カテゴリ: 一番左の1文字(例:A)
- ID: ハイフンに挟まれた真ん中の4文字(例:1234)
- ランク: 一番右の1文字(例:X)
これらをB列、C列、D列へ一瞬で振り分けるプログラムがこちらです。以下のコードをコピーして、VBAエディタに貼り付けてみてください。
Sub SplitProductCodes()
Dim i As Long
' 2行目から3000件、同じ作業を繰り返す
For i = 2 To 3001
'①【Left関数】B列に「左から1文字」を取り出して入れる
Cells(i, 2).Value = Left(Cells(i, 1).Value, 1)
'②【Mid関数】C列に「左から3番目の文字をスタート地点にして、4文字分」を取り出して入れる
Cells(i, 3).Value = Mid(Cells(i, 1).Value, 3, 4)
'③【Right関数】D列に「右から1文字」を取り出して入れる
Cells(i, 4).Value = Right(Cells(i, 1).Value, 1)
Next i
' 終わったらメッセージを出す
MsgBox "作業完了!"
End Sub
【応用編】文字数がバラバラでも大丈夫!InStr関数で「動的」に切り分ける
実務においては、商品コードの長さが一定ではなく、抽出したい文字の位置がバラバラなケースも少なくありません。
例えば、「A-12-X」と「ABC-45678-XYZ」が混在しているような場合、先ほどの「○文字目から○文字取る」という固定のルールでは対応しきれませんよね。
そんな場面で威力を発揮するのが、特定の文字(ハイフンなど)が「何文字目にあるか」を自動で検索してくれるInStr(イン・ストリング)関数です。
この関数を「探知機」のように活用すれば、ハイフンの位置がどこに移動しても、狙った文字だけを正確に抜き出すことが可能になります。
一見すると難しそうですが、仕組みは非常にロジカルで楽しい作業です。
以下のコードは、ハイフン(-)の位置を自動で見つけ出し、その前後を切り分ける汎用性の高いプログラムです。データ形式が不揃いなリストを扱う際に、ぜひ活用してください。
Sub SplitFlexibleCodes()
Dim i As Long
Dim s As String ' 元の文字を入れる箱
Dim pos1 As Long ' 1つ目のハイフンの位置
Dim pos2 As Long ' 2つ目のハイフンの位置
For i = 2 To 3001
s = Cells(i, 1).Value
If s = "" Then Exit For ' 空白行になったら終了
'1つ目のハイフンの位置を探す
pos1 = InStr(1, s, "-")
'2つ目のハイフンの位置を探す(1つ目の次の位置から探し始める)
pos2 = InStr(pos1 + 1, s, "-")
'①カテゴリ:左端から「1つ目のハイフンの手前」まで
Cells(i, 2).Value = Left(s, pos1 - 1)
'②ID:1つ目のハイフンの「次の文字」から、「2つのハイフンの間」の文字数分
Cells(i, 3).Value = Mid(s, pos1 + 1, pos2 - pos1 - 1)
'③ランク:2つ目のハイフンの「次の文字」から最後まで
Cells(i, 4).Value = Mid(s, pos2 + 1)
Next i
MsgBox "作業完了!"
End Sub
まとめ:仕組みを理解すれば、自動化できる!
いかがでしたか?
Left・Right・Mid関数を使えば、もう手作業には戻れません。
さらにInStr関数で「位置を特定」し、Mid関数で「切り出す」。このコンビネーションを覚えるだけで、Excel作業の自動化レベルは格段に跳ね上がります。
最初はパズルのように感じるかもしれませんが、一度動けば快感に変わるはず。ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント