本ページの構成は以下の通りです。
1. 本マクロの概要
|
└1-1.本マクロで何ができるか
|
└1-2.本マクロ起動時の画面遷移
2. ソースコード掲載
3. ソースコード概要説明
1-1.本マクロで何ができるか
本マクロは以下の作業時に使われることを想定しています。
■複数のセルの入力値に対して、入力値の始め、または、入力値の終わりに、共通した入力を実施。
■複数のセルに入力されている「会社名」に対して、前株、後株を一括して入力。
■複数のセルに入力されている「数値」に対して、共通した単位を入力値の終わりに追加。
マクロ起動時にユーザーに求める操作は、以下の3ステップです。
■文字を追加するセル範囲を選択
↓
■指定したセル範囲に対して、セルの入力値の左側に追加する文字を入力
↓
■ 指定したセル範囲に対して、セルの入力値の右側に追加する文字を入力
1-2.本マクロ起動時の画面遷移
本マクロ起動時の画面遷移は以下の通りで、4段階となっております。
2. ソースコード掲載
本マクロのソースコードは、以下の通りです。マクロの登録方法は、本ブログ内で紹介しておりますので、こちらからご確認ください。
コピーの仕方は、ソースコード内にカーソルを合わせ、Ctrlキー+Aで全選択→Ctrlキー+Cでクリップボードにコピーできます。
Sub 選択するセル範囲に入力する文字列を追加()
Dim target_range As Range
Dim rng As Range
Dim supplement As String
Dim left_string As String
Dim right_string As String
'InputBox表示文字列の用意
supplement = "(何も入力しない場合は未記入でも可)"
'セル範囲指定で「キャンセル」をクリックされたときのエラー処理を無視するためのステートメント
On Error Resume Next
'InputBoxを表示して、ユーザーにセル範囲を入力してもらう
Set target_range = Application.InputBox("変更対象セル範囲を指定してください" & vbLf & _
"操作を中断する場合は【キャンセル】をクリックしてください", _
Type:=8, _
Title:="セル範囲を入力")
'「キャンセル」がクリックされた場合は処理終了
If target_range Is Nothing Then Exit Sub
On Error GoTo 0
'InputBoxを表示して、先程ユーザーが選択したセル範囲の、セル内文字列の「左側」に追加する文字列を取得する
left_string = InputBox("セル内の文字列に対して左側に追加する文字列を入力してください" & vbLf & supplement, _
Title:="セル内の文字に対して左側に追加する文字の入力")
'「キャンセル」がクリックされた場合は処理終了
If StrPtr(left_string) = 0 Then Exit Sub
'InputBoxを表示して、先程ユーザーが選択したセル範囲の、セル内文字列の「右側」に追加する文字列を取得する
right_string = InputBox("セル内の文字列に対して右側に追加する文字列を入力してください" & vbLf & supplement, _
Title:="セル内の文字に対して右側に追加する文字の入力")
'「キャンセル」がクリックされた場合は処理終了
If StrPtr(right_string) = 0 Then Exit Sub
'入力したセル範囲全てに、「左側」・「右側」で入力した文字列を追加する
For Each rng In target_range
rng.Value = left_string & rng.Value & right_string
Next
End Sub
3.ソースコード概要説明
以下、ソースコードに記載されている内容がどのようなものを意味しているかを、ソースコードの上から順に紹介します。
ソースコード内の” ‘ (シングルクォーテーション)”から始まる文章は「コメント」扱いになり、ソースコードとしては読み込まれません。そのソースコード部分では何をしているかの注釈付けを行っています。
変数を宣言
Dim target_range As Range
Dim rng As Range
Dim supplement As String
Dim left_string As String
Dim right_string As String
Dim 変数名 AS データ型 を記載することで、「この変数名はこのデータ型で使用します」と宣言しています。データ型:Rangeは、セルの範囲を扱うためのデータ型です。データ型:Stringは、文字列を扱うためのデータ型です。
InputBox内に使用する文字列を用意
'InputBox表示文字列の用意
supplement = "(何も入力しない場合は未記入でも可)"
String型変数”supplement”に、”( 何も入力しない場合は未記入でも可 )”という文字列を入力しています。このsupplement変数は、後でインプットボックス内の文字列を指定する際に使用しています。
ユーザーによるセル範囲指定時のエラーを無視する
'セル範囲指定で「キャンセル」をクリックされたときのエラー処理を無視するためのステートメント
On Error Resume Next
...
On Error GoTo 0
「 On Error Resume Next 」から「 On Error GoTo 0 」までの処理の間にエラーが発生しても、エラーが発生することを伝えるメッセージボックスが表示されないようにしています。
本マクロでは、ユーザーにセル範囲の指定をしている部分があります。ここで、ユーザーがセル範囲を指定せずにOKボタンを押したりすると表示されるメッセージボックスを、表示させないようにしています。
ユーザーによるセル範囲指定実行
'InputBoxを表示して、ユーザーにセル範囲を入力してもらう
Set target_range = Application.InputBox("変更対象セル範囲を指定してください" & vbLf & _
"操作を中断する場合は【キャンセル】をクリックしてください", _
Type:=8, _
Title:="セル範囲を入力")
'「キャンセル」がクリックされた場合は処理終了
If target_range Is Nothing Then Exit Sub
” Set target_range =”で、=から右側で指定されるセル範囲を、Range型変数のtarget_range に格納しています。ここでは=の右側に、 Application.InputBox (…)を指定しています。
Application.InputBox (…) は、インプットボックスウインドウを表示して、ユーザーに都度値を入力してもらうものです。
(…)内の始めの文字列は、インプットボックス内に表示する文字列を指定しています。その文字列内の”vblf”はインプットボックスに表示される”改行”を表しています。” _”は、ソースコード内の改行を表しており、ソースコードの読みやすさのために使用しています。
次に(…)内の”Type:=8″は、インプットボックスで得られるものが、セル範囲であることを表しています。
最後に”Title:=セル範囲を入力”は、インプットボックス上側部分に表示される文字を表しています。
” If target_range Is Nothing Then Exit Sub “は、インプットボックスで【キャンセル】が押された場合、マクロの処理を終了するようにしています。
左側・右側に入力する文字列をユーザーが入力
'InputBoxを表示して、先程ユーザーが選択したセル範囲の、セル内文字列の「左側」に追加する文字列を取得する
left_string = InputBox("セル内の文字列に対して左側に追加する文字列を入力してください" & vbLf & supplement, _
Title:="セル内の文字に対して左側に追加する文字の入力")
'「キャンセル」がクリックされた場合は処理終了
If StrPtr(left_string) = 0 Then Exit Sub
'InputBoxを表示して、先程ユーザーが選択したセル範囲の、セル内文字列の「右側」に追加する文字列を取得する
right_string = InputBox("セル内の文字列に対して右側に追加する文字列を入力してください" & vbLf & supplement, _
Title:="セル内の文字に対して右側に追加する文字の入力")
'「キャンセル」がクリックされた場合は処理終了
If StrPtr(right_string) = 0 Then Exit Sub
String型変数left_stringに、インプットボックスでユーザーに入力される文字列を格納する処理です。今回のInputBoxは、先程のApplication.InputBoxとは異なり、String型変数専用のインプットボックスです。”Title:=”で、インプットボックスの上部分に表示される文字列を指定しています。
“If~”は、先のものと同様です。
入力されたセル範囲に、入力された文字列を追加
'入力したセル範囲全てに、「左側」・「右側」で入力した文字列を追加する
For Each rng In target_range
rng.Value = left_string & rng.Value & right_string
Next
ここでは、処理をループさせています。
” For Each rng In target_range “で、Range(セル範囲を指定したもの)型変数target_range内のセル群を指定し、” For Each rng “で、同じぐRange型変数のrngに、セル群を一つ一つ当てはめながら、以降の処理を実行します。
なお、二つのRange型変数は、冒頭の処理で用意しています。
“rng.Value = “で、セルrng内の入力値を=の右側に置き換えます。
”=”の右側の left_string & rng.Value & right_string ですが、&は繋ぎ役です。
left_stringが、ユーザーに打ち込んでもらう左側に追加したい文字列。
rng.Value は、もともとセルに入力してある文字列。
rightt_stringは、ユーザーに打ち込んでもらう右側に追加したい文字列です。
これで、「左側に追加したい文字列」「もともと入力してある文字列」「右側に追加したい文字列」の3つを繋げたものが、セル範囲で指定したセルに新しく入力されます。
最後の”Next”で、 target_range 内の次の文字列の処理に移ります。
マクロの有効範囲
Sub 選択するセル範囲に入力する文字列を追加()
...
End sub
Sub マクロの名前 End subまでの処理が、マクロの名前の処理で実行される内容になります。
本マクロだと、「 選択するセル範囲に入力する文字列を追加 」のマクロを実行すると、End subまでに記載されている処理が自動で実行されます。
VBAマクロのソースコード一覧はこちらの「 2.実践編_VBAマクロのソースコード掲載 」をご覧ください。