【VBA初心者】面倒なコピペ作業を「3秒」で終わらせる!Left・Right・Mid関数を使った文字抽出の極意

【業務効率化】VBA
スポンサーリンク

「うわっ、この『A-1234-X』みたいな商品コードから、真ん中の数字だけ3000件分取り出さなきゃいけないの…?手作業でコピペしたら何時間かかるの…?もう帰りたい…」

そんな心の叫びが、今にも漏れ聞こえてきそうです。

長時間の作業で目は疲れ、集中力が切れて思わぬミスを招いてしまう。「自分は一体、何をしているんだろう」と、虚しさを感じることもあるはずです。

でも安心してください。Excelの自動化プログラムであるVBAの「文字抽出の3大関数」をマスターすれば、その悩みは一瞬で解決します。

今回は初心者の方でも、そのままコピー&ペーストで活用できるよう、ステップバイステップで解説していきます。

【業務効率化】VBAの記事を見る

文字の取り出しは「ロールケーキの切り分け」と同じ!

今回活用するのは、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の記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました