ExcelとVBAの入門解説
エクセルの神髄

マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています
最終更新日:2022-08-17

本サイトについて

エクセル(Excel)およびマクロVBA全般について入門解説から上級者に役立つ技術情報まで幅広く発信しています。
その他として、GAS、Python、SQLといった関連情報も掲載しています。

エクセル入門 : 操作、関数、ショートカットの使い方を解説
エクセル基本操作 : 知ってそうで知らない基本操作について解説
エクセル関数応用 : 関数の応用・高等テクニックを紹介
エクセル挑戦問題 : 簡単にできそうで、なかなか出来ない問題
Excelリファレンス : ショートカットキーや関数の一覧
エクセル雑感 : 関数やVBAついての一般的な話や雑感

ExcelマクロVBA入門 : VBA入門・基礎として、未経験者でも理解できるように詳しく説明
ExcelマクロVBA再入門 : 書籍やWEBをみて結局挫折してしまった方を対象に実戦形式で
マクロの記録で覚えるVBA : マクロの記録のVBAコードを読み、そして修正しつつVBAを覚える
マクロVBA練習問題 : マクロVBA入門学習の一環として練習問題を用意
VBA100本ノック : VBAの問題を100本掲載しています。イッター連動企画です。
MOS VBAエキスパート対策 : VBAエキスパート試験に必要なVBA知識についての対策
ExcelマクロVBA関数 : 一般的に良く使われるVBA関数を解説

ユーザーフォーム入門 : ユーザーフォームの初歩から応用まで
VBAクラス入門 : VBAクラスの使い方やオブジェクト指向について
マクロVBAサンプル集 : なるべくそのまま使えるようにしたVBAサンプル集
マクロVBA技術解説 : 良くある問題や少々難度の高い使い方等に対する技術的解説
エクセル顧客管理 : 顧客管理の作成過程をプログ掲載したものの転載
Excelリファレンス : VBEショートカット、VBA関数、各種プロパティ・メソッド一覧

「Python入門」 : 近年非常に人気が高いPython言語をVBA経験者に向けた入門解説です。
「SQL入門」 : エクセルのマクロVBAから外部データベースを扱う方法について解説します。
「スプレッドシート入門」 : 随所でExcelとの対比を掲載しながら説明しています。
「Google Apps Script入門」 : VBAでエクセルを扱うようにGASでスプレッドシートを扱う事に絞って解説しています。

※本サイトはリンクフリーです、ご自由にリンクして頂いて構いません。



サイト全体の更新情報・お知らせ

新シリーズ!ツイッター連動企画「VBA100本ノック」を開始しました。
ツイッターで1日1本出題し翌日解答VBAを出します。
2021/03/03に最後の100本目を出しました。
新シリーズ「Python入門:プログラミング事始め」を開始しました。
人気のプログラミング言語Pythonを初心者向けに基礎から解説。
ロリポップサーバーをハイスピードプランに変更しました。
ページの表示速度は以前より早くなっています。
新シリーズ「SQL入門」を開始しました。
DBは扱いやすいようにSQLiteを採用しています。
SQL初心者向けに基礎から解説します。
PC版の上部メニューをドロップダウン形式にしました。
マクロVBAのメニュー構成も若干変更しています。
VBAコードのコピーボタンを設置しました。
サイトの文字コードをUTF-8に変更しました。
この際に使ったVBAコードも掲載しています。
Shift_JISのテキストファイルをUTF-8に一括変換
サイト全体をリニューアルしました。
横幅を広げ、文字も少し大きくしました。
サイト全体をHTTPS化(常時SSL)しました。
HTTP/2プロトコルにより、レスポンス速度が向上しています。
ブックマークしている場合は、HTTPSへ変更してください。
新シリーズとして、「MOS VBAエキスパート対策」を開始しました。
MOS VBAエキスパートの、ベーシック、スタンダード合格に必要なVBAの解説です。
「2020年小学校プログラミング必修化」、大人はVBAから始めてみましょう。
最も閲覧されているのが、「マクロVBA入門」です。
最初に書き始めてから7年近く経過しています。
第1回から順次見直し誤字脱字の修正をしつつ、必要に応じ説明文を追加しています。
久しぶりの大型記事を書き始めました。
オセロを作りながらマクロVBAを学ぼう
オセロ作りを通して、思考整理しVBAプログラミングの学習が目的です。
遅ればせながら、Google スプレッドシート の入門編を開始します。
ゆくゆくは、Google Apps Scriptの神髄にまで迫りたいと思います。
各ページの本文右上に、最終更新日を追加しました。
元ファイルの更新日ですので、公開日とは若干違う場合があります。
誤字脱字だけの修正をしている場合もあります。
久しぶりの新企画をスタート、ExcelマクロVBA再入門
理屈は最低限に、とにかくマクロVBAが書けるようになることが目的です。
スマホ対応サイトへリニューアルしました。
いわゆるレスポンシブCSSを使ったものとなっています。
これにともない、イメージも一新しました。
1年ほど前にフォルダ構成を変更し、2ヶ月前に旧ファイルを削除しました。
サイト内のリンクが消えても、Googleクロールエラーが無くなりません。
そこで、旧URLは301リダイレクトを設定しました。
各ページのレイアウトを少し変更しました。
行間を広くしたので読みやすくなったと思います。
※サイトのタイトルを「エクセルの神髄」としました。
「神髄」は本質、奥義の意味です。基本の積み重ねこそが奥義です。
サイト構成をエクセル中心に変更しました。
従来のトップページは、★旧トップページ★よりお入りください。
都合により、フォルダ構成を変更しました。
旧URLは、しばらく残しますが、いずれ削除予定です。
ブックマーク等をしている場合は変更をお願いいたします。
独自ドメイン取得しました。
エクセル色を強めました。
全体的にリニューアルしました。
使い易くなっていれば良いのですが。


