2022-07-01から1ヶ月間の記事一覧
仕事で使っているExcelマクロにゼロ埋めする処理があったのだが、その書き方が酷いものだったので記しておこう。 処理の内容は、数値を、4桁に満たない数値の場合はゼロ埋めして、4桁の文字列にするというものである。 'ゼロ埋めの悪い書き方 Dim disp As St…
ここ1ヶ月くらい不眠に悩んでいた。ぐっすり眠れず、仕事を休むほどではないが、なんとなく体調が悪い日が多かった。 枕を替えたり、パジャマを替えたり、室温を調整したり、いろいろ試したが改善しなかった。 しかし、ある行為により、ぐっすり眠れるように…
VBAでワークシートを指定する方法は3つある。 まず1つ目は、シートネームで指定する方法である。例えば、 ThisWorkbook.Worksheets("cial").Range("A1").Value = "aaa" これは"cial"という名前のシートのA1セルに"aaa"と記入するコードになる。 2つ目は、シ…
コードの先頭に Option Explicit を必ず書いておこう。これを書いておけば、変数の宣言が強制される。つまり、宣言していない変数は使えなくなる。 なぜ、変数の宣言を強制するべきなのかというと、もし宣言を強制していないと、スペルミスをしたときに新た…
VBAで作ったマクロの実行時間を測る方法は簡単だ。 まず、Timer関数を使って開始時刻を取得する。 次に、同じくTimer関数を使って終了時刻を取得する。 終了時刻から開始時刻を引けば実行時間がわかる。 Dim start As Double Dim finish As Double start = T…
はじめに FizzBuzzを題材にしてExcel VBAを学んでいきます。 FizzBuzzとは? 英語圏でよく遊ばれている言葉ゲームです。ひとりずつ順番に1から数字を言っていきます。ただし、3の倍数のときは、数字の代わりにFizz、5の倍数のときはBuzz、3の倍数かつ5の倍数…
問題 アルファベットと数字で構成された文字列がある。文字列に含まれる数字の和を返す関数 Function SumNumFromStr(tgt As String) As Longを作れ。(例)SumNumFromStr("aaa123") → 6SumNumFromStr("a1b3c5") → 9SumNumFromStr("ssss") → 0SumNumFromStr("") …
セルに記入されたフルパスからファイル名のみを取得したい場合がある。 よくあるやり方は、InStrRev()とMid()を使う方法だ。 Function GetFileName(tgtPath As String) As String Dim pos As Long pos = InStrRev(tgtPath, "\") GetFileName = Mid(tgtPath, …
商品のコード番号のようなものは桁数が決まっていることがほとんどだ。だから、ユーザーが入力したときに、全て数字であり、かつ、正しい桁数か自動的にチェックする機能はつけるべきだ。 このときにやりがちなのが、Len()とIsNumeric()で判別する方法だ。 …
変更不可のデータや数式が入っているのでシートを編集禁止にしたいが、入力欄など一部のセルについてだけ編集を可能にしたい場合があるだろう。 よくある誤りが、単純に[校閲]タブの[保護]グループにある[シートの保護]をONにしてしまう方法だ。この場合、全…