Split関数で格納した値をセルに表示させる
こんにちは。伊川(@naonaoke)です。
今回はこの記事の続きになります。
前回の記事では、24文字の文字列のブロックを抽出しました。
今回は、Split関数を使って抽出する方法を説明します。
配列に格納するまでは、理解できるとおもうのですが、格納した配列の値をセルに表示する方法が結構な問題です。
その方法を順番に説明します。
目次
Split関数
配列は、理解できると本当に面白いと思います。
私もそれほど理解はしていませんが、何となくですが、理解はしています。
そもそも、Excelで配列を使わなければならないシーンがあります。
それが、Split関数が必ず、取得した値を配列で返すからです。
この場合は、絶対に配列の知識が必要になります。
特定の文字、空白(全角、半角)で区切られた場合、セルに格納します。
まさに、CSVファイルを取り込むために作成された関数だと思います。
Split関数を利用 作業手順 その1 前回紹介した内容
上のコードを実行するとローカルウィンドウに下記のような内容が表示されます。
つまり、0~661の配列(箱)に格納された事がわかります。
Split関数を利用 作業手順 その2 イミディエイトウィンドウで確認
イミディエイトという言葉は「即時の」という意味を持っています。
イミディエイトウィンドウは、知りたいこと・確認したいことを即時に知ることができるウィンドウです。
Split関数で格納した、0番目の値を、Debug.Print arr(0)で表示しました。
どうやら、配列に格納されているみたいです。
これは選択しているセルをSplit関数に格納します。
tmpという変数がやたら記載されていますので、そこも変更します。
tmpを一行で表示します。
しかし、整形するデータは、セルA1だけではありません。
今回の場合は、セルA1~セルA446まであります。
競馬の出走頭数は、毎週変わります。
だから、A列の最期までという設定をします。
セルの最期までが、イマイチ理解できない場合は、この記事を参照してください。
For moji = 1 To maxrow
tmp = Split(Replace(Cells(moji, 1), “ ”, ” “))
このように整形します。
Split関数を利用 作業手順 その3 配列が格納している個数を知る
今回は、0~661というように、事前に検証しています。
しかし、実務ではそのようなことはしません。
配列の長さを理解するには、「LBound」「UBound」を使います。
しかし、配列は、特に何も指定しない限り、0から始まります。
For i = 0 To UBound(tmp)
このように記載すれば配列の最初から最後までというように指定できます。
Split関数を利用 作業手順 その4 配列の値をセルに表示させる
arr(0)~arr(661)まで記載すると目的は達成できます。
しかし、そんなことは無意味です。
無意味なことを避けるために、For i = 0 To UBound(tmp)を利用しました。
Cells(moji, i + 1) = tmp(i)
このように記載します。
配列の値について、変数を利用して、セルに表現をする場合には約束があります。
「UBound」で利用した変数(今回は、i)を、左辺と右辺に使うことになります。
そして、変数iに1を加算するのは、iは、0から始まっているため、このまま利用すると、
Cells(1,0)という事になります。
したがって、セルに表現する場合は、iに0を加算して Cells(1,1)という状態を作らなければなりません。
ここに気づけたら、配列はカンタンになります。
ここがポイント
配列をなんのために使うのかを考えます。Excelにおいては、Split関数を使うためです。
この基本を押さえると、連想配列や、動的配列も理解できるようになります。
連想配列、動的配列も、配列の範囲を通常は、変数を使ってしていします。
そして、配列を変数に格納した場合に、格納した変数を、右辺と左辺に利用することで、セルに表現できます。
基本を理解すると、なんでも利用することができます。
まとめ
今回は、Split関数を利用して、配列の値をセルに表現する方法を順番に記載しました。
基本的なことなのですが、記載しているサイトは少ないと思います。
もし、Split関数に不明なこと、または、配列の値をセルに表現するときに、不明なことがあれば、私のサイトに訪問していただけたら、幸いです。
今回のサンプルファイルは、No164です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。