ここまでは、使用する用語の解説でしたが、マクロの自動記録を使用して、簡単なマクロを作成し、どういうものか確認しましょう。

マクロの自動記録で記録したマクロを確認する。

◆練習1(1.シートを選択する。2.印刷プレビューを表示する。3.ワークシートを追加する。)

自動記録手順

1、メニューバーにある「ツール」→「マクロ」→「新しいマクロの記録」を選択します。
2、「マクロの記録」ダイアログボックスが開きます。
「マクロ名」・・・任意の名前に変更することが出来ます。(今回は、マクロ名は変更しません)
「マクロの保存先」・・・・・・「作業中のブック」を選択します。
「OK」をクリックします。

・マクロの記録開始する。 ・マクロ名を入力する。 ・マクロの記録を終了する。

以下の操作をそれぞれマクロで記憶し、マクロの記録を終了します。

<Macro1>
1、ワークシート(Sheet2)を選択します。操作が終了したら、マクロの記録を終了します。

<Macro2>
2、ツールバーにある「印刷プレビュー」をクリックします。プレビュー画面が表示されたら「閉じる」をクリックして、一旦プレビュー画面を閉じます。
上記の操作が終了したら、マクロの記録を終了します。(印刷プレビューを表示する場合、セルに数値や文字を入力してから実行してください。)

<Macro3>
2、メニューバーから「挿入」「ワークシート」をクリックしてワークシートを追加します。操作が終了したら、マクロの記録を終了します。

●マクロの記録で作成された内容
1.シートを選択する。
Sheets(”Sheet2”)を選択します。
2.印刷プレビューを表示する。
印刷プレビューを表示します。
3.ワークシートの追加
ワークシートを追加します。

記録したマクロを実行するには、

・「ツール」「マクロ」「マクロ」を選択します。 ・実行するマクロを選択して「実行」をクリックします。

記録したマクロを編集する。

・「ツール」「マクロ」「マクロ」をクリックします。
・マクロのダイアログボックスが開いたら「編集」をクリックします。
・VBEが開きます。ここでマクロを直接編集することが出来ます。

VBEを開くショートカットキーは、
●最初にExcelを起動し、キーボードから「Alt」+「F11」キーを押します。
するとVBEが起動します。

・「プロジェクトエクスプローラー」の中の「標準モジュール」
をダブルクリックします。
・「Module1」をダブルクリックします。

ワークシートの選択

ワークシートを選択する方法には、●インデックス番号で選択する方法と●シート名で選択する方法があります。
マクロの自動記録では、シート名で表示されます。
..........ブックを選択する場合も同じことが言えます。


<例>
どちらも、同じシートを選択しています。
Sheets(1)---------------シート番号で選択する場合
Sheets("練習1")---------マクロの自動記録では、シート名で表示されます。

セルを選択したり、セル範囲を選択する。

VBAでは、セルをCellオブジェクトではなく「Rangeオブジェクト」と表現します。

Rangeオブジェクト(セルを選択します。)


Range("A1").select・・・・・・・セル「A1」を選択します。
Range("B3,C5").select・・・・・セル「B3」と「C5」を選択します。
Range("B2:E8").select・・・・・セル範囲「B3〜E8」を選択します。→[ Range("B2","E8") ]と記述しても同様です。
変数mycountを使用して(mycount=10を代入すると)
Range("A1:A" & myCount)・・・・・・セル範囲「A1:A10」を選択します。

●名前が定義されたセルを選択する場合。
セルに対して名前を定義した場合に、定義している名前でも指定できます。

Range("売上合計").Select・・・・・・・「売上合計」と名前が定義されたセルを選択します。

<使用例>

セルの選択
Sub セルの選択()
Range("メニュー").Select
Range("A1")Select
End Sub
セルに定義されてた「メニュー」を選択します。
セル「A1」を選択します。

Cellsプロパティ

Cellsプロパティを使用して、セルを選択する場合。

Cellsプロパティ
ワークシート上のセルを返します。
------------------------------------
構文
Cells(行番号、列番号)
------------------------------------
<例>  Cells(5、5)---->セル「E5」   又は Cells(5、"E")と表現できます。
Cellsの場合、行番号と列番号を数字で表現するのが一般的です。
※セル番地を変数にして、対象となるセルを指定することも出来ます。

Sub セルに色を塗る()
Sub セルに色を塗る()
Worksheets("sheet1").Cells(5, 5).Interior.ColorIndex = 30

