スポンサードリンク
スポンサードリンク

worksheet

excel vbaの「worksheet」を簡単に説明しました。


excelのvbaをマスターしましょう!
excel vba 簡単・解決! Homeへ
worksheet

excelのvbaで WorkSheet は、作業シートのオブジェクトです。


まず、EXCELのプログラムは、特定のセルをアクティブにすることから開始されます。
Range("A1").Activate でA1がアクティブになります。
しかし、当然、そのセルがあるワークシートが最初にアクティブになっている必要があります。

したがって、多くのVBAプログラムは、次のように開始されます。

Sub Start_Prog()
  Dim intI As Integer
  WorkSheets("Sheet1").Activate ' ●どのシートのセルに対して操作することを明確にします。
  Range("A1").Activate
intI = ActiveCell.Value
End Sub

1.対話的にワークシートを使用するためのイベント
  このイベントは、VBAによって知ることが出来ます。
  シートタブの上でマウスの右ボタンを押しメニューから「コードの表示」を選択します。
  シートのコードウィンドウが開きます。

code

上図のように、左上のコンボボックスから Worksheet を選び、右上のコンボボックスを開くと「イベント」の種類が分かります。
イベントを一つひとつ選んだ結果のVBAリストを次に示しました。
(1)ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生します。
Private Sub Worksheet_Activate()

End Sub
(2)ワークシートの特定のセルをダブルクリックする前に起動されます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   Target.Row でセルの行番号、 Target.Columnで列番号を知ることが出来ます。
   したがって、操作したセルの値を取出すことや他のセルに代入することが出来、自動化に役立ちます。
End Sub
(3)特定のセル上でマウスの右ボタンを押す前にイベントが発生し、このサブルーチンを起動します。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   Cancel = True   'とすることでイベントをキャンセルできます。
End Sub
(4)ワークシートを再計算した場合発生します。 次の例は、再計算があったとき、セル範囲 A1:A100 を並べ替えます。
Private Sub Worksheet_Calculate()
With Worksheets(2)
     .Range("a1:a100").Sort Key1:=.Range("a1")
End With
End Sub
(5)ユーザーまたは外部リンクにより、ワークシートのセルが変更されるときに発生します。
Private Sub Worksheet_Change(ByVal Target As Range)
   Msgbox Target.Address ' 変更されたセルの絶対アドレスが表示されます。
End Sub
(6)シートが非アクティブになったときに発生します。
Private Sub Worksheet_Deactivate()
   MsgBox " This sheet was Deactive. "
End Sub
(7)ワークシートのハイパーリンクをクリックすると発生します。
  次の使用例は、作業中のワークシートから表示されたすべてのリンクの一覧または履歴を保存します。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
With UserForm1
.ListBox1.AddItem Target.Address
.Show
End With
End Sub
(8)ピボットテーブル レポートがワークシート上で更新された後で発生します。
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
  MsgBox "ピボットテーブル接続が更新されました。"
End Sub
(9)ワークシートで選択範囲を変更したときに発生します。
  次の使用例は、選択範囲がウィンドウの左上隅になるまで、ブックのウィンドウをスクロールします。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveWindow
.ScrollRow = Target.Row
.ScrollColumn = Target.Column
End With
End Sub


2.ワークシートをアクティブにする方法
  Worksheets(2).Activate 左から2番目のワークシートがアクティブになります。
  複数のシートを同時に選択する場合、次のように2つのシートを選択できます。
  Worksheets(2).Select
  Worksheets(3).Select False

3.前後のワークシートを選択する方法
  Worksheets(2).Previous.Select 1番左のワークシートを選択できます。
  Worksheets(2).Next.Select 2番の左のワークシートを選択できます。 左から3番目のシートが選択されます。

4.ワークシートの名称を取得・設定する方法
 Worksheets(1).Name = "TEST" として、左端のワークシートの名称を設定できます。
 For Each objW In Worksheets
   Msgbox objW.Name
 Next
 このVBAプログラムにより、アクティブBookのシート名を全て知ることができます。

5.ブックに含まれるワークシートの数を知る方法
  Msgbox Workbooks(1).Worksheets.Count により1番目になっているブックのワークシート数を返します。



