0埋めされた文字列から0を削除するには

文字列の左側についた0を削除して数値表示のように編集したい場合があります。

001→1
050→50
999→999
-0100→-100(マイナス文字は無視して0を削除したい)

このように文字列の左の0を削除したい場合、対応方法はいくつかあります。

  1. 数値変換して再度文字列に変換する 簡単!
  2. 正規表現を使う          カスタマイズ+高速化が利点!
  3. 0以外がある部分以降を取得する
  4. 文字列を1文字ずつループして判定する

などが挙げられます。

コードが単純で簡単なのは1番の方法です。ほとんどの場合はこの方法で問題ないと思いますが文字列の長さがあまりに長いと数値化する際にオーバーフローする恐れはあります。でもまあそんなことはまずないでしょう。

2番の正規表現の方法はカスタマイズしやすいのと高速化が利点です。欠点とすれば正規表現が分からない方には難しい点です。

3番目は分かりやすいコードにはなると思います。ただ、1番目や2番目と比べるとコードは長くなります。

4番目は思いつきやすい設計ですがおすすめしません。かなり力技になりフラグや変数を多用する必要が出るでしょう。コードはおそらく一番長くなります。

それぞれサンプルコードを紹介します。ただ、4番目の方法はコードが長くなるためパスします。

なお、小数点については-00.123みたいなことは無いと思いましたので対応していません。

1. 数値変換して再度文字列に変換して0を削除する方法

Val関数でDouble型に変換し、それをCStr関数で文字列に戻す関数です。

引数に変換したい文字列を渡して使います。

利用方法

引数に変換したい文字列を渡すだけです。

実行結果

 

2. 正規表現を使って0を削除する方法

以下のVBAコードは事前に正規表現の参照設定をしておく必要があります。

VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。

正規表現の「”(\-*)(0*)([0-9]+)”」は、負号(マイナス記号の”-“)があればそれは文字列に変換し、それ以降の0、0以降の数字列、の3か所に分けています。

その上で、真ん中の1文字以上の0「(0*)の部分」を除いて再取得することで、0を削除しています。

利用方法と実行結果は先と同じため省略します。

3. 0以外がある部分以降を取得して0を削除する方法

先頭から0がある位置を探して、それ以降の文字列を取得する考え方です。

ただ、マイナス文字がある場合を考慮しているためコードが長くなっています。

利用方法と実行結果は先と同じため省略します。