第16回.エクセルの機能を上手に使う
エクセルには便利な機能が豊富に用意されています。
マクロVBAでもエクセルの便利な機能を上手く使う事を考えましょう。
マクロVBAコードがとても簡単になり、すっきりしたVBAコードになります。
エクセルの機能を使った例
ただし、金額の計算結果をセルに出力するのではなく、計算式をセルに設定したい場合です。
話をわかり易くするために、あくまで簡単な例にしています。
従って、以下のVBAサンプルは、どれが良いという事ではありません。
お伝えしたいのは、エクセルの機能を使う事で、色々な方法が考えられるという事です。
選択肢が増えれば、複雑な問題、難しい問題に直面した時に解決する手段が増えるという事です。
普通にマクロVBAを書くと
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
この部分を参考に、マクロVBAを書くと上記のようなコードになると思います。
.FormulaR1Cは省略できます。
もちろん、普通はこれで問題ありませんし、このように書く事が多いでしょう。
※R1C1参照形式
R ・・・ Rの後に何も記述しない場合は同一行
C ・・・ Cの後に何も記述しない場合は同一列
R1 ・・・ Rの後に数値のみ記述した場合はその絶対行数
C1 ・・・ Cの後に数値のみ記述した場合はその絶対列数
R[1]・・・ Rに続けて[数値]とした場合は、数値行数分、行位置をづらした行
C[1]・・・ Cに続けて[数値]とした場合は、数値列数分、列位置をづらした列
手操作で色々な方法を試してみましょう。
・C2セルに計算式を入れ、C2セルをコピー、C3~C11を選択し貼り付け
・C2~C11を選択し、計算式を入力しCtrl+Enterで一括入力
C2セルに計算式を入れ、フィルハンドルをダブルクリックでオートフィル
C2セルに計算式を入れ、C2セルをコピー、C3~C11を選択し貼り付け
C2~C11を選択し、計算式を入力しCtrl+Enterで一括入力
マクロの記録を参考にVBAを書いてみると、
=から書き始めれば数式となる訳ですから、R1C1形式である必要が無く、
普通にシート上と同じようにセル参照で書けば良いのです。
Ctrl+Enterで選択範囲内に数式を一括で入れられることを知っている人だけになります。
第15回.手作業で出来なければマクロは書けない
どのエクセル機能を使うかを考える
F2~G11にそれぞれの商品の最大金額とその日付を求めます。
・・・
色々な方法が考えられます。
DMAX関数を使う方法もありますね。
オートフィルターを使って絞り込んでから・・・やりようはあると思います。
・A~C列を、C列降順で並べ替え
・MATCHで先頭行を取得し、F~G列に出力
MATCH関数やVLOOKUP関数は(完全一致の場合)、検索値が一致した先頭を返しますので、これを利用します。
また、Matchの検索値が無い場合はエラーになってしまいますが、エラー処理については無視しています。
実際のデータでは、もっと複雑なデータ・条件となり、都度ベストな方法を模索する必要があります。
並べ替えてMATCHを思いついた方はいますでしょうか。
これは、マクロの発想ではありません。
シートでデータ処理を多数こなした経験からの発想になります。
マクロVBAを自在に書けるようになるには、その前にシートでエクセルの関数・機能を自在に使えるようになる事が必要です。
という事です。
これらについては、手操作での指定とVBAコードを対比しつつ、しっかりと覚えて下さい。
並べ替え
Excel2007以降では、Sortオブジェクトが追加されましたので、マクロの記録ではSortオブジェクトでのVBAコードとなります。
実際にマクロの記録をしてVBAコードをご自身で確認してください。
sample3の2003までのSortメソッドをまずは覚えて下さい。
注意点としては、Headerの指定です。
Sortのダイアログ画面の右上にある、
「先頭行をデータの見出しとして使用する」のチェックに対応しています。
オートフィルター
先の表で、B列の商品コードを"S001"で絞り込んだマクロの記録です。
Field:=で指定する数値は、オートフィルターの範囲内での左からの列位置になります。
従って、Field:=2は必ずしもB列とは限りません。
データがB列から始まっていればその範囲の2番目のC列の意味になります。
以下の画面を良く確認しておいてください。
Criteria1:=
この1は、上の画面の上のテキストボックスに対応しているので1となっています。
下のテキストボックスがCriteria2になります。
マクロの記録で、ANDやORを使うような指定をしてみてVBAコードを確認してください。
エクセルの機能を上手に使う
しかし、それらのVBAコードを全て覚えようとは思わないでください。
必要になった時、都度マクロの記録で調べられれば良いです。
画面での指定と、VBAコードを対比しつつ見ておくようにして下さい。
一度でも見ておけば実際に必要になった時に直ぐに使えるようになります。
ExcelマクロVBA入門の対応ページ
第68回.シートの保護、ブックの保護(Protect)
同じテーマ「マクロVBA再入門」の記事
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)
第15回.手作業で出来なければマクロは書けない
第16回.エクセルの機能を上手に使う
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For~Worksheets.Count)
第21回.ファイル一覧を取得する(Do~LoopとDir関数)
第22回.複数ブックよりデータを集める
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。