エクセルの神髄
ExcelマクロVBAサンプル集

ExcelマクロVBAの実用サンプル集の記事と解説の目次です
最終更新日:2019-07-15

ExcelマクロVBAサンプル集


EXCELマクロVBAの実用サンプル集、なるべくそのまま使えるようにVBAコードを書いています。


技術的な解説は少なめになっています。


技術的な解説は、
マクロVBA入門
ExcelVBAとはエクセルの操作を自動化するマクロ機能で使われているプログラミング言語ですVBAは「MicrosoftVisualBasicApplications」の略になりますこのVBA入門シリーズでは実務で必要とされるVBAの入門として基本から応用までのVBA全般を解説していきます。
マクロVBA技術解説
ExcelマクロVBAの、良くある問題・難度の高い問題に対する技術的解説です。掲載しているVBAコードは解説用のコードとなっていますので、適宜変更してお使いください。そのまま使えるサンプル集は、マクロVBAサンプル集をお探しください。
これらをご覧ください。

ブック・シート

連続セル範囲の選択
エクセルのVBAでは連続セル範囲の選択は頻繁に行われます。以下ではいろいろな記述方法を紹介します。このような表でデータ部(B3~D7)を選択または消去する方法になります。Subtest1()Range(Cells(3,2),Cells(2, 2).End(xlToRight).End(xlDown)).Select End Sub B3~B2
1行置きにする行挿入(Insert)
A列に連続データが入っているとします。これを1行置きにします。Subsample1()DimiAsLongFori=Cells(Rows.Count, 1).End(xlUp).RowTo1Step-1Rows(i).InsertNextiEnd Sub ポイントは下から行うことです。
シートの追加・削除(Add,Delete)
マクロでいろいろ処理する場合に作業用のシートを追加しこのシート上で処理した結果を他シートに反映させる等は良く使うテクニックです。以下シートの新規追加です。Subsample1()Sheets.Add ActiveSheet.Name="新規シート"'…いろいろな処理 Application.DisplayAlerts=False Sheets("新規シー…
シートの複数選択(Select)
複数のシートの選択方法です。シート名は「Sheet1」「Sheet2」「Sheet3」とします。まずはマクロの記録と同じように。Subsample1()Sheets(Array("Sheet1","Sheet2","Sheet3")).SelectEnd Sub シート名がわかっていればこれで良いですが
複数シートの印刷(PrintOut)
複数シートの印刷方法です。シートはワークシートが「Sheet1」「Sheet2」「Sheet3」がありその他でグラフシートもあるとします。ワークシートのみ印刷する場合です。Subsample1()Sheets(Array("Sheet1","Sheet2", "Sheet3")).PrintOutEndSub シート名がわかっていれば
重複削除してコピー(AdvancedFilter)
重複データを排除して別シートにコピーする場合です。以下の表で説明します。フィルターオプションを使います。Subsample1() Worksheets(_Sheet1_).Columns(_A:B_).AdvancedFilter Action:=xlFilterCopy,
ブックを安全確実に開く方法(Open)
マクロVBAの中で、他のブックを開く事はよくあります、ブックを開く時、ブックが存在しているか、既に開いてないか これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。
ブックを閉じる(Close)
ブックを閉じる時の処理方法です。まずは、保存して閉じる場合。Subsample1()ThisWorkbook.SaveThisWorkbook.CloseEnd Sub これは、次のように書くこともできます。
他ブックを開いて閉じる(Open,Close)
他のブックを開いて何らかの処理(転記等)をして閉じる。よくあるパターンですね。簡単にサンプルのみ掲載します。Subsample1()DimstrBookNameAsStringWorkbooks.Open "ブックのフルパス"strBookName= ActiveWorkbook.Name…処理Workbooks(strBookName).Close S…
ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
「ブックを開かずにセル値を取得」に関する検索が非常に多いですおそらくExecuteExcel4Macroに関連しているとかもしくは大量のファイルがある為時間がかかってしまうと言うものでしょう。ExecuteExcel4Macroについての簡単な解説は「ExecuteExcel4Macroについて」サンプルを通して
罫線を簡単に引く(Borders,BorderAround)
エクセルでは、罫線を引く事が多いです。この罫線は、以外に処理時間もかかりますし、やり方によっては、VBAの行数も多くなります。とにかく、簡単に罫線を引く方法です。以下の表を作成する場合です。罫線を引く順番等、いろいろありますが、とにかく短いコードにしてみます。
マクロVBAの開始時と終了時に指定しておくべきApplicationのプロパティ
マクロVBAの開始時および終了時に指定した方が良いApplicationのプロパティの開設です。特に重要なもの、マクロVBAの処理速度に関係するものを紹介します。Applicationのプロパティの詳細については以下をご覧ください。
オートフィルター(AutoFilter)
エクセルでは定番機能のフィルターです。「Sheet1」のA列でフィルターし「Sheet2」へコピーします。Subsample()DimFilterRangeAsRangeWith Worksheets("Sheet1")SetFilterRange=.Range("A1").CurrentRegion EndWithFilterRange.AutoFil…
日付のオートフィルタ(AutoFilter)
とても便利なオートフィルターですが日付となると結構大変です。以下の表で説明します。普通はこんなように指定します。Sub Macro1() Range("A1").Select Selection.AutoFilter ActiveSheet.Range(_$A$1:$B$11_).AutoFilterField:=1,
印刷ダイアログを使用する(xlDialogPrint)
入力しやすいようにセルに色をつけている事が多いと思いますが印刷時にはちょっとじゃまな場合もあります。インク(トナー)も無駄ですしね。印刷時に色指定を解除して印刷する方法になります。Subsample()DimrtnAs BooleanActiveSheet.CopyActiveSheet.Cells.Interior.Color= xlNonertn=A…
名前定義の一覧(Name)
名前定義は使い方によってはとても便利な機能ですが数が多いと管理が大変になります。名前定義の一覧を取得しシートに書き出すマクロです。Subsample()DimnmAsNameDimiAsLongi=1ForEach nmInActiveWorkbook.NamesCells(i,1)=nm.NameCells(i,
シートを名前順に並べ替える
シートを名前順に並べ替える方法になります。配列を使っていますが配列が難しい場合はシートに書き出して処理すれば良いでしょう並べ替えもシート上なら簡単です。Subsample() DimiAsLong DimarySht()AsString Fori=1ToSheets.Count Ifi=1Then ReDimarySht(0) Else ReDimPre…
数式内の不要なシート名を削除する(HasFormula)
複数のシートにまたがる数式を入力していると、自身のシート名!が数式についてしまいます、この自身のシート名!は不要であり、式を見づらくしてしまいます、この不要なシート名を、VBAで一括削除します。ブックの全シート、全セルを対象として、数式の中から、自身のシート名!を削除するVBAになります。
数式の参照しているセルを取得する
セルに入っている数式の参照しているセルを取得するには、RangeのPrecedentsプロパティを使いますが、このプロパティは他のシートの参照には対応していません。また、セルの参照先を取得するプロパティには、Dependentsプロパティがあります。
増殖した条件付き書式を整理統合する
コピペによって条件付き書式は際限なく増加していきます、あまり増えすぎると、Excelの動作が遅くなる場合もありますし、条件や書式を変更したい時にも困ることになります。このような場合は、条件付き書式を消して再設定するしかなくなります、これを解決するVBAを考えてみました。
条件付き書式で変更された書式を取得する
条件付き書式が設定されている場合当然ですが見た目は本来そのセルに設定されている書式ではなく条件付き書式の条件によって設定されている書式になります。VBAでこの条件付き書式によって設定された書式を取得します。これが取得できるようになったのはExcel2010からですのでこのページで紹介するVBAコードはExcel2010以降でのみ有効なものです。

いろいろ

ユーザー定義関数でフリガナを取得する(GetPhonetic)
ワークシート関数の、「PHONETIC」では、他のソフト等からコピペした漢字は取得できません。そこで、VBAでユーザー定義関数を作成し、読みを取得できるようにします。A列はメモ帳よりコピペしました。B列に、ユーザー定義関数を指定して、振り仮名を取得しています。
ユーザー定義関数でハイパーリンクのURLを取得(Hyperlink)
ネットから、何らかの一覧をエクセルにコピペすると、文字列や画像等に、リンクの設定がくっついてきます。URLが表記されていれば良いですが、表示されていない事の方が多いでしょう。そこで、VBAでユーザー定義関数を作成し、URLを取得できるようにします。
カラーのコード取得、256RGB⇔16進変換
WEB制作等で使用する16進のFFFFFFと、RGB(255,255,255)の変換。セルの色からも取得しています。以下が画面です。VBAコードは結構長いので、エクセルをアップしました。サンプルのエクセルです。
時刻になったら音を鳴らして知らせる(OnTime)
エクセル作業に夢中になって、時間を忘れて大慌てって事ありませんか。えっ、無い、そうですか、ではさようなら… あると言う人は以下のプログラムをどうぞ。まず、このようなシートを作ります。そして、標準モジュールに以下を追加します。
指定文字、指定数式でジャンプ機能(Union)
ジャンプ機能がありますがそれでは選択できないような場合です。ある文字を含むセルやある関数を含むセルを一括で選択状態にします。何に使うかは…ご自由に!Subジャンプ機能()DimmyRangeAsRangeDimselRangeAsRangeDim strFindAsStringstrFind=InputBox("対象ブック:"_ ActiveWorkbo…
「値の貼り付け」をショートカットに登録(OnKey)
コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。どうも、ショートカットが無いからのようです。ネットを調べて見たのですが、どれもしっくりこないので、作ってみました。いろいろな方法が考えられるのですが、簡単かつ直ぐに使えて、他の人にも配布可能なものが良いと思います。
「セルの結合」をショートカットに登録(OnKey)
「値の貼り付け」をショートカットに登録が好評だったので(本当かな)、その第二弾!セルの結合をショートカットに登録します。作り方は、前回の、「値の貼り付け」をショートカットに登録と同様です。コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。
半角カナのみ全角カナに変換する
半角カナのみ全角カナに変換します。ネットを探してみたところあるにはあるのですがどうも中途半端。直ぐに使えて汎用性のあるプログラムが見つからなかったので作ってみました。ではプログラムです。Subsample()DimobjRangeAsRangeForEachobjRangeIn ActiveSheet.UsedRangeCall半角カナto全角カナ(ob…
計算式の元となる数値定数を消去する(Precedents)
指定のセルの計算式が参照しているセルの数値定数をクリアします。ただし、参照しているセルが、さらに他のセルを参照している場合は、その先のセルを消去します。つまり、計算式の入っているセルを起点にして、その参照先をすべて検索し、計算式の元となるセル(数値定数が入っているセル)の値をクリアします。
Beep音で音楽(Beep,Sleep)
時々検索されるので、Beep音で音楽を演奏してみましょう。プログラムはほぼAPIをCALLするだけです。まずは、シートです。こんな感じです。ドレミの周波数は結構適当なので、詳しい方は自分で調整して下さい。
日付の検索(配列の使用)
日付の検索は、いろいろと面倒です。Findメソッドで検索する場合、表示書式に左右されますので、表示書式を変更しただけで、検索されなくなります。これは、手作業での検索においても同様になりますが、マクロとしてはいかにも不便です。
ストップウォチ(1/100秒)(Timer)
ストップウォッチを作ってみましょう。機能は簡単に、ボタンを押すと、0からスタートし、時間表示が進む。もう一度ボタンを押すとストップする。これだけです。つまり、1つのボタンで、マクロをスタートさせたり、ストップさせたりする方法の紹介になります。
ストップウォチ改(1/100秒)(Timer)
ストップウォッチを作る時の基本的なVBAコードを以前に公開しましたが時々お問い合わせをいただくことがありそれなりに重宝されているようです。そこでもう少し機能強化したものを作成した次第です。公開済みのストップウォッチ ストップウォッチ(1/100秒)(Timer) 追加する機能 ・ラップタイム(区間の時間) ・スプリットタイム(その時点までの時間) これら…
重複の無いユニークなデータ作成
簡単な例で シート「元データ」A列に1行目に見出し2行目以降にデータが入っている シート「ユニーク」このA列にシート「元データ」のA列をユニーク(一意)にして取り出します。まずはエクセルらしくワークシート関数とフィルターを使って Subsample1() DimLastRowAsLong WithWorksheets(_元データ_) LastRow=.C…
WEBデータの取得方法
WEBページのデータを取得して、エクセルのデータとして取り込みたいとの要望が多いようです。いろいろ方法はあります。QueryTables InternetExplorer MSHTML MSXML2 順番に、以下で説明します。
右クリックメニューの変更(CommandBars)
セルを右クリックした時のショートカットメニューを変更します右クリックメニューからマクロを起動できるようにすることで利便性が向上します・シートモジュールに以下を追加します。PrivateSubWorksheet_BeforeRightClick(ByValTargetAsRange,CancelAsBoolean) DimcmdBra1AsCommandB…
エクセルのアイコン取得(FaceID)
エクセル内のアイコンを取得します。「右クリックメニューの変更」のFaceIdとして使用します。Subsample() ConststartNoAsInteger=1'開始番号を指定 ConststopNoAsInteger=50'終了番号を指定 DimcmdBarAsCommandBar DimcmdBarCtlAsCommandBarControl D…
素数を求めるマクロ
素数とは1と自分自身以外に正の約数を持たない1でない自然数のことですこの素数を求めてシートに出力するマクロになります。特に何かに使えると言う事もないのでPCの計算能力ってどの程度なのかを実感してみるくらいの事でしょうか。Sub素数を求める() DimiAsLong DimjAsLong DimmAsLong DimpAsLong i=1 j=1 p=2 …
入力規則のリスト入力を確認する
入力規則のリスト入力は、Excelの機能の中でも頻繁に使われる機能です、目的の1つとして、リスト内のデータのみの入力に限定したいと言う事がありますが、コピペで値の貼り付けを行うと、どんな値も入力出来てしまいます。結果として、意図しない値が入力されてしまう事があります。
配色を使用したカラー設定を固定カラーに再設定
Excel2007以降なら配色を選択して作成した場合、作成したシートを他のブックに移すと、色が変わってしまいます、そこで、配色ではなく、RGB値で色を再設定することで、元々の色をそのままにして、他のブックに移すことが出来ます。以下は、この目的で色を再設定するマクロVBAになります。
指定セルに名前定義されているか判定する
名前定義はVBAではセル位置の特定において重要な役割を持ちますあるセルが名前定義されているか判定するVBAになります。Subsample() DimrngAsRange Setrng=Range(_A1_) Callsample1(rng) EndSub Subsample1(rngAsRange) DimnmAsName ForEachnmInName…
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
Excel2003形式(xls)のファイルを、一括でExcel2007以降形式(xlsx,xlsm)に変換するマクロVBAサンプルコードです。サンプルコードでは、サブフォルダ「Excelファイル」にあるxlsを、マクロ無しならxlsx、マクロ有りならxlsmにして保存しています。
ハイパーリンクからファイルのフルパスを取得する
ハイパーリンクのリンク先ファイル情報を取得しようとすると、なかなか難しいことになります、ハイパーリンクからパスを取得すると相対パスとなり、簡単にはファイル情報を取得出来ません。以下のサンプルでは、ハイパーリンクの設定されているセルの右隣のセルに更新日時を出力しています。
ボタンのテキスト名のシートへ移動(Application.Caller)
メニューのシートを作成してボタンを配置そしてボタンにより指定シートに移動するよくありますがボタン一つずつに別々(移動先のシート毎に)のマクロを作成するのは面倒ですそこで一つのマクロで済ませる方法の紹介です。Subsample() Sheets(ActiveSheet.Shapes(Application.Caller).TextFrame.Charact…
Excelの表をPowerPointへ図として貼り付け
PowerPointを作っているとエクセルの表を挿入したいことが多いです単発作業なら手作業で十分ですが定期的にやる場合や数が多いと大変ですのでマクロで自動化したくなります。Subsample() DimppAppAsNewPowerPoint.Application DimppPtAsPresentation DimppSlideAsSlide Dimp…
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
VBAでフォルダを削除するにはRmDirステートメントを使いますがサブフォルダやファイルが入っている場合はRmDirはエラーとなりますそこでサブフォルダやファイルがある場合はFileSystemObjectを使います。以下のサンプル使用時には「ツール」→「参照設定」で「MicrosoftScriptingRuntime」にチェックを付けてください。
Shift_JISのテキストファイルをUTF-8に一括変換
本サイトの文字コードは開設当初からShift_JISでしたが昨今の事情を考えてUTF-8に変更することにしました。そこで既存記事全てを一括で変換することになりこれをVBAでやりましたのでその時のVBAコードを掲載しておきます。以下のVBAコードはサイトのUTF-8変更にあたり急遽作成したものですが

配列

1次元配列の並べ替え(バブルソート,クイックソート)
配列(1次元)の並べ替え方法について、バブルソートとクイックソートのサンプルになります。元来エクセルには、ワークシートの並べ替え機能があります。ワークシートにデータを書き出して、ワークシートの並べ替え機能を使えるのですが、どうしても、配列をワークシートに途中で書き出すと言うのは面倒なものです。
2次元配列の並べ替え(バブルソート,クイックソート)
配列(2次元)の並べ替え方法についてバブルソートとクイックソートのサンプルになります。2次元配列の並べ替えと言えばまさにワークシートの並べ替え機能になります。本来はワークシートにデータを書き出してワークシートの並べ替え機能を使えば良いのですがしかしどうしても配列をワークシートに処理途中で書き出すと言うのは面倒なものです。
DIR関数で全サブフォルダの全ファイルを取得
指定フォルダ以下の全サブフォルダ内の全ファイルを取得する場合、通常はFileSystemObjectの再帰モジュールで実現しますが、これをDir関数だけでやってみましょう。FileSystemObjectの再帰モジュールについては、エクセルでファイル一覧を作成 こちらをご覧ください。
順列の全組み合わせ作成と応用方法
配列の要素の順番を入れ替えて、順列を作成しします、ここでは、順列作成のアルゴリズムの解説より、それを使う方法についてのサンプルが主体となります。順列は、出現順序の違いが問題となる場合に必要となります。順列とは 1,2,3の場合であれば、以下の6通りになります。

図形

コメントの位置を移動する(Comment)
ホームページの検索にあったので、作成してみました。正直言って、使い道があるのかは、よく解りません。(笑) コメントの位置を、セルの右横ぴったりにくっ付けます。ただし、この位置は、コメントの表示で、常時表示する場合の位置です。
図をセル内に強制的に収める(Shape)
図(画像等)をエクセルに貼り付けた後、セルの移動と一緒に動かない場合があります。もちろん、図の書式のプロパティでは、「セルに合わせて移動」にしてある場合の話です。図がセルを大きくはみ出しているいる場合(隣のセルよりさらにはみだしている場合)は、セルのコピー、移動にくっていてきません。
図を確認しながら消していく(Shape)
行削除や、列削除等により、図が見えなくなってしまう事があります。しかも、セルのコピーで沢山出来てしまい、困った事ありませんか。「ジャンプ」→「セル選択」で、オブジェクトで一括選択して削除する事は出来ます。
オートシェイプを他ブックの同じ位置に貼り付ける(Shapes,DrawingObjects)
コメントでリクエストを頂きました。「1つのシートにバラバラにあるオートシェープを一度に選択して、コピーし、ほかのブックのあるシートの同じ位置にペーストしたい」というもの。これには色々な問題が含まれています。
全シートの画面キャプチャを取得する(keybd_event)
資料等の作成で、画面キャプチャすることがあると思います。そこで、全シートの画面キャプチャを、新規シートに全て取得するプログラムです。Alt+PrntScrnで、エクセルのウインドウのみキャプチャしています。
写真の取込方法について(Pictures.Insert,Shapes.AddPicture)
写真を取り込んでアルバムのようにしたり各種の資料を作ったりと写真をエクセルに取り込む機会は多いようです。しかし最近は写真のサイズも大きくなり手動で取り込んだままではスクロールもままならない状態となってしまいます。そこで写真ファイルを指定しA列に上から順番に貼り付けさらにセル内に収まるように縮小するマクロになります。
写真をサムネイルに変換して取り込む(Shapes.AddPicture)
写真を取り込んだ場合リンクすると原本が無いとみられずリンクせずに取り込むとファイルサイズが巨大化してしまいます。そこでサムネイルを作成しそれをセルに貼り付け原本へのハイパーリンクを付けておくようにします。写真の取込方法については写真の取込方法について(Pictures.Insert,Shapes.AddPicture) こちらをご覧ください。
円グラフの色設定(Chart,SeriesCollection)
円グラフの色を元の表から設定します。以下はウイザードでグラフを作成した状態です。A列に指定した塗りつぶし色をグラフに反映させます。Subsample()DimiAsLong WithActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)Fori=1To .Points.Count.Points(i).I…
棒グラフ・折れ線グラフのサンプルマクロ
グラフはプロパティ・メソッドも多いので自分の覚書もかねて掲載しました。この元データから以下のグラフが作成されます。解説はプログラム内のコメントを参考にして下さい。Subsample1() DimiAsInteger'系列のFor~Nextで使用 DimrowMaxAsLong'グラフ範囲の最終行 DimcolMaxAsLong'グラフ範囲の最終列 Dim…
人口ピラミッドのグラフをマクロで作成
人口ピラミッドのグラフ作成は、設定項目が多く、かなり面倒です。マクロでサクッと作って、細かい部分を手動で設定できれば楽です。この表から、以下のグラフを作成します。手動で設定すると、かなり多くの手順が必要になります。
グラフで特定の横軸の色を変更するマクロ
特定の横軸のみ色を変更する、つまり、基準値や下限・上限等に線を引きたい場合になります。結構面倒なので、いざやろうとすると、なかなか出来なかったりしますね。手動でやる方法については、グラフで特定の横軸の色を変更する こちらに掲載しています。
グラフのデータ範囲を自動拡張するマクロ
グラフのデータ範囲を自動で拡張・縮小するマクロVBAになります、グラフのデータ範囲を変更する事は度々ありますが、作業自体は大した事はないのですが、やはり面倒ですし、グラフの数が多いと、結構な手間になります。注意 以下は、棒グラフ・折れ線グラフの場合になります。
画像のトリミング(PictureFormat,Crop)
エクセルで画像をトリミングするマクロになります、画像の一部を四角に切り取るVBAコードの解説です。図形で切り取る等は、自動記録のコードをほぼそのまま使えるはずですので、ここでは、基本的かつ汎用的な、一部を四角に切り取るVBAコードについて、サンプルコードを掲載して解説します。

イベント

ブックを開いた時に指定シートを表示(Workbook_Open)
Workbook_Openはブックを開いた時に実行されるイベントですVBEの「MicrosoftExcelObjects」内の「ThisWorkbook」に記述します。PrivateSubWorkbook_Open() Application.GotoSheets(1).Range(_A1_),
ブックが閉じられる直前に保存済を確認(Workbook_BeforeClose)
Workbook_BeforeCloseはブックを閉じる直前に起動されるイベントです手動で閉じる場合もVBAで閉じる場合でも起動されます。ブックが未保存の場合無条件でブックを保存する PrivateSubWorkbook_BeforeClose(CancelAsBoolean) IfActiveWorkbook.Saved=FalseThen Activ…
シートが選択された時に指定セルに移動(Worksheet_Activate)
Worksheet_Activateはシートが選択された時に実行されるイベントですVBEの「MicrosoftExcelObjects」内の各シートに記述します。PrivateSubWorksheet_Activate() Application.GotoRange(_A1_),
ダブルクリックで行高・列幅調整(Worksheet_BeforeDoubleClick)
Worksheet_BeforeDoubleClickはセルをダブルクリックした場合最初に起動されます。PrivateSubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean) Target ダブルクリックされたセルがRangeオブジェクトとして渡されます。
英小文字が入力されたら大文字に変換(Worksheet_Change)
Worksheet_Changeは、セルの値が変更された時に起動されます。PrivateSubWorksheet_Change(ByValTargetAsRange) Target 変更されたセルが、Rangeオブジェクトとして渡されます。
セル選択で選択行の色を変更(Worksheet_SelectionChange)
Worksheet_SelectionChangeは、セルの選択範囲を変更した時に起動されます。PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) Target 選択されたセルが、Rangeオブジェクトとして渡されます。
方眼紙Excelが楽に入力できるVBA
もはや、「いじめ」か「いたずら」、方眼紙Excelに、1枠1文字を入れろと言われて、悪戦苦闘… マクロ書けば、こんな「いじめ」も「いたずら」も、サクッと克服できます。以下のような、セル結合の鬼と化したExcelに、罫線で囲んだ枠内に、1枠1文字で入れるという苦行を、マクロならサクッと解決できます。

CSV・ADO

CSVの読み込み方法
エクセルのVBAでのCSVの読込方法としては。・テキストファイルとして読み込む ・ワークブックとして読み込む ・クエリーテーブルを使う ・ADOを使う ・PowerQueryを使う 大別するとこのようになります。この記事を書いた当初はエクセルのVBAでCSVの読み込みについてネットで検索したところ
CSVの読み込み方法(改)
実施したいこと ・ファイル名を指定し、形式をカンマ区切り、文字列で開く、その際、改行コードLF、CRLF、CRいずれにも対応、セル内の_,_や改行についてはカラムで区切らない。掲示板で上記のリクエストを頂きました。ということで、対応ロジックを書いてみました。
CSVの読み込み方法(改の改)
CSVのVBAでの読込方法については複数の記事を掲載しており、人気記事として多くのアクセスがあります。掲載しているVBAコードは汎用的に書いてあり、ほぼそのまま使用できるものです。しかし、CSVは多くの形式(区切り文字、文字コード等)があり、今まで掲載したコードでは解決出来ないものがあります。
CSVの読み込み方法(ジャグ配列)
CSVのマクロVBAでの読込方法についての記事は、人気記事として多くのアクセスがあります。当初作成して以来、ご要望をいただいたり自身で使っている中で、対応できないCSVが出てくるたびに改良を重ねています。今回のVBAは、一旦ジャグ配列を使用したCSV読み込み方法になります。
CSVの出力(書き出し)方法
シート内容をCSV出力(書き出し)する方法です。CSVの読込は、「CSVの読込方法」「CSVの読込方法(改)」実施したいこと・ファイル名を指定し、形式をカンマ区切り、文字列で開く、その際、改行コードLF、CRLF、CRいずれにも対応、セル内の_,_や改行についてはカラムで区切らない。
UTF-8でCSVの読み書き(ADODB.Stream)
VBAでUTF-8を扱う為にはADODB.Streamを使う必要があります。以下のコードを使用するには参照設定で「MicrosoftActiveXDataObjects2.8Library」にチェックを付けて下さい。またはDimadoStAsNewADODB.Stream ここを DimadoStAsObject SetadoSt=CreateObjec…
ADOでマスタ付加と集計(SQL)
VBAでADOを使用し、マスターデータよりデータ付加します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身の他シートから、マスタ情報を付加し、さらに、集計をします。
ADOでマスタ更新(SQL)
VBAでADOを使用し、マスターデータを更新します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身のブックの、他シートを更新します。シート「顧客マスタ」の、A列が顧客番号、B列が顧客名で、1行目が見出しになっているものとします。
ADOでCSV読み込み(SQL)
VBAでADOを使用し、CSVデータを読み込みます。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を省略します。ADO以外の方法については、「CSVの読み込み方法」を参考にして下さい。
Excelファイルを開かずにシート名を取得
Excelファイルを開くときはファイルサイズに比してとても遅い場合がありますファイルを開かずにExcelの情報を取得したいという要望は少なからずあるようですそこで処理の基本となるシート名を取得する方法になります。もちろん開かないと言っても厳密には必ず開いているわけですがExcelのブックとして開かないという事です。
Excelファイルを開かずにシート名をチェック
多くのExcelファイルから、特定のシート名のデータを取得する場合、当該シートが存在してないブックがあるならば、ブックを開く前にシートの存在をチェックしたくなります。このような、ファイルを開かずにExcelの情報を取得したいという要望は多くあります。

ちょっとしたアプリ

エクセルでファイル一覧を作成
VBAでサブフォルダ以下も含めて全てのファイル一覧を取得します。最初はサブフォルダは無視して、VBAにある関数とステートメントだけで作成します、その後に、FileSystemObjectで再帰処理をすることで、全てのサブフォルダも取得するようにしていきます。

アメブロの記事本文をVBAでバックアップする
前回で、当初の目的である、指定月のすべての記事一覧を取得し、記事本文のバックアップが完成しました。取得した記事本文は、このエクセルファイルと同一フォルダのサブフォルダ_HTML_に保存されます。タイトル、テーマ、更新日時はシートに一覧で表示されます。


数独(ナンプレ)を解くVBAに挑戦
数独をExcelマクロVBAで解いてみます№5、メイン処理を書いて完成になります。メイン処理のSub シートのA1~I9を配列(1To9,1To9)に入れる。trySuを呼ぶ…再帰プロシージャー 配列(1To9,1To9)をシートのA1~I9に入れる。

数独(ナンプレ)を解くアルゴリズムの要点とパフォーマンスの検証
数独(ナンプレ)を解くアルゴリズムを例にアルゴリズムの要点とそれによるパフォーマンスを検証します。一旦は完結したのですが見直す機会がありほんの少し改善しました。OptionExplicit PrivatetryCntAsLong Submain() Debug.PrintTimer DimSuAry(1To9,

ナンバーリンク(パズル)を解くVBAに挑戦
最後に、枠の大きさを10×10に固定せずに、Application.InputBoxでセル範囲を指定して実行するように修正したものを掲載しておきます。理論的には、大きさの制限はありませんが、10×18でやったところ、4時間半もかかってしまいました。

ナンバーリンクを解くVBAのパフォーマンス改善
以下が完成したVBAコードの全てになります。OptionExplicit PrivateSuAry()AsString PrivateSuAry2()AsString PrivateDispRangeAsRange PrivaterMaxAsInteger PrivatecMaxAsInteger PrivateSuAry9(30)AsInteger S…

オセロを作りながらマクロVBAを学ぼう
ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第9回です。前回までで人が打つのであれば不自由のない機能が実装できたと思います。さて、ここからはPC対戦の機能を入れていきます。

他ブックへのリンクエラーを探す
掲載しているVBAコードの最初に掲載したものになります。どのように変更したかを比べてみるとプロシージャー分割の参考になると思います。標準モジュール OptionExplicit '定数 PrivateConstNmTargetBookAsString=_nmTargetBook_'対象ブック指定のセル PrivateConstNmCntMaxAsStri…

Excelシートの複雑な計算式を解析するVBA
複雑な計算式を解析するVBAで使う「関数構文」シートのサンプルです。ほぼ全ての関数を網羅しています、中には漏れもあるかもしれませんが、解析VBAで使うに十分な関数が入っています。引数のない関数は意味がないのですが、一覧にあるものはそのまま入れています。




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

CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)
IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • ExcelマクロVBAサンプル集

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


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




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