【ExcelVBA】文字列を指定した文字で区切って分割するSplit関数
エクセルVBA初心者「日付を年月日で分割して抽出したい」「ユーザーフォームに名前を姓と名で分けて表示したい」どうしたらいいの?
こんな疑問に答えます。
こんにちは、Fujiya(@fujiya_xyz)です。
今回はSplit関数について解説していきます。
ExcelVBAのSplit関数は、文字列を指定された区切り文字で分割し、配列として返す関数ですね。Split関数を使用することで、文字列から特定の情報を抽出したり、文字列を整理することができます。
ExcelVBA(エクセル)のSplit関数を解説
文字列から「抽出」、文字列の「整理」と言っても一番使うことが多い使い方ってどんな状況なんだろう?ってことを考えてみたのですが、僕は入力フォームからデータの登録をするときが多いです。具体的には名前を「姓」「名」で分けて登録するとか、年月日を「年」「月」「日」で登録するなどですね。
入力フォームについては「vba初心者向け『入力フォーム』の作り方”オブジェクト作成編”」で解説してますので参考にしてください。
他に考えられることは、Webページから取得したURLの文字列を、ドメイン名、パス、クエリなど分割してURLを解析できます。またCSVファイル(カンマファイル)からデータを読み込んで、列ごとに分割することも可能です。これらはあくまでも一例ですが、他にもSplit関数は様々な使い方が考えられます(僕はそんな難しいことには使ってないです)。
さっそく実際のコードを元に解説していきます。以下。
【ExcelVBA】Split関数について、日付の分解して日付文字列を年、月、日などに分割する
例えば、以下のようなユーザーフォームを用意して、表示ボタンをクリックすると今日の日付を分割して「年」「月」「日」をそれぞれのテキストボックスABCに入れるというデモを行ってみたいと思います。
Private Sub CommandButton1_Click()
日付=Format(Date, "yyyy/mm/dd")
年 = Split(日付, "/")(0)
月 = Split(日付, "/")(1)
日 = Split(日付, "/")(2)
テキストボックスA.text = 年
テキストボックスB.text = 月
テキストボックスC.text = 日
End Sub
上記のコードでは、Format関数を使用して日付型の変数を「yyyy/mm/dd」形式の文字列に変換します。次に、Split関数を使用して文字列を「/」で年、月、日に分割し、それぞれに格納してテキストボックスへ表示しています。
わかりづらいのは「年 = Split(日付, "/")(0)
」かと思います。これを解説すると『split(文字列,”区切りたい文字”)(区切った際の部分番号)』という感じです。なので、文字列は日付で”/”で区切る。区切った際の部分番号は0が「年」、1が「月」、2が「日」となります。注意するべきは部分番号は0(ゼロ)が最小値ということです。この場合には「年」に格納しますので0(ゼロ)が入るというワケです。
Format関数とDate関数を使用していますが、もしわからないという方がいましたら両方とも「今日の日付・時間を取得する」の記事で解説をしていますので参考にしてください。
また、今日の日付ではなく、特定のセルに入っている日付を分解する場合にはDATEにセルを入れてあげるだけです。
ちなみにボタンの設置の仕方がわからないという人は「vba初心者向け『入力フォーム』の作り方”オブジェクト作成編”」を参考にしてください。ユーザーフォームではなくて、シートにテキストボックスを作成する場合には「【エクセルVBA】シートにボタンを作成して作業を効率化する」で解説しています。
今回の記事は以上です。
最後までお読みいただきましてありがとうございました。
僕はエンジニアでは無く、まるっきりの素人から業務の中でVBAを自己流で使えるようになりました。なので、パソコン学校で教えるようなエクセルの基礎ではなく、事務業務で実際に使用することの多いコードを中心に記事を書いています。
実際に世の中には、僕と同じような人の方が多いと思っていますので、もしVBAに興味のある初心者の方や様々な業務に導入をしていきたいと考えている方にも参考になる記事をいくつか下に貼っておきますのでご参考ください。