スピンボタンで指定して追加した行の指定範囲に値をセットするには?

Question 24.3   Previous Next
いつも利用させて頂いております。有難う御座います。マクロ初心者の私にとっては、大変有難いホームページです。
最近Excel95から2000になり、中々うまくいかない今日この頃です。そこで、お知恵をお借りしたいのですが・・・

あるワークシートにはデータが入っており、その中の指定した行の下に、任意の数の行を挿入したいのですが、指定する行はスピンボタンで指定し、指定した行を含めて挿入した行を全てアクティブにして、その行の指定するセル全てに、同じ値を入力するという物です。
例えばスピンボタンで「9行目」を指定して3行追加するとして、「11行目」を別のスピンボタンで指定、9行目から11行目の同じ列にあるセルに指定した数値を入力する、という物です。
マクロコードを教示頂けると幸甚です。
Answer   Copyright (C) 2000.1.18 永井善王
私はスピンボタンを、この回答をするために初めて使ったので、誤りがあったら許してください。あなたの文章から、ユーザーフォームを具現化してみました。

下図の構成を、あなたの文章に対比させて説明します。
ユーザーフォーム 左上部分は、『例えばスピンボタンで「9行目」を指定して』、
右上部分は、『3行追加するとして』、
左下部分は、『「11行目」を別のスピンボタンで指定』、
右下部分は、『指定した数値を入力』に、該当するつもりです。
そして、『9行目から11行目の同じ列にあるセル』とあるところは、その列名を入力するテキストボックスを作れば良いのですが、右下部分と同じことですから省略して、マクロコードでは、C列を使うことにして進めます。
なお、『指定した行を含めて挿入した行を全てアクティブにして』の主旨が理解できないので、一応、無視しました。

スピンボタン
スピンボタンは左図のとおり、上向きと下向きボタンだけを組み合わせた単純な仕組みです。このことは、値を増減するだけの機能しかないと言うことになります。 そして、値は整数で計算されます。
では順を追って、マクロコードを考えて行きましょう。
まず、ユーザーフォームのイニィシャライズ・イベントマクロで、スピンボタンで設定可能な最小値と最大値、そして、Valueプロパティの値を設定しておきます。 次の例ではサンプルの都合で、最大値を小さめに設定してあります。
Private Sub UserForm_Initialize()     'ユーザーフォームが表示される直前に実行するマクロ
    SpinButton1.Min = 1                 'スピンボタン1で設定可能な最小値
    SpinButton1.Max = 20                '   〃     〃   最大値
    SpinButton1.Value = 1               '   〃   の値を1にする
End Sub
テキストボックス スピンボタンがクリックされると、Valueプロパティの値が変化します。その値を取得して、ユーザーがその値を見れるようにするため、左図のようなテキストボックスに表示します。

スピンボタンのチェンジ・イベントマクロに、次のように組み込みます。 (スピンボタンは 3つあるので、同様に組む)
Private Sub SpinButton1_change()        'スピンボタンをクリックしたときに実行するマクロ
  UserForm1.TextBox1.Value = SpinButton1.Value
                                        'テキストボックス1にスピンボタン1の値をセット
End Sub
ユーザーによって「入力する数値」のテキストボックスへキーボードから入力され、「OK」ボタンがクリックされます。
コマンドボタンのクリック・イベントマクロに、次のように組み込んでおきましょう。
Private Sub CommandButton1_Click()   'コマンドボタンがクリックされたときに実行するマクロ
10  数値 = TextBox4.Value                   'セルに入力する数値を取り出す
20  基準行 = SpinButton1.Value              '行追加の基準になる行を取り出す
30  追加行数 = SpinButton2.Value            '追加する行数を取り出す
40  入力最下行 = SpinButton3.Value          'セルに入力する最下行を取り出す
50  Unload Me                               'ユーザーフォームを非表示にする
60  下端 = 基準行 + 追加行数 - 1            '行追加する下端行を計算しておく
   ★★★ 基準行と下端の間に行を挿入する
70  Range(Cells(基準行, 1), Cells(下端, 1)).EntireRow.Insert (xlShiftDown)
   ★★★ 基準行と入力最下行のC列に数値をセットする
80  Range(Cells(基準行, 3), Cells(入力最下行, 3)).Value = 数値
End Sub
10行目:    変数「数値」に、「入力する数値」のテキストボックスの値をを取り出しておきます。
20~40行目: 変数「基準行」、「追加行数」、「入力最下行」に、それぞれのスピンボタンの値を取り出します。
60行目:    変数「下端」には、行追加する下端行を計算しておきます。
70行目:    行追加には、いろいろな方法がありますが、ここではRangeで選択した範囲の行を EntireRowプロパティで取得して、挿入しています。
80行目:    Rangeで範囲指定したセルに、「入力する数値」を一度にセットしています。

以上で回答は終りです。もっと詳しく知りたい場合は、サンプルブックをダウンロードして見て下さい。

サンプルブックのダウンロードは ここをクリック  (YNxv98d_SpinButton.xls 55KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

Excel VBA Macro