何かと世間を騒がせている「神エクセル」、こんな記事も話題になっています。
こういった話題をうけて前回は、
入力しづらいくせに無駄なところでゴリゴリマクロを組んでるお役所のエクセル方眼紙。マクロも組める事務職の視点から直してみました。 | 【マクロ不要】プロの事務屋ならお役所の神エクセルをこう直す | エクセリューション https://t.co/upnjxH39XQ
— Morley (@morley_jp) November 12, 2016
といった記事を書きました。
これは神エクセルやエクセル方眼紙といって忌み嫌われている官公庁の申請書類について、申請者がデータ入力する段階から根本的に使いやすいようにしてみようという、フォーマット上で問題を解決するアプローチでした。
そのあとでふと思いついたんですが、
#神エクセル の問題はこれから入力時に解決していくとして、今すでに存在してしまっているエクセル方眼紙から文字列を簡単に連結して抜いてくる関数形式のマクロならすぐ書けそうだな。ユーザー定義関数として書いてみるか。需要あればだけどw
— Morley (@morley_jp) November 12, 2016
ということで、方眼紙のようなマス目に1文字ずつ入力されてしまっている文字列を簡単に結合するため、ワークシート上からもVBAコード上からも使える関数を書いてみました。
作るのも使うのも思いのほか簡単でしたので、ご紹介します。
とりあえず簡単なサンプルファイルも作成しましたので、興味ある方はダウンロードしてみてください。
職場のネット環境が厳しくてダウンロードできない方は作り方も書きますので大丈夫です。
<指定範囲の文字列をすべて連結できる関数のサンプルファイルはこちらです>
rconcatenate.xls
ではいってみましょう。
目次
選択範囲のセルの文字列を全部一発でつなげる関数の使い方
サンプルファイルをダウンロードしていただいた方はもう開くだけでわかると思いますが、使い方は超簡単。
=RCONCATENATE(選択範囲)
エクセルにもともと入っているCONCATENATE関数ではなくて、今回作ったのはRCONCATENATE関数です。
どうしてCONCATENATE関数じゃダメなのか
エクセルのワークシート上で文字列を連結する方法は大きく分けて2通りあります。
- 「&」記号を使って文字列を連結する方法
- CONCATENATE関数を使って文字列を連結する方法
たくさんのセルの文字をつなげたい場合は「&」記号よりもCONCATENATE関数を使ったほうが楽なのですが、この関数、セルの指定方法があまりイケてないのです。
=CONCATENATE(セル1,セル2,セル3,・・・・セル30)
という調子で、文字列をつなげたいセルをいちいち1つずつ別々に指定したあげく、なんと30個のセルまでしか指定できません。
なれている人はセルを選択する際にCtrlキーを押したままポチポチマウスをクリックしていくんでしょうけれども、それにしても使いづらい。
SUM関数みたいに一定のセル範囲をいっぺんに指定して文字列を連結できればいいのに
ということで、RCONCATENATE関数を作ってみました。
ちなみにRはセル範囲を表す「Range」の頭文字からとってみましたよ。
RCONCATENATE関数の作り方
「えっ!?エクセル関数って作れるの?」
という方もいらっしゃると思いますが、なれれば簡単に作れちゃいます。
いったいどんなプログラムを書いているのかというと、恐ろしく短いので驚かないでくださいね。
1 2 3 4 5 6 7 8 9 |
Function RCONCATENATE(myRange As Range) As String Dim c As Range For Each c In myRange RCONCATENATE = RCONCATENATE & c Next End Function |
なんと、たったの6行です。
このままだとわかりづらいかもしれませんので、緑色の文字のコメントを追加してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'指定された範囲のセルの文字列をすべて連結する関数 Function RCONCATENATE(myRange As Range) As String 'ループ用の変数を宣言(セルを格納できる型式) Dim c As Range '指定された範囲myRangeを1つずつループ For Each c In myRange '文字列を連結して積み重ねる RCONCATENATE = RCONCATENATE & c Next End Function |
ちなみに、先頭にシングルクォート「’」を打つと文字が緑色になって、その行はプログラムとしては解釈されないようになっているので心配ありません。プログラムの世界ではこれを「コメント」といいます。まあ、よくわからない人は気にしないでください。
このプログラムをどこに貼り付ければいいか
エクセルを開いてAltキーを押しながらF11キーを押すと、下のような画面が表示されます。
エクセルでプログラミングをするときはこれを使うんですが、準備として画面上部の「挿入」から「標準モジュール」を選んでください。
で、あとは下のようにコピーしたプログラムコードを貼り付けるだけです。
これで自作のワークシート関数の出来上がりです。
最後の方はちょっとマニアックでしたね。すみません。
よくわからなければ手っ取り早くダウンロードしたエクセルを使ってみてください。
rconcatenate.xls
今日のExcelスキルアップ
今回は、碁盤の目というか方眼紙状になったエクセルシートのセル1つ1つに文字がバラバラに入っているところから、関数一発でつながった文字列を取り出す実験をしてみました。
泣いても笑っても、もうすでに作られてしまったエクセル方眼紙はどうしようもありません。
ならばそこからいかに楽してデータを取り出すかというアプローチです。
たくさんの「ネ申エクセル」に泣かされている方はぜひ試してみてください。
- 投稿タグ
- CONCATENATE関数, For Each~Next, VBA, エクセル方眼紙, ユーザー定義関数, ループ処理, 文字列連結, 神エクセル, 繰り返し
Pingback: 【マクロ不要】プロの事務屋ならお役所の神エクセルをこう直す | エクセリューション
Pingback: 入力が一瞬で!ネ申エクセル入力ツールの作り方とマクロツールの配布 | 定時で帰る.com