GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  文字列操作について詳しく知ろう!1
 
■ 文字列操作、連結、変換、抜出、置換

文字列操作をマスターしよう!

ExcelVBAを使ってシステム開発をする上で、文字列操作は大変重要な意味を持っています。
ワークシート上で表示されている表示形式は、個々のセルの書式として設定されているだけで、見た目通りのデータがセルに格納されているわけではありません。

文字列操作のポイントは、文字列データから必要とされる部分を抜き取ったり、必要とされる形に編集したり、一部分を置き換えたりすることにあります。
これは、さまざまなシステムでほとんどと言っていいほど必要となる操作で、そのためのテクニックはできるだけたくさん知っていたほうが、よりスマートにシステムを開発することができるでしょう。

では、さっそくExcelVBAの文字列操作についてみていきます。

& 、+ 連結演算子

演算子について詳しく知ろう!でも紹介しましたが、文字列の結合に使用します。"+"は連結するリテラルまたは変数が双方で文字列型でない場合、加算(またはエラー)になりますので注意してください。"&"はあくまで文字列として連結します。
(例)
  Public Sub test()
  Dim MyLng As Long
    MyLng = 2
    Debug.Print "2" + MyLng
    Debug.Print "2" & MyLng
  End Sub
この例では、"4"、"22"が出力されます。

Cstr、Str、Val関数

Cstr、Str関数は数値を文字列に変換します。Val関数は文字列を数値に変換します。Strで数値を文字列に変換する場合、正の数だと頭に半角スペース(サイン桁)が付きます。これは符号を記述するためのスペースで、負の数の場合ここに"-"が入ります。Cstr関数にはサイン桁はなくそのまま変換します。またVal関数で文字列を数値にする場合、数字以外の文字があるとそこまでの数字を数値に変換します。
(例)
  Public Sub test()
  Dim MyLng As Long
    MyLng = 2
    Debug.Print "2" + Cstr(MyLng)
    Debug.Print "2" + Str(MyLng)
    Debug.Print Val("2A") + MyLng
  End Sub
この例では、"22"、"2 2"、"4"が、それぞれ出力されます。

また、Cstrはデータ型変換関数と呼ばれその仲間に次の関数があります。
データ型変換関数一覧
CBool ブール型(Boolean)へのデータ変換
CByte バイト型(Byte)へのデータ変換
CCur 通貨型(Currency)へのデータ変換
CDate 日付型(Date)へのデータ変換
CDbl 倍精度浮動小数点実数型(Double)へのデータ変換
CInt 整数型(Integer)へのデータ変換
CLng 長整数型(Long)へのデータ変換
CSng 単精度浮動小数点実数型(Single)へのデータ変換
CVar バリアント型(Variant)へのデータ変換
CStr 文字列型(String)へのデータ変換

これらの関数で戻り値が、変換されるデータ型の範囲を超えている場合エラーが発生するので注意が必要です。

Space、String関数

文字列を生成します。Space関数は引数分の半角空白を、String関数は第2引数の文字列の先頭文字を第1引数分作成します。String関数で生成される文字列はあくまで第2引数の先頭文字のみですので、注意してください。
(例)
  Debug.Print "*" & Space(2) & "*"
  Debug.Print String(4, "*A")
この例では、"*   *"、"****"が出力されます。

Trim、Ltrim、Rtrim関数

全角半角の空白を削除します。Trim関数は文字列の左右の空白を、Ltrim、Rtrim関数はそれぞれ、文字列の左側、右側の空白を削除します。なお、文字列内の空白は削除しません。
(例)
  Debug.Print Trim("  ** **  ")
  Debug.Print LTrim("  ** **  ")
  Debug.Print RTrim("  ** **  ")
この例では、"** **"、"** **  "、"  ** **"が、それぞれ出力されます。

※ 文字列内の空白を削除したい場合は、Replace関数を使ってスペースを長さ0の文字列に置き換えます。

Lcase、Ucase関数

英字を小文字、大文字に変換します。全角、半角にかかわらず変換します。ファイルの読み書きで、パスを指定する際に使用すると便利です。
(例)
  Debug.Print UCase("abcdef")
  Debug.Print LCase("ABCDEF")
この例では、"ABCDEF"、"abcdef"が出力されます。

StrConv関数

文字列を指定した形式に変換します。
定数一覧
vbUpperCase:1 文字列を大文字にします
vbLowerCase:2 文字列を小文字にします
vbProperCase:3 各単語の先頭文字を大文字にします
vbWide:4 文字列内の半角文字を全角文字にします
vbNarrow:8 文字列内の全角文字を半角文字にします
vbKatakana:16 文字列内のひらがなをカタカナにします
vbHiragana:32 文字列内のカタカナをひらがなにします
vbUnicode:64 文字列をシステム既定のコードページを使ってUnicodeに変換します
vbFromUnicode:128 文字列をUnicodeからシステム既定のコードページに変換します

