サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ニコニコ動画
www.asahi-net.or.jp/~ef2o-inue
列の見出し表示が「A,B,C」ではなく「数字」になってしまった! などと、Excelが壊れてしまったように問い合わせてくる方が時々いますが、A1参照形式(列をA,B,C・・・で表記する通常の形式)は、Excelのデフォルトであり、ほとんどの人がこの形式で計算式などを作っていると思いますから不思議なことではありません。 でも、皆さんにはもっとExcelを知って使いこなしていただきたいので、最初のうちに「絶対参照」と「R1C1参照形式」について説明することにしました。 「R1C1参照形式」は一般的なものではありません。 当サイトでは、計算式やVBAを作成・開発する側の方への説明として、「R1C1参照形式」を結構多用し、半ばお勧めしています。 ですが、Excelでは「A1参照形式」がデフォルトであり、一般ユーザーでは「R1C1参照形式」そのものを知らないケースも非常に多く見られます。 このことか
どうやら「やり方」次第のようです。 ExcelVBAでは、多少効率の悪い処理方法でワークシートへの展開を行なっていても、それほど処理が遅いとは感じなかったような印象だったのですが、 VB2005/2008/2010で処理結果をワークシートに展開していく場合は、結構遅く感じてしまいました。 その違いが歴然としていたので、そもそも「.NETはExcelへの処理が遅い」などという先入観を持っている方も多いのではないかと思います。 ですが、これは「やり方」の違いで結構速くなります。 結論から言えば、「シートへのアクセスの回数をできるだけ減らす」ということになります。サンプルを用意して実験したのでご覧下さい。 このようなサンプルです。 (画像をクリックすると、このページのサンプルがダウンロードできます) 処理は全て新規Excelワークブックを開いて、ワークシートのA1セルから100列×1000行に渡
「Office2013」以降しか知らない方には解らないと思いますが... Officeが「MDI(MultiDocumentInterface)」から「SDI(SingleDocumentInterface)」に移行したということの説明です。 ネットで「Office MDI SDI」などで検索してみても、この前後のバージョンを良く知る方の記事は「酷評」ばかりです。 タブレットモードや他OSとの動作統一などによるものと想像しますが、 複数ブックを開いた時にそれぞれのウィンドウで異なるリボンタブを選択した状態を保持できると言われても、 作成済みブックで作業する時にはリボンを触ることは少ないわけでベテランの方は画面上で幅を取るリボンはたたんで利用されていることも多いのです。 いまさら「MDI(MultiDocumentInterface)」に戻すことはないのでしょうが、 「SDI(SingleD
この「固定編集の文字列」と「変数」は「&」演算子で接続します。 ここの章を最初から読み進めてきた方なら、「今さらこんな簡単なこと」と思われるでしょうが、ダブルクォーテーションで囲うと固定文字列になるということを取り違えて、囲った中に「変数」名を書いて「うまく行かない」と思ってしまう方は結構多いようです。 もし、そのような間違いをしていても、自分でデバッグをできるようになっていれば、自分の記述に誤りがあることは見つけられるのですが... FormulaまたはFormulaR1C1プロパティでマクロからセルに計算式をセットすることができます。 例えば、A11セルにA1セルからA10セルの合計を算出する計算式をセットするものとします。 このあたりは、マクロの記録で取ったコードを参考にすれば、初心者でもすぐに書くことができる範囲だと思います。 でも、これをマクロにしたところでマクロとして用いるには
該当ページにジャンプしない場合は、こちらをクリックして下さい。 Excelでお仕事! ※本サイトはJavaScriptを利用しています。 スクリプトの動作を拒否されている場合はメニューなどが正しく表示されません。
この手のフリーソフトはたくさんあります この機能のフリーソフトは古くから多数発表されています。 特に多機能なわけでもないですし、ファイラーソフトの組み込み機能として存在するものもあるようです。 ですが、逆にMicrosoft .NET Framework環境で近年に作成されたものあまり見当たらないようで、Windows7、8での動作が記載されていない場合が多いという状態に見えたので 純粋に「作成してみました」といったところです。 2016年01月にWindows10での動作確認を行ないました。 インストールを含めて現行バージョンで問題なく動作できています。 Windowsのエクスプローラーにはこの機能はありません。 Windows8になってもエクスプローラーではタイムスタンプの変更はできません。 管理情報の書き換えなので「改ざん行為」になるということなのでしょうか。 でも、一般的な開発言語
VBA未経験ならば、まず「自動記録マクロ」を使ってみましょう。 簡単な「自動記録」の例で作業手順を覚えて下さい。 「マクロの記録」を始める前の注意があります。 このサンプルでは、まずExcelを開いて新しいワークブックの上で操作を開始します。 ここでは、とりあえず、「一覧表」を作る目的で「A列の2行目から100行分の一連番号を登録する」ことを記録して見ます。 ※「一連番号」そのものについては「一覧表に「連番」を表示したい。(基本操作)」をご覧下さい。 ご自分で目的を持った処理をこの「自動記録」で作ろうとする時は「マクロの記録」を始める前の状態にも注意が必要です。 選択中のセルに対して処理を行なうタイプと、シートやセルを決めて処理を行なうタイプで前段条件が違うからです。 今回の「A列の2行目から100行分の一連番号を登録する」はシートは1つしかないワークブックとしていますが、 最初からA2セ
経過日数に関する関数を紹介します。 2つの「日付」間の経過日数を算出します。 時間数の項目で説明した通り、「日付・時刻」のデータタイプは1日を「1」として増えていくデータタイプなので、単純に差し引いて数値型に表記すれば経過日数が算出されます。 (画像をクリックすると、このページのサンプルがダウンロードできます) ※開始日/終了日の期間で、終了日自身が引き算に漏れるので「1」を加えています。 ※R1C1参照形式の場合は となります。 営業日でn日後(n日前)の日付を算出します。 土日祭日を除く「営業日」の計算はよく使うものだと思います。「n営業日前は何日ですか?」などに利用できます。祭日と会社固有の休日は「祭日テーブル」に昇順に並べておいて下さい。 営業日の計算には、WORKDAY関数を使います。 カッコ内の引数は、第1引数が「開始日」、第2引数が「経過日数」で「n日前」を算出する場合はマイ
Excelには表の並べ替え機能があります。 単なる「並べ替え」はほとんどの方がご存じでしょうから、少し変わった並べ替え方法をご紹介しましょう。 通常、全国の住所を扱う表であれば「北海道」から順に並んでほしいものですね。「住所コード」「郵便番号」等があればそれを並び替えに利用することもありますが、 「都道府県」の列がある場合の例として、先に並べ替え順の「ユーザー設定リスト」を作成しておいて、その順に並べ替えるというのがこのページのサンプルです。 では、まず、操作してみましょう。 このようなサンプルを用意します。 住所の前に都道府県が付いている状態ではなく、都道府県だけの列があることが前提です。このように「東京都」が一番下になっているなど都道府県の順序は所望する状態ではありません。 以下が操作手順です。 リボンの「データ」タブから「並べ替え」を選択します。 「並べ替え」のダイアログで都道府県列
配列操作は「苦手」ですか?それとも「初めて」ですか? 「配列操作」はどのようなプログラム言語でも登場するもので、VBA特有のものではありません。 この「配列操作」をマスターすることは、プログラム作成を進める上で重要な要素です。「ループ処理」や「判断・分岐」などと組み合わせて事前に件数が分からない配列を取り扱うのが「動的配列」ですが、 VBAの初心者にとっては一対一でないことで理解しにくいばかりか、動作検証もやりにくいもので嫌われると思いますが、マスターしてしまえばいろいろな処理に駆使することができて「幅」が広がることは間違いありません。 その上、「動的配列」とはその要素数が可変となる配列のことです。 まずは「静的配列」をおさらいしておきます。 ここでのサンプルコードは特に動作効率などを考えてはいないもので、最終的にシートに値を転記させるなら特に配列変数などを用いずに直接セルに書き込めば良い
ユーザーオペレーションでは、ロックして保護されたセルには文字を入力したりすることはできませんが、マクロ上からだけは保護を無視して操作することを許す設定があります。 通常はセルをロック(Locked=True)しておいて、そのワークシートを保護(Protect)すると、そのセルに対しては手入力であろうと、マクロからであろうと値の入力はできません。 この時は、マクロ動作であってもこのようなエラーが発生します。 さて、そこでマクロ動作とユーザーインターフェース(マウスやキー操作)の動作を分けてしまいます。マクロ上からはセルロックの影響を受けないで値や式の書き換えができるようにします。 (画像をクリックすると、このサンプルがダウンロードできます) このサンプルは、開いてTabキーを押してみて頂ければ全セルがロックされ、シート保護されているのが判ります。 ここで、「A1セルを加算する。」のボタンをク
Excelで画像処理を行なう!? ExcelVBAで画像を扱うなどはほとんどその必要に出会ったことがありません。 たまたま人事データで社員の顔写真の一覧をExcel上に作成するメニューを「VisualBasic.NET」で作成することになり、 これを先にExcelVBAで試行する機会があったので、その題材を元にこのページを作成してみました。 「ベタ焼き」のようなものです。 「ベタ焼き」とは、まだデジタルカメラがなかった頃、フィルムで大量の写真を撮る方はネガを直接、印画紙の上にならべて現像したようなもので画像の縮小一覧を用意したものですよね。 正式には「コンタクトプリント」とでも言うのでしょうか。「インデックスプリント」なるものも同じような用途のものです。 デジタルカメラでもプリントを自分で行なうような場合にこのような縮小画像をA4版1ページなどにならべて表示させて印刷させたいというような要
Microsoftの郵便番号変換ウィザードやIMEを使うのではなく独自に変換データベースを作成する方法をご紹介します。 (この画像をクリックするとサンプルがダウンロードできます) このサンプルの構成は、この画像のようなサンプルのExcelブック「郵便番号住所変換2.xlsm」だけですが、郵便番号住所変換データベース(KEN_ALL.mdb又はKEN_ALL.accdb)は、マクロから生成されるようになっています。 郵便番号住所変換データベース(KEN_ALL.mdb又はKEN_ALL.accdb)はAccessで参照できるデータベースです。 このテーブルの項目は、「ゆうびんホームページ」にある「郵便番号等のダウンロード」のページからダウンロードできる「郵便番号データファイル(全国一括:ken_all.zip)」を解凍してできる「KEN_ALL.CSV」のデータ形式に合わせてあります。 サン
VBAのコード作成からテストに入って、一部分の動作確認のため、それ以外の部分のコードを一旦メモ帳か何かに貼り付けておいて削除するなんてことはありませんか? このような場合は、その部分を一旦コメントにしたり、コメントから元に戻したりできます。 例えば、デバッグのために記述を埋め込んだりします... 簡単なサンプルですが「TEST」で上下囲われた範囲の記述がデバッグ用に追加された記述で、 このように25行目でStopステートメントで停止します。 この時に変数「LINE_NO」にマウスカーソルを当てるとその時の値が確認できるようなことは、 以前のページで紹介しています。 では、一旦このデバッグ記述は削除しますが...もしかしたら、また使うかもしれないといった時のことで、 つまり、このデバッグのために埋め込んだ記述をコメントにして残しておこうという作業です。 1行ずつコメントマークを入れても良いの
個々の記述はマクロの記録でよく出てきますね。 「オブジェクト」「メソッド」「プロパティ」などというと何やら難しいことを覚えなければならないのか、と構えてしまうかも知れません。 ですが、これらはマクロの記録で記録されるコードに既に頻繁に使われているもので、知らずに使っているのです。記録されたままで済んでいるならそれでも良いかも知れませんが、 コードに手を入れるようなことがあるなら、ある程度は頭にいれておいた方が良いと思います。 Excelの場合「オブジェクト」は、Excel自身や、ワークブック、ワークシート、セルやセル範囲、さらには貼り付けたテキストボックスや画像など、単純な変数以外の全てに近いものを指します。「オブジェクト」は広義であって、実際に使用する場合は「オブジェクト」の中の「何」かを明示して宣言します。 オブジェクト型変数 古い話ですが、Excel95までは、これらは「Object
経験の浅い人ほど全体を見通せぬまま判るところから記述しようとします。細かい記述を集めてみると、つながりが機能していないことがその時になって判ります。 この章は、少しVBAをカジり始めた方に読んでいただこうと作成しました。 入門書などでVBAの基礎的なことは解ったけれど、実際に要求されるものを「仕組み」として作成するのには、手の付け方が解らない。などと考えている方のための説明です。 大きな「仕組み」になればなるほど、取り組む上での考え方がしっかりしていないと、手を付けてからいつまでたってもメドが立たない状態になってしまいます。 どれだけのコードを書く、動作確認する、後の積み残しがどれだけある、などを随時、明確にしながら取り組むための考え方の一例ですが、 ここから数ページに渡る解説を理解していただければ「自信」がつくと思います。 まず、「要件」の整理が必要です。 VBAの勉強はしました。では、
個々の変数は上記までのように各データ型を割り当てますが、それの対してレコードセットのような割り当てを行なうのがユーザー定義型変数です。特に複数の項目を持つテーブルを作成する時に便利です。 まず、モジュールレベルで構成内容をTypeステートメントで定義します。 上記で定義してあるユーザー定義型変数を再度、宣言して利用します。 このサンプルは、ユーザー定義型の最も有効な利用例を示しています。すなわち、ある種の項目が複数ある情報をテーブル化する場合に用います。ユーザー定義型の変数を宣言する時に配列で宣言しておけば、各項目を配列にする必要がなくなります。 また、ユーザー定義型であれば、オブジェクト変数と同様に内部の各項目が「プロパティ」のように一覧に表示されるようになります。 もう一つ、ユーザーが定数を宣言しておく方法があります。これを列挙型といいます。 通常の定数の宣言と違い、VBEではこのよう
ユーザーにツールバーの「マクロ」から直接起動されては都合が悪い場合があると思います。 マクロで作成した仕組みを実装させたワークブックを複数の利用者に配布する場合、マクロが誤動作しないように配慮する必要があることは説明するまでもないと思います。 本来、マクロの起動はツールバーの「マクロ」を選択して起動します。 「作ったVBA(マクロ)の起動方法は?」で説明していますが、ボタンやツールバーを用意して起動できるようにしていれば、多くの場合は問題なく処理されると思いますが、ツールバーの「マクロ」からプロシージャが自由に実行できてしまう状態の場合は、本来、起動できないはずの状態(違うシートがアクティブになっている状態など)で操作されてしまい不慮の結果が生まれてしまうことがあります。 では、この「マクロ」のウィンドウにプロシージャ名を表示させない方法はあるのでしょうか? 実は、配布の問題にある「アドイ
この時点では「SQL Server 2014 Express Edition」を利用しています。 このページは当初、「SQL Server 2005」のサンプルとして作成していました。 その後「SQL Server 2008」なども経由して「SQL Server 2014」となっています。 サンプルとしての内容変更やソースコードの記述改善は行ないましたが、「SQL Server」のバージョンに影響されての変更は一切ありません。 今後も、新たなバージョンがリリースされた場合でもご確認はいただけると思います。 また、「Express Edition」は学習等を目的としたもので、マイクロソフトのサイトから無償でダウンロードして利用できます。試用期間の制限もありません。 なお、「認証モード」は「混合モード(SQLServer認証とWindows認証)」として下さい。 作成するマクロなどのアプリケー
カーソルの選択セルを移動させずに、画面のスクロールポイントだけを移動します。 画面スクロール状態をいろいろいじった状態で保存すると、次にそのワークブックを開いた時に「わけの解らない」画面になってしまうことがあります。 (画像をクリックすると、このサンプルがダウンロードできます) これは最後に保存された時の状態を再現するからですが、こんなことを防ぐためには、ワークブックを開いた時にそのワークシートに左上に画面を戻すようにします。 '*************************************************************************************************** ' シートの表示位置を左上に戻すサンプル Module1(Module) ' ' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/
「ClickOnce」は「VisualStudio2005(.NET Framework2.0)」から搭載された技術です。 改めて、「ClickOnce」って何!? 「ClickOnce」はWebページからアプリケーションをインストールする技術です。 ただインストールするのなら、Webページにインストーラファイルを配置しておいて利用者がダウンロードしてインストールすれば良いのですが、 「ClickOnce」が違うのは、一旦インストールしたアプリケーションをその後に起動するたびに自動的にWebページ側に問い合わせて、 新しいバージョンが存在する場合は更新インストールが行なわれるという仕組みなのです。 Webページからインストールしたアプリケーションはスタートメニューに登録されるので、次回からは普通にスタートメニューから起動でき、 もちろん、タスクバーにピン止めさせて次回から起動に利用すること
さて、前項でシート内のセルやセル範囲をRangeオブジェクトに取得して操作することは説明しましたが、今度はシートやブックを越えてRangeオブジェクトを取得する方法を説明します。 前項の「RangeオブジェクトとRangeを返すプロパティ」でシート内のセルやセル範囲を「Rangeオブジェクト」に取得していろいろな形で操作・参照する方法は説明しました。 ですが、 のように、いきなり「Rangeプロパティ」や「Cellsプロパティ」から書き始める方法では、シートやブックを越えた操作・参照はできません。 本章では、すでに「単一セルの転記操作」などでシートを越えた転記を説明してしまっており、何となく理解されているかも知れませんが、ここでは「Rangeオブジェクト」と同様にオブジェクト変数を用意して操作・参照することをやってみます。 では、まず、マクロを書き込んだ自分のブックのSheet3に前項の、
「互換性」の問題はかなりありますが、従来のマクロが動かないわけではないようです。 Excel2007は、「.NET」になる、などと言われています。 この「うわさ」は全くのウソです。いずれは「.NET」寄りに変わっていくとのことですが、現状でいきなり非互換なものを売り出すわけはありません。 さらに「互換のために旧VBAを残している」わけでもありません。 これが、Excel2007のVBE(Visual Basic Editor)画面です。 このように、バージョンも「6.3(Excel2003)」⇒「6.5(Excel2007)」と若干上がったようですが、通常の「VBA6.x」の域を超えてはいません。 上のバージョン表示の左下に「Forms3」との表記がありますが、ユーザーフォームには変化はありません。 参照設定で確認しても「Microsoft Forms 2.0」のままのようです。
「ダウンロード」で紹介しているものです。 このサンプルは「ダウンロード」の「MDB(ACCDB)生成/テーブル定義取得ツール」を利用しています。 ソースコードを変更することなく利用できるもので、「ダウンロード」の方ではコードの説明を行なっておりませんので、こちらで紹介します。 当初、このページにはADOXを使ったサンプルを掲載していたのですが、 ADOXではMDBの全機能が設定できないことから、 DAOに変更したものです。 (画像をクリックすると、このページのサンプルがダウンロードできます) これはダウンロードした「MDB(ACCDB)SampleCorp1.zip」の中にある「MDB(ACCDB)テーブル定義(テーブル操作サンプル).xlsm」を開いたところです。 部署マスタ、役職マスタ、社員マスタ、配属マスタのテーブル定義がそれぞれのシートに並んだものですが、 このワークブックは当サイ
配布の問題とは、実際は「配布後の問題」です。配布されるのは「仕組み」が実装されたExcelワークブックです。継続的に利用を繰り返すExcelでの仕組みの場合、その「仕組み」の改訂が必要となった時どのように対処するかがここでのテーマで、改訂要件が発生してから考えるのでは遅いのです。 「配布の問題」の根底は「バージョン管理」です。 私にとっては「配布の問題」は「Excelでお仕事!」のメインテーマです。 この章で説明しているのは20年来試行錯誤してきた結果です。 マクロを配布する以上は「どこにどのバージョンを配布したか」を管理する必要があります。 これはどんな仕組みであってもマクロの改訂が「絶対にない」とは言い切れないからです。 さらに問題なのはこのバージョン管理を「台帳」を作成するなどで管理したとしても、Excelワークブックである以上その「コピー」が別の所に渡ってしまうことが防御できないこ
テーブルを作ってから「テーブル定義書」を作るようなものです。 本来は「データベース設計」なるものがあって、先に「テーブル定義書」を作成して、その「テーブル定義書」に従って実際のテーブルを作成するものです。 ですが、実際の運用場面では「設計」などは担当者の頭の中にあって、操作が簡単なこともあって先にテーブルを作ってしまって運用してしまうこともあるようです。 しかも後から機能拡張を繰り返し、当初の担当者も継続して担当しているとは限らないので、後から設計ドキョメントを見ても実体と合っているか分からない。 なんてことはありませんか? このサンプルは「ダウンロード」の「MDB(ACCDB)生成/テーブル定義取得ツール」を利用しています。 ソースコードを変更することなく利用できるもので、「ダウンロード」の方ではコードの説明を行なっておりませんので、こちらで紹介します。 当初、このページにはADOXを使
最近はCPUなどハードウェアの処理能力が高くなったので、処理効率をあまり考えなくても運用上で問題が起きることはあまりないかも知れません。ですが、記述方法によってどの位違うものかを確認してみましょう。 処理そのものは、セル範囲の単純な転記です。 (画像をクリックすると、このサンプルがダウンロードできます) シートは「Sheet1」「Sheet2」のふたつです。この「Sheet1」から「Sheet2」へ「$A$1:$D$50000」のセル範囲を単純に移送するだけのものです。 ※皆さんもダウンロードして、確認してみて下さい。 ここで紹介するのは、「$A$1:$D$50000」のセル範囲を一気に転記する記述が4種類と、1行ずつ転記する記述が4種類です。もちろん、「セル範囲を一気に転記」の方が速いに決まっているのですが、セル範囲が1回で特定できないようなケースもありますから、行単位で繰り返す場合に効
結局は、行単位で読み込んで、カンマ位置で分解する方法です。 読み込み自体は、この章の最初の「テキストデータの読み込み」と同じ方法なので新しい説明はありませんが、1つの「手段」として考えてみて下さい。 しかし、「なぜ、そんなに難しいコードになるのか」などと質問がありました。データの「精度」についての苦労を知らない方だとは思いますが、単にSplit関数を使ってカンマで分離させる方法ではダブルクォーテーションで囲われた文字列中にカンマが出現した場合、おかしな結果になってしまうのです。 「セル内での改行」や「セル内にカンマ」がある状態で読み込めるサンプルを用意しました。 このページの方法では先に改行までを1件(1行)のデータとして扱っているので、 1件(1行)のデータ中でさらにセル内改行がある場合には対応はできませんでした。 Excelでは「セル内での改行」や「セル内にカンマ」がある状態でCSV形
プロシージャの分割と、変数の受け渡しについての続きです。 プロシージャの分割と、変数の受け渡しについては、「変数の有効期間(範囲)、プロシージャ間の変数の受け渡し」で軽く説明しましたが、さらに掘り下げて説明しておく必要があります。 こちらでは、プロシージャ間の変数の受け渡しに絞って説明してみます。なお、モジュールレベル変数の利用については、「変数の有効期間(範囲)、プロシージャ間の変数の受け渡し」以上の説明が特にないので、ここでは触れません。 手始めはSubプロシージャ同士の変数の受け渡しです。 カッコ内に引数となる変数を宣言して、呼び元、呼び先ともに同じデータ型、個数を守って受け渡すことができます。 Option Explicit ' TEST2を呼んで結果を受け取りたい Sub TEST1() Dim 変数 As Long 変数 = 1 Call TEST2(変数) MsgBox 変数
次のページ
このページを最初にブックマークしてみませんか?
『www.asahi-net.or.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く