エクセル新着記事」カテゴリーアーカイブ

2020年冬の新着記事


エクセルで「もういくつ寝るとお正月」|エクセル雑感(2020年1月29日)
今日は2020年1月31日です。早いもので1月が終わろうとしています。つまり、2020年も12分の1がすでに終わろうとしています。この調子では、あっという間に今年(2020年)も終わってしまいそうです。


VBAの少数以下の演算誤差について|VBA技術解説(2020年1月29日)
ワークシートで時間計算をしていると、時に不可解な結果に見舞われることがあります。エクセルの時間は、1日を1とした数値で管理されているため、1時間は1の24分の1の数値になります。この少数以下の計算において、エクセルが正しく計算できないというものです。


VBAで写真の撮影日時や音楽動画の長さを取得する|VBA技術解説(2020年1月23日)
写真の撮影日時、音楽や動画の再生時間、これらをVBAで取得します。写真や音楽、動画をフォルダにまとめて入れている人は多いのではないでしょうか。しかし、なかなかちゃんと管理できていなかったりしませんか。


ツイッターで出されたVBAのお題をやってみた|エクセル雑感(2020年1月13日)
ツイッターで出題されたVBAの問題をやってみました。ツイッターのエクセルおよびVBA関係の人達の間では、いろいろと面白く勉強になる問題を出し合うという事が行われています。フォローして参加してみると楽しいと思いますよ。


イベントプロシージャーの共通化(Enter,Exit)|ユーザーフォーム入門(2020年1月13日)
ユーザーフォームのVBAでは、同じイベントプロシージャーを何個も作成することが多々あります。テキストボックスを複数個配置して同じイベント処理を実装する時、全く同じイベントプロシージャーをコピペで何個も作るといったことが必要になります。その解決方法として前回、第23回.イベントプロシージャーの共通化 WithEventを使った方法を紹介しましたが、


Rangeオブジェクトの論理演算(差集合と排他的論理和)|VBA技術解説(2020年1月10日)
複数のRangeオブジェクトの重なっている範囲や、結合した範囲等々、Rangeオブジェクトを集合として、その集合演算の結果のRangeオブジェクトが必要になってくる場合がVBAでは良くでてきます。VBAで標準でサポートされているものとしては、和集合:Unionメソッド 積集合:Intersectメソッド この二つがありますが、


イベントプロシージャーの共通化|ユーザーフォーム入門(2020年1月7日)
ユーザーフォームに部品コントロールを配置していくとき、同種のコントロールを繰り返し何個も配置することは良くあります。コピペしながらようやく配置し終わったと思ったら、今度はVBAで同じイベントプロシージャーを何個も作成しなければならなくなります。


コントロールの動的作成|ユーザーフォーム入門(2020年1月6日)
ユーザーフォームは、事前に画面デザインを考えて、それにそって部品コントロールを配置するものです。しかし、ユーザーの操作に応じて、動的に部品コントロールを変更したい場合があります。このような場合の対処方法としては、大きく以下の2通りの方法があります。


Evaluateメソッド(文字列の数式を実行します)|VBA技術解説(2020年1月5日)
Evaluateメソッドは、Excelで使用する名前をオブジェクトまたは値に変換します。簡単に説明すれば、セルに入れる数式を文字列としてVBAで実行できます。Evaluateメソッドの構文 式.Evaluate(name) 式には以下が指定できます。


エクスポート(PDF/XPS)|VBA入門(2020年1月2日)
シートの内容をPDF/XPS出力するには、VBAではExportAsFixedFormatメソッドを使用します。このメソッドが使える対象オブジェクトは複数あります、ブック、シート、セル、それぞれにExportAsFixedFormatメソッドが存在するので、印刷範囲によって使い分けてください。


外部ライブラリ(ActiveXオブジェクト)|VBA入門(2019年12月21日)
VBAには外部ライブラリ(ActiveXオブジェクト)を操作する事が出来る仕組みがあります。ActiveXオブジェクトとは、オートメーションをサポートするアプリケーションがオートメーションインターフェイスを通して他のアプリケーションに公開しているオブジェクトです。


