★ 新規データを最終行の次に入力 簡易住所録 サンプルDL

◎ 新規データを最終行の1つ下の行に次々入力していく処理の方法です。
簡易住所録を作って解説します。


今回はユーザーフォームを使わずに、直接シート上にテキストボックスを4つととコマンドボタンを貼り付けました。セルや文字の色を変えて変化をつけ、セルの横幅を調整して、最後に5行目から上をウィンドウ枠の固定でスクロールしても画面から消えないようにしました。




 氏名と住所と電話番号を入力して登録ボタンを押すと自動的にシート上に入力されるというものです。



 こんな感じですね。
2人目以降は、全部下に下に自動的に登録されていきます。




 こんな風に下に下にデータが入力されるのってちょっとしたデータベースを作るのに使えますよね。
Range("A65536").End(xlUp).Offset(1).Select
これはオプションボタンの解説に中でも紹介していますのでご覧下さい。ここから
今回のコードはこんな感じです。


 Private Sub
cmdtouroku_Click()

 Dim varRag As Variant
 Dim myArray As Integer

 'テキストボックスtxtNum(No)、txtName(氏名)、txtAdr(住所)、txtTel(電話)
 'をArray関数を使って配列を表す変数varRagに格納します。
 'これでインデックス番号が0はtxtNum、1はtxtName、2はtxtAdr、3はtxtTelとなり
 '0から3までの数字を使ってそれぞれの要素を表せるようになります。

 varRag = Array(txtNum, txtName, txtAdr, txtTel)


  If txtName <> Empty Then
 '初めて入力される場合は、最初の行を選択します。
  If Range("A6") = Empty Then
    Range("A6").Select
    txtNum = 1
    For myArray = 0 To 3
       With Selection
                 .Offset(, myArray) = varRag(myArray)
       End With
    Next myArray
  Else
 '2回目以降の入力であれば最終行の1行次の行を選択します。
    Range("A65536").End(xlUp).Offset(1).Select
    For myArray = 0 To 3
       With Selection
          txtNum = .Row - 5
                 .Offset(, myArray) = varRag(myArray)
       End With
    Next myArray
  End If
 'テキストボックスをすべて初期化します。
  txtNum = ""
  txtName = ""
  txtAdr = ""
  txtTel = ""
  Else
 'テキストボックスに名前を入力しないで登録を押した時に出すエラーメッセージです。
      MsgBox "名前を入力せんとあかんで!"
  End If
 End Sub



このコードの中では、Array関数を使ってNo、氏名、住所、電話を配列として捉えるようにしているところが特徴です。
  変数名 = Array(No, 氏名, 住所, 電話)
  変数名 = Array(0、1、2、3)
というようにインデックス番号が0から順番に割り当てられ、配列番号2は住所ということになるわけですね。だからFor...Nextステートメントを使って0から3までの数字を入れることで、OffsetプロパティとArray関数を使って4つの項目の登録処理をしています。

また今回のポイントは最終行の次の行(つまり新規で入力する行)を見つけ出すプログラムがポイントです。
Range("A65536").End(xlUp).Offset(1).Select
この記述は使えると思いますので覚えておきましょうね。

この記述は、
Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
というようにしても同じ結果が得られます。

[前へ][トップ][次へ][サンプルファイルダウンロード]