2018-07-01から1ヶ月間の記事一覧

指定日から直近の翌営業日を求める

昨日は、指定月の最終金曜日を求める関数を紹介しました。infoment.hatenablog.comこの時の勉強会で、最後にこんな質問が出ました。「毎月20日になったら、MsgBox でメッセージを出したい」詳細は、次の通りです。 アドインに組み込むことで、特定の日付にメ…

7月の最後の金曜日の求め方

職場の勉強会に、こんなテーマが寄せられました。 指定月の最終金曜日の日付を知りたい最終金曜日に月次処理を行う業務があって、その日付を Excel で求められないか?というものでした。早速二つのグループに分かれて、メンバーで討議しながらその場でマク…

ツール番号の置換 の続きの続き

昨日は、加工プログラム内のツール番号を置換する関数について、一旦作成したものに例外処理(PTネジを除外する)を付加してみました。infoment.hatenablog.com早速、依頼者に報告です。「PTネジを除外できました」 「お~!!ありがとうございます・・・あ…

ツール番号の置換 の続き

昨日は、加工プログラム内のツール番号を置換する関数を作成した話を紹介しました。infoment.hatenablog.com何パターンか試してみて、作成した関数が問題なく動作することを確認しました。やれやれ、これで何とかなりそうだ。 「こんな感じでどうです?」 「…

ツール番号の置換

先日、ある相談を受けました。工作機械に使用する加工プログラムで、ツール番号(以降「T番号」)を簡単に置換できないか、というものです。 ここでいう「ツール」とは、孔を明けたりネジを立てたり、面を削ったりする刃物を意味しています。 工作機械によ…

ある特殊な条件下での「日本語のみ全角化」

2年ほど前の事案を、思い出しながら再現。あるリストに入力された文字列について、入力ルールが無かったため、全角と半角が 無秩序に混在していました。そこで、以下のルールで入力内容を編集することにしました。 日本語は全て全角化 日本語以外は全て半角…

シートの表示/非表示をもっと簡単に の続きの続き

昨日はシートの表示/非表示を、チェックボックスを用いてコントロールする方法を 紹介しました。 infoment.hatenablog.comこのテーマについては更に、はたけさんから Worksheet の Change イベントを用いた 別解を紹介いただきました。 www.excelspeedup.co…

シートの表示/非表示をもっと簡単に の続き

昨日はシートの表示/非表示を、リストボックスを用いてコントロールする方法を 紹介しました。infoment.hatenablog.comこれについてはけたさんから、クラスモジュールによるコントロールの参考記事を 紹介していただきました。blog.goo.ne.jpそこで今日は、…

シートの表示/非表示をもっと簡単に

先日 Excel について、ある相談を受けました。 マクロを用いてシートの表示/非表示を行う際、もっと簡単にできないか?というものです。その時点では、こんな感じでした。各シートに対応するチェックボックスが、先頭シートに配置されています。 図中「札幌…

二次元配列の一部を一次元配列として抽出する関数

複数行複数列の表を、丸ごと二次元配列に格納することがあります。 さらに、そのまま使用することもあれば、行列内の指定行または指定列のみに対し、何某かの処理をすることもあります。そこで特定の行または列を、新たに一次元配列として抽出する関数を作成…

不連続な範囲の値を取得 の続きの続き

昨日は或る要望の追加仕様に応え、飛び石のように不連続に散らばった範囲について、その値を二次元配列として集約する関数を作成しました。infoment.hatenablog.comやれやれ、今度こそ、これで何とかなりそうだ。 「こんな感じでどうです?」 「ありがとうご…

不連続な範囲の値を取得 の続き

昨日は或る要望に応え、飛び石のように不連続に散らばった範囲について、その値を取得(集約)する関数を作成してみました。infoment.hatenablog.comやれやれ、これで何とかなりそうだ。 そう思ったのも束の間、要望者から新たな要件が告げられたのでした。…

不連続な範囲の値を取得

連続しない複数の範囲から、値を取得(集約)したいという要望がありました。 例えば、こんな感じです。数字が入力されたセルが、値の集約対象範囲です。同範囲を選択した状態でコピーしようとすると、エラーになります。今は便宜上、対象範囲の値を数字にし…

使い捨てのマクロ

私の場合、Excel でマクロを作成するケースは4つに大別されます。 中~大規模な処理の自動化を行うサブプロシージャの作成 再利用できる処理をユーザー定義関数化 ちょっとした処理をマクロで行う その他の特殊なケース 特に「3. 」の場合、その他のケース…

範囲の中の行または列でループ

ある指定範囲の中の、ある指定列について処理したい。例えば、こんな感じです。Set myRng = Range("B2:F10") で myRng に指定範囲をセットし、何かの都合でその3列目について処理したい。気持ちとしては、こんな感じで上手く動いて欲しいところです。 Sub t…