Excel2003以前のアクセスキー一覧|VBAリファレンス(2019年12月17日)
Excel2007以降でもExcel2003以前のアクセスキー(アクセラレーションキー)を使用することができます。Excel2007以降のリボンへのアクセスキーとは別に、旧Excelのアクセスキーも引き続きサポートされています。アクセスキー(アクセラレーションキー)とは メニューの横に書かれているアルファベットを、


オブジェクト変数とは何か|VBA技術解説(2019年12月2日)
VBAを使い始めてからある程度進むとオブジェクト変数を必ず使い始めることになります。しかし、オブジェクト変数をどうやって使ったらよいのか、オブジェクト変数とはどういうものなのか… ここの理解で苦しんでいることが多々あるようです。VBA入門は現在137回までありますが、オブジェクト変数については第52回.オブジェクト変数とSetステートメントででてきます。


GetObject関数|VBA関数(2019年11月19日)
ActiveXコンポーネントから提供されたオブジェクトの参照を返します。ファイルパス(フルパスと名前)からオブジェクトの参照を作成したり、既に起動中のオブジェクトを取得する際に使用します。GetObject関数の構文 GetObject([pathname],[class]) pathname 省略可能。


ActiveXコントロール|VBA入門(2019年11月16日)
リボンの開発タブにコントロールの挿入があります。ActiveXコントロールをVBAで扱う場合の解説になります。ワークシートでActiveXコントロールを扱う事の是非はありそうですが、使用することで便利かつ見栄えの良いシートになる場合もあります。


フォームコントロール|VBA入門(2019年11月15日)
リボンの開発タブにコントロールの挿入があります。フォームコントロールをVBAで扱う場合の解説になります。ワークシートでフォームコントロールを扱う事の是非はありそうですが、使用することで便利かつ見栄えの良いシートになる場合もあります。


ジャンプの選択オプション(SpecialCells)|VBA入門(2019年11月14日)
数式の入っているセル、定数の入っているセル、条件付き書式の設定されているセル、これらをシート全体やセル範囲の中から一括で取得する方法がVBAにはあります。手動でのジャンプ機能のセル選択をVBAで使うことができます。VBAでは、RangeオブジェクトのSpecialCellsメソッドがこの機能に該当します。


CSVの読み込み方法(ジャグ配列)(改)|VBAサンプル集(2019年11月11日)
CSVのマクロVBAでの読込方法についての記事は、人気記事として多くのアクセスがあります。順次改定していくつかのバージョンが存在します。最新のジャグ配列(配列の配列)で読み込むVBAについて、UTF-8Nの文字コード判別の課題が残っていました。


VBAでのCSVの扱い方まとめ|VBAサンプル集(2019年11月9日)
マクロVBAでCSVの読み書きする方法はいくつもあり、当サイトでも複数のページでそれぞれVBAコードを掲載しています。順次記事を掲載しているので、それぞれどのような特徴があるかが良く分からなくなってしまっているようです。そこで、CSVに関するページをまとめておきました。


VBAにおける変数のメモリアドレスについて|VBA技術解説(2019年11月8日)
VBA開発においてメモリアドレスを気にすることはほとんど無いと思います。気になる場合があるとしたら、・String変数の処理が遅い ・Variant変数の処理が遅い ・ByRef,ByValの違い ・WindowsAPI使用時 このような場合に多少は気になる事があるくらいではないでしょうか。


空文字列の扱い方と処理速度について(””とvbNullString)|VBA技術解説(2019年11月7日)
空文字列と書きましたが、空文字列という表現がかなり曖昧な表現になっています。ここでいう空文字列とは、文字列が入るべき場所に、何も入っていない(ように見える)状態を指しています。VBAにおいては、空文字列の状態が2つあります。