【使用例1】 「繰り返し入力を簡単にする方法」


次の例は、A1:A15に入力した文字列を、「ダブルクリック」すると、D1セルに転記し、カーソルをB1に移動させます。
(1)シートのタブ上でマウスの右ボタンを押します。
(2)メニュから「コードを表示」を選びます。
(3)Worksheetコードウィンドウが開きます。
(4)そのコードウィンドウの左上(General)▼ボタンを押し、コンボボックスからWorksheetを選択します。
(5)右上のコンボボックスから BeforeDoubleClick を選びます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub
上記のプログラムがVBAにより自動的に作成されます。
(6)このコードの中に次の赤い部分のプログラムコードをコピーします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Cells.Column <> 1 Then Exit Sub
Cells(1,4).Value = Target.Value
Cells(1,2).Select

End Sub



【使用例2】「日付を自動的に入力する方法」


次の例は、入力した同じ行に日付を自動的に入力する方法です。
入力は、A2:A100にします。
日付は、データをA2:A100に入力したとき、B列に自動的に入力されます。
入力されない場合、日付は表示されません。 しかし、スペースが入力されると、表示されます。
※ 使用例1と同様に 赤い部分のコードをWorksheet_Changeイベントルーチンにコピーします。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
With Target(1, 2)
.Value = Date
.EntireColumn.AutoFit
End With
End If

End Sub



【使用例3】 入力規則のリストへ入力データを自動的に追加・更新」


入力規則の基になっているリストを自動的に更新する方法
この例は、A1:A5にリストが入力してある、と仮定します。
更新用データは、D1セルに入力します。
●この例は、EXCELの自動再計算とイベントが使用され、VBAのすばらしさを体験できます。
(1)Sheet1のA1:A5にリストのデータがあると仮定します。
A-001
A-002
A-003
A-004
A-005
(2)「データ」−「入力規則」からA1:A5に名前をつけます。   MyNames、としました。
(3)参照に次の数式を入力します。
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
この式の意味は、$A$1セルを基準として、0行0列シフトしたセルに、つまり、基準の$A$1を基に、
高さがCOUNTA(Sheet1!$A$A)つまり、A列のセル数
幅が1
のオフセット参照を設定します。
(●この参照は、「自動再計算」されます。)
(4)D1セルに入力規則を定義します。
  1)データの種類は、「リスト」です。
  2)D1の元の値は、=MyNames を入力します。
  3)エラーメッセージが出ないように、「エラーメッセージ」タブを選択し、「エラーメッセージを表示」のチェックを外します。
  4)OKボタンを押します。
(5)ワークシートタブの上にマウスを乗せ、右ボタンを押し、メニューから「コード表示」を選択します。
(6)コードウィンドウ左上のコンボボックス(General)▼ボタンを押し Worksheetを選びます。
(7)コードウィンドウ右上のコンボボックスから Chagneを選択します。
Worsheet_ChangeイベントサブルーチンがVBAにより自動的に作成されます。
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
(8)上記のサブルーティンに次のVBAコードをコピー&ペーストします。
Private Sub Worksheet_Change(ByVal Target As Range)

Dim lReply As Long
If Target.Cells.Count > 1 Then Exit Sub
If Target.Address = "$D$1" Then
If IsEmpty(Target) Then Exit Sub
If WorksheetFunction.CountIf(Range("MyNames"), Target) = 0 Then
lReply = MsgBox("Add " & Target & " to list", vbYesNo + vbQuestion)
If lReply = vbYes Then
Range("MyNames").Cells(Range("MyNames").Rows.Count + 1, 1) = Target
End If
End If
End If

End Sub
(9) D1へ追加する新しいデータを入力し改行します。
(10) MsgBoxから次のメッセージが表示されます。

EVENT

(11) 「はい」のボタンを押すと自動的にリストへデータが追加され、しかも同時に入力規則の名前の範囲が更新されます。



excelのvbaをマスターしましょう。


excel vba 簡単・解決! Homeへ
タグ:EXCEL VBA worksheet
【ワークシート・ブックの最新記事】
posted by Yy at 14:38 | Comment(0) | TrackBack(0) | ワークシート・ブック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/129485931

この記事へのトラックバック