End Sub
ワークシート「sheet1」のセル「E5」に色を塗ります。
(色は、Interior.ColorIndex = 30になります。)

RangeとCellsを組み合わせて使用する場合

Rangeで、範囲を指定し、Cellsで、行数、列数を指定します。

<例>
Sub セルに色を塗る()
Worksheets("sheet1").Range(Cells(1, 1), Cells(5, 5)).Interior.ColorIndex = 30
End Sub

Range(Cells(1,1)、Cells(5,5)).Select------------->セル範囲「A1」:「E5」を選択します。

Range(Cells(1,1)、Cells(Range("A65536").End(xlUp).Row,5)).Select
セル範囲「A1」:「A列でデータ入力してある最終行,5列目」を選択します。

セルの値を取得する。

セルの値を取得するときにはValueプロパティを使います。
次のプロシージャは、セルA1の値をダイアログボックスに表示するものです。

MsgBox Range("A1").Value

セルに値を設定する。

セルに文字列を挿入する。

Range("A1").Value = "エクセル"
Range("B1:C5").Value = "VBA"

Valueプロパティに文字列を挿入する時は、その値をダブルクォテーション("")で囲みます。

●さまざまな表示形式を入力する。

valueプロパテイに数値を代入する場合(下の画像では標準)は、ダブルクォテーション("")では囲まない。

●セルの値を別のセルに設定する。

セルに数式を設定する

●セルにA1形式で数式を設定する。
※「A1」形式とは、列を「A」〜「IV」の256個のアルファベットで表すExcelの既定の表記方法です。

●セルにR1C1形式で数式を設定する。
※「R1C1」形式では基準となるセルから「1つ上2つ左」といった、相対的なセル参照になります。

●セルの値(数式の結果)を取得する。・・・・・・Range("D1") = Range("C1").Value
  セルD1には、C1のセルの数値が代入される。
●セルの計算式を取得する。・・・・・・・・・・・・・Range("D3") = Range("C1").Formula
  セルD3には、C1の計算式が代入される

Offset プロパティ

セルを参照する際に、通常はRangeプロパティや、Cellsプロパティでセル番地を指定しますが、場合によってはセル番地から、「何番目にある」とういう操作をすることがあります。
そうのような場合には、RangeオブジェクトOffsetプロパティを使用すると、特定のセル番地から行列の数でセルを指定することが出来ます。

1.現在アクティブになっているセルから移動する大きさを指定します。
-------------------------------------------------------
構文

オブジェクト.Offset(行、列)
-------------------------------------------------------
<例1>
Range("E5").Offset(2,2)
セル「E10」から下に2、右に2のセル「G7」を返します。

<例2>
Range("E5").Offset(−2、−2)
セル「E10」から上へ2、左へ2のセル「C3」を返します。

<例3>
Activecell.Offset(1,3)=200
現在アクティブになっているセルから、行で下1つ、列で3つずれた位置に値を代入します。

選択されているセルの行数や列数を取得する。

●行数を取得する。(Rows プロパティ)

Range("A3:F6").Select
MsgBox Selection.Rows.Count ’選択されている行数を取得し、msgBoxに表示します。

<例2>
Worksheets("Sheet1").Rows(3).Delete
シート 1 の行 3 を削除します。

●列数を取得する。(Columns  プロパティ)

Range("A3:F6").Select
MsgBox Selection.Columns.Count ’選択している列数を取得し、msgBoxに表示します。

行数や列数を変更してセル範囲のサイズを変更する。

セル範囲のサイズを変更するResizeプロパティの引数には、セル範囲の行数と列数を指定します。
Resize(列,行)

Range("B2:C4").Select
Selection.Resize(Selection.Rows.Count + 2, Selection.Columns.Count - 1).Select
◇行数を2行追加して、列数を1列減らします。
Selection.Rows.Count→基準の行数
Selection.Columns.Count→基準の列数

End プロパティ

終端のセルを返すプロパティです。
「End」キーを押して矢印キー↓→↑←を押す操作を実行します。
--------------------------------------------------
構文
オブジェクト.End(引数)
--------------------------------------------------
引数には、
End.(xlUp)  「end」+↑
End.(xlDown)  「end」+↓
End.(xlToRight)  「end」+→
End.(xlToLeft)  「end」+←

の何れかを指定します。

<例>