Errオブジェクトとユーザー定義エラー|VBA入門(2019年11月5日)
VBA実行時には種々のエラーが発生します。実行時エラーに関する情報は、Errオブジェクトには入っていますので、VBA実行でエラー発生した場合は、Errオブジェクトを参照しエラー内容を調べることになります。Errオブジェクトの使い方と、ユーザー定義エラーの生成方法について解説します。


シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(2019年11月4日)
セルに入力した先頭の’シングルクォーテーションは特殊なものとなっています。通常は、数値を文字としてセルに入れるときに使っているものです。マクロVBAでセル値を取得すると、この’シングルクォーテーションはValueでは取得できません。


ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(2019年11月3日)
VBAにはユーザー定義型(Type)があり、複数の要素(複数のデータ型)を含むデータ型を定義できます。複数の値をひとまとめで扱う方法として配列がありますが、配列は同じ型の値しか扱うことができませんが、ユーザー定義型の変数には、文字列型、数値型等々の複数のデータ型をひとまとめにして入れることができます。


クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(2019年11月1日)
タイトルはいささかとっぴな感じですが、目的はクリップボードのデータ取得とクリップボードへデータを送る方法と、そもそもクリップボードの中に、セル範囲(つまり2次元)のデータがどのように入っているかを確認してみようという事です。そして、それが解ればクリップボードに2次元配列としてデータを用意してシートに貼り付けられるだろうという事です。


VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(2019年10月31日)
VBAクラスを使う事で、ユーザー定義イベントを作成したり、動的にイベントを割り当てる事が出来ます。ユーザー独自のイベントを作成したり、フォームに動的に追加したコントロールにイベントを設定することができます。EventステートメントとRaiseEventステートメントを使う事で、ユーザー定義イベントつまりユーザー独自のイベントを作成できます。


VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(2019年10月19日)
VBAクラスをエクスポートすると各種のAttributeが設定されているのが確認できます。それぞれのAttributeの意味と、さらに追加で指定できるAttributeについて説明します。Attributeの変更はVBA標準でサポートされておらず、その使用については慎重であるべきですが、どのようなものがあるかを知るのは、


VBAの用語について:ステートメントとは|VBA技術解説(2019年10月16日)
プログラミング言語には独特の用語があります。用語の理解があやふやなままで解説を読んでも理解がずれてしまう事もあります。VBAの用語は、プログラミング言語一般で使われている用語と同じ使い方も多いのですが、中にはVBA独自の使い方をしている場合もあります。


VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(2019年10月14日)
VBAでは、基本的な決まりとして1ステートメントは1行で書くことになっています。しかし、あまりに長くなってしまうと見づらくなります。逆に、短いステートメントが多数行になっていても見づらい場合もあります。


VBAコードの全プロシージャー・プロパィ一覧を取得|VBAサンプル集(2019年10月12日)
VBAの開発規模がある程度大きくなってくると、VBAソース管理の必要性を感じることもあると思います。モジュールの数も増えてきて、プロシージャー・プロパティが膨大になっきます。以下は、指定ブックの全モジュールの全プロシージャー・プロパティを一覧にするVBAサンプルです。


VBAでエラー行位置(行番号)を取得できるErl関数|VBA技術解説(2019年10月11日)
VBAのデバッグでエラーが発生した行位置を特定する方法はいくつかあります。エラーが発生したVBAソースの行ラベルを取得することができる関数がErl関数です。Erl関数は、VB6に存在しVBAにも引き継がれ実装されているものです。


手動計算時の注意点と再計算方法|VBA技術解説(2019年10月9日)
セルを変更する度に再計算が動いてしまうと処理時間が遅くなってしまいます。そこでマクロVBAの中で、計算方法を手動にすることで対処することになります。このとき処理結果が期待した結果にならないといった事が起こらないように、手動計算時の注意点と再計算方法について解説します。