(例)
  Debug.Print StrConv("abc", vbUpperCase + vbWide)
  Debug.Print StrConv("ABC", vbLowerCase + vbNarrow)
  Debug.Print StrConv("microsoft ofiice excel", vbProperCase)
  Debug.Print StrConv("えくせる", vbKatakana)
  Debug.Print StrConv("エクセル", vbHiragana)
この場合、
  "ABC"
  "abc"
  "Microsoft Ofiice Excel"
  "エクセル"
  "えくせる"
このように出力されます。

Left、Right、Mid関数

文字列から文字列を切り出します。Left、Right関数の場合、第2引数で指定した文字数を文字列の左、右からそれぞれ切り出します。Mid関数の場合、第2引数で指定した文字から第3引数で指定した文字数を抜き出します。第3引数を省略した場合は、文字列の最後まで抜き出します。
(例)
  Debug.Print Left("123456", 2)
  Debug.Print Right("123456", 2)
  Debug.Print Mid("123456", 3, 2)
  Debug.Print Mid("123456", 3)
この例では、"12"、"56"、"34"、"3456"が、それぞれ出力されます。

Left、Right、Mid関数はそれぞれ、バイト単位での切り出しに対応します。その場合はLeftB、RightB、MidB、というように最後に"B"を付けます。(Unicodeで処理されるため半角も2バイトになるので注意してください)
(例)
  Debug.Print LeftB("123456", 2)
  Debug.Print RightB("123456", 2)
  Debug.Print MidB("123456", 3, 2)
  Debug.Print MidB("123456", 3)
この例では、"1"、"6"、"2"、"23456"が、それぞれ出力されます。

Split関数

文字列を指定した文字(デリミタ)で分割し、1次元配列へ格納します。
(例)
  Public Sub test2()
  Dim MyStr() As String
    MyStr() = Split("Spring,Summer,Autumn,Winter", ",")
    Debug.Print MyStr(0)
    Debug.Print MyStr(1)
    Debug.Print MyStr(2)
    Debug.Print MyStr(3)
  End Sub
この場合、
  "Spring"
  "Summer"
  "Autumn"
  "Winter"
が、それぞれ出力されます。

また、Split関数では、返す要素数を指定することやデリミタの比較方法を指定することも可能です。比較方法の詳細はInstr関数を参照してください。

Midステートメント

文字列の指定部分を置き換えます。Mid関数と書式がよく似ていますが、全く異なる動作をするので注意してください。
第1引数に指定した文字列変数に対して、第2引数の場所から、第3引数分置き換えます。
(例)
  Public Sub test()
  Dim MyStr As String
    MyStr = "123456"
    Mid(MyStr, 2, 4) = "****"
    Debug.Print MyStr
  End Sub
この例では、"1****6"が出力されます。

また、Midステートメントも"B"を付けることでバイト単位の置き換えに対応します。

Replace関数

文字列の一部を指定した文字列に置き換えます。指定した文字列が見つからなかった場合、置き換えません。
(例)
  Debug.Print Replace("123456", "2345", "****")
  Debug.Print Replace("123456", "9999", "****")
この例では、"1****6"、"123456"が出力されます。

また、Replace関数では開始位置と置き換え回数、比較方法を指定することが可能です。比較方法の詳細はInstr関数を参照してください。
(例)
  Debug.Print Replace("123bar456bar789bar0", "bar", "-", 3, 2)
この場合、3文字目から2回置き換えを行うので、"3-456-789bar0"が出力されます。



Len関数

文字列の長さを調べます。全角と半角を区別しません。同じ1文字としてカウントします。"B"をつけることでバイト数をカウントします。(Unicodeで処理されるため全角半角にかかわらず2バイトになります)
(例)
  Debug.Print Len("123456")
  Debug.Print LenB("123456")
この例では、"6"、"12"が出力されます。

CSVなどに出力する場合、UnicodeではなくShiftJIS換算のバイト数を求めたい場合がよくあります。その場合はStrConv関数を用いて以下のように求めます。
(例)
  Debug.Print LenB(StrConv("123456", vbFromUnicode))
この例では、"9"が出力されます。定数vbFromUnicodeは、システム既定のコードページに変換します。"123"の部分が1バイト、"456"の部分が2バイトで計算されるため、返り値は9バイトになります。

次回も引き続き、文字列操作の解説です。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,