スポンサーリンク
文字列を前後に追加する作業について
上図のようにA列に会社名が並んでいて、それら全部の先頭に「株式会社」を、末尾に「 御中」を付けなきゃってことは、実務でもあるだろう。
その場合、図のC列の式のように「&」演算子を付けた式にするだけで良い。
これができないと給料泥棒だから、「&」演算子の使い方は即座にマスターしよう。
面倒くさい・・・
ただ、もちろんこの正攻法はこれで良いのだけど、この
ダブルクォーテーション””を合計4つも書いてるし、「&」演算子とか「$A1」とかも入力は面倒。
それに、元データがA列にあってそれと別に、C列のような作業列を用意して、更に用が済んだら作業列を始末しないといけないのも面倒。
あとさり気に、数式を読みやすくするために「&」演算子の前後に半角スペースを入れる小細工もしてるんだけど、これもちょっと面倒。
とまあ、このように面倒くさがる姿勢・努力しないための努力をする姿勢というのは、Excelに限らず業務効率化とかにおいては大事なので、ぜひとも妥協なく面倒くさがるようにしよう。
ではどう解決するのかという話の前に、あともう1つの例。
数式の「=」文字の後に文字を入れて括弧を閉じる作業の例
上図ではC列<金額>に、単価×数量の式を入れてるけど、後で気付いて
この場合、セル編集画面に入ってから「=」文字の次にカーソルを合わせて「 ROUND( 」の文字を入れ、そして末尾に「 ,1) 」と入れるとか、これまた面倒だ。
この例に限らず様々な数式において、「=」文字の後に関数を入れ、更に式の最後を括弧 ) で閉じるという作業は発生するが、これを何度もやってると意外と面倒なものだ。
ということで今回は、セルの内容・式に対して文字列を先頭(1文字目だけでなく途中からも可)・末尾に追加するのを簡単にするマクロを取り上げる。
ソースコード・解説
では今回の本題、セルの文字列とか数式の前後に文字を追加するマクロのソースコードを示す。
この前の記事で紹介したInputBoxを2連続で起動するようにした、ゴリ押しのマクロ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Sub addString_Exe(n As Integer) '各セルの前後に文字を追加する Dim msg As String Dim strForward As String Dim strBack As String msg = "まず前方" & n & "文字目に追加する文字を入力して下さい。空欄でも構いません。" 'Application.InputBoxのType '0:数式 '1:数値 '2:文字列 '8:セル参照 strForward = Application.InputBox(msg, Title:="前方追加文字列", Type:=2) '文字形式(Type:=2)のInputBoxでは、キャンセルが押されたとき「False」という文字が返される。 'StrConvのvbLowerCaseを用いて全て小文字に変換する。 If StrConv(strForward, vbLowerCase) = "false" Then Exit Sub msg = "次に、後方に追加する文字を入力して下さい。空欄でも構いません。" msg = msg & vbCrLf & "後方追加文字列: " & strForward strBack = Application.InputBox(msg, Title:="後方追加文字列", Type:=2) If StrConv(strBack, vbLowerCase) = "false" Then Exit Sub On Error Resume Next Dim eachRng As Range Application.ScreenUpdating=False'描画省略 '選択範囲の各セルの数式について、n文字めに前方追加文字列を追加 'また、後方追加文字列を追加。 For Each eachRng In Selection eachRng.Formula = Left(eachRng.Formula, n) & strForward & Mid(eachRng.Formula, n + 1) & strBack Next eachRng End Sub Sub addStringForwardAndBack() '単純に各セルの前後に文字を追加する Call addString_Exe(0) End Sub Sub addStringForwardAndBack01() '1文字(主に、 「=」 文字を想定)あけた後に、各セルの前後に文字を追加する Call addString_Exe(1) End Sub |
実際に起動するマクロは、最後の2つ「addStringForwardAndBack」「addStringForwardAndBack01」のマクロ。
私はこれらを、自分の個人用マクロブックに組み込んで使っている。
InputBoxのメッセージで「空欄でも構いません。」と書いているように、前方・後方のうち一方だけの文字列追加でも良いようにしてある。
最後に、それぞれのマクロの動作イメージを動画に示す。
スポンサーリンク