セルの操作 2

VBAトップへ
   2セルの操作
  セルの指定とプロパティセット
  セル範囲指定
  行の選択
  列の選択
  セルの削除
  セルのクリア
  セルの挿入
  セルのコピー貼り付け
  セルの切り取り貼り付け

セルの指定とプロパティセット

  1. セルの指定とプロパティセット

    セルの指定方法にはRangeプロパティを使用する方法とCellsプロパティを使用する方法とがあります。 RangeプロパティとCellsプロパティはいずれも指定したセル(Range オブジェクト)を返します。 Rangeプロパティを使用する方法では、"A1"、"B2"などの形式でセルを指定し、 Cellsプロパティを使用する方法では、行番号と列番号によりセルを指定します。

    以下の例では、Rangeプロパティを使用しValueプロパティに値をセットしています。
    
    Range("A1").Value="EXCEL VBA"
    

    以下の例では、Cellsプロパティを使用しValueプロパティに値をセットしています。

    
    Cells(1,1).Value="EXCEL VBA"
    

    上記の例では、いずれもアクティブなシートのセル"A1"に"EXCEL VBA"という文字列がセットされます。 ここにアクティブなシートとは、以下のような状態にあるシートを指します。

    アクティブシート

    アクティブでないシートのセルに同じようにデータをセットするには、まず 目的のシートをワークシートプロパティにより指定し、Activateメソッドにより シートをアクティブな状態にします。

    
    Worksheets("シート名").Activate
    

    その後、同様に目的のシートをワークシートプロパティにより指定しRangeプロパティまたはCellsプロパティで セルを指定してデータをセットします。

    以下の例では、Worksheetプロパティにより"Sheet2"を指定してセルA1にデータをセットしています。

    
    Worksheets("Sheet2").Activate
    Worksheets("Sheet2").Range("A1").Value="EXCEL VBA"
    
    
    Worksheets("Sheet2").Activate
    Worksheets("Sheet2").Cells(1,1).Value="EXCEL VBA"
    

    セルには、Valueプロパティの他にもさまざまなプロパティが用意されています。 以下の例では、セルにデータをセット後、セルの高さ(RowHeightプロパティ)と 幅(ColumnWidthプロパティに)に値をセットすることにより変えています。

    
    Worksheets("Sheet2").Activate
    Worksheets("Sheet2").Range("A1").Value="EXCEL VBA"
    Worksheets("Sheet2").Range("A1").RowHeight=20
    Worksheets("Sheet2").Range("A1").ColumnWidth=20
    
    
    Worksheets("Sheet2").Activate
    Worksheets("Sheet2").Cells(1,1).Value="EXCEL VBA"
    Worksheets("Sheet2").Cells(1,1).RowHeight=20
    Worksheets("Sheet2").Cells(1,1).ColumnWidth=20
    

    上記の例の様に同じプロパティに対して繰り返しプロパティをセットする場合 Withステートメントを使用することができます。 まず、Worksheets("Sheet2")が4回連続で使用されているので以下の様に With〜End Withで処理をくくります。

    
    With Worksheets("Sheet6")
        .Activate
        .Range("A1").Value = "EXCEL VBA"
        .Range("A1").RowHeight = 20
        .Range("A1").ColumnWidth = 20
    End With
    

    次に.Range("A1")が3回連続で使用されているのでこれも With〜End Withで処理をくくります。

    
    With Worksheets("Sheet6")
        .Activate
        With .Range("A1")
            .Value = "EXCEL VBA"
            .RowHeight = 20
            .ColumnWidth = 20
        End With
    End With
    

    最後にセルの指定に関してですが、VBAでは変数によりセル指定する機会が 多いのでCellsプロパティによる指定方法をマスターすることをお勧めします。

先頭へ戻る

セル範囲指定

セル範囲を指定する方法にはRangeプロパティを使用する方法とCellsプロパティを使用する方法とがあります。 RangeプロパティとCellsプロパティはいずれも指定したセル (Range オブジェクト)を返します。 セル範囲に値をセットするには"A1","E7"という具合にセルを指定後、カンマ(,)で区切る方法と、 "A1:E7"という具合にセルを指定後、セミコロン(:)で区切る方法とがあります。

以下の例では、Rangeプロパティを使用しRangeオブジェクトを取得し、Valueプロパティに値をセットしています。


Range("A1","E7").Value="Excel VBA"

Range("A1:E7").Value="Excel VBA"

Cellsプロパティを使用してセル範囲を取得するには行番号と列番号を指定し、Rangeプロパティを併用して セル範囲を取得します。

以下の例では、RangeプロパティとCellsプロパティを併用してしRangeオブジェクトを取得し、 Valueプロパティに値をセットしています。


Range(Cells(1,1),Cells(7,5)).Value="Excel VBA"

先頭へ戻る

   


行の選択

セル範囲の行の指定には、RangeオブジェクトのEntireRow プロパティを使用します。

