忍者ブログ

Mid関数で文字を切り出すマクロ(ランチャー3)

2021年03月20日
前回、文頭および文末の文字を削除するマクロを作った。

ユーザーフォームで削除対象の文字を確認しながら
上下ボタンで文字数を設定できるUIが便利だった。

いつもMid関数で何文字目か調べるのがめんどくさいので、
Midで抜き出すバージョンを作ってみた。

基本的な作りは前回と全く同じ。

Leftの代わりにMidでSample文字を表示する仕様に変更。
文字数を指定しないとすぐに表示できないので、
文字数のデフォルト値を10に設定した。
マクロで文字を確認してMid関数を使う方が多そう。


ダウンロード


プロパティは以下のとおり。

オブジェクト名:strMidForm(フォーム名)
Caption(表示名):MID(selection,開始文字,文字数)

オブジェクト名:stPos '開始位置
TabIndex(タブ遷移の順番):1
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
TextBoxに数字のみ入力させる 【VBA在庫管理#33】 | オレグラミング (oregramming.com)

オブジェクト名:Ln '文字数
TabIndex(タブ遷移の順番):2
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
Value(デフォルト値):10 

オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):4

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):M
TabIndex(タブ遷移の順番):3

オブジェクト名:SampleMid 'Mid後の文字サンプル表示
TabStop(タブ遷移の対象):False
TextAlign(テキスト位置):2 fmTextAlignCenter(中央揃え)

以下、ソース
PR
つづきはこちら "Mid関数で文字を切り出すマクロ(ランチャー3)"

文頭および文末の文字を削除するマクロ(ランチャー2)

2021年03月20日
前回、文頭および文末に文字を挿入するマクロを作った。

マクロの実行はCtrl+Zで戻せないので、元に戻すためのマクロを作る。

今回もめんどくさいけど、ユーザーフォームで。

文頭と文末から削除する文字数を指定するフォームを用意。
フォームに入力可能な文字を数値に制限するため、キーコントロールを実施。
数値専用のテキストボックス|ユーザーフォーム入門 (excel-ubara.com)

KeyCode = 0とすると、キー入力を無視する。
Acceleratorで指定した文字やESCキーのキャンセルも
KeyCode = 0の条件に入っている場合は操作が効かないので注意。
数値入力めんどくさいから上下操作もできる面白いな。
キーコントロールのソースを見たら簡単そうだったので実装。
(Case vbKeyUp、Case vbKeyDownで指定するだけ)

上下操作で数値を増減させるけど、キー入力に備えてデフォルトはブランクに。
数値型だとブランクの場合に計算エラーが出るので
バリアント型で変数を受けて、数値型の変数を別途定義して計算。


何文字削除したらどうなるか事前に知りたいよな。
サンプル表示用のラベルを用意し、selection(1)で削除対象の文字を表示。

キーコントロールの最後に表示制御を入れていたら、
直接数値入力時に更新されないバグが発生。
「_change」で別途指定が必要だったので修正。



ダウンロード


デフォルトから変更したプロパティは以下の通り。

オブジェクト名:strTrimForm(フォーム名)
Caption(表示名):セルの両端の文字列を削除

オブジェクト名:stLen '文頭から削除する文字数
TabIndex(タブ遷移の順番):1
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード
TextBoxに数字のみ入力させる 【VBA在庫管理#33】 | オレグラミング (oregramming.com)

オブジェクト名:edLen '文末文字
TabIndex(タブ遷移の順番):2
IMEMode(日本語入力制御):2 (fmIMEModeOff) 英語モード

オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):4

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):T
TabIndex(タブ遷移の順番):3

オブジェクト名:SampleLeft '文頭の削除対象文字サンプル表示
TabStop(タブ遷移の対象):False

オブジェクト名:SampleRight '文末の削除対象文字サンプル表示
TabStop(タブ遷移の対象):False

以下、ソース
つづきはこちら "文頭および文末の文字を削除するマクロ(ランチャー2)"

文頭および文末に文字を挿入するマクロ(ランチャー1)

2021年03月20日

エクセルで文字列として入力する場合、「’」を1文字目に入力する。

まとめて文字列にしたり戻したり出来たら便利だなってことで
文頭に文字を追加したり、1文字目を消したりするマクロを作ろうか。

文頭と文末どっちも操作できるといいかもってことで
ユーザフォームを使って作ってみた。

通番も一緒にできたら面白いので、
入力フォームに「¥n」を入力したら通番を振る仕様に。


ユーザーフォームは使い勝手はいいかもしれないけど、
いかんせん作るのがめんどくさい。

オートシェイプでお絵描きをして、
描いた絵の全部品の設定を調整しないといけない。

文頭と文末に挿入する文字の入力用にそれぞれ入力フォームを用意。
キャンセルボタンと実行ボタンを作り、ショートカットキーを設定。
キャンセルボタンにESCキーを紐づけ。
タブ遷移順序を調整して、文頭、文末、実行ボタンの順にEnter遷移可能にした。

ダウンロード




今回デフォルトから変更したプロパティは以下の通り。

オブジェクト名:strAddForm(フォーム名)
Caption(表示名):セル内容の両端に文字列を追加

オブジェクト名:stText '文頭文字
MultiLine(改行可否):True
TabIndex(タブ遷移の順番):1

オブジェクト名:edText '文末文字
MultiLine(改行可否):True
TabIndex(タブ遷移の順番):2


オブジェクト名:CommandButton1 ’キャンセルボタン
Accelerator(操作キー Alt + ...):C
Cancel(ESCキー紐づけ):True
TabIndex(タブ遷移の順番):5

オブジェクト名:CommandButton2 '実行ボタン
Accelerator(操作キー Alt + ...):A
TabIndex(タブ遷移の順番):4


以下ソース
つづきはこちら "文頭および文末に文字を挿入するマクロ(ランチャー1)"

CSVファイルを1行目の内容で分類して結合するマクロ

2021年02月23日
仕事で急遽必要になり、突貫で作成。
過去のソースを流用して1時間でできた。

◆目的◆

フォルダ内にCSVファイルの一覧があり、1行目が日付情報、
2行目以降が登録データになっている。

CSVファイルをサイトに取り込む際に、
1アカウント1日あたりファイルっていう縛りがあり、
日付別にCSVファイルをまとめなきゃいけなくなった。

◆手順◆

1.ダイアログを表示して解析対象のパスを取得
2.Dir関数を使ってフォルダ内のファイル一覧を取得
 (今回は、VBAで作られたCSVを結合するのでShift-Jisのみ)
3.ファイルの中身を1行ずつ読み込む
4.Dictionary配列を定義し、1行目の日付をキーに2行目以降をアペンド
 (キーの存在チェックしてなければキー登録、あれば値更新)
5.全ファイル繰り返し
6.キー配列を定義して、Dictionaryカウントでループ
7.キーごとに値をCSV出力(Printを使用)

◆注意点◆

Dictionary配列に改行「chr(10)」を格納しても「・」が出力されるので
一旦「"†"」で格納して、Print時に「chr(10)」へReplace

以下ソース
つづきはこちら "CSVファイルを1行目の内容で分類して結合するマクロ"

VBAでの処理時間の計測

2021年02月17日
会社で作っているCSV出力ツールで、
応答性を試験するために、マクロの処理時間を計測したい。

考え方としては、処理開始した時刻を変数にセットして、
処理完了時の時刻と比較する。

ただ、Nowを使うと結果が日付型で出力されて使いにくいので
Timerを使うのがお勧め。
つづきはこちら "VBAでの処理時間の計測"