最近更新したページ
2013-10-20
2013-09-29
2013-09-23
2012-01-07
2011-11-09
2011-10-23
2011-10-09
2011-10-01
2011-09-29
2011-09-03
2011-08-07
2011-08-02
2011-07-29
2011-07-10
2011-05-05
2011-05-04
2011-04-24
2011-04-13
2011-04-05
2011-03-26
2011-02-18
2011-02-15
2010-12-26
2010-12-07
2010-12-05
2010-11-23
2010-09-28
2010-09-23
2010-08-26
2010-08-22
2010-07-16
2010-01-17
2010-01-11
2009-10-04
2009-08-21
2009-08-13
2009-06-18
2009-06-01
2009-04-29
2009-02-16
2009-02-11
2009-02-03
2008-07-22
2008-07-21
2008-07-15
2008-07-14
2008-07-13
2008-07-12
2008-07-08
2008-07-05
2008-06-28
2008-06-17
2008-06-05
2008-06-02
2008-06-01
2008-05-29
2008-05-26
2008-05-21
2008-05-19
2008-05-18
2007-10-31
2007-10-27
2007-09-28
2007-09-23
2007-09-17
2007-09-16
2007-09-14
2007-09-11
2007-06-18
2007-04-15
2006-12-21
2006-11-30
2006-11-22
2006-08-17
2006-03-29
2006-03-28
2006-03-27

VBA :: Excel VBA and Macro


Excel 専用 VBA & Macro


※個人的メモ(内容非保証)

 VBAの基本的な概念:オブジェクト、コンテナ、コレクション、プロパティ、メソッドの理解
 エクセル独自のコマンド、プロパティなど。

 Visual Basic for Applications でほぼ共通と思われる機能については割愛。

▲上へ [ 編集 ]


ブックの操作

閉じる Closeメソッド
開く / 新規作成 / アクティブ Open、Add、Activateメソッド
保存 Close、Save、SaveAs メソッド

■ブックの名前を取得する
Range("A1").Value = ThisWorkbook.Name
Range("A1").Value = ActiveWorkbook.Name
■ブックの作成
Workbooks.Add                                     ' 新規 book の作成
■ブックを開く
※事前にブックが存在することが前提
Workbooks.Open Filename:="C:\Book1.xls"
Workbooks.Open Filename:="C:\Book1.xls", _
                    Password:="pass1234"          ' 動作未確認
Workbooks.Open Filename:="D:\Book1.xls", _
                    WriteResPassword:="pass1234"  ' 動作未確認
Workbooks.Open Filename:="D:\Book1.xls", _
                    ReadOnly:=True                ' 読み込み専用で開く
'「ファイルを開く」ダイアログ表示
Application.Dialogs(xlDialogOpen).Show
■ブックを閉じる
Workbooks("Book1.xls").Close                      ' 「変更を保存しますか?」ダイアログ有
Workbooks("Book1.xls").Close SaveChanges:=True    ' 上書き保存
Workbooks("Book1.xls").Close SaveChanges:=False   ' 変更があっても保存せずに終了
'名前を指定名称に変更し保存する。
'保存先ディレクトリ指定が無いとマイドキュメントに保存される様である。
'(注)Book1 の変更が有っても Book1 への変更は反映せず閉じられる。
Workbooks("Book1.xls").Close SaveChanges:=True, _ ' 実質 Book1 の copy を作る
                       Filename:="Book2"
'Excel もいっしょに終了する場合
Application.Quit
■ブックの保存
ThisWorkbook.Save                                    ' 上書き保存
ThisWorkbook.SaveAs Filename:="test1"                ' "test1" と名前を付けて保存
'名前を変えて保存 ActiveBook が Book2 になることに注意。
'既に 同名の Book が存在する場合、上書き確認のダイアログが表示される。
Workbooks("Book1.xls").SaveAs Filename:="Book2.xls"
Workbooks("Book1.xls").SaveAs Filename:="csv_file.csv", _
                              FileFormat:=xlCSV      ' CSV 形式で保存
Workbooks("Book1.xls").SaveAs Filename:="Book3.xls", _
                              Password:="pass1234"   ' パスワード付きで保存
※HTML 形式で保存する場合:xlHTML を指定する。
※読み取り Password 設定の他、書き込み WriteResPassword パスワード設定も可
※保存の実行に伴い、ActiveBook が保存したBook に切り替わるので注意が必要。

■ブックのイベントプロシージャ
Workbook_Open           ' ブックを開く時に発生
Workbook_Activate       ' ブックがアクティブになった時発生
Workbook_WindowActivate ' ブックのウィンドウがアクティブになった時発生
Workbook_BeforeClose    ' ブックを閉じる直前に発生
Workbook_Deactivate     ' 開いてるブックが非アクティブになったとき発生
Workbook_BeforeSave     ' 開いてるブックを保存する前に発生


