はじめに
削除機能はとくに部品数は多くない。リストボックスとコマンドボタンのみのシンプルな構成となっている。
リストボックスに名前の一覧が出て、それを選択し削除ボタンを押すと削除できるようになっている。
ユーザーフォーム
ユーザーフォーム_イニシャライズのコードは次のようになっている。
Option Explicit
Option Base 1
Private Sub UserForm_Initialize()
Call lastRowNum
ListBox1.List = Range(Cells(2, 1), Cells(lrn + 1, 1)).Value
End Sub
1行目は標準モジュールで作ったサブルーチンを呼び出している。
2行目はリストボックスにデータを入力している。
リストボックスに入力する方法は3通りあり、1つは画面左下半分にあるプロパティ画面でRowSourceに登録する方法、2つ目はAddItemを使って回す方法、3つ目はもっとも高速にデータを入力できるRangeを用いる方法、である。
ここではRangeを用いて高速にデータを入力できる方法を用いた。
標準モジュールでのサブルーチン
Option Explicit
Option Base 1
Public lcr As Integer, lrn As Integer
Public Sub lastRowNum()
lrn = Cells(Rows.Count, 1).End(xlUp).Row
End Sub
これは新規の入力が選択(Select)だったのに対して、.Row(.を忘れないように)を用いて実際の行数を、変数lrnに代入している。
2行目の注意点
ListBox1.List = Range(Cells(2, 1), Cells(lrn + 1, 1)).Value
Rangeの最下行のセルをCells(lrn + 1, 1)で、実際の行数より1行多くとっている点である。これをしておくと最終行を削除しても、エラーは起きない。
リストボックス
リストボックス自体にコードはない。
コマンドボタン
削除のコマンドボタンは以下のコードが書いてある。
Private Sub CommandButton1_Click()
Dim i As Integer
With ListBox1
For i = lrn To 2 Step -1
If Cells(i, 1) = .List(.ListIndex) Then
Cells(i, 1).EntireRow.Delete
.RemoveItem .ListIndex
End If
Next i
End With
ActiveWorkbook.Save
Unload Me
Call delRowLine
End Sub
重要なポイントは4つある。
1つ目は検索方法で
For i = lrn To 2 Step -1
のように、削除する場合は最下行から行頭に向かって検索していくのである。理由は削除したとき、1行繰り上がるからである。
2つ目は
.List(.ListIndex)
である。これでリストのデータ(この場合は名前)をとることができる、非常に重要な表現である。
3つ目は
.EntireRow.Delete
である。選択したデータ(この場合は名前)をこの表現で一行削除し、一行繰り上げることができる。
4つ目は
.RemoveItem .ListIndex
である。これによりリストボックスにあるデータを消去することができる。
残りの部分は新規と同様で、上書き保存してユーザーフォームを消去し、改めてユーザーフォームを表示させている。
ActiveWorkbook.Save
Unload Me
Call delRowLine
構文としてはWith~End Withのなかに、For~Nextでセル全体を回し、If~End Ifで一致するものを検索している。
終了のコマンドボタンは、上書き保存とユーザーフォームの消去だけである。
part1~part3のまとめのコード
ここで、いままでサブルーチンごとに紹介してきたコードの全容を提示しておく。
標準モジュール
Option Explicit
Option Base 1
Public lcr As Integer, lrn As Integer
ーーーーーーーーーーーーーーーーーーーーーーー
Sub actionButton()
UserForm1.Show
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Sub inpActionButton()
UserForm2.Show
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Sub delRowLine()
UserForm3.Show
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Public Sub lastCellRow()
lcr = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Public Sub lastRowNum()
lrn = Cells(Rows.Count, 1).End(xlUp).Row
End Sub
ユーザーフォーム1
Option Explicit
Option Base 1
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton1_Click()
Unload Me
If OptionButton1.Value = True Then
Call inpActionButton
ElseIf OptionButton2.Value = True Then
Call delRowLine
ElseIf OptionButton3.Value = True Then
MsgBox "このデータベースでは必要ありません" & vbCrLf & _
"悪しからずご了承ください"
End If
Call actionButton
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton2_Click()
Unload Me
End Sub
ここで、新しい文として
& vbCrLf & _
がでてきたが、これはメッセージボックスで2行に渡って書きたいときにvbCrLfで改行を入れ、_で文の続きを書く印である。
ユーザーフォーム2
Option Explicit
Option Base 1
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub UserForm_Initialize()
Call lastCellRow
ScrollBar1.Value = 0
TextBox2.Value = ScrollBar1.Value
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub TextBox1_Change()
ActiveCell.Cells(lcr + 2, 1) = TextBox1.Value
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
ActiveCell.Cells(lcr + 2, 2) = "男"
End If
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub OptionButton2_Click()
If OptionButton2.Value = True Then
ActiveCell.Cells(lcr + 2, 2) = "女"
End If
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub ScrollBar1_Change()
TextBox2.Value = ScrollBar1.Value
ActiveCell.Cells(lcr + 2, 3) = TextBox2.Value
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub ComboBox1_Change()
With ComboBox1
If .ListIndex = -1 Then
MsgBox "選択していません"
Else
ActiveCell.Cells(lcr + 2, 4) = .Text
End If
End With
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton1_Click()
ActiveWorkbook.Save
Unload Me
Call inpActionButton
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton2_Click()
ActiveWorkbook.Save
Unload Me
End Sub
ユーザーフォーム3
Option Explicit
Option Base 1
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub UserForm_Initialize()
Call lastRowNum
ListBox1.List = Range(Cells(2, 1), Cells(lrn + 1, 1)).Value
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton1_Click()
Dim i As Integer
With ListBox1
For i = lrn To 2 Step -1
If Cells(i, 1) = .List(.ListIndex) Then
Cells(i, 1).EntireRow.Delete
.RemoveItem .ListIndex
End If
Next i
End With
ActiveWorkbook.Save
Unload Me
Call delRowLine
End Sub
ーーーーーーーーーーーーーーーーーーーーーーー
Private Sub CommandButton2_Click()
ActiveWorkbook.Save
Unload Me
End Sub
サイトご利用方法
次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。
google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。