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(中央揃え)
以下、ソース
ユーザーフォームで削除対象の文字を確認しながら
上下ボタンで文字数を設定できる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
文頭および文末の文字を削除するマクロ(ランチャー2)
2021年03月20日
前回、文頭および文末に文字を挿入するマクロを作った。
マクロの実行はCtrl+Zで戻せないので、元に戻すためのマクロを作る。
今回もめんどくさいけど、ユーザーフォームで。
文頭と文末から削除する文字数を指定するフォームを用意。
フォームに入力可能な文字を数値に制限するため、キーコントロールを実施。
数値専用のテキストボックス|ユーザーフォーム入門 (excel-ubara.com)
キーコントロールのソースを見たら簡単そうだったので実装。
(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
以下、ソース
マクロの実行は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
以下、ソース
文頭および文末に文字を挿入するマクロ(ランチャー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
以下ソース
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
以下ソース
過去のソースを流用して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
以下ソース
VBAでの処理時間の計測
2021年02月17日
会社で作っているCSV出力ツールで、
応答性を試験するために、マクロの処理時間を計測したい。
考え方としては、処理開始した時刻を変数にセットして、
処理完了時の時刻と比較する。
ただ、Nowを使うと結果が日付型で出力されて使いにくいので
Timerを使うのがお勧め。
応答性を試験するために、マクロの処理時間を計測したい。
考え方としては、処理開始した時刻を変数にセットして、
処理完了時の時刻と比較する。
ただ、Nowを使うと結果が日付型で出力されて使いにくいので
Timerを使うのがお勧め。