アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

ExcelVBA

ExcelVBA入門 #12:繰り返し処理を極める

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 以前、「For」を使った繰り返し構文について書きましたが、 ExcelVBA入門 #4:エンドレスエイトに学ぶ繰り返し処理 - アナログCPU:5108843109 実は他にも同じ処理を繰り返すための書…

ExcelVBA入門 #11:配列を使ってみる

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109今回は「配列」について。 そもそも「配列」って何? まず、変数ってあるじゃないですか。データを入れる箱。 ExcelVBA入門 #3:プログラミングには必須!変数ってなんぞ? - アナログ…

ReDimで配列サイズを再定義するための6つの掟

キャッチーなタイトルにしようとして失敗した感 PHPなんかに慣れちゃうと正直めちゃくちゃめんどくさく感じてくるVBAの配列。 中でも一番つらいのがReDim周辺。特にシビアな処理でもない限り 「大き目のサイズを最初に指定しておけばいいか…」とかやっちゃう…

自作アドインの作り方

たまに一部忘れるので自分のためにもメモ。 Excelでの作業が多いなら、作り方使い方を覚えると非常に便利です。 そもそもアドインとは? ひとことで言うと「拡張機能」です。普通にマクロを作るとそのブックでのみ有効ですが、 アドイン化することで、新規ブ…

シートをコピーして名前を変更するプロシージャ

サンプルには記載していませんが、 シート操作はエラーが起きやすいので、必要に応じてエラー処理が必要になります。左からA,B,Cとシートが並んでいるとき コピー元としてシートB、コピーしたシートに付ける名前として「D」を引数にして このサンプルを実行…

VBAのパフォーマンス調査に関する報告書

前の会社で書いた報告書を見つけたので、サクッとネットの海へ放流。バリバリ報告書っぽい体裁になってたので、ふんわり意訳版。

ある文字列について、特定文字以外が含まれている場合に取り除く関数

正規表現を使わない書き方。 例えば「ある文字列について、半角英数以外の文字を削除したい」という場合などに。 '* '* StrFilter '* ある文字列について、特定文字以外が含まれている場合に取り除く(もしくは置換する)関数 '* '* [in] sStr 対象文字列 '*…

ExcelVBA入門 #10:定数を定義することとそのメリット

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 はじめに 久しぶりの記事追加です。 今回は、地味ながらもプログラミング言語問わずの人気者、「定数」について。 定数って何? もしかしたら、中学か高校かの数学の時間に聞いたこと…

整数かどうか、またその範囲をチェックする関数

整数かどうかを一発チェックしてくれる関数を探していたのですが見つからず。 …えっ、本当にない…? いやあるでしょ…? しかし見つからなかったので、とりあえず作りました。誰か知ってたら教えてください。せっかくなので範囲チェックもやってくれるオマケ…

ブックを開くとき/閉じるときの処理

普通どおり標準モジュールにマクロを作るとき、プロシージャ名を 「Auto_Open」にすればブックを開いたとき、 「Auto_Close」にすれば閉じるときに そのプロシージャが起動します。「ブックを開いたら今日のおみくじを表示」みたいなお遊びから 「閉じる前に…

シートの存在を調べて存在しなければ新しいシートを作成

頻繁に使うロジックなので関数化してみました。 任意の名称を持つシートが存在するかどうか調べる 上記で存在しなければその名称で作成(もしくはあるシートをコピーしてその名称にする) ' 呼び出し例(1) Dim wsSheet As Worksheet Set wsSheet = SelectShe…

【ネタ】手作りソート

何やら「A1:A10に入力された数値データを昇順に並び変えてB1:B10に格納せよ」という学校の課題的なお題を頂いたので作ってみました。 もちろんソート機能は使用禁止です。 (つまり実務で使う意味は皆無のネタコードです) Option Explicit 'ソート範囲 Cons…

ワークシートの最大行数、最大列数を取得