「売上入力」
Sub売上入力()
Worksheets("売上").Select
Range("B8").End(xlDown).Select
ActiveCell.Offset(1,0).Select
End Sub
Sub売上入力()
ワークシート「売上」を選択します。
セル「B8」を選択します。
「End」キー+↓を操作します。
選択しているセルから1行下のセルを選択します。

最終データが入力されているセルに移動する。

A列の最終行にセルを移動します。
Range("A65536").End(xlUp).Select

●新規データを入力するセルに移動します。
Range("A65536").End(xlUp).Offset(1).Select

Endプロパティで、特定のデータを選択する。

EndプロパティをRangeプロパティの引数の中で使うことができる。

<例>
Range("A3", Range("A3").End(xlToRight).Select
A3からD3までの範囲を選択します。

CurrentRegion プロパティ

現在アクティブになっているセルから、上下左右に連続するセル全てを返します。

キーボードから操作する場合のショートカットキーは、「Ctrl」+* になります。
---------------------------------------------------
構文
オブジェクト.CurrentRegion
--------------------------------------------------
<例>
range("B4").CurrentRegion.Select

項目名を除いて表を選択する。

※表全体を選択するには「、CurrentRegion」プロパティを
使用しますが、項目名を除いて表全体を選択するには方法には、「Offset」プロパティや、「Resize」プロパティを組み合わせると可能になります。

Range("C4")CurrentRegion.Offset(1).Select
SelectionResize(Selection.Rows.Count - 1).Select

Range("C4")・・・・・・・・・・・・・・・・・・表の中であればどこでも良い
項目名(神奈川〜北海道)を除いて表が選択される。

クリップボードを経由せずにデータをコピーする。

Excelで通常の「コピー」「貼り付け」を行うと、データは一旦クリップボードに保存されます。
しかし、Copyメソットの引数に転送先を指定すれば、クリップボードを経由せずにデータをコピーすることが出来ます。

<例>
Worksheets("sheet1").Range("A1:B10").Copy Destination :=Worksheets("sheet2").Range("A1")

Pasteメソッドで貼り付け先のセル範囲を指定する。

Pasteメソッドは、クリップボードの内容を現在の選択範囲に貼り付けるメソッドですが、引数Destinationを指定すると、貼り付け先のセル範囲を指定することが出来ます。

<例>
Worksheets("sheet1").Range("A1:B10").Copy 
ActiveSheet.Paste Destination :=Worksheets("sheet2").Range("C1:D10")

形式を選択して貼り付ける

コピーしたセルの内容を「形式を選択して貼り付ける」には、PasteSpecialメソッドを使用します。

<例>
Worksheets("sheet1").Range("A1:B10").Copy 
ActiveSheet.Paste Destination :=Worksheets("sheet2").Range("C1:D10")

             このステートメントは、PasteSpecialメソッドを使用すると次のように書き換えることが出来ます。

Worksheets("sheet1").Range("A1:B10").Copy
Worksheets("sheet1").Range("D1").PasteSpecial (Paste:=xlAll)
                                                 Paste:=xlAllは省略可能

1 Selection.PasteSpecial Paste:=xlPasteAll
2 Selection.PasteSpecial Paste:=xlPasteFormulas
3 Selection.PasteSpecial Paste:=xlPasteValues
4 Selection.PasteSpecial Paste:=xlPasteFormats
5 Selection.PasteSpecial Paste:=xlPasteComments
6 Selection.PasteSpecial Paste:=xlPasteValidation
7 Selection.PasteSpecial Paste:=xlPasteAllExceptBorders
8 Selection.PasteSpecial Paste:=xlPasteColumnWidths
9 Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
10 Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

◆現在の日付をメッセージボックスに表示するには、

Date関数

現在のシステムの日付を含むバリアント型 (内部処理形式 Date の Variant) の値を返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

構文

Date

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

sub 日付表示1()
Sub 日付表示1()
MsgBox Date

End Sub
メッセージボックスに、現在の日付を表示します。

◆今年の残り日数をメッセージを交えて表示する。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

DateSerial(年, 月,日)

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

今年の残りの日数 解  説
Sub 今年の残りの日数()
Dim mydata As Date
Dim mymsg As String
Dim myrday As Integer
mydata = Date
myrday = DateSerial(Year(mydate), 12, 31) - mydate
mymsg = "今年の残りは" & myrday & "日です。。"
MsgBox mymsg

End Sub




Date関数で、取得した日付を変数「mydate」に代入します。
Year(mydate)→日付から年数を取り出します。
DateSerial→今年の12月31日から今日に日付を引きます。

メッセージボックスを表示します。