和風スパゲティのレシピ

日本語でコーディングするExcelVBA

4/2(土)20:00~ VBA勉強会「脱初心者!メンテナンスしやすいマクロの作り方」

4月2日(土) 20:00~ Zoom勉強会に登壇します。「脱初心者!メンテナンスしやすいマクロの作り方」と題し、VBEの基本操作、シートの指定方法、変数(説明変数)、定数(Enum)をテーマに講演します。聞き専OKですのでお気軽にご参加ください。

Dictionaryで要素ごとのデータ数をカウントする

Dictionaryオブジェクトを使って、要素ごとのデータ数をカウントする方法を解説します。Excel上では、要素ごとのCOUNTIFや、ピボットテーブルで行う処理ですが、VBAの内部で行う場合は Dictionaryを使うと、簡単に書けて処理速度も高速です。

Dictionaryで重複のないリストを作る

Dictionaryオブジェクトを使って、重複のないリストを作成する方法を解説します。リストを処理するコードは、Dictionaryを使うと簡潔で処理速度も高速になります。Dictionaryの入り口としてもいい題材なので、ぜひ覚えていってください。

選択セルの値をGoogleで検索するマクロ

選択セルの値をググるマクロを紹介します。かなり便利なマクロで、社名⇒企業サイト、住所⇒GoogleMAPを開くことができ、データ内に出てくる専門用語を調べることもできます。ショートカットキーにセットしてぜひ使ってください。

1/29(土)20:00~ VBA勉強会(Zoom)「ライトニングトーク」

1/29(土)20:00~ Zoom勉強会に登壇します。今回はライトニングトークということで、りゅうりゅうさん・ひろさん・信金さん・私和風スパゲティの4名でスキル披露会を開催します。無言OK聞き専OKですのでお気軽にご参加ください。

簡単で便利なクラスを作って学ぶクラスモジュール入門

VBAの学習に難敵として立ちはだかるのがクラスモジュールです。これは目的がわからないことが主な原因なのですが、クラスモジュールの目的はズバリ「コードの整理整頓」です。簡単で便利なクラスを作って勉強してみましょう。

明けましておめでとうございます

明けましておめでとうございます!2021年は、VBA勉強会「プロシージャ」や50日連続投稿をはじめ、大変お世話になりました。2022年も頑張って更新していきたいと思いますので、今年もどうぞよろしくお願いいたします。

プロシージャ[Sub/Function]の使い方入門

マクロを作るSubやFunctionを、正確にはSubプロシージャ/Functionプロシージャと呼びます。このプロシージャは「使いどころがわからない」と悩む人が多く、そんな方々へ向けて、プロシージャ分割の基礎と使いどころを解説いたします。

12/11(土)20:00~ VBA勉強会(Zoom)「Sub/Functionの使い方入門!」

12/11(土)20:00~ Zoom勉強会に登壇します。「Sub/Functionの使い方入門!」と題し、Functionを一度も使ったことがない方や、1マクロ1Subで作っている方向けの入門解説を行います。無言OK聞き専OKですのでお気軽にご参加ください。

ブログタイトル「和風スパゲティ」の由来

このブログを始めて2年が経過しました。いつもご愛読いただいている皆様ありがとうございます!節目くらいは雑談ということで、ブログ生誕記念に「和風スパゲティのレシピ」というブログタイトルの由来を書いておこうと思います。

50日連続投稿達成!良かったこと悪かったこと