最大行数は Rows.Count 最大列数は Columns.Count で取得できます。 ' 使用例(1):「Sheet1」シートの全セルのデータや書式設定を削除 With ThisWorkbook.Sheets("Sheet1") Range(Cells(1, 1), Cells(Rows.Count, Columns.Count)).Clear End With ' 使用例(2…

VBAでセルの結合

セルを結合するには、MeageCellsプロパティを用います。 ' A1~C3のセルを結合 Range("A1:C3").MergeCells = True '現在選択している範囲を結合 Selection.MergeCells = True ここで、結合したいセルのうち2つ以上にデータが入っていると、警告が表示されま…

CSVを読み込み二次元配列に格納するプロシージャ・改

前にも同じようなのを作って使っていたんですが、 CSVにカンマや改行が含まれていると機能しないとかいうクソっぷりだったので、 大幅に改修しました。 あと、UTF-8のCSVに対応したい事案があったのでそれも合わせて。 (改修というか別物に近い) 参考:UTF…

配列のサイズを宣言する前にサイズを知りたかった

だいぶ意味不明なタイトルですが。VBAではサイズを指定せずに配列を宣言できます。 (指定して宣言することもできます) ' 文字列が入る配列(サイズ不明) Dim sArray() As String その場合、後からサイズを指定できます。 ' 文字列が入る配列(サイズ不明…

駅メモのフレガチャ統計ツールをExcelで作る

honey8823.hateblo.jpここでフレンドガチャの出現率統計をなんとなく取ってみてるわけですが、 それに使っている手作りツール。見た目こんなの。「+」のところをクリックすると、対応した年月・アイテムのところが1増えます。 (もちろんそれに応じて割合と…

ランダム文字列を生成する関数

お仕事で 「8文字のランダム文字列をいっぱい生成する」 という作業があったのでExcelVBAでマクロ組んで片付けました。参考:VBAでランダムな文字列を生成する関数 - スイナシア http://suin.asia/2008/12/15/vba-random-letters.html…参考というか丸パクリ…

現在日時を入力してアクティブセルを右に移動するマクロ

すんげープチネタですが。手動でExcelにちょっとした記録を取る時、 「日時 値1 値2 備考」 みたいな形式になることが多いです。日時は「Ctrl + ;」「Ctrl + :」で入力できますが、それすら省略したい場合は以下のマクロを仕込みます。 Sub insertDateTime()…

ExcelVBA入門 #9:パブリック?プライベート?プロシージャの使い方!

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 はじめに 今回は、最初から何の断りもなく使っていた 「Public Sub test()」~「End Sub」について。この二つで囲まれた部分を「プロシージャ」といいます。今までもしれっと例に出し…

ExcelVBA入門 #8:ググらずマニュアル見ずスピード解決する方法

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 はじめに 「こういうとき、どう書けばいいの?」となったとき。 ネットで調べれば大抵答えが出ます。 マニュアルや参考書を見てもよいでしょう。 しかし、ちょっとしたことでそれより…

ExcelVBA入門 #7:デバッグのコツ

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109今回から応用編です。 はじめに エラーが出たときや想定外の結果になったとき… サンプルのような数行のプログラムであれば、コードをよく見直せば間違いに気付くのも簡単です。 しかし…

今度こそ覚えるOffset

作るモノの仕様によっては絶対に覚えておいたら楽になるOffsetなのですが、いかんせん今までOffsetを使うような機会があまりなく たまに使うと毎回調べてしまっているのでいい加減理解しようとしてみました。 文法 Rangeオブジェクト.Offset(行方向の移動値,…

イミディエイトウインドウの使い方と挙動

参考:イディミエイト・ウォッチ・ローカルウィンドウ - Excelでお仕事! http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040_025.htmlついさっきまで、イミディエイトウインドウについては「Debug.Printで指定した内容を出力することができるテキスト…

ExcelVBA入門 #6:ここまでの総集編

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 問題 今回は以下の仕様のものを作ります。できる人はそれ以降読まなくてOK。 (Excelワークシート関数は禁止) Sheet1に、「年」「月」「日」「金額」の4列がある 1行目はタイトル行…

ExcelVBA入門 #5:もし高校野球の女子マネージャーがドラッカーの『マネ

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 練習問題:これが分かる・できる人は以降読まなくても大丈夫 Ifを使った分岐処理が書ける(If, ElseIf, Else) Ifに用いる条件式について、複数条件の「かつ」「または」を使い分けて…

ExcelVBA入門 #4:エンドレスエイトに学ぶ繰り返し処理

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 練習問題:これが分かる・できる人は以降読まなくても大丈夫 Forを使った繰り返し処理が書ける 繰り返し回数に応じてセル位置や内容を変えた処理が書ける はじめに 今回も変数と同じ…

ExcelVBA入門 #3:プログラミングには必須!変数ってなんぞ?

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 練習問題:これが分かる・できる人は以降読まなくても大丈夫 変数が宣言できる 変数の型がなんとなくわかる 変数に値を代入したりそれを使ったりできる コード中にコメントが書ける …

変数と型

変数宣言の書き方 この記事では配列については扱っていません。ぐぐってください。 (いずれここでも書きたい)VBAでは、 Dim 変数名 As 型 という形で宣言を行います。 「As 型」は省略することも可能です。(後述しますが非推奨)例をいくつか挙げると、 D…

ExcelVBA入門 #2:Hello VBA World!!

シリーズもくじはこちら ExcelVBA入門 もくじ - アナログCPU:5108843109 練習問題:これが分かる・できる人は以降読まなくても大丈夫 特定のブックの特定のシートの特定のセルにメッセージを出力するプログラムが書ける はじめに というわけでHelloWorld後…