VBA練習問題解答
練習問題16(WorksheetFunctionの練習)解答

Excelマクロ練習問題集、エクセルVBAの学習教材
最終更新日:2021-03-31

練習問題16(WorksheetFunctionの練習)解答

マクロVBA練習問題16の回答ページです。

マクロVBA練習問題

・シート「練習16_マスタ」より、商品名と単価を取得し、
 それぞれのセル(C列とD列)に入れて下さい。
・シート「練習16_マスタ」に存在しない場合は、空欄のままにして下さい。
・各行の金額(単価×数量)を計算しF列に入れてください。、
・F12セルに合計金額を計算し入れて下さい。

練習問題用のExcelファイル
シート「練習16」
 A   B    C    D  E  F
商品番号 商品名 単価 数量 金額
1 A06     3  
2 A07     2  
3 A02     4  
4 A08     5  
5 A01     6  
6 A03     1  
7 A04     4  
8 A09     3  
9 A10     7  
10 A05     2  
        合計  

シート「練習16_マスタ」
  A      B    C
商品番号 商品名 単価
A01 商品△1 1100
A02 商品△2 1200
A03 商品△3 1300
A05 商品△5 1500
A06 商品△6 1600
A08 商品△8 1800
A09 商品△9 1900
A10 商品△10 2000

※上記表の全体を選択し、コピー(Ctrl+C)の後、エクセルのシートのA1セルに貼り付け(Ctrl+V)してください。

では、お考えください。
すぐに解答を見ずに、必ず自力で書けるとこまででも良いので書きましょう。

シンキングタイム

シンキングタイム開始


シンキングタイム終了

当サイトのコンテンツ
ExcelマクロVBA入門
マクロVBA入門シリーズでは、ExcelマクロVBAを実務で自在に使いこなし業務を効率化できるようになることを目的として、始めはより詳しく丁寧に解説しつつ少しずつ難易度を上げることで無理なく学習を進められるようにしています。マクロとはエクセルの操作を自動化する機能で、中身はVBA言語で記述されます。

書くべきマクロVBAが分からない時は、
ここでじっくり勉強してから再チャレンジしてください。

マクロVBA練習問題解答

では解答のマクロVBAコードです。
※.Valueは適宜省略しています。

Sub 練習問題16()
  Dim i As Long
  Dim ix As Long
  Dim lngTotal As Long
  Dim ws1 As Worksheet
  Dim ws2 As Worksheet
  Set ws1 = Worksheets("練習16")
  Set ws2 = Worksheets("練習16_マスタ")
  lngTotal = 0
  With ws1
    For i = 2 To 11
      ix = WorksheetFunction.CountIf(ws2.Columns(1), .Cells(i, 2))
      If ix > 0 Then
        ix = WorksheetFunction.Match(.Cells(i, 2), ws2.Columns(1), False)
        .Cells(i, 3) = ws2.Cells(ix, 2)
        .Cells(i, 4) = ws2.Cells(ix, 3)
        .Cells(i, 6) = .Cells(i, 4) * .Cells(i, 5)
        lngTotal = lngTotal + .Cells(i, 6)
      End If
    Next
    .Cells(12, 6) = lngTotal
  End With
End Sub

ここでの書き方は色々と考えられます。
上記では、あえてワークシート関数のCountIfでの存在確認をするように書いてみました。
On Err Resume Nextでのエラー処理も使えるようになっておきましょう。

Sub 練習問題16_2()
  Dim i As Long
  Dim ix As Long
  Dim lngTotal As Long
  Dim ws1 As Worksheet
  Dim ws2 As Worksheet
  Set ws1 = Worksheets("練習16")
  Set ws2 = Worksheets("練習16_マスタ")
  lngTotal = 0
  On Error Resume Next
  With ws1
    For i = 2 To 11
      Err.Clear
      ix = WorksheetFunction.CountIf(ws2.Columns(1), .Cells(i, 2))
      If Err.Number = 0 Then
        ix = WorksheetFunction.Match(.Cells(i, 2), ws2.Columns(1), False)
        .Cells(i, 3) = ws2.Cells(ix, 2)
        .Cells(i, 4) = ws2.Cells(ix, 3)
        .Cells(i, 6) = .Cells(i, 4) * .Cells(i, 5)
        lngTotal = lngTotal + .Cells(i, 6)
      End If
    Next
    .Cells(12, 6) = lngTotal
  End With
End Sub


ワークシート関数は非常に便利で、しかも、高速に動作します。
他の開発言語にはない、ExcelマクロVBAならではの機能です。
ぜひ、積極的に活用しましょう。

以下も参考にして下さい。

ExcelマクロVBA入門.第87回.WorksheetFunction(ワークシート関数を使う)
VBA関数以外に、Excelワークシート関数をマクロVBAで使うことが出来ます。ワークシート関数は、VBA関数よりはるかに多くの関数があるので、ぜひ活用したいところです。ワークシート関数を使う事で、VBAコードを非常に簡潔に記述することが出来る場合が多いものです。




同じテーマ「マクロVBA練習問題解答」の記事

練習問題13(文字列関数の練習)解答
練習問題14(行の挿入・削除の練習)解答
練習問題15(Withとオブジェクト変数の練習)解答
練習問題16(WorksheetFunctionの練習)解答
練習問題17(ブック・シートの操作の練習)解答
練習問題18(Dir関数の練習)解答
練習問題19(総合練習1)解答
練習問題20(総合練習2)解答
練習問題21(総合練習3)解答
練習問題22(総合練習4)解答
練習問題23(総合練習5)解答


新着記事NEW ・・・新着記事一覧を見る

シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