VBA_amateur_writer_hiro

周囲にVBAを使う人がいないなかwebで勉強しながら書いてきました。私が日々書いている…

VBA_amateur_writer_hiro

周囲にVBAを使う人がいないなかwebで勉強しながら書いてきました。私が日々書いているVBAをご紹介したいと思います。

最近の記事

ファイルの作成日時と更新日時が微妙に違うので揃えたいときに使うvba

はじめに日々仕事でvbaを書いているhiroです。毎日お疲れ様です。 業務で相手先から大量のファイルを受け取りました。そうするとまず始めるのは前回紹介したプロシージャでファイル名とフルパスをすべて取得することです。 そしてフォルダ名やファイル名から必要なファイルを見つけ出し、前回紹介したプロシージャのうちの「ファイル情報を取得するプロシージャ」を使ってファイル情報を取得します。 しかし、そもそもファイル名が同じファイルがたくさんあります。どれが最新のファイルなのか、どれが正

    • 一つのフォルダのなかのすべてのフォルダ名とフルパスを取得して配列にするには?

      手作業でフルパスを取得する日々仕事でvbaを書いているhiroです。毎日お疲れ様です。 最近も新たなプロシージャをつくったのでご紹介します。標記のとおり、一つのフォルダのなかのすべてのフォルダ名とフルパスを取得するものです。普段は、as/r というファイラー(windowsのエクスプローラーのようなもの)を使っており、このなかの「名前をクリップボードにコピー」という機能を使って、簡単にすべてのフォルダ名とフルパスを取得できます。正直、この機能があるから、as/r を使っており

      • 電卓が好きなクライアントのためのvba

        日々仕事でvbaを書いているhiroです。毎日お疲れ様です。 配列で何か書こうかなと自分が過去に書いたプロシージャを眺めていたら、最近使わないけど、ちょっと便利かもと思うものを掘り起こしました。 それは、私の相手先となる業界によくいる、「足し算して100%にならないことに対して怒る人たち」をかわすためのプロシージャです。 例えば、こんな表があるとします。 比率の部分は例えばaの箇所は 655/4208=15.6% と計算して表記しているわけですが、実際は割り切れないので 1

        • minが効かない その2

          仕事でVBAを日々書いているhiroです。ご覧いただきありがとうございます。今日は簡単に。 先日、以下の記事を書きました。 それで解決方法として以下のコードを書きました。 上記のコードを作っているプロシージャの中で使ったのですが、なぜか戻り値が0になります。日付なので0になるはずがないのです。2019年○月○日になるので0はない。 代入する配列にも0はないのです。まったく理由がわかりません。 それで別のモジュールでテストをやってみたら、ちゃんと戻り値がでてきます。つまり、

        ファイルの作成日時と更新日時が微妙に違うので揃えたいときに使うvba

          日本的な表作成のためのセル結合

          vbaを業務で日々書いているhiroです。今日は、私のいるドメスティックな業界で求められるセル結合のためのvbaコードをご紹介したいと思います。 twitterとかでみると、神エクセルとか馬鹿にされるセル結合ですが、これが求められるのは、紙で出力して見やすいかどうかで相手の能力を判断する、という昭和的な仕事の仕方だと思います。 それは古い!と怒るのは簡単ですが、確かに同じ文字列が並ぶデータ形式をそのまま表にしては相手は見てくれないのも事実。やはり読みやすくはない。社内、特に同

          日本的な表作成のためのセル結合

          関数を使わずに最小値・最大値を求める

          はじめに先日「minが効かない」という投稿をして、そのときはsmall関数で乗り切ったことを書きました。でも今回は、ワークシート関数を使わずに最大値・最小値を求める割と単純なvbaコードができたのでご紹介します。 最小値を求めるvbaコードこれです。 Function funcmin(ByVal arr As Variant) As Long'funcmin:1次元の配列で、最小値を求める longDim a As Long, b As Long, c As Long,

          関数を使わずに最小値・最大値を求める

          配列問題その2:2次元配列を1次元に変換する

          はじめに前々回の「配列問題その1:如何にして0を省略するか https://note.com/vba_writer_hiro/n/nc596c8469c91  」にハートがまったくつかなくてちょっとがっかりしているhiroです。ですが、NOTEを始めたばかりなので頑張って投稿していきたいと思います。 今回は、タイトルのとおり、2次元配列を1次元配列に変換する問題です。それってなんの需要があるんだ?と思う方もいると思いますが、前回の0省略など、2次元のままで0を省略しようとする

          配列問題その2:2次元配列を1次元に変換する

          min が効かない

          日付の配列arrをつくり、最も早い日付を求めようと application.worksheetfunction.min(arr) と書いて何度やっても、0が返されてしまいます。配列の要素数は数百オーダー。 同じく最も遅い日付を求める application.worksheetfunction.max(arr) はちゃんとした答えが返ってきます。 どういうことなんでしょう? しようがないから、small関数を使って並べ替えをして、最も早い日付は1番目の値、ということで切り抜け

          配列問題その1:如何にして0を省略するか

          実際に私が毎日どんなVBAを書いているか、ご紹介したいと思います。 ワークシート上のセルを読み込んで、1次元の配列をつくったとします。しかし、それには多数の不要な数値があります。仮に不要な数値は「0」だとしましょう。今回の問題は、0をどうやって省略して必要な数値だけ取り出すか、の問題です。 ワークシート関数で省略すればいい?VBAを使わずに、ワークシートの関数でこの問題を解決しようとする場合、私はsmallを使っていました。 例えば以下のような考え方です。数値はすべてプラス

          配列問題その1:如何にして0を省略するか

          自己紹介:私のVBAの書き方

          はじめまして。周囲にVBAを書ける人がいない環境で、エクセルと格闘しているうちに、VBAが書けるようになりました。ここでは、私の独自のVBAの書き方についてご紹介します。そして私がどう考えてVBAを書いているかを解説する記事を投稿していきたいと思います。 よくわからないことは覚えないvbaに関する本やwebをみると、「コレクション」「オブジェクト」「ステートメント」「クラス」「private sub」などの言葉が並びます。プログラミング言語に精通している人はすぐに理解するの

          自己紹介:私のVBAの書き方