文字列の分割
30日間1日1本マクロ生活、記念すべき1日目です。
マクロを書く準備は、0日目に記事を書きました。
と言っても今日なんですけど。
マクロを書く準備早速マクロを書こうと思ったんですが、マクロって何?食えんの?って人もいると思うんで、丁寧に行こうかな、と。マクロってのは、通常は人間の手でやるような作業を、プログラムを書くことで機械に自動的にやらせるってことです。Excelの場合はVBA(Visual Basic for Application)という言語を使ってマクロを書きます。まずはその準備を。Excelを起動すると、ワークシートが現れます。ここでキーボードの「ALT+」を押してください。はキーボードの上方にあるファンクションキーの11番です。すると、このウィンドウが開... 0日目 マクロを書く準備をしよう【30日間1日1本マクロ生活】 - わたしの日常に価値はありますか? |
今日のネタは、文字列の分割です。
こんなデータがあるんです。
GEOPAPINASHVILI, Amiran
JPNAOKI, Dai
HUNSZABO, Csaba
SLOTRBOVC, Matjaz
FRAMKHEIDZE, Luka
GERHEYDER, Maximilian
AZESADIGOV, Mehman
TUROZLU, Bekir
BRAKITADAI, Felipe
MARHOUMMANI, Abderrahmane
GBRMCKENZIE, Ashley
MONSICCARDI, Yann
PORMANSINHO, Goncalo
RUSMSHVIDOBADZE, Robert
GERKLEMM, Lukas
CROAZINOVIC, Bernard
TURKABA, Ahmet sahin
SLOSTARKEL, David
GBRHALL, Samuel
AZEMAMMADSOY, Davud
RUSOGUZOV, Albert
BELVERSTRAETEN, Jorre
FRAFLORIMONT, Jolan
USADIAZ, Adonis
MARJAFY, Mohamed
BULALIPIEV, Valentin
人の名前なんですが、左から3文字は国名なんです。
このままじゃ使えないんです。
A列に入っているこのデータ、B列に名前、C列に国名と分割して出力したいんです。
手作業でやってもできないことはありません。たったの26人ですからね。
でも、これが2600人だったら絶対にやりたくないですよね。
そこでマクロなんです。
さっそくコードを
Sub 三文字目で分割()
For Each c In Selection
y = c.Row
x = c.Column
Cells(y, x + 2) = Mid(c, 1, 3)
Cells(y, x + 1) = Mid(c, 4, 100)
Next c
End Sub
では、解説します。
1行目
1行目の「Sub 三文字目で分割()」は第0回でも書いたように、マクロの1行目のお約束です。このマクロの名前は「三文字目で分割」です。
2行目
2行目の「For Each c In Selection」は7行目の「Next c」と対応しています。
繰り返し処理といって、「For」と「Next」の間を何度も何度も繰り返して実行させる命令です。
「Each c in Selection」について。
「Selection」というのは「選択している範囲」という意味です。
「Each c」ですから、選択範囲の中の全てのcという意味。
つまり、選択範囲の中の全てのセルについて繰り返しますよ、という命令です。
「For」と「Next」の間を繰り返すことを「ループ」というのですが、「ループの中では対象のセルをcと呼ぶよ」っていうのが「For Each c In Selection」の意味に含まれます。
3行目、4行目
「y = c.Row」の「c」は今対象にしているセルのことですよね。
「c」の後ろの「.(ピリオド)」は、日本語で言う「の」ですね。
「Row」は上から何段目にあるかという数字の意味。つまり「c『の』段」と読み取ってもらえればいいです。
それを「y」という変数に入れるんです。
ループの最初は「GEOPAPINASHVILI, Amiran」のセルを対象にしていますから、「1段目」ですよね。だから「y=1」が入ります。
「x」についても同じ。「Column」は左から何列目かを意味しています。
5行目、6行目
「Cells」はワークシートのセルです。カッコの中で「段」「列」の順に指定します。
「Mid」は文字列の中から指定した部分を取り出す関数です。
「Mid(文字列,開始位置,文字数)」で指定します。
5行目は国名を取り出そうとしているので、開始位置は1文字目、文字数は3文字です。
6行目は名前を取り出そうとしています。開始位置は4文字目から、文字数は最後まで。だから大きい数字を入れてます。
ですから、このマクロでは120文字とか130文字の名前の人は途中で切れちゃいます。
データのあるセルの1つ右のセルに名前を入れるので、6行目は「Cells(y,x+1)」とxに1を足したセルに入れます。
2つ右のセルに国名を入れるので、5行目はx+2です。
実行結果
分割したい文字列を含むセルを範囲選択し、マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押します。
はい、このようにデータが入っているセルの右2つの列に名前と国名が分割されました。
とりあえず、1日目はこんな感じで。
ちなみに、このデータが何なのかは分かる人には分かるはずです。はい。
Excelは便利
悔しいですが、Excelは便利です。
Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。
マクロを書くようになると、Excelからは離れられないですね。
30日間、頑張ります。