文字列
環境依存文字をコード上に書こうとすると「?」マークになってしまいます。このようにコード上(VBE)に表示できない環境依存文字をセルに出力するには、ChrW関数に対象の文字コードを渡して文字を取得します。
文字コードから文字を取得する、Chr関数シリーズを解説します。Shift-JISコードから文字を取得するChr関数と、Unicodeコードから文字を取得するChrW関数があり、特にVBEに表示できない文字を扱う際に使用します。
対象文字の文字コードを取得するAsc関数を解説します。Asc関数はShift-JIS、AscW関数はUnicodeの文字コードを返します。VBEで表示できない文字をChrW関数で扱う際に、渡す文字コードを調べるのに利用します。
VBAのAsc関数と、シート関数のASC関数の違いを解説します。この2つはまったく違う関数で、VBAのAsc関数は文字コードを取得する関数、対してシート関数のASC関数は、全角文字を半角に変換する関数です。
文字列の前後のスペースを削除するTrim関数の使い方を解説します。Trim関数のほかにも左右だけ削除するLTrim/RTrim関数と、途中の複数スペースも1つにしてくれるシート関数のTRIMも使用することができます。
文字列型になっている数値をInteger型(整数型)に変換する、CInt関数について説明します。本関数はCLng関数の完全下位互換ですので、よほどのことがない限りは使用しないと思います。
文字列型になっている数値をLong型(長整数型)に変換する、CLng関数の使い方を解説します。数値型に変換する以外にも、Integer型のオーバーフロー問題への対応や、文字列型同士の足し算問題の対応でも使用します。
VBAの組み込み関数である、CStr関数とStr関数の違いを解説します。どちらも値を文字列(String型)に変換する関数ですが、Str関数は少し特殊な仕様を持っている関数ですの、基本的にCStr関数を使っておけばOKです。
Str関数は数値を文字列(String)型に変換する関数とありますが、実際はBoolean型やDate型も文字列に変換します。正の値に半角スペースを入れるなど不要な挙動も多いので、文字列変換には素直にCStr関数を使いましょう。
数値などの値を文字列型に変換する、CStr関数の使い方を解説します。といってもVBAには暗黙の型変換機能があるため、文字列が必要な場面では自動で文字列に変換してくれます。使う場面は少ないかもしれません。
文字列中のアルファベットを大文字/小文字に変換するUCase / LCase関数を解説します。UCase/LCase(文字列)という構文で実行できます。全角アルファベットへも実行でき、その場合は全角で結果が返ります。
スペースを指定回数だけ繰り返した文字列を作りたいときは、Space関数を利用できます。n個のスペース=Space(n)というストレートな構文です。String(n, " ")でも同じことができるので、お好きな方をお使いください。
文字列内に特定の文字列があるかを判定する方法を解説します。InStr関数とLike演算子を使う2つの方法があり、単純な判定ならInStr関数を使うのが簡単で、複雑な判定を行う場合はLike演算子の方が機能が多く便利です。
ファイル名から拡張子を取り出す方法を解説します。FileSystemObjectのGetExtensionNameメソッドを利用する方法と、InstrRev関数+Right/Mid関数を使用する方法の2種類があります。
「あああ」や「AAA」など同じ文字を繰り返した文字列を作りたいときは、String(繰り返し回数, 繰り返す文字)で生成できます。繰り返す文字が複数の場合は、WorksheetFunction.Rept関数の方を使用してください。
「+」を文字列に対して使うと連結演算子(&と同じ)になります。足し算の結果がかなり大きな誤った値になったり、セルの表示書式を「文字列」にすると正しく計算されないような不具合が発生した場合は、この仕様を疑ってください。
文字列を部分一致で比較するLike演算子の使い方を解説します。任意の文字列を意味するワイルドカード「*」を利用して、If 判定したい文字列 Like "*○○*" Thenの形式で使用します。数字を表す#や、アルファベットを表す[A-Z]など、文字種も指定可能です。
文字列が文字列を含んでいるかどうかを判定する2つの方法「Instr関数/Like演算子」について、どちらが早いかを検証しました。Like演算子が安定して速かったですが、最終結論は「どちらも十分早いので書きやすい/読みやすい方を使えばよい」です。
複数のセルの値を文字列に結合する方法を解説します。対象セルがn×1や1×nのセル範囲であればExcelのTEXTJOIN/CONCAT関数、VBAのJoin関数が使えます。対象セルが複数エリアにまたがる場合は、ForEach文で1つずつ結合していきます。
文字列を区切り文字付きで結合するJoin関数の使い方を解説します。Join(1次元配列, 区切り文字)で配列の各要素をつなげた1つの文字列を作ってくれます。この関数は1次元配列限定のため、セル範囲を渡したい場合はTranspose関数をかませます。
テキストからある文字列を検索し、それより左側を削除するコードを解説します。Instr関数で検索文字列の位置を知らべてRight/Mid関数で取り出すコードが基本になりますが、Split関数を使って検索文字で区切るコード短縮技も紹介します。
テキストからある文字列を検索し、それより右側を削除するコードを解説します。Instr関数で文字列の位置を調べて、その1文字手前までをLeft関数で取得します。対象文字列が複数登場する場合は、InstrRev関数と使い分けることになります。
値が「0」のセルを置換でクリアするマクロを紹介します。単純な処理ですのでコードも単純で、Selection.Replace 0, "", lookat:=xlWhole1行でOKです。ただし、置換はChangeイベントと相性が悪いので.EnableEvents = Falseを挟んで実行します。
アルファベット(ABC)を数字(123)に、またはその逆の変換をする関数を紹介します。列見出しと列番号の相互変換という需要がほとんどと思いますので、27番以降はAA~と対応させる関数にして、「Rangeプロパティ」を使用して作ります。
文字列の中にある文字がいくつ入っているかを調べる方法を解説します。コード量が最少のSplit関数法、同じ手法がワークシートでも使えるReplace関数法、面倒だが最速のInstr関数法の3つがありますので、お好きなものをお使いください。
パスからファイル名・フォルダ名を取得する方法を解説します。InstrRev関数で一番右の「\」を検索し、Midでその右側を取ってくることで目的の文字列を取得できます。また、Dir関数の性質を使ってDir(パス)から求めることもできます。
文字列から "(" と ")" を検索し、カッコの中身を取得する方法を解説します。Instr関数で開きカッコと閉じカッコを検索し、そうして求まった「○文字目から△文字目」という位置情報をMid(元の文字列, ○, △ - ○ + 1)に代入して取得します。
ExcelVBAにおいて文字列を置換する処理に使う、Replace関数とReplaceメソッドの違いを解説します。Replace関数には、「シート関数のREPLACE」と、「VBA関数のReplace」の2つがありますので、ここでは3つのReplaceについて解説します。
テキストから2つの文字列を検索し、その間にある文字列を置換したり、削除する方法を解説します。RangeオブジェクトのReplaceメソッドを使うとワイルドカード「*」が使えるため簡単ですが、できない場合はInstr関数で地道に頑張ります。
テキストから2つの文字列を検索し、その間にある文字列を取ってくる方法を解説します。開始位置= InStr(元の文字列, 文字A)+1、終了位置=InStr(元の文字列, 文字B)-1を求め、Mid(元の文字列, 開始位置, 終了位置 - 開始位置 + 1)で取得できます。