引数の数を可変にできるパラメーター配列(ParamArray)|VBA入門(2019年10月7日)
Subプロシージャー、Functionプロシージャーにおいて、引数リストの数を特定せず、不定個数の引数を渡せるよう可変にしたい場合があります。ワークシートの関数では、引数の個数が不定の関数が多数あります。=SUM(数値1,数値2,…) このように、最後が「,…」となっていて、いくつでも(限度はありますが)指定できる関数です。

SQL入門:VBAは分かるけどSQL難しそう、そんな人に

エクセルで100万行扱えるといっても、データ量としては列数もありますので、
実際には100万行はおろか数十万行でもエクセルが重くなって扱いづらくなってしまいます。

エクセルのマクロVBAから外部データベースを扱う方法について解説していきます。
使用するDBはSQLiteを使いますが、SQLiteの説明は環境作成にとどめ、SQLの説明を中心に進めます。

SQLについては極力基本的なものを使うようにして、なるべくSQLiteに依存しないSQLにしていこうとは思っています。
とはいえ、全てのDBに共通するSQLにはできませんので、気が付く範囲内で補足できるものは補足していきたいと思います。

SQL入門目次

SQLiteのインストール

データベースに接続/切断

テーブルの作成/削除(CREATE TABLE,DROP TABLE)

テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成

データの挿入(INSERT)と全削除

データの挿入:バルクインサート

データの取得:条件指定(SELECT,WHERE)

データの取得:集約集計、並べ替え(DISTINKT,GROUP,HAVING,ORDER)

SQL関数と演算子

データベースにおけるNULLの扱い方

データベースの正規化とマスタの作成

テーブルを結合して取得(INNER JOIN,OUTER JOIN)

複数のSELECT結果を統合(UNION,UNION ALL)

データの更新(UPDATE)

データの削除(DELETE)

他のテーブルのデータで追加/更新/削除

インデックスを作成して高速化(CREATE INDEX)

トランザクション処理

サブクエリ(副問合せ)

サブクエリのネストとSQLコメント&整形

WITH句(共通テーブル式)

取得行数を限定するLIMIT句とOFFSET句

分析関数(OVER句,WINDOW句)

SQL実行計画の表示

夏の新着記事

VBE入門:ツールのオプション設定|ExcelマクロVBA入門
(9月28日)VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境がVBEです。ここではVBEの環境設定となる、ツールのオプション設定について説明します。「メニュー」→「ツール」→「オプション」それぞれのタブについて、以下で順に説明します。

VBE入門:VBE画面の全体説明|ExcelマクロVBA入門
(9月27日)VBAをやるうえでVBE操作に慣れているかどうかで開発効率が大きく変わってきます。VBE(VisualBasicEditor)は、VBAの統合開発環境です。VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境がVBEです。

新規挿入可能なシート名の判定|ExcelマクロVBA技術解説
(9月26日)VBAでシートの存在確認およびシートとして使える文字列かどうかの判定は厳密に行おうとするとかなり大変になってきます。この件についてTwitterでやり取りがありそれらを踏まえた上でのVBAコードを参考として公開しておきます。その時のツイートでのやり取りはこちら シート名として使える文字列か判定 シート名の制限として

ShapesとDrawingObjectsの相違点と使い方|VBA技術解説
(9月24日)VBAで図(オートシェイプ等)を扱う時にいろいろ調べていくと図(オブジェクト)のコレクションが二つあることに気づきます。Shapesコレクション DrawingObjectsコレクション WEBのサンプルや書籍では多くはShapesが使われているはずですが時々DrawingObjectsを見かけることもあります。

文字列結合&でコンパイルエラーになる理由|VBA技術解説
(9月19日)VBAでは、&(アンパサンド)記号で文字列結合を行う事は頻繁に行われますよね。VBEで&を記述するとき、一度くらいは赤字のコンパイルエラーになったことがあるのではないでしょうか。どのように入力した時にエラーになるのか、なぜそれがエラーになるのか、これらを少しく詳しく見てみましょう。

Byte配列と文字コード関数について|VBA技術解説
(8月20日)マクロVBAのデータ型にByte型がありますが、使う機会はかなり限られています。バイト型は、8ビット(1バイト)の変数で、0~255の範囲の単精度の正の数値が格納されます。1バイトで使う事もなくはありませんが、Byte型配列として使われることがしばしばあります。

PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説
(8月4日)Excel2016より標準搭載されたPowerQueryはとても強力な機能ですが使える環境が限られるので頻繁に使われだすのはこれからになると思います。PowerQueryが広く使われだすと色々な使い方が出てくると思います。ここではPowerQueryの優れた機能をVBAから利用する場合の手順を説明したものです。

練習問題31(セル結合を解除して値を埋める)|VBA練習問題
(7月30日)VBA練習問題 セル結合されているとVBAでは扱いにくい場合が多々あります。そこでセル結合を解除して結合されていたセル範囲に同じ値を入れたいと思います。以下の表を見てください。※上記表の全体を選択しコピー(Ctrl+C)の後エクセルのシートのA1セルに貼り付け(Ctrl+V)してください。

練習問題30(マトリックス→リスト形式)|VBA練習問題
(7月25日)マクロVBA練習問題 売上と仕入の、支店別年度別のマトリックス表があります。これをリスト形式(データベース形式)のデータに変換してください。以下の表をみて下さい。縦横の項目の交点に数値が入っていて、ピボットテーブルのようなマトリックス表になっています。

Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説
(7月22日)Applicationには多数のメソッド・プロパティがありますがこの中にはApplicationを記述しなければならないものとApplicationを省略できるものとが存在します。これらの違いはどこから来るのでしょうか… Applicationの全てのプロパティ・メソッドについてはApplicationのプロパティ

コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説
(7月20日)オブジェクトを扱う事が多くなってくるとコレクション(Collectionオブジェクト)を使う機会も増えてくると思います。配列やディクショナリー(Dictionary)を使ったほうが良い場合も多くはありますが単純にオブジェクトを保管し順序通り(FIFO)に処理するだけならとても扱いやすい場合もあります。

CSVの読み込み方法(ジャグ配列)|VBAサンプル集
(7月15日)CSVのマクロVBAでの読込方法についての記事は、人気記事として多くのアクセスがあります。当初作成して以来、ご要望をいただいたり自身で使っている中で、対応できないCSVが出てくるたびに改良を重ねています。今回のVBAは、一旦ジャグ配列を使用したCSV読み込み方法になります。

その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門
(7月14日)エセルの機能は豊富で、全部の機能を使っている人はまずいないでしょう、どのような機能があるかだけ知っていれば、必要な時に使えばそれで良いのです。マクロVBAでも全てのエクセル機能を覚える必要などありません、必要になった時に調べてVBAが書ければそれで充分です。

オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説
(7月6日)シートにオートフィルタが適用されていてかつ絞り込みされている場合はVBAは何かと面倒になります。そこでこれに対応するために作成したものがオートフィルタを退避回復するVBAクラス ただしこれはシートが一つしか扱えません。複数シートで使う場合はシートごとにクラスのインスタンスを作成する必要があります。

オートフィルタを退避回復するVBAクラス|VBA技術解説
(7月6日)シートにオートフィルタが適用されていてかつ絞り込みされている場合はVBAでは何かと注意が必要になります。このような場合オートフィルタを解除するかフィルタ絞り込みをクリアして対応している事が多くなります。しかしオートフィルタを解除したりフィルタをクリアしてしまうとそれまでの絞り込み条件が消えてしまい

IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説
(6月23日)VBAの実行速度比較はとても良く読まれている人気記事となっていますがそのほとんどは配列やDictionaryを使った少し高度なVBAでの比較が多くなっています。今回は極めて基本的な大小比較して大きい方を返すという処理においてIfステートメントVBA関数のIIF関数シート関数のMax関数 これらの処理速度を比較検証してみます。