Categories: VBA基礎

EXCEL VBA 便利なVBAコード・サンプルプログラム一覧・覚えると便利・効率が上がる。パート①

 

 

EXCEL VBA 便利なVBAコード・サンプルプログラム一覧・覚えると便利・効率が上がる簡単なプログラム:パート①

 

 

●はじめに

今回説明するのは、普段EXCEL VBAでプログラムを作成するときに、覚えると便利なショートプログラムを纏めました。これから説明するプログラムは、EXCEL VBAでプログラムを作成するうえでは、頻繁に利用したりこれからVBAを覚える方もこの部分は抑えて欲しい内容もありますので、Excel VBAに関する便利なコードの説明を分かり易く纏めました。それでは、サンプルプログラムを交えて順番に説明いたします。

 

【EXCEL VBAで覚えると便利なコードを紹介します】
① 指定したシートを作成する方法(ワークシートの複製)
② 指定されたシート内の特定の列で設定した文字列データの抽出(フィルタリング)します。
③ 指定されたシートで並び替え(ソート)を行います。
④ 指定された範囲内のセルを結合(マージ)します。
⑤ 指定されたシートにテキストボックスを作成します。
⑥ 指定された範囲内の条件に応じてセルの背景色や書式などを変更します。

 

 

 

EXCEL VBA 指定したシートを作成する方法(ワークシートの複製・コピー)※ショートプログラム(コード)①

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、指定したシートのワークシートを複製(コピー)するサンプルプログラムです。


【プログラム実行条件】

① ThisWorkbook オブジェクトに “マスター” シートが存在すること。
② ThisWorkbook.Sheets.Count が有効な値を返していること。
③ ws.Copy メソッドが正常に実行されること。

 

 

'
'
Sub CopySheet() '指定するワークシートをコピーする

    Dim ws As Worksheet
    
    Set ws = ThisWorkbook.Worksheets("マスター")  'コピー(複製)するワークシート名を指定します。
    ws.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) '指定したワークシートをコピーします。

End Sub
'

 

●実行前~実行後 ※プログラム実行後、コピー元の「マスター」をコピー(複製)されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA 指定されたシート内の特定の列で設定した文字列データの抽出(フィルタリング)します。※ショートプログラム(コード)②

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、指定したワークシートにあるデータから指定した項目をオートフィルターを利用してデータを抽出します。

【詳しくオートフィルターを知りたい方は、下記リンクをクリックして下さい。】

 

【プログラム実行条件】

①シート名: 「データ」が存在することを確認してください。存在しない場合は、正しいシート名に変更する必要があります。必要に応じて変更して下さい。
②列名: 「A1:D1」の範囲にフィルターを設定することによって、列名が「A1:D1」に含まれていることが前提となります。※AからB列は必須
③フィルター条件: 「ノートパソコン」が存在することを確認してください。存在しない場合は、正しいフィルター条件に変更する必要があります。
④列番号: 2列目(B列)にフィルターを設定することになっています。列番号が異なる場合は、適切な列番号に変更する必要があります。(A列が1・B列が2・C列が3)

 

 

'
'
Sub FilterData()  '指定されたシート内の特定の列で設定した文字列データで抽出(フィルタリング)します。②
    
    Dim ws As Worksheet
    Dim Temp As Range
    
    Set ws = ThisWorkbook.Sheets("データ") 'シートを指定します。「データ」を指定する・
    Set Temp = ws.Range("A1").CurrentRegion  'シート「データ」のセル「A1」を起点に表の範囲を取得します。
    
    With ws.Range(Temp.Address)
        .AutoFilter  '取得した表の範囲に対してオートフィルターを設定します。
        .AutoFilter Field:=2, Criteria1:="ノートPC"   '2列名:B列(品目)に対して「ノートパソコン」を抽出します。
    End With

End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、シート「データ」のデータ一覧に対して、B列の「品目」ノートPCが抽出されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA 指定されたシートで並び替え(ソート)を行います。※ショートプログラム(コード)③

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、指定したワークシートにあるデータから指定した項目でデータをソート(並び替え)します。
【詳しくソートを知りたい方は、下記リンクをクリックして下さい。】

 

【プログラム実行条件】

①シート名: 「売上」が存在することを確認してください。存在しない場合は、正しいシート名に変更する必要があります。
②範囲: 「A1:C11」の範囲に対してソートを実行することになっていますが、この範囲にデータが存在しているか確認してください。C列は必須です。
③ソートキー: 「C2」セルに対してソートキーが設定されていますが、このセルにデータが存在しているか確認してください。
④ソートオプション: 「xlAscending」オプションで昇順ソートが設定されます。数字の大きい順で並び替えます。

 

 

'
'
Sub SortData()  '指定されたシートで並び替え(ソート)を行います。

    Dim ws As Worksheet
    Dim Temp As Range
    
    Set ws = ThisWorkbook.Sheets("売上") 'ソートするシートを指定します。「売上」を指定する。
    Set Temp = ws.Range("A1").CurrentRegion  'シート「売上」のセル「A1」を起点に表の範囲を取得します。
    
    With ws.Range(Temp.Address)
        .Sort Key1:=.Range("C2"), Order1:=xlDescending, Header:=xlGuess  'ソートする対象列をC列「売上」に対して、降順に並び変えます。
    End With