テーブルのラベルを指定して辞書を作成

例えば以下のような表で、品名と価格を連想配列(以降「辞書」)化したい 場合があります。この辞書では、「りんご」というキーを与えると、「100」というアイテムを返します。 この「辞書を作成する処理」は、個人的に結構な頻度で多用しています。そこで、…

「中途半端な辞書になってしまう」事件

先日 Excel について、ある調査を依頼されました。 【価格表シート】の商品コードに紐づく価格を、上手く転記できないというのです。 そこで確認したところ、まず、元となったマクロは過去に私が作成したものでした。 ※実際のマクロから、一部エッセンスだけ…

次の「13日の金曜日」

うっかりしていましたが昨日(2018/7/13)は、13日の金曜日でした。 商品の納入日に「大安」を選ばれる法人や個人は、勤め先のお客様に限って言えば、 今でも偶(たま~)にいらっしゃいます。そのことから考えると、13日の金曜日を 避けてという要望も、今後…

配列の貼り付け

様々なサイトなどで紹介されているとおり、配列を使った処理はとても高速です。サンプルとして、10000行に入力された数値を日付に変換する時間を計ってみました。 ↓ セル毎に、一つずつ上書きする場合 Sub Sample1() Dim r As Range ' セル毎に上書き。 For …

列の表示/非表示をコントロール(続き)

こちら ↓ で作成したユーザーフォームについて、「列のコピーに使用できないか」というコメントがありました。infoment.hatenablog.com非表示列をそのままコピーすると貼り付け先でも非表示のままであるため、一手間必要になります。そこでチェックボックス…

列の表示/非表示をコントロール

こちらに寄せられたご意見に着想を得て、このようなものを作成してみました。↓ コメントをいただいたブログ infoment.hatenablog.com↓ 作ってみた Private Sub CommandButton1_Click() ' 閉じるボタン Unload Me End Sub Private Sub CommandButton2_Click()…

目的の行以外を非表示にする方法

目的の行以外を、マクロで非表示にする方法を考えてみました。 例えばA~L列までのうち、B列とE列とI列だけを残し、他の列を非表示にしたい 場合について。 マクロの記録などを用いると簡単に、このようなコードを書くことが出来ます。 Sub ColumnHide(…

日本史と VBA(家康から慶喜まで)

昨日は、日本史における Excel の用例として、出来事と関係者の年齢表を紹介しました。infoment.hatenablog.comそういえば自分は、江戸幕府の将軍を全員知らないかも。 そこで今度は、歴代将軍の表を作成してみました。これは、非常にわかりづらいですね。誕…

日本史と VBA (失敗談)

子供の学年が上がるに連れ、日本史を習うようになりました。 一方、自身の学生時代を振り返ってみましたが、無味乾燥な年代暗記が苦手で、成績も今一つでした。そこで思いついたのが、以下の切り口による歴史の理解です。 歴史的な出来事が起きたその時、主…

リストの絞り込み(ユーザーフォーム)

ユーザーフォーム内に表示したリストボックスの中から、目的に合致するものを選択して処理することがあります。 顧客名 商品名 商品のコード 部署名や営業所名 などなど 選択肢が少ない内は選びやすいのですが、多くなってくると、スクロールしたり探したり…

KFCは何列目か

N列は、Aから数えて何列目か? Nぐらいであればアルファベットの歌を歌いながら、指折り数えることもできます。 しかし、例えばKFC列の列番号を知りたい場合、指折り数えては間に合いません。これがワークシート上ならば、Column 関数で簡単に列番号を…

「そこにあるのに拾えない」事件

先日 Excel について、ある調査を依頼されました。 セル内に記載された品名を、正しく取得できないというのです。このマクロは、例えば 、もし A1 に「六角穴付きボルト」と入力されているならば 「在庫数を確認してください。」 のメッセージを表示する、と…

特定の行を削除 または 残す

ある表内の特定の列について、同列が空欄以外の場合、その行を削除したいという処理がありました。シート上で行を削除すると、気づかないうちに、余計なものまで消す恐れがあります。 そこで、マクロ内で全て加工することにしました。まず、配列の次元数を取…

「やたらと処理に時間がかかる」事件

先日 Excel について、ある調査を依頼されました。 マクロを用いた処理に、やたら時間がかかるというのです。 Sub Sample() Dim Tb As ListObject Dim r As Range Set Tb = ActiveSheet.ListObjects(1) For Each r In Tb.DataBodyRange.Columns(1).Cells rを…

〇×反転

〇なら×に、×なら〇に、オセロのように反転させたいことがあります。 ユーザー定義関数を作ってみました。 Function CrossingOver(str As String) As String Select Case str Case "〇" CrossingOver = "×" Case "×" CrossingOver = "〇" End Select End Fun…