▲上へ [ 編集 ]


シートの操作

オブジェクトとコレクション Worksheets、Charts、Sheetsコレクション
選択 Activate、Selectメソッド
追加 / 移動 / コピー Add、Move、Copyメソッド
非表示 Visibleプロパティ

■シートの追加
 Add メソッドに対し、Before, After, Count などの引数を指定可能。
Worksheets.Add                        ' sheet が一つ追加される
Worksheets.Add _
   Before:=Worksheets("Sheet3")       ' sheet3 の前に一つ追加
Worksheets.Add _
   After:=Worksheets("Sheet2")        ' sheet2 の後ろに一つ追加
Worksheets.Add Count:=2               ' Count で指定した数の sheet を追加
Worksheets.Add _
   After:=Worksheets("Sheet3"), _
   Count:=2                           ' 指定数 指定位置以降に sheet を追加
■シート名を変更する
ActiveSheet.Name = "シート1"          ' Active Sheet の名前変更
Worksheets("Sheet2").Name = "シート2" ' 指定 Sheet の名前変更
■シート名を取得する
Range("A3").Value = ActiveSheet.Name
Range("A4").Value = Worksheets(2).Name ' (1) 2番目のワークシート名を取得
Range("A5").Value = Sheets(2).Name     ' (2) (1) との相違が良く判らない?
■シートの数を取得する
Range("A1").Value = ThisWorkbook.Worksheets.Count
■シートの移動
ActiveSheet.Move _
   After:=Worksheets("Sheet2")        ' Active Sheet を指定シート後へ移動
ActiveSheet.Move _
   Before:=Worksheets("Sheet3")       ' Active Sheet を指定シート前へ移動
Worksheets("Sheet2").Move _
   After:=Worksheets("Sheet3")        ' 指定 Sheet を 指定 Sheet 後へ移動
Worksheets("Sheet3").Move _
   Before:=Worksheets("Sheet1")       ' 指定 Sheet を 指定 Sheet 前へ移動
■シートのコピー
ActiveSheet.Copy _
   After:=Worksheets("Sheet2")        ' Active Sheet を指定シート後へ copy
ActiveSheet.Copy _
   Before:=Worksheets("Sheet2")       ' Active Sheet を指定シート前へ copy
Worksheets("Sheet2").Copy _
   After:=Worksheets("Sheet2")        ' 指定 Sheet を 指定 Sheet 後へ copy
Worksheets("Sheet2").Copy
   Before:=Worksheets("Sheet3")       ' 指定 Sheet を 指定 Sheet 前へ copy
■シートの削除
ActiveSheet.Delete                    ' Active Sheet 削除(確認ダイアログ有)
Worksheets("Sheet3").Delete           ' 指定 Sheet 削除(確認ダイアログ有)
'※ 確認ダイアログの抑制と表示
Application.DisplayAlerts = False     ' 確認ダイアログ表示を抑制する
Application.DisplayAlerts = True      ' 確認ダイアログを表示
■シートのイベントプロシージャ
Worksheet_Activate                    ' アクティブになった時発生
Worksheet_BeforeDoubleClick           ' ダブルクリック直前に発生
Worksheet_BeforeRightClick            ' 右クリック直前に発生
Worksheet_Calculate                   ' 計算処理後に発生
Worksheet_Change                      ' 内容変更時に発生
Worksheet_Deactivate                  ' 非アクティブ化で発生
Worksheet_FollowHyperlink             ' ハイパーリンクのクリックで発生
Worksheet_SelectionChange             ' 選択範囲、選択セル変更時に発生



シート操作の基本


 Cells の操作をする場合、通常操作対象 Worksheet を何らかの形で指定する必要がある。

 Sheet1 上の CommandButton を押して、Sheet2 を選択する例。
Private Sub CommandButton1_Click()
    Worksheets("Sheet2").Activate
End Sub
 ・・・以降、Sheet2 以外にフォーカス移動(もしくは意図的な指定)しなければ、操作対象 cell は、Sheet2 上のセルとなる。


シート名とシート数の取得


Sub get_sheet_cnt_name()
    Dim i, cnt_sheet As Integer
    i = 1
    'シート名を取得
    For Each n_sheet In Worksheets
        Cells(i, 1).Value = i
        Cells(i, 2).Value = n_sheet.Name
        cnt_sheet = i
        i = i + 1
    Next
    'シート数を取得
    Cells(i, 1).Value = "シート数"
    Cells(i, 2).Value = cnt_sheet
End Sub
※next の後で i = i - 1 とすれば、以降シート数として利用ることが出来る。この例では、別途 cnt_sheet を設けシート数を保持している。

