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

Excelマクロ練習問題集、エクセルVBAの学習教材
公開日:2013年5月以前 最終更新日: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入門」シリーズは、マクロVBAを習得し、日々のExcel作業を効率化・自動化できるようになることを目指します。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 ・・・新着記事一覧を見る

エクセル関数辞典 AI版|エクセル入門(6月10日)
生成AIと100本ノック 28本目:シートをブックに分割|生成AI活用研究(6月8日)
生成AIと脱Excelの時代:ブラックボックスと共に進む知的変革|生成AI活用研究(2025-06-08)
生成AIと100本ノック 27本目:ハイパーリンクのURL|生成AI活用研究(6月7日)
生成AIと100本ノック 26本目:ファイル一覧作成|生成AI活用研究(6月6日)
AI時代のプログラミング再考:記述の自由と知の民主化|生成AI活用研究(2025-06-06)
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門|生成AI活用研究(2025-06-04)
AI×ひらめき ― 「ネタ」が飛躍する創造の増幅プロセス|生成AI活用研究(2025-06-03)
Googleカレンダーの日本の祝日をGASとExcelで取得する ~APIキー不要、XML連携ガイド~|生成AI活用研究(2025-06-02)
究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化|生成AI活用研究(2025-06-02)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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