End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、C列(売上)の金額が大きい順番(降順)にデータが並び変わりました。(ソートされる)
(画面クリックして拡大)

 

 

 

 

EXCEL VBA セルの結合:指定された範囲内のセルを結合します。※ショートプログラム(コード)④

 

 

●プログラム説明 (サンプル④)

下記のサンプルプログラムは、指定された範囲内のセルを結合するサンプルプログラムです。

【詳しくセル結合を知りたい方は、下記リンクをクリックして下さい。】

 

【プログラム実行条件】
① シート名: 「結合」という名前のシートが存在することを確認してください。存在しない場合は、正しいシート名に変更する必要があります。
② 繰り返し処理: 「For I = 1 To ws.Cells(Rows.Count, “A”).End(xlUp).Row」という記述は、A列の最終行まで繰り返すということです。この最終行を確認してください。
③ 結合する範囲: 「ws.Range(“D” & I & “:E” & I).Merge」という記述は、D列とE列を結合するということです。この範囲が適切か確認してください。
④ 既存の結合セル: 結合されたセルをもう一度結合することはできません。このマクロを実行する前に、既存の結合セルがあるか確認してください。

 

 

'
'
Sub MergeCells()  '指定された範囲内のセルを結合する
    
    Dim ws As Worksheet
    Dim I As Long
    
    Set ws = ThisWorkbook.Sheets("結合") '結合するシートを指定します。シート「結合」を指定します。
    For I = 1 To ws.Cells(Rows.Count, "A").End(xlUp).Row  '結合する範囲を指定します。1行名からA列の最終行まで繰り返します。
        ws.Range("D" & I & ":E" & I).Merge  '指定した範囲内でD列とE列を結合します。
    Next I
    
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、D列とE列のセルが結合され、住所データが一つのセルに結合されました。
(画面クリックして拡大)

 

 

EXCEL VBA 指定されたシートにテキストボックスを作成します。※ショートプログラム(コード)⑤

 

 

●プログラム説明 (サンプル⑤)

下記のサンプルプログラムは、指定されたシートにテキストボックスを作成します。

【プログラム実行条件】
① シート名: “Text”というシートが存在することが前提となっています。このシート名が異なる場合は、コードを修正する必要があります。
② テキストボックスの位置とサイズ: (10, 10)から200×50ピクセルのテキストボックスが作成されます。この位置とサイズを変更する場合は、コードを修正する必要があります。

 

 

'
'
Sub CreateTextBox() '指定されたシートにテキストボックスを作成します。
    
    Dim ws As Worksheet
    Dim txtbox As Shape
    
    Set ws = ThisWorkbook.Sheets("Text")  'テキストボックスを表示させるシートを指定します。「Text」を指定する。
    Set txtbox = ws.Shapes.AddTextbox(msoTextOrientationHorizontal, 10, 10, 200, 50)
    'テキストボックスの位置とサイズ: (10, 10)から200×50ピクセルのテキストボックスを作成します。
    
    txtbox.TextFrame.Characters.Text = "テキストボックスに表示"
    'テキストボックスの中に「テキストボックスに表示」を登録します。
    
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、指定したシート「text」に 位置(10,10)とサイズ:からなる200×50ピクセルのテキストボックスが作成(表示)されました。
(画面クリックして拡大)

 

 

EXCEL VBA 指定された範囲内の条件に応じてセルの色や書式を変更します。※ショートプログラム(コード)⑥

 

 

●プログラム説明 (サンプル⑥)

下記のサンプルプログラムは、指定された範囲の条件に応じてセルの色や書式を変更するサンプルプログラムです。

【詳しくセルの条件付き書式の設定を知りたい方は、下記リンクをクリックして下さい。】

 

【プログラム実行条件】
① シート名: “書式”というシートが存在することが前提となっています。このシート名が異なる場合は、コードを修正する必要があります。
② 対象範囲: B2からB10のセルにのみ条件付き書式が適用されます。この範囲を変更する場合は、コードを修正する必要があります。
③ 条件と色: セル値が60より大きい場合に、セルの背景色を黄色に塗りつぶします。この条件や色を変更する場合は、コードを修正する必要があります。

 

 

'
'
Sub ConditionalFormatting() '指定された範囲内の条件に応じてセルの書式を変更
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("書式") '条件付き書式を設定する
    
    With ws.Range("B2:B10")  '条件付き書式の設定範囲を行います。
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="60"  '設定範囲で60を超える数値に対して背景色を付けます。
        .FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 255, 0)  '該当するセルの背景色を黄色に塗りつぶします。
    End With
    
End Sub
'
'

 

 

●実行前~実行後 ※プログラム実行後、B列に条件付き書式が設定されました。B列のセルに60を超える数値が登録されているセルの背景色が条件付き書式設定により黄色で塗りつぶされました。
(画面クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA