サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
www.excelspeedup.com
エクセルVBAでマクロを作ると、思い通りに動かないことがとても多いです。 そういうときには、何がおかしいのか原因を探って修正する「デバッグ」作業が必要になります。 このページでは「デバッグ」をする基本的な方法を説明していきます。 デバッグとは何か? デバッグというのは、プログラムがうまく動かないときに、原因を突き止めて修正する作業のことをいいます。 英語では「debug」と書きます。 プログラムの誤りのことをバグ(bug)というのですが、それを取り除く(=「de」)作業ということで、「debug」と呼ばれています。 また、デバッグをするツールのことをデバッガ(=「debugger」)といいます。 VBAの場合は、エディタ自体にデバッガの機能が付いているので、それを使ってデバッグをしていきます。 デバッグをするときの考え方 デバッグをするときには、次のような手順で考えていきます。 直接の原因
エクセルで、どのブックを開いているときでも使う汎用的なマクロは「個人用マクロブック」に入れておくと便利です。 個人用マクロブックを使うと、面倒な作業を一瞬で実行できるようになります。 たとえば、次のような作業をボタン1つで実行できるようになります。 すべてのシートでA1セルを選択する セル結合されたシートのセル結合を解除して1行1行に分割する 複数の非表示シートを一括で再表示する 指定したセルに、100万円単位で表示する表示形式を設定する 表示しているシートをCSV形式で保存する 今回は、「すべてのシートでA1セルを選択する」マクロを作成して、それをCtrl+Shift+Zで起動できるようにする方法を紹介します。 なお、その他のマクロについては、このページの末尾に、マクロを実行したときの動画を掲載しています。動画を見て頂くと、個人用マクロがいかに強力か実感できると思います。 個人用マクロブ
エクセルのPower Queryを使うと、元データのエクセルへの取り込みや、使いやすい形への加工が、とても簡単にできるようになります。 たとえば、次のような場面ではPower Queryを使うと、一瞬でデータを取り込み、使いやすい形に加工できます。 複数のエクセルブックを1つのファイルにまとめる 複数のエクセルシートを1つのシートにまとめる セル結合が多用されている元データを整形する 集計表の形のデータをデータベース型に戻す この記事では、そんなPower Queryの概要を紹介していこうと思います。 Power Queryとは何か? Power Queryとは、「元データ」と「元データを加工する手順」を、ひとまとめにして記録する機能です。 この、「元データ」と「元データを加工する手順」を、ひとまとめにしたものを「クエリ」といいます。 要するに、Power Queryは「クエリ」を作るため
セルの内容が指定した文字列と「一致する」 まずは、一番単純なパターンです。 たとえば、A2セルに「新宿」と入力されていれば「○」、それ以外の場合には「×」と表示させるには、次のような数式を入力します。 「新宿」のような「文字列の条件」を入力するときには、周りをダブルクォーテーション(「"」 Shift + 2)で囲います。 注意点 単に「A2="新宿"」という条件を入力すると、セルA2に「新宿」と入力されている場合のみ「〇」となります。 逆に言うと、「新宿」という文字が入力されているが、他の文字も入力されている場合には、「×」と表示されてしまいます。
エクセルで、日数・月数を計算する方法を紹介します。 このページで扱うのは、 1日後、1日前、1ヶ月後、1ヶ月前の計算 ある日とある日の間が何日(あるいは何ヶ月あるか) という計算方法です。 特に月数は、用途により、いろいろな計算方法があるため、計算方法を数パターン解説しています。 エクセルで日付計算をするための準備 以下の説明では、全ての日付が「シリアル値」で入力されていることを前提としています。 (シリアル値という言葉を初めて聞いたという方はエクセルのシリアル値とは?それを使うメリットは?をご覧ください) 日付がシリアル値で入力されているか確認する方法 日付っぽく表示されているセルに対して、セルの表示形式を「標準」に変えてください。 5桁の数字に変化すれば、シリアル値で日付が入力されています。 逆に、セルの表示形式を「標準」にしても5桁の数字に変化しない場合は、日付はシリアル値で入力され
エクセルVBAで既存のワークブックを開くためには「Workbooks.Open」文を使います。 「Workbooks.Open」文は、単に使うだけなら簡単な一方で、何も考えずに使ってしまうと、次のようなエラーが発生しがちです。 ファイルが存在していないためエラーになる 同一ファイルを既に開いていると、「abc.xlsxは既に開いています。2重に開くと、これまでの変更内容は破棄されます。abc.xlsxを開きますか?」というメッセージが出てしまう 同一名称の別ファイルを開いているため、正常に動作しない そこで、このページでは「Workbooks.Open」文の使い方と、これらのトラブルの対処法を解説していきます。
VBAで最終行の行番号を取得する方法を紹介します。 最終行を取得する方法は様々なブログで紹介されています。 ところが、一般的に紹介されている方法だと、正しく最終行を取得できない場合もあります。 また、正しく最終行を取得できる方法には、別のデメリットもあります。 そこで、このブログでは、様々な最終行を取得する方法を紹介し、そのメリット・デメリットを紹介していきます。 最終行を取得するfunctionを作る 冒頭でも書きましたが、最終行を取得するには、様々な方法があり、状況により差し替えたい場合も出てきます。 そのため、最終行を取得するロジックは、functionとして独立させてしまいましょう。 function化することで、最終行を取得する方法を簡単に変更できるようになります。 変更したいときには、このfunctionの内部だけを変更すれば済むようになるのです。 functionのひな形 私
VBAでCSVファイルを出力するための「汎用CSV出力マクロ」を作りました。 単にCSVファイルを作りたいだけならVBAの知識は不要です。 また、CSVファイルの出力方法を変えたいという場合でも、多くの場合関数の呼び出し時の引数を指定するだけで済むので、とても簡単に使うことができます。 このページで公開しているマクロでは、下記のような処理に対応しています。 シート全体ではなくシートの一部だけCSV出力したい 一部の列について、表示形式を適用したい(適用したくない) 一部の列について、「"」でデータを囲みたい カンマ区切りではなく「TAB区切り」で出力したい 改行コードを「LF」にしたい CSVファイルの文字コードをUTF-8にしたい 他のホームページで公開されているマクロとは違い、かなり汎用性が高いプログラムだと思いますので、ぜひ、試してみてください。 ダウンロードして、試しに使ってみる
VBAでCSVファイルを読み込むための「汎用CSV読み込みマクロ」を作りました。 CSVファイルを読み込むとき、通常の手順で開こうとすると次のように面倒な場合があります。 「1-2-3」→「2001/2/3」 「09012345678」→「9012345678」、など内容が変化してしまう 文字化けしてしまう テキストファイルウィザードで、データの形式を「文字列」に直すのが面倒くさい このページで紹介するマクロを使えば、このようなトラブルが避けられます。 若干、VBAの知識が必要になりますが、少し引数を指定するだけで、ファイルを適切に取り込むことができます。 他のホームページで公開されているマクロとは違い、かなり汎用性が高いプログラムだと思いますので、ぜひ、試してみてください。 このページで公開しているマクロでは、下記のような処理に対応しています。 文字列、金額のカンマ区切り、和暦など指定し
具体的にいうと、 例えば、右の図のようなデータがある場合に、 A~Dまで「4種類」のデータがあるので、 エクセルの機能で「4」という数値を得たい、 という場合にどうすればいいでしょうか? まずは、上の図のように、 データが順番に並んでいる場合に使える技を紹介します。 1.一つ上の行と比較をしていく B2セルに次のような式を入れて下にコピーしましょう。
データベースとして使いたい表なのに、結合セルだらけで使い物にならない。 そんなときに、VBAで作ったマクロを起動するだけで、 結合セルを解除して 元々入っていた値を、結合されていたすべてのセルに入力する マクロを紹介します。 ソースコードを貼り付けて実行するだけなので、1分もかからずに、表を整形できます。 ソースコード 下記を、標準モジュールに貼り付けて実行してください。 Sub UnmergeCellsAndFillValues() Dim rng As Range For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then With rng.MergeArea .UnMerge .Value = .Resize(1, 1).Value End With End If Next End Sub 解説 For Eachループ F
と変数宣言をすることもできます。 この場合には、モジュール冒頭の「Option Base」文の指定に応じて、下限は「0」または「1」に自動的に設定されます(「Option Base」の指定がない場合には、下限は「0」になります)。 たとえば、Option Baseの指定がない場合に「Dim Data(3)」と変数宣言をすると、下記のように4つ分の領域が確保されます。 Data(0) Data(1) Data(2) Data(3) 具体例 次のマクロを実行すると、 A1セルに10、B1セルに20、C1セルに30が記入されます。 Sub ArrayTest() Dim Data(1 to 3) Data(1) = 10 Data(2) = 20 Data(3) = 30 Cells(1, 1).Value = Data(1) ' A1セルに10を記入 Cells(1, 2).Value = D
エクセルでは、減価償却費を計算するために、SLN関数、VDB関数といった関数が準備されています。 ところが、これらの関数を使うと、正しい減価償却費が計算できない場合があります。 ですから、これらの関数を使うのは止めましょう。
計算式を入力していると、 本当は、空白セルになってほしいのに、 空白セルにならない場合があります。 本来は空白になってほしいセルを空白にする 例えば、次のような場面。 E2セルは、本来は空欄になってほしいところなのに、 「0」という数字が入ってしまいます。 これを空欄にする方法を考えてみます。 1.if関数を使う いろいろなホームページで紹介されている方法です。 次のように、 if関数を使って、 「空白セルならば空白にする」という意味の計算式を組みます。
ビットコインなど仮想通貨について、移動平均法(+総平均法)で損益を計算するエクセルシートを作りました。 移動平均法の計算が大変!と悩んでいるのであれば、ぜひ使ってみてください。 また、合わせて総平均法の計算もできるようにしました。 移動平均法・総平均法の選択により損益が大きく変わる場合もありますので、どちらの計算方法が有利か検討してみてください。 総平均法は継続適用が条件となっているので、都合良く移動平均法・総平均法を使い分けることはできません。 ただし、仮想通貨取引開始年度は、(その後も基本的に同じ計算方法を継続することを前提に)移動平均法・総平均法のどちらかを任意に選択できます。
vlookup関数を使うと非常に効率的な作業ができます。 でも、慣れないと「#REF!」「#N/A!」などのエラーが、エラーが出なくても狙い通りの値が表示されないなど、トラブルが続出します。 そこで、vlookup関数がうまくいかない場合にチェックすべき8つのポイントをまとめました。 うまくいかない原因を効率的に突き止めていきましょう! vlookup関数が動かない8つの原因と対策 チェックが簡単なものから順番に並べています。 うまくいかない原因がまったくわからないときは、最初から順番にチェックをしていってください。 入力した計算式がそのままセルに表示されてしまう セルの書式設定(表示形式)が「文字列」になっていると、計算式がそのまま表示されます。 セルの表示形式を「文字列」以外のもの(例えば「標準」など)に変更しましょう。 なお、計算式を入力した後にセルの書式設定を直す場合は注意が必要で
最終行を取得する必要がないレイアウトにできないか? そもそもの話として、一番最初に考えないといけないのは「最終行を取得する必要がある」レイアウトにしないといけないのか?ということです。 例えば、表の「最後」にある「合計欄」を抽出したいという場合。 最初から「合計欄」を表の「上」に表示してしまえば、今回のような処理を考える必要がなくなります。 このように、表のレイアウトを工夫することで、最終行の内容を取得しないでも済むようにできないかを、まずは考えてみてください。 検討の結果、どうしても最終行の情報を取得せざるを得ないという場合には、このページで紹介する方法を使ってください。 最終行の行番号を取得する方法 以下、全て「A列」に何らかのデータが入っている場合に、「A列」の一番下のデータが入っている「行番号」を計算します。 counta関数を使う方法(空欄不可)
エクセルで、複数のデータが一致しているかどうか比較をしたいときがあります。 このページでは、データを比較・照合・突合をする上での一番基本的な方法を紹介していきます。
CSVファイルをエクセルで開いたときに、次のように元のデータが変わってしまうことがあります。 最初の0が消えてしまう(例:「00001」→「1」) 括弧付きの数がマイナスの数になってしまう(例:「(1)」→「-1」) 日付データが「年/月/日」の書式になる(例:「2016-6-1」→「2016/6/1」) 「年/月」という形のデータが「英語の月名-年の下2桁」の書式になる(例:「2016/6」→「Jun-16」) 住所の丁目・番・号が、日付に書き換えられてしまう(例:「1-2-3」→「2001/2/3」) このようなことが起きる原因は、エクセルが勝手に、 数っぽい見た目のものは、数として取り扱ってしまう 日付っぽい見た目のものは、日付として取り扱い適当に書式を設定しまう ところにあります。 →参考:エクセル入力で、勝手に変な日付・数字に変換されるデータ一覧 csvファイルをそのままの形で取
Excel2016の2016年2月アップデートで、 switch関数等とともに ifs関数が導入されました。 ifs関数とは? これは、if関数を複数分岐に対応させた関数で、 1.書式 2.動作 条件1を満たしたとき→処理1 条件2を満たしたとき→処理2 条件3を満たしたとき→処理3 ... (全ての条件を満たさないとき)→#N¥A! というような動作をする関数です。 ifs関数を使うとif関数の入れ子(ネスト)不要 今までは、 if関数で、複数に分岐させたい場合には、 if関数の入れ子(ネスト)にせざるを得ませんでした。 でも、ifs関数を使えば、 単なる複数分岐だけであれば、 if関数の入れ子(ネスト)にする必要はなくなります。 例えば、A1セルに入っている「点数」に応じて、 次のようにA~Fという文字を表示させたい場合には、 90点以上・・・A 80点以上・・・B 70点以上・・・C
エクセルの関数をたくさん使うと、再計算に時間がかかってしまうのは仕方がありません。 でも、少し、元データや関数を工夫することで、再計算を高速化できる場合があります。 再計算を高速化する方法として「計算量を減らす」「再計算の邪魔をしない」の2つがあります。 エクセル関数の高速化テクニック(計算量対策) エクセルで計算速度が遅くなる第一の要因として、「エクセルの計算量が多くなってしまう計算式」を使っている場合があります。 vlookup関数は、近似値検索(true)を使う vlookup関数で、完全一致検索(4つめの引数にfalseを入れる方法)を使うと、動作スピードは一気に遅くなります。 vlookup関数を多用する場合には、元データをソート(並べ替え)したうえで、近似値検索を使いましょう。 完全一致検索をしたいんだ!という場合でも、近似値検索を2回使うと、完全一致検索ができます。 例えば、
2つのシートを比較して、違いを把握したい場合。 Excel2007以降であれば、 条件付書式を使うと簡単に実行できます。 このページの手法は画面内に収まる~3画面分程度の大きさの表を比較するのに適している方法です。 列同士の比較や、かなり大きな表を比較したい場合には、下記URLも合わせてご覧ください。 列同士の比較をしたい場合 countif関数で2つの列データが一致しているか照合する方法 大きな表の比較をしたい場合 簡単な計算式を使って2つの大きな表の異なるセルを把握する方法
subtotal関数は、指定したセルを指定した方法で集計して、その結果(例えば、合計・平均等)を求める関数です。 この記事では、subtotal関数の使い方・書式を説明するとともに subtotal関数をオートフィルタと組み合わせる方法 subtotal関数を集計に使う方法 subtotal関数を使うときの注意点 subtotal関数を使う代わりにピボットテーブルで集計したほうがいい場合とは? なども説明していきます。
弥生会計に銀行入出金のインポート用CSVファイルを作成するエクセルマクロ「銀行入出金データ」から弥生会計への「インポート用CSVデータ」を作成するエクセルマクロ「importz」を作成しました。 会計事務所で、お客様から銀 ...
vlookup関数を使うと、 エクセルの動きが遅くなるからイヤ。 という人が多いです。 でも、多くの場合、 「vlookup関数の使い方が悪い」から 動きが遅くなるだけなのです。 vlookup関数が遅いのはなぜ? vlookup関数のイメージは、 単語帳をぱらぱらとめくって、 該当する単語が書かれているページを探す、 というものです。 ここで、 ちょっとイメージして欲しいのですが、 単語帳は、100,000ページある 単語帳のページの並びには、規則性がない という状況で、 「excel」という単語を探して、と言われたら、どうでしょう? どのページに「excel」という単語が書かれているか 全くわかりませんから、 単語帳を 最初から最後のページまで、 1ページ、1ページめくって、 どの単語が書かれているページかを 調べていかないといけないわけです。 とても大変な、時間がかかる作業だ、 とい
例えば、次のように、 大項目→小項目と入力させたいような場合には、 複数のプルダウンリストが連動すると便利です。 こういう場合、 多くのホームページで、 「名前定義とindirect関数」を組み合わせた方法が紹介されていますが、 今回は、それとは違う方法を紹介したいと思います。 エクセルで複数のプルダウンリストを連動させる なお、今回は、 話を簡単にするために、 小項目のプルダウンリストは、項目数を「固定」する (=余計な空白が出てくる可能性がある) という前提で話をしていきます。 今回は、 E列~M列までの合計9列分を、 小項目のプルダウンリストとして 表示させるようにしたいと思います。 大項目のプルダウンリストは適当に作る 大項目のプルダウンリストは、 D2セル~D5セルを使って表示させます。 これは、 前の記事で書いた方法がそのまま使えますので、 作り方は省略します。 小項目のプルダ
このページを最初にブックマークしてみませんか?
『経理・会計事務所向けエクセルスピードアップ講座』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く