エクセル新着記事NEW・・・新着記事一覧をもっと見る

日付時刻のマイナス表示に対応する方法|ツイッター出題回答 (2022-08-17)
ツイッターで出したエクセルの問題です。日付のマイナス表示についての問題です。日付として計算可能であるマイナス日付を扱う方法についての問題になります。出題ツイート https://twitter.com/yamaoka_ss/status/1559523861149847552 暇な人が多そうなのでw問題を1つ 【エ…
LAMBDA以降の新関数について|エクセル入門(2022-08-16)
2022年2月頃にLAMBDA関数と関係するいくつかの新関数がMicrosoft365(Office365で提供されました。これらは、LAMBDA関数とLAMBDA関数を引数に指定できる関数群になります。2022年3月頃には「OfficeInsiderProgram」でTEXTSPLITをはじめとした新関数が多数導…
条件付きの最大値と中央値("A"が2文字の条件)|ツイッター出題回答 (2022-08-14)
ツイッターで出したエクセルの問題です。"A"が2文字使われているコードの「最大値」と「中央値」を求める問題です。※中央値は現365のスピルするExcelじゃないと難しいと思います。
VBAマクロと操作対象データの分離について|ツイッター出題回答 (2022-08-11)
ツイッターの連続ツイートのまとめです。VBAマクロを作成していく上で、マクロと操作対象のデータがどのような関係になるか。そして、マクロとデータをどのように分離していくかについて連続ツイートした時のまとめです。
8桁数値が日付として不適切なら赤にする条件付き書式|ツイッター出題回答 (2022-08-10)
ツイッターで出題した問題です。日付が8桁数値、つまりyyyymmdd形式で入力されている場合に、その入力されている8桁数値が日付として正しいかどうかを判定し、日付として不適切なら赤文字にする条件付き書式を設定します。出題ツイート 【エクセル問題】日付・条件付き書式 A列に条件付き書式を設定してください。
年月に対して有効な日だけの入力規則のリスト作成|ツイッター出題回答 (2022-08-10)
ツイッターで出題したエクセルの問題です。年月日を別々のセルに入力してもらう場合に、年月によって決定する日の範囲(月の大小や2/29等)を日のセルの入力規則にリストとして設定する問題です。出題ツイート 【エクセル問題】日付・入力規則 C2セルに入力規則のリストを設定してください。
VBA穴埋め問題「On Error GoToの挙動」|ツイッター出題回答 (2022-08-09)
ツイッターで出題したVBAの問題です。OnErrorGoToを使った場合に、2度目のエラー発生に対応するにはどうしたら良いかを問うVBA問題です。出題ツイート 【VBA問題】 さて問題です。「にゃん」と言えるようにするには、①に何を入れたら良いでしょうか? ✅OnErrorGoTo0 ChrW(9…
シート内の全テーブルを1つに統合|ツイッター出題回答 (2022-08-01)
ツイッターで出題した問題です。シート内にある複数のテーブルを、1つのテーブルに結合して別シートに出力します。出題ツイート 【VBA問題】 「Sheet1」のランダムな位置に複数のテーブルがあります。(添付1) テーブルは全て同一形式(列数・ヘッダーが同じ)です。
VBAで漢数字を算用数字に変換|ツイッター出題回答 (2022-07-12)
ツイッターで出題された問題に挑戦しました。漢数字を算用数字に変換するVBAを作成するお題です。出題ツイート 【お題】 VBAで漢数字を算用数字に変換してください。例:千八百万六千五百→18,006,500 カンマはあってもなくてもよいです。
成績表(ネ申エクセル)を別表に集計|ツイッター出題回答 (2022-07-09)
ツイッターで出題した問題です。ネ申エクセルとなっている成績表を、見やすいマトリックス表に数式で集計する問題です。出題ツイート 「エクセル頭の体操」ネ申エクセル編 画像1枚目の成績表データがあります。さすがにこれでは見づらいし扱いづらいので、2枚目のように集計してください。
m/d/yyyy形式文字列を日付シリアル値に変換|ツイッター出題回答 (2022-07-07)
ツイッターで出題した問題です。エクセルでは、「m/d/yyyy」形式で入力しても文字列として扱われてしまいます。そこで、「m/d/yyyy」を日付のシリアル値に変換する数式を考える問題です。出題ツイート 「エクセル頭の体操」日付基本編 m/d/yyyy この形式で入力しても、それは文字列として入力されてしまいます。
ジャグ配列から順列を作成する|ツイッター出題回答 (2022-07-05)
ツイッターで会話したので、それを実際にVBAで書いてみました。ジャグ配列(配列の要素に配列が入っている)から、要素を1つずつ取り出して全順列を作成します。競馬で言ったら、1列目、2列目、3列目を指定した3連単のようなものです。
15桁を超える数値の足し算|ツイッター出題回答 (2022-07-01)
ツイッターで出題した問題です。エクセルでは整数値は15桁までの数値しか正しく扱えません。15桁を超える数値は16桁目以下は0となってしまいます。15桁の数値を合計して16桁になると、1の位が0になってしまいます。
抜けている数値を探せ|ツイッター出題回答 (2022-07-01)
ツイッターで出題した問題です。ランダムに配置された1~20の数値があります。抜けている数値を探す数式を作成するお題です。出題ツイート 「エクセル頭の体操」A1:A20に1~20までの数値がランダムに入っています。
.Net FrameworkのSystem.Collectionsを利用|VBA技術解説(2022-06-29)
.NetFrameworkのSystem.Collections内のクラスを利用します。ArrayList SortedList Hashtable これらを使ってみます。ArrayListに関してはブログ等で多く書かれています。
迷路ネコが影分身の術を体得したら…|ツイッター出題回答 (2022-06-27)
ツイッターで迷路を解くVBAが流行っていたので、ネコを迷路に挑戦させてみた… 迷路にネコが挑戦したら、どうなるかな… さすがに壁登りで迷路クリアは、、、ということで、ちゃんと迷路を攻略するようにネコを調教しました。ツイート 「壁登りは反則だろ」という厳しいご意見があったりなかったり… まうにゃんは厳しい躾けの末、
迷路にネコが挑戦したら、どうなるかな…|ツイッター出題回答 (2022-06-26)
ツイッターで迷路を解くVBAが流行っていたので、それならと言う事で私も参加してみることに… 迷路の解き方は定番の方法がありますが、それらはツイッターの他の人に任せるとして、ちょっと独自の挑戦をしてみました。※これはジョークソフトです。続編もあります。
サロゲートペアに対応した自作関数(Len,Left,Mid,Right)|ツイッター出題回答 (2022-06-24)
ツイッターで、サロゲートペアに対応した文字列関数の話しになりました。シート関数のLEFTとRIGHTはサロゲートペアに対応しているようですが、MIDとLENは対応していません。そして、VBA関数の、Len,Left,Mid,Right、これらは一切サロゲートペアに対応していません。
「マクロの登録」で登録できないプロシージャーは?|ツイッター出題回答 (2022-06-23)
ツイッターで出題した問題です。マクロはボタン等に「マクロの登録」で登録して使う場合が多いです。どのようなプロシージャーかによって「マクロの登録」での登録方法を違ってきます。このやり方を知っているかどうかを問うVBA問題です。
オブジェクトのByRef、ByVal、Variant|ツイッター出題回答 (2022-06-22)
ツイッターで出題した問題です。オブジェクトを引数にした場合の、ByRef、ByValの違いと、仮引数にVariantを指定した場合の動作違いを問う問題です。出題ツイート 【VBA問題】 Submain() Range("A1")=1 DimaAsRange:Seta=Range("A1…



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

1.最終行の取得(End,Rows.Count)|VBA入門
Excelワークシートにおける表の最終行の取得は、マクロVBAの必須技術になります、エクセルVBAにおける最終行取得の必要性 エクセルは表計算ソフトです、つまり縦横の表を扱います、データは横に項目があり、縦に項目に対するデータが入っている事が一般的です。しかし、そのデータ行数は決まった行数ではない事が普通です。
2.RangeとCellsの使い方|VBA入門
VBAではセルを指定する方法としてRangeとCellsがあります。RangeもCellsも、どちらもRangeオブジェクトでセルを指定するものです。✅どちらを使ったらよいのでしょうか ✅どう使い分けたらよいのでしょうか 実際のマクロVBA記述では、RangeとCellsを使い分…
3.変数宣言のDimとデータ型|VBA入門
マクロVBA入門者が、まず最初につまずくのが、このDimで変数を宣言することでしょう。変数とは、数値や文字列など(すなわちデータ)を一時的に格納する入れ物 と良く説明されますが、まずはこの考えで良いでしょう。この入れ物には、いろいろなタイプの入れ物があります。
4.繰り返し処理(For Next)|VBA入門
VBAのForNextは、同じ処理を繰り返し行うためのVBA構文です。繰り返し処理はループ処理とも呼ばれます。マクロでのループ処理の記述は何通りかありますが、まず最初に覚えるべきものが、今回説明するForNextです。
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードです。セルの値や書式を別のセルにコピーすることはマクロVBAでは定番かつ必須の技術になります。
6.マクロって何?VBAって何?|VBA入門
エクセルのマクロって何でしょうか? ExcelのVBAって何でしょうか? 「マクロ」とは、エクセルの操作を自動化するものです。その自動化する機能が、「マクロ」と呼ばれています。マクロの中身は、プログラムです。
7.Excelショートカットキー一覧|Excelリファレンス
Excel作業を効率化するショートカットキーの一覧と、必須ショートカットの詳細解説です、ショートカットは画面や選択状態により変化しますので注意して下さい。機能別一覧とキー順一覧の2通りで一覧表にしています。Excelショートカットキー機能別一覧 Excelショートカットキーキー順一覧 キー表記について Ctrl+S…
8.並べ替え(Sort)|VBA入門
並べ替えは、データ処理の基本中の基本です。乱雑なデータを並べ替えることはデータ処理の第一歩です。マクロVBAで並べ替えを実行するには、シート操作の「並べ替え」の機能を使用することになります。そもそもデータを並べ替えるという事は、そのデータのキーが何かを考えるという事です。
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
Rangeの指定で、あらゆるセルおよびセル範囲は指定できるのですが、マクロで使う場合は、ちょっと使いづらい場合があります。しかし、"A1"や"B5"のような文字で指定するのでは何かと不便です、もっと、プログラムっぽい(笑)指定方法があります。
10.エクセルVBAでのシート指定方法|VBA技術解説
ExceのマクロVBAにおいてシート指定は必須になりますが、シートの指定方法は何種類かあり、それぞれの特徴があります。シートの指定方法には、以下の3通りがあります。✅シートのインデックスで番号 ✅シートの名称で指定 ✅シートのオブジェクト名で指定 シート指定方法…
11.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄
ExcelマクロVBAの基礎を学習する方法、マスターする道順についてです。ExcelマクロVBAは非常に便利です、手作業では、数時間・数日かかる処理が、ほんの一瞬で処理できてしまいます。ただし、マクロVBAを書く為に、相応の時間はかかりますが、それでも、そのマクロVBAを書く時間は一度きりです。
12.繰り返し処理(Do Loop)|VBA入門
繰り返し処理として前回はFor~Nextをやりました。今回はDo~Loopです。For~Nextに比べると使用頻度は落ちますが、必ず覚える必要があるものです。For~Nextは、繰り返す回数をあらかじめ指定するものでしたが、Do~Loopは、繰り返す回数ではなく、繰り返す条件を指定するものです。
13.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
ワークブックを閉じる場合や保存する場合のマクロVBAの説明です。閉じる時に保存するか保存しないかを指定できます。また、ブックを保存するにも、上書きなのか別ファイルにするのか等によってVBAの記述がそれぞれ違ってきます。
14.条件分岐(Select Case)|VBA入門
前回のElseIf以外に、多肢条件分岐の別の書き方があります。それがSelectCaseになります。むしろElseIfより、このSelectCaseの方が、より多肢条件分岐に適していると言えます。SelectCaseは、多肢条件分岐に特化したステートメントになります。
15.最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)|VBA技術解説
エクセルの表をマクロVBAで扱う時は、データ部分の先頭から最終行までの、開始列から最終列まで処理する事が多いでしょう。開始行や開始列は、ほとんどの場合、見出し行や見出し列の次からになります。単純な話として、1行目に見出しがあれば、2行目から 1列目に見出しがあれば、2列目から では、ここで、最終行や最終列は、
16.とにかく書いてみよう(Sub,End Sub)|VBA入門
それでは、とにかくマクロVBAを書いてみましょう。VBEで実際にマクロを書いてみましょう VBE(VisualBasicEditor)に標準モジュールを追加したら、そこにマクロを書いていきます。sub練習1 と入力し、Enterして下さい、このように、subがSubと先頭が大文字になり、後ろに()が付きます。
17.Findメソッド(Find,FindNext,FindPrevious)|VBA入門
Findメソッドは、マクロVBAでセル範囲内の条件に当てはまるセルを検索するものです。Findメソッドは、Rangeオブジェクトのメソッドで、ワークシート操作の「検索と置換」の「検索」の機能をマクロVBAで使うものになります。上の画像では「検索する文字列」だけしか指定できませんが、「オプション」をクリックすると、
18.セルに文字を入れるとは(RangeオブジェクトのValueプロパティ)|VBA入門
前回実行したマクロを、もう少し詳しく見てみましょう。どうしてこれでセルに値が入るのか。どうやってVBAを読んだらよいのか。前回書いたVBAコード 前回書いたVBAは以下の通りです。これを少しだけ詳しく解説します。
19.ブック・シートの選択(Select,Activate)|VBA入門
エクセルでは複数ブックを扱います。そして、それぞれのブックには複数のシートが存在します。従って、マクロVBAでも複数ブック・複数シートを扱う必要があります。ここまでのVBAでは、あくまでアクティブブックのアクティブシートを対象としてきました。
20.CSVの読み込み方法|VBAサンプル集
エクセルのマクロVBAでのCSVの読込方法としては。・テキストファイルとして読み込む ・ワークブックとして読み込む ・クエリーテーブルを使う ・ADOを使う ・PowerQueryを使う 大別するとこのようになります。この記事を書いた当初は、エクセルのマクロVBAでCSVの読み込みについてネットで検索したところ、


フリーソフト、シェアウェア・・・Excelは購入によりVBAコードも開示

※現在は公開を停止しています。

フリーソフト、シェアウェア、ソフト一覧

使った感想などをお寄せくだされば、今後の開発に生かしていきます。
試用版の場合は、プロダクトキーの入力だけで有料版へ移行できます。
まずは一度、お試し下さい。

「お客様第一」顧客管理システムは有料ソフトです、試用版を用意してあります。
「エクセル顧客管理」は顧客管理です。購入でVBAコードも開示します。
「エクセル営業管理」は見積・請求・スケジュール・会計管理です。購入でVBAコードも開示。
「たぶん同期」フォルダ同期ソフトはフリーソフトです、ご自由にどうぞ。
「エクセル集」総務部、社会保険労務士向け、完全フリーです。





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


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


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