スポンサーリンク

【コピペでOK!VBA】 ダイアログボックスで指定したセルから下の数値を定型文字列化!

数値を文字列へ 教則本に載らないパソコンの小技
この記事は約4分で読めます。
スポンサーリンク

不揃いな数値を〇桁固定の文字列に自動変換!

こんな人に有効
  • データをExcelで見てみたら"00001"というIDが"1"になってて、打ち直すにも件数が多すぎて手間
  • Excelの関数でやろうとすると"0"をうまく埋められない
  • 桁が足りている"55555"が関数で"055555"みたいになって逆に手間
  • そもそも「ピッ」と押したら「パッ」とならんのか!?という方

会員番号とか社員番号の一覧をCSVで受け取ったときなんかによくある現象ではないでしょうか。

データをくれた人が元のCSVを直接Excelで開いて分かりやすいように色付けとか罫線を引いてくれてCSVに上書きしたものを送ってくれた。
そんな愛にあふれたCSVを開くと会員番号のフォーマットが数値化していて総崩れ。

自分がデータベースからエクスポートするのなら、設定でうまく出せばいい話ですが、そんな愛にあふれたデータを
「ダメだよこのフォーマットじゃ。出し直して!」
と言えない相手もいるでしょう。

打ち直すにしても軽く1万人分とか言ったら絶句ですね。

このプログラムの内容自体はショボい内容です。組める人から見たらこんなの作るまでもない、とあきれるレベルかと思いますが、だからこそ「そんなロジック組んでる場合じゃない」なんて切羽詰まった場面に
サクッとコピペしてさっさと仕事を終わらせてしまいましょう。

そしてデータをくれた人に

「ありがとう、おかげで助かったよ( ´_ゝ`)ノ」

とオトナの対応をしましょう。
痒い所の「ちょっと先」に手が届く。それがここのコンセプトです。

使い方

※もし「開発」タブが無い場合は以下をお試し下さい。

ExcelでVBAを使えるようにする初期設定 | Studio Norway Blog

  1. Excelの「開発」タブから「Visual Basic」をクリック
    VisualBasicを起動
  2. 開いた「Microsoft Visual Basic for Application」のメニューで「挿入」→「標準モジュール」を選択
    VBAに標準モジュールを追加
  3. 画面左側に「標準モジュール」というフォルダができるので展開する。
  4. 「Module1」をダブルクリックすれば、コードを打ち込むためのウィンドウが出てくるので、以下のコードをコピペ
    VBA標準モジュールにコード貼り付け
  5. 「実行」ボタン若しくはF5キーを押して実行。
    マクロの実行
  6. 変換を掛けたい列の先頭セルをマウスカーソルでセレクトしてOKを押す
    マクロを実行させる2
  7. \(^o^)/
    マクロ実行後

但し、空白セルが途中に入っているとそこで止まってしまうショボい設定です。
そこはインスタント機能なんでご愛敬で。

以下のコードをコピーして使用してください

Option Explicit

Dim i As Integer                    '共通で使用
Dim sh1 As String
Dim rng As Range
Dim clm1 As Integer     'ヘッダーの列指定
Dim row1 As Integer     'ヘッダーの行指定

Sub Macro1()

    'マクロでの出来事を非表示にする(高速化のため)
    Application.ScreenUpdating = False

  'ヘッダー位置決め
  'カラムの項目名を読み込むための先頭決め
  Set rng = Application.InputBox( _
     Prompt:="変換したい行の先頭セルを選択してください。", _
     Type:=8)
  On Error GoTo 0
  If rng Is Nothing Then Exit Sub

  clm1 = rng.Column
  row1 = rng.Row

i = 0

    Do While Cells(row1 + i, clm1) <> ""
            With Cells(row1 + i, clm1)
                    .NumberFormatLocal = "@"          'セルの書式設定を「文字列」にする
                    .Value = Format(.Value, "00000")  '数字を0埋めする(5桁揃え)
            End With

            i = i + 1
    Loop

    'マクロでの出来事を非表示にする(高速化のため)
    Application.ScreenUpdating = True

    MsgBox "作業終了!"

End Sub

このプログラムでは数値5桁"00000"のフォーマットにしていますが
.Value = Format(.Value, "00000")の0を増減させることで桁数調整ができます。

私が机の上に常備している本です。Excelでなんか作るときにアイディアやヒントが欲しい時にちらっと見るようにしています。Excelの使い方を人に教えられるようになってから読んでも「知らなかった!」という内容が結構ありました。この手の本は機能紹介の側面が多いのですが、「資料の見せ方」や「時短に繋がるちょい技」など、仕事が早くキレイに終わることを目的としていて、他の教則本とベクトルが違います。

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