以下の例では、アクティブシートのセル範囲B2〜E5を含む行のValueプロパティに文字列をセットしています。


Sub SetRows()
    Range(Cells(2,2),Cells(5, 5)).EntireRow.Value="Excel VBA"
End Sub

Sub SetRows()
    Range("B2:E5").EntireRow.Value="Excel VBA"
End Sub

以下の例では、Sheet1のセル範囲B2〜E5を含む行のValueプロパティに文字列をセットしています。


Sub SetRows()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(2,2),Cells(5, 5)) _
             .EntireRow.Value="Excel VBA"
End Sub

Sub SetRows()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B2:E5") _
                     .EntireRow.Value="Excel VBA"
End Sub

先頭へ戻る

   

列の選択

セル範囲の列の指定には、RangeオブジェクトのEntireColumn プロパティを使用します。

以下の例では、アクティブシートのセル範囲B2〜E5を含む列のValueプロパティに文字列をセットしています。


Sub SetColumns()
    Range(Cells(2,2),Cells(5, 5)).EntireColumn.Value="Excel VBA"
End Sub

Sub SetColumns()
    Range("B2:E5").EntireColumn.Value="Excel VBA"
End Sub

以下の例では、Sheet1のセル範囲B2〜E5を含む列のValueプロパティに文字列をセットしています。


Sub SetColumns()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(2,2),Cells(5, 5)) _
             .EntireColumn.Value="Excel VBA"
End Sub

Sub SetColumns()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B2:E5") _
                         .EntireColumn.Value="Excel VBA"
End Sub

先頭へ戻る

   

セルの削除

セルの削除にはDeleteメソッドを使用します。引数により削除後のセルのシフト方向を指定することができます。

メソッド引数定数内容
DeleteShiftxlShiftToLeft左方向にシフト
xlShiftUp上方向にシフト

引数を指定しない場合、【行数 = 列数】の場合は削除後、上方向にシフトします。 【行数 < 列数】の場合は左方向にシフトし、【行数 > 列数】の場合は削除後、上方向にシフトします。
セルの行または列を選択範囲とする場合、行の場合は削除後、上方向にシフトし、 列の場合は削除後、左方向にシフトします。


'アクティブなシートのセルB1〜D3の範囲の削除(行数=列数なので上方向にシフト)
Sub DeleteCell()
    Range(Cells(1,2),Cells(3,4)).Delete
End Sub

'アクティブなシートのセルB1〜D3の範囲の削除(行数>列数なので左方向にシフト)
Sub DeleteCell()
    Range("B1:D4").Delete
End Sub

'Sheet1のセルB1〜D3の範囲の削除(行数<列数なので上方向にシフト)
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,5)).Delete
End Sub

'Sheet1のセルB1〜D3の範囲の削除(引数により上方向にシフト)
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D4").Delete Shift := xlShiftUp 
End Sub

'Sheet1のセルB1〜DEの範囲の削除(引数により左方向にシフト)
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,5)) _
		.Delete Shift:=xlShiftToLeft
End Sub



'アクティブなシートの1〜3行目を削除後、上方向にシフト	
Sub DeleteCell()
    Range(Cells(1,2),Cells(3,4)).EntireRow.Delete
End Sub

'アクティブなシートの1〜3行目を削除後、上方向にシフト
Sub DeleteCell()
    Range("B1:D5").EntireRow.Delete
End Sub

'Sheet1の1〜3行目を削除後、上方向にシフト
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)) _
                        .EntireRow.Delete
End Sub

'Sheet1の1〜3行目を削除後、上方向にシフト
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D3").EntireRow.Delete
End Sub

'アクティブなシートの1〜3列目を削除後、左方向にシフト	
Sub DeleteCell()
    Range(Cells(1,2),Cells(3,4)).EntireColumn.Delete
End Sub

'アクティブなシートの1〜3列目を削除後、左方向にシフト	
Sub DeleteCell()
    Range("B1:D3").EntireColumn.Delete
End Sub

'アクティブなシートの1〜3列目を削除後、左方向にシフト	
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)) _
		.EntireColumn.Delete
End Sub

'アクティブなシートの1〜3列目を削除後、左方向にシフト	
Sub DeleteCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D3").EntireColumn.Delete
End Sub

先頭へ戻る

   

セルのクリア

セルをクリアするメソッドには目的に合わせて色々あります。

メソッド 内容
Clear 全てクリア
ClearContents 数式、文字列をクリア
ClearFormats 書式をクリア
ClearComments コメント文をクリア
ClearOutline アウトラインをクリア


'アクティブなシートのセルB1〜D3の範囲を全てクリア
Sub ClearCell()
    Range(Cells(1,2),Cells(3,4)).Clear
End Sub

'アクティブなシートのセルB1〜D3の範囲の数式、文字列をクリア
Sub ClearCell()
    Range("B1:D3").ClearContents
End Sub

'アクティブなシートのセル全範囲をクリア
Sub ClearCell()
    Cells.Clear
End Sub

'Sheet1のセルB1〜D3の範囲をクリア
Sub ClearCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)).Clear
End Sub

'Sheet1のセルB1〜D3の範囲の書式をクリア
Sub ClearCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D3").ClearFormats
End Sub

'Sheet1のセル全範囲のコメント文をクリア
Sub ClearCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Cells.ClearComments
End Sub

先頭へ戻る

   

セルの挿入

セルの挿入にはInsertメソッドを使用します。引数により挿入後のセルのシフト方向を指定することができます。

メソッド引数定数内容
InsertShiftxlShiftToRight右方向にシフト
xlShiftDown下方向にシフト

引数を指定しない場合【行数 = 列数】の場合は挿入後、下方向にシフトします。 【行数 < 列数】の場合は挿入後、右方向にシフトし、【行数 > 列数】の場合は挿入後、下方向にシフトします。
セルの行または列を選択範囲とする場合、行の場合は挿入後、下方向にシフトし、列の場合は挿入後、右方向にシフトします。


'アクティブなシートのセルB1〜D3の範囲の挿入(行数=列数なので下方向にシフト)
Sub InsertCell()
    Range(Cells(1,2),Cells(3,4)).Insert
End Sub

'アクティブなシートのセルB1〜D3の範囲の挿入(行数>列数なので右方向にシフト)
Sub InsertCell()
    Range("B1:D4").Insert
End Sub

'Sheet1のセルB1〜D3の範囲の挿入(行数<列数なので下方向にシフト)
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,5))
End Sub

'Sheet1のセルB1〜D3の範囲の挿入(行数>列数なので右方向にシフト)
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D4").Insert
End Sub

'アクティブなシートの1〜3行目を挿入後、下方向にシフト	
Sub InsertCell()
    Range(Cells(1,2),Cells(3,4)).EntireRow.Insert
End Sub

'アクティブなシートの1〜3行目を挿入後、下方向にシフト
Sub InsertCell()
    Range("B1:D5").EntireRow.Insert
End Sub

'Sheet1の1〜3行目を挿入後、下方向にシフト
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)).EntireRow.Insert
End Sub

'Sheet1の1〜3行目を挿入後、下方向にシフト
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D3").EntireRow.Insert
End Sub

'アクティブなシートの1〜3列目を挿入後、右方向にシフト	
Sub InsertCell()
    Range(Cells(1,2),Cells(3,4)).EntireColumn.Insert
End Sub

'アクティブなシートの1〜3列目を挿入後、右方向にシフト	
Sub InsertCell()
    Range("B1:D3").EntireColumn.Insert
End Sub

'アクティブなシートの1〜3列目を挿入後、右方向にシフト	
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)) _
                     .EntireColumn.Insert
End Sub

'アクティブなシートの1〜3列目を挿入後、右方向にシフト	
Sub InsertCell()
     Worksheets("Sheet1").Activate
     Worksheets("Sheet1").Range("B1:D3").EntireColumn.Insert
End Sub

先頭へ戻る

   

セルのコピー貼り付け

セルの範囲のコピー貼り付けにはCopyメソッドを使用します。貼り付け先を引数により指定します。

メソッド引数定数内容
CopyDestination--コピー先をRengeオブジェクトで指定


'セルB1〜D3の範囲をコピー貼り付け
Sub CopyCell()
    Range(Cells(1,2),Cells(3,4)).Copy Destination:=Cells(5,6)
End Sub

Sub CopyCell()
    Range("B1:D3").Copy Destination:=Range("F5")
End Sub

Sub CopyCell()
	Worksheets("Sheet1").Activate
	Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)) _
		.Copy Destination:=Worksheets("Sheet1").Cells(5,6) 
End Sub

Sub CopyCell()
	Worksheets("Sheet1").Activate
	Worksheets("Sheet1").Range("B1:D3") _
		.Copy Destination:=Worksheets("Sheet1").Range("F5") 
End Sub

 

先頭へ戻る

   

セルの切り取り貼り付け

セルの範囲の切り取り貼り付けにはCutメソッドを使用します。貼り付け先を引数により指定します。

メソッド引数定数内容
CutDestination--貼り付け先をRengeオブジェクトで指定


'セルB1〜D3の範囲を切り取り貼り付け
Sub CutCell()
    Range(Cells(1,2),Cells(3,4)).Cut Destination:=Cells(5,6)
End Sub

Sub CutCell()
    Range("B1:D3").Cut Destination:=Range("F5")
End Sub

Sub CutCell()
	Worksheets("Sheet1").Activate
	Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)) _
		.Cut Destination:=Worksheets("Sheet1").Cells(5,6) 
End Sub

Sub CutCell()
	Worksheets("Sheet1").Activate
	Worksheets("Sheet1").Range("B1:D3") _
		.Cut Destination:=Worksheets("Sheet1").Range("F5") 
End Sub

   先頭へ戻る   

中級・特別編トップへ