見出し画像

Excel VBA 表の作成

Excel VBAを活用して、複雑な表を作成・操作することで、業務効率を大幅に向上させることができます。以下に、より高度なテクニックや実践的な例を詳しく説明します。


1. 複雑な表の作成とデータ入力

複数のヘッダー行やセルの結合、罫線の設定など、複雑なレイアウトの表を作成するには、以下の手順を踏みます。

(1) ヘッダーの複数行対応

ヘッダー部分が複数行にわたる場合、各行ごとに値を設定します。

vba
Sub CreateComplexTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 適宜シート名を変更してください 

   ' ヘッダーの設定
    ws.Range("B2").Value = "商品情報"
    ws.Range("B3").Value = "商品名"
    ws.Range("C3").Value = "カテゴリー"
    ws.Range("D2:D3").Merge 
   ws.Range("D2").Value = "数量"
   ws.Range("E2:E3").Merge 
   s.Range("E2").Value = "価格" 

  ' ヘッダーの書式設定 
With ws.Range("B2:E3")
    .Font.Bold = True 
    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlCenter 
   .Borders.LineStyle = xlContinuous 
End With

   ' データの入力
    ws.Range("B4").Value = "りんご"
    ws.Range("C4").Value = "果物"
    ws.Range("D4").Value = 10
    ws.Range("E4").Value = 100 
    ws.Range("B5").Value = "バナナ" 
    ws.Range("C5").Value = "果物"
    ws.Range("D5").Value = 5 
    ws.Range("E5").Value = 150 
    ws.Range("B6").Value = "キャベツ" 
    ws.Range("C6").Value = "野菜" 
    ws.Range("D6").Value = 8
    ws.Range("E6").Value = 120

   ' データ部分の書式設定
  With ws.Range("B4:E6") 
      .Borders.LineStyle = xlContinuous 
  End With
 End Sub


ポイント:

  • セルの結合:Mergeメソッドを使用して、ヘッダーのセルを結合しています。

  • 罫線の設定:Borders.LineStyleプロパティで、セルの境界線を設定しています。

  • 書式設定:Font.BoldやHorizontalAlignmentなどで、フォントや配置を調整しています。


2. データの動的入力とパフォーマンス向上

大量のデータを扱う場合、効率的なコードを書くことでパフォーマンスを向上させることができます。以下に、配列を使用してデータを一括で入力する方法を示します。

vba

Sub InsertDataEfficiently() 
    Dim ws As Worksheet
    Dim data As Variant
    Dim startCell As Range 
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 適宜シート名を変更してください
    Set startCell = ws.Range("B4") ' データの開始セル

 ' データを配列で定義 
data = Array( _ 
   Array("りんご", "果物", 10, 100), _
   Array("バナナ", "果物", 5, 150), _ 
   Array("キャベツ", "野菜", 8, 120) _ 
) 

' 配列のデータを一括でセルに入力
 Dim i As Long, j As Long
 For i = LBound(data) To UBound(data) 
     For j = LBound(data(i)) To UBound(data(i))
         startCell.Offset(i, j).Value = data(i)(j) 
     Next j
 Next i 

' データ部分の書式設定 
With ws.Range(startCell, startCell.Offset(UBound(data), UBound(data(0)))) 
     .Borders.LineStyle = xlContinuous 
   End With 
End Sub

ポイント:

  • 配列の使用:データを配列として定義し、ループを使用して一括でセルに入力することで、処理速度を向上させています。

  • Offsetメソッド:開始セルからの相対位置を指定して、データを入力しています。


3. ユーザー定義関数によるデータ処理

VBAでユーザー定義関数(UDF)を作成し、複雑なデータ処理を行うことができます。以下に、商品の価格と数量から合計金額を計算する関数を示します。

vba
Function CalculateTotalPrice(quantity As Integer, price As Double) As Double 
     CalculateTotalPrice = quantity * price 
End Function

この関数をExcelのセル内で使用することで、各商品の合計金額を自動的に計算できます。

使用例:

  • セルF4に=CalculateTotalPrice(D4, E4)と入力すると、D4の数量とE4の価格を掛け合わせた結果が表示されます。


4. 複雑なデータの検索と抽出

複雑な条件でデータを検索・抽出する場合、VBAを活用すると効率的に処理できます。以下に、特定のカテゴリーの商品を抽出して別のシートに転記する例を示します。

vba
Sub ExtractCategoryData() 
   Dim sourceWs As Worksheet
   Dim targetWs As Worksheet 
   Dim category As String 
   Dim lastRow As Long Dim i As Long 
   Dim targetRow As Long 

   Set sourceWs = ThisWorkbook.Sheets("Sheet1") ' データ元のシート 
   Set targetWs = ThisWorkbook.S 
::contentReference[oaicite:0]{index=0}


いいなと思ったら応援しよう!