ExcelVBA学習3日目(データの処理メイン)

▼データエリアに外枠を付ける

セルA1 を含むセル範囲にデータを入力してから実行する

Option Explicit

Sub Dataline()

 Range("A1").CurrentRegion.Select
 Selection.BorderAround ColorIndex:=5, Weight:=xlMedium

End Sub

 

▼データエリアから項目行を除く

Resizeプロパティ、OffSetプロパティを使用して、アクティブセル領域から各列のタイトル行(項目行)を除く。データエリアからデータ部分のみを抽出するときに使用する。

Resizeプロパティは、行・列レベルでセル範囲のサイズを、OffSetプロパティは、行・列レベルで指定セル範囲からの相対的な位置を設定する。

セルA1を含むセル範囲にデータを入力してから事項する。

Option Explicit

Sub ResizeOffSet()

 Dim RowsCount As Integer

 Range("A1").CurrentRegion.Select
 MsgBox "select the area of acrivecell!"
 RowsCount = Selection.Rows.Count

 Selection.Offset(1).Select
 MsgBox "shift to the range to 1 row down"
 Selection.Resize(RowsCount - 1).Select
 MsgBox "delete a extra row"

End Sub

 

▼オートフィルタでデータを抽出

AutoFilterメソッドの引数fieldは、フィルタの対象となるフィールド番号を整数で指定、引数Criteria1は抽出条件となる文字列を指定する。

データを入力してから実行すると、データを抽出してくれる。

Option Explicit

Sub Dataselect()

 Range("A1").AutoFilter field:=1, Criteria1:="福岡支店"
 MsgBox "abstruct data"

End Sub

f:id:SUNO:20200812120248p:plain

 

 

▼検索したセルのフォントカラーを変更する

Findメソッドはセル範囲を対象にして、検索条件に一致したセル(Range型)を返す。条件に一致するセルが複数ある場合は、FindNextメソッドで順次検索を行う。

検索条件に一致するセルのフォントを青にする。

Option Explicit

Sub Datalookup()

 Dim RangeObje As Range
 Dim FirstRanAddress As String

 Set RangeObje = Cells.Find("ball") ’最初に見つあったセルを選択

 If Not RangeObje Is Nothing Then ’Findメソッドの返り値がNothingでないことを確認
  FirstRanAddress = RangeObje.Address ’そのアドレスを取得
  Do
   RangeObje.Font.ColorIndex = 5 ’フォントカラーを青にする
   Set RangeObje = Cells.FindNext(RangeObje) ’その他検索条件に一致するセルを検索
  Loop Until RangeObje Is Nothing Or RangeObje.Address = _
  FirstRanAddress ’FindメソッドがNothingを返すか、Findメソッドの返したセル(Range)のアドレスが取得したアドレスとイコールになるまでループ
End If

End Sub

f:id:SUNO:20200812145037p:plain

 

▼ソーティング

Sortメソッドを使用してデータを並べ替える。引数Key1は並べ替えで最優先されるフィールド、引数Order1は昇順、降順の指定。

例では、B列を基準として降順に並べ替える。

Option Explicit

Sub DataLineup()

 Range("A1").Sort Key1:=Range("B1"), Order1:=xlDescending

End Sub

f:id:SUNO:20200812145440p:plain

 

 

▼セル範囲を集計する

Subtotalメソッドは、指定セル範囲についての集計の作成を行う。

Subtotalメソッドには次の引数を設定する

 

GroupBy→何列目にあるデータを基準に分類するかを設定

Function→集計方法(合計、平均等)

TotalList→何列目を集計の対象するかどうかを設定

Replace→既存の集計表を更新するかどうかを設定

PageBreaks→分類毎に改ページにするかどうかを設定

SummaryBlowData→集計行の位置

 

Option Explicit

Sub shuukei()

 Worksheets("Sheet8").Activate
 Range("A1").CurrentRegion.Select ←表全体を選択

 'chenge in order(priority key is subject)
 Selection.SortSpecial SortMethod:=xlSyllabary, Key1:=Range("B1"), _
  Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, _
  MatchCase:=False, Orientation:=xlTopToBottom

 'do the Sumfuction
 Selection.Subtotal GroupBy:=2, Function:=xlSum, _
  TotalList:=Array(3, 4, 5), Replace:=True, _
  PageBreaks:=False, SummaryBelowData:=True

 ActiveSheet.Range("A1").CurrentRegion.Copy ←集計表をコピー
 ActiveSheet.Paste Destination:=Worksheets("Sheet9").Range("A1") ←Sheet9に張り付け
 ActiveSheet.Range("A1").CurrentRegion.RemoveSubtotal ←集計状態解除

End Sub

f:id:SUNO:20200813093440p:plain

 

 

▼ピボットテーブルを作成

PivotTableWizardメソッドによって、Sheet1のスポーツ用品店野球用品売り上げデータベースをもとに、ピボットテーブルをSheet2に作成して、”summary sheet”と名付ける。

このピボットテーブルにAddFieldsプロパティで、行フィールド(商品名)、列フィールド(月)、ページフィールド(支店名)を追加する。

Orientationプロパティで、”売上金額”をデータフィールドに配置する。

  • Worksheets("シート名").PivotTableWizardメソッド→PivotTable型
  • PivotTables(”ピボットテーブル名”).AddFieldsメソッド
  • PivotTables(”ピボットテーブル名”).PivotFieldsメソッド(”ピボットテーブル名”)→PivotField型

Option Explicit

Sub PivotTW()

 Worksheets("Sheet2").Activate

 ActiveSheet.PivotTableWizard _
  SourceType:=xlDatabase, _
  SourceData:=Worksheets("Sheet1").Range("A1:D16"), _ ←参照データ
  TableDestination:=Worksheets("Sheet2").Range("A1"), _ ←ピボットテーブルの配置場所
  TableName:="summary sheet" ビボットテーブル名

 ActiveSheet.PivotTables("summary sheet").AddFields _ ←フィールドの追加
  RowFields:="goods", ColumnFields:="month", _ ←行、列フィールドの追加
  PageFields:="store" ←ページフィールドの追加

 ActiveSheet.PivotTables("summary sheet").PivotFields("sales"). _
  Orientation = xlDataField ”売上金額” をデータフィールドに配置

End Sub

f:id:SUNO:20200813141409p:plain

f:id:SUNO:20200813141315p:plain

 

 

▼エラーの種類に応じて、エラー処理を行う

  On Error GoTo ステートメント

On Errorステートメントは、エラーの発生時に指定行ラベルに処理を移行する。

指定行ラベル以下にはエラー処理ルーチンを記述しておく。