--- Cells 使い方 memo ---
Cells(x,y) :: Cells(row_no,column_no) :: Cells(row_pos,column_pos) など x 軸、y軸の変数を決めて置くと判りやすい。 --- for each *1 in *2 〜 next の memo --- 
繰り返し操作で便利。*1 は、任意の変数として定義され、*2 は対象のオブジェクトを指定する(・・・ようである・・・)。
※便利なのは知っていたが、vb2005 では使わずに済ましていた・・・。


シート専用コマンド・プロパティ


Sheets.Count        選択book 内のシート数をカウントする・・・らしい。


▲上へ [ 編集 ]


セルの操作

単一セル選択 Cellsプロパティ、Activate、Selectメソッド
複数セル選択 Rangeプロパティ、Activate、Selectメソッド
値 / 数式 / 表示形式 Value、Formula、FormulaR1C1プロパティ
切取 / コピー / 貼付 / 挿入 Cut、Copy、Paste、PasteSpecial、Insertメソッド
クリア Clear、ClearFormats、ClearContents、ClearCommentsメソッド
行 / 列 Rows、Columns、EntireRow、EntireColumn、Count、Hiddenプロパティ
データベース CurrentRegion、Offset、EndプロパティやResizeメソッド

セルのプロパティ


 Range 及び Cells には、各種用途の異なるプロパティを持つ。.Value はセルの内容を指定する他、セルの色、高さ、幅、その他、各種プロパティが存在する。

※原則、Cells と Range はほぼ同様に使える(・・・と思う・・・)ので、Range でのみ記載。

■書式設定関連
Range("A1").Interior.Color = RGB(255, 0, 0)  ' セル背景色を RGB関数で設定
Range("A2").Interior.ColorIndex = 10         ' セルの背景色を 色番号で指定
Range("A3").Font.Bold = True                 ' セル内文字を太字に設定
Range("A3").Font.Italic = True               ' セル内文字を斜体に設定
Range("A3").Font.Underline = _
                      xlUnderlineStyleSingle ' セル内文字へ下線を設定
Range("A3").Font.Color = RGB(255,255,255)    ' セル内文字の色を設定
■クリア、範囲選択、その他
Range("A1").ClearContents                    ' セル内容(文字列など)クリア
Range("A2").Clear                            ' セル内容(書式も含め)クリア
Range("C3").Select                           ' セル選択
Range("E5:I7").Select                        ' (1).セル範囲選択
Range(Cells(5, 5), Cells(10, 10)).Select     ' (2).Cells を使用した範囲選択
■セル・選択範囲への名前付け
左上「名前ボックス」での操作性向上、VBA での操作などの改善が見込める?
Range("A1").Name = "Fast_Cell_1_1"           ' セルに名前をつける
Range("B2:D5").Name = _
                  "Range_of_Selection_B2_D5" ^ セル範囲へ名前を付ける
■値の取得
MsgBox Range("A2").Value                     ' (1).セルの値を取得する
str_val = Range("A3").Value                  ' (2).変数を使用した例
MsgBox str_val
Range("B5").Value = Range("A2").Value        ' セル間での転記
■セルの挿入と削除
Range("B12").Insert Shift:=xlDown            ' 標準で下方向へシフトする
Range("B12").Delete Shift:=xlUp              ' 標準で上方向へシフトする
■コピーと貼り付け
Range("B7:C18").Copy _
                   Destination:=Range("E8")  ' B7:C18 -> E8 へ copy & past
■切り取りと貼り付け
Range("B7:C18").Cut Destination:=Range("E8") ' B7:C18 -> E8 へ cut & past


▲上へ [ 編集 ]


セル操作の基本


 sheet1 へ CommandButton1 を配置しコードを設定するとして・・・
Private Sub CommandButton1_Click()
    Range("A1").Value = "(1).Range(""A1"").Value 指定:Hello VBA!!"
    Cells(2, 1).Value = "(2).Cells(2, 1).Value 指定:Hello VBA!!"
End Sub
 ・・・のように記述し実行すると、セル A1 へ (1) が、セル A2 へ (2) が代入される。

 基本は Range("A1").Value となるが、VBA でプログラムを組む場合、Cells(x,y).Value とし WorkSheets の Cells を配列のように利用するのが一般的である。

▲上へ [ 編集 ]

With ~ End With ステートメント


 同一オブジェクトに対して複数のプロパティを設定する場合に便利。
 多分、Excel 専用ではなかったと思う・・・。

Private Sub CommandButton1_Click()
    With Range("A5")
        .Value = "Hello VBA !!"
        .Interior.Color = RGB(255, 0, 0)
        .Font.Bold = True
        .Font.Color = RGB(255, 255, 255)
    End With
End Sub

 Range や Cells 以外にも WorkSheets でもよく利用される。

▲上へ [ 編集 ]


リンク


初めてでも分かるVBAの本



内部リンク



外部リンク


  • まだありません


▲上へ [ 編集 ]
2009年02月11日(水) 10:56:13 Modified by cafeboy1




スマートフォン版で見る