この記事をもって、ブログの連続投稿が50日になりました。さすがに50日お付き合いいただいた方はいないと思いますが、3日でも4日でもお付き合いいただいた皆様ありがとうございます(´∀`)ここで区切りにして感想を書いておこうと思います。

Findは遅くて非表示に弱くてユーザー操作の影響を受ける

検索によく用いられるFindメソッドさんですが、実は危なくて遅い地雷メソッドです。非表示セルを見つけられない、ユーザーと設定を共有する、MATCH関数より十数倍レベルで遅い、の三重苦なので、なるべく使わないようにしましょう。

VBAでインクリメント演算子(++i)を使う方法

インクリメント演算子とは、i = i + 1 というコードを ++ i のように短縮表現するための演算子です。他言語経験者の方にはおなじみの書き方ですが、残念ながらVBAにはインクリメント演算子がありませんので、自作関数で代用しましょう。

ウィンドウ枠固定と印刷タイトルを同時設定するマクロ

シート最上部を常に表示する設定は、ディスプレイ用の「ウィンドウ枠の固定」と、印刷用の「印刷タイトル」の2つの設定があります。この2つの設定は同じ位置に設定することが多いので、同時設定するショートカットを作ってしまいましょう。

上下左右の印刷余白を0にするマクロ

上下左右の印刷余白を0にするマクロを紹介します。PageSetupオブジェクトに○○Marginというプロパティが6つあるので、それをすべて0にするだけです。マウスだと20回以上クリックが必要な作業をワンクリックにできるのはとても便利ですね。

プログラマ向けピアノ楽譜の読み方

このブログの記事数が150を突破しました。いつもご愛読いただきありがとうございます。50記事に1回くらいは雑談でも書こうかと思っていますが、別に節目でもないので普通に雑談を始めたいと思います。お暇な方はお付き合いください。

アクティブブックの保存フォルダを開くマクロ

現在のブックが保存されているフォルダを、エクスプローラーで開くマクロを紹介します。「今作業してるファイルと同じフォルダにあるファイルを開きたい」をワンクリックでやるためのマクロですね。Shell関数1行で簡単に実装できます。

マジックナンバーを減らす方法6選

マジックナンバーという用語をご存知でしょうか?Cells(R, 4) = Cells(R, 2) * Cells(R, 3)など、直接入力された数値を指す用語です。この3つの数値は、改修時の書き換えが面倒かつ危険でしかも読みづらいので、なくさなければいけない数字です。

指定のフォルダをエクスプローラーで開く

指定のフォルダをエクスプローラーで開く方法を紹介します。この処理は、Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocusで実装できます。局所的な使い方のコードですので、おまじないだと思って使って構いません。

個人用マクロブックの作り方と使い方3選

「いつでも使えるコード」を書くのに便利な個人用マクロブックの作り方・使い方を紹介します。「マクロをツールバーやショートカットキーにセット」「汎用関数集(ライブラリ)の保管場所」「コードテンプレート置き場」が3大活用法です。

Function名に句読点を使うとシート上で呼べなくなる

Functionプロシージャの名前に句読点を使用すると、ワークシート上でユーザー定義関数として呼び出せなくなります。読点「、」とカンマ「,」、句点「。」とピリオド「.」が自動変換されることが原因のように思えますが定かではありません。

Worksheet.Selectと.Activateの違い

Worksheetオブジェクトから呼び出す場合の、SelectメソッドとActivateメソッドの違いを説明します。どちらもアクティブシートを設定/変更できるメソッドですが、単独のシート選択はActivate、複数のシート選択はSelectがそれぞれ得意です。

すべてのシートをA1セル選択状態にするマクロ

すべてのシートをA1セル選択状態にするマクロを紹介します。For Eachで全シートをActivateし、Range("A1").Selectをして回るだけの簡単なコードですが、ウィンドウ枠の固定に対応する必要があるため、ActiveWindow.ScrollRow = 1も実行します。

特定のセル範囲内にある図形を処理/選択する

Shapeの位置がセル範囲内にあるかどうかを判定して、その範囲内のShapeを処理する方法を解説します。TopLeftCell/BottomRightCellでShapeを含む最小のセル範囲を取得し、それとセル範囲のIntersectが一致するかを判定して処理を行います。

すべての図形(オブジェクト)を選択するマクロ

すべての図形オブジェクト(Shape)を選択するマクロを紹介します。すべての図形を削除したり、一括で移動したりするときに便利なマクロですね。この処理には専用のメソッド「Shapes.SelectAll」が用意されているため、コードはとても簡単です。

すべての図形(オブジェクト)を削除する

すべての図形オブジェクトを一括で削除するコードを紹介します。すべて削除したい場合はActiveSheet.DrawingObjects.Deleteで簡単に実行できます。グラフだけを残すような場合は、ForEachでひとつずつShape.Typeを判定して削除します。

Shapesにはドロップダウンリストの▼が含まれる

For Eachで全図形を処理したとき変な動きをする、Shapes.Countを数えるとなぜか1個多い、入力規則の▼が消えてリストから選べない、あたりにお困りの方は、Shapesがドロップダウンリストの▼を含む罠に落ちていないかご確認ください。

Cells(R, ○)←○を入力するスピードを極めろ!

Cells(R, ○)←VBAをやっている限り入力し続けることになるこのコードですが、この○を普段どうやって入力していますか?個数→P列→16という対応をいかに素早く考えるかがカギになるこの処理ですが、実はそれ以上に大事なことがあります。

個人用マクロブックと普通のブックの違い

汎用関数・マクロを保存する方法として「個人用マクロブック」があります。このブックは一度作ると以降はExcelの起動時に裏で開かれるのですが、実はこれを普通のブックでやることもできます。その時の細かい違いを解説します。

選択エリアの0値を置換で消去するマクロ

値が「0」のセルを置換でクリアするマクロを紹介します。単純な処理ですのでコードも単純で、Selection.Replace 0, "", lookat:=xlWhole1行でOKです。ただし、置換はChangeイベントと相性が悪いので.EnableEvents = Falseを挟んで実行します。