VBAの文字コード問題 Dir関数を使わずにFileSystemObjectを使おう
2021年02月17日
今回も会社で作っているマクロについて。
【おさらい】
今作っているのは、別のエクセルファイルからデータを読み取って、CSVに出力するツール。
エクセルファイルの中の環境依存文字がCSV化したときに「?」になっちゃうので、
Shift-Jisではなく、UTF-8でCSV出力するってのが前回のお話。
文字コード問題はそれだけじゃなかった。。。ってのが今回の内容。
【おさらい】
今作っているのは、別のエクセルファイルからデータを読み取って、CSVに出力するツール。
エクセルファイルの中の環境依存文字がCSV化したときに「?」になっちゃうので、
Shift-Jisではなく、UTF-8でCSV出力するってのが前回のお話。
文字コード問題はそれだけじゃなかった。。。ってのが今回の内容。
PR
ブックの内容をUTF8でCSV出力するマクロ
2021年02月10日
仕事でエクセルファイルを取り込んで、テーブルを作ってCSVに出力するツールを作ることになった。
趣味プログラミングで作る分には1日でできる作業だけど、
詳細な仕様を詰めていくとなかなかこれが大変ということを改めて思い知らされた。
前にプログラマの人が「データインポートは大変だからやりたくない」と言ってたのがよーくわかった。
大変なことを整理してみた。
①仕様をきっちり決めて動作保証の範囲を決める必要がある。
②仕様書・設計書を作りレビューを受ける必要がる。
③動作保証の範囲できっちり動くツールを作る必要がある。
④動かない場合はなんで動かないか利用者に知らせる必要がある。
⑤ツールの試験を行い、仕様書・設計書と差異がないことを確認する必要がある。
⑥試験結果を報告書にまとめてレビューを受ける必要がある。
⑦仕様書・設計書・ツール動作・試験報告書で整合性を取る必要がある。
⑧改修が発生するたびに変更内容を管理し、①~⑦をやり直す必要がある。
ざっくりこんな感じ。仕事でやるプログラミングが10倍の工数とは言ったものだ。
システム開発となるとさらに10倍だとか。
データインポートの何がめんどいって、元データに何を入れられるかわからないから。
文字数制限、文字種制限、想定範囲内か、リストにある内容かなど、
考えられるあらゆるパターンに耐えるのがなかなかしんどい。。。
作りかけのツールは、シフトJISで出力していたけど、
試しに第四水準の文字「墱」を入れたら変換されず「?」に。。。
仕方なくUTF8で出力する仕様に変更。
毎度おなじみのofficeTanaka様のサイトで勉強して、
" "くくりのカンマ区切りCSV出力マクロを作ってみた。
参照サイト
Office TANAKA - ファイルの操作[UTF-8形式のテキストファイルに書き込む]
以下、ソース
趣味プログラミングで作る分には1日でできる作業だけど、
詳細な仕様を詰めていくとなかなかこれが大変ということを改めて思い知らされた。
前にプログラマの人が「データインポートは大変だからやりたくない」と言ってたのがよーくわかった。
大変なことを整理してみた。
①仕様をきっちり決めて動作保証の範囲を決める必要がある。
②仕様書・設計書を作りレビューを受ける必要がる。
③動作保証の範囲できっちり動くツールを作る必要がある。
④動かない場合はなんで動かないか利用者に知らせる必要がある。
⑤ツールの試験を行い、仕様書・設計書と差異がないことを確認する必要がある。
⑥試験結果を報告書にまとめてレビューを受ける必要がある。
⑦仕様書・設計書・ツール動作・試験報告書で整合性を取る必要がある。
⑧改修が発生するたびに変更内容を管理し、①~⑦をやり直す必要がある。
ざっくりこんな感じ。仕事でやるプログラミングが10倍の工数とは言ったものだ。
システム開発となるとさらに10倍だとか。
データインポートの何がめんどいって、元データに何を入れられるかわからないから。
文字数制限、文字種制限、想定範囲内か、リストにある内容かなど、
考えられるあらゆるパターンに耐えるのがなかなかしんどい。。。
作りかけのツールは、シフトJISで出力していたけど、
試しに第四水準の文字「墱」を入れたら変換されず「?」に。。。
仕方なくUTF8で出力する仕様に変更。
毎度おなじみのofficeTanaka様のサイトで勉強して、
" "くくりのカンマ区切りCSV出力マクロを作ってみた。
参照サイト
Office TANAKA - ファイルの操作[UTF-8形式のテキストファイルに書き込む]
以下、ソース
選択セルの文字をカッコでくくる
2021年01月06日
スマホから投稿
wordの表で進捗管理をしていて、予定は日付をカッコでくくるルールにしているんだけど、いかんせんwordだとそのカッコがめんどくさい。
ってことで、wordの表で選択しているセルの文字列を()でくくるVBAを作ってみた。
「Selection.Cells(cnt).Range.Text =」で該当セルの文字列を変更できるけど、選択が解除されちゃって2箇所目でエラーが出る。
Selection.cellsを変数に格納して、ループさせて無事解決。
以下ソース。
wordの表で進捗管理をしていて、予定は日付をカッコでくくるルールにしているんだけど、いかんせんwordだとそのカッコがめんどくさい。
ってことで、wordの表で選択しているセルの文字列を()でくくるVBAを作ってみた。
「Selection.Cells(cnt).Range.Text =」で該当セルの文字列を変更できるけど、選択が解除されちゃって2箇所目でエラーが出る。
Selection.cellsを変数に格納して、ループさせて無事解決。
以下ソース。
ショートカットファイルのリンク先を置換するマクロ
2020年11月27日
今日は、ショートカットファイルについてのお話。
会社で使うNASは、IPアドレスが変わったりフォルダの移動などで
ショートカットファイルがリンク切れを起こすケースが多々あり、
困るケースが多い。
今回は、ショートカットファイルからリンク先アドレスを取得し、
リンク先のパスを置換するマクロを作ったので紹介します。
2024/5/7追記
ソースコードだけ欲しい方は、以下の記事を参照。
「ショートカットファイルのリンク先を置換するマクロの改良~実用版~」
処理を2つに分けて、それぞれエラーチェック
ファイルのフルパスからリンク先のアドレスを取得
ファイルはあるか
拡張子は.lnkか
リンク先は生きているか
検索文字列と置換文字列を予め指定して、リンク先を修正
検索文字列があるか
置換したパスにファイルはあるか
UIを意識して、エラー内容表示とエラー箇所の網掛け表示に対応してみた。
うまくリンク先を変更した場合は、リンク前のパスはグレー文字にした。
なので、文字色と背景色も初期化する必要がある。
リンク先の存在チェックではまった。
ファイルの有無はDir関数で取得できるけど、フォルダの場合は存在するのに””を返す。
仕方なくFilseSystemObjectのサブルーチンを作って対応。
とりあえずつくったものの、大量データを入力した場合の処理速度は問題ありそう。
2023/4/23追記
リンク切れチェックについて、新しい記事を追加。
「ショートカットファイルのリンク先を置換するマクロの改良~パスの存在チェックをするバッチ~」
2024/5/7追記
リンク先取得時にエラーが出る対策について、記事を追加。
「ショートカットファイルのリンク先をショートパスで指定して文字数制限対策をした話」
上記対策をリンク先を置換するマクロに適用。
「ショートカットファイルのリンク先を置換するマクロの改良~実用版~」
以下ソース
会社で使うNASは、IPアドレスが変わったりフォルダの移動などで
ショートカットファイルがリンク切れを起こすケースが多々あり、
困るケースが多い。
今回は、ショートカットファイルからリンク先アドレスを取得し、
リンク先のパスを置換するマクロを作ったので紹介します。
2024/5/7追記
ソースコードだけ欲しい方は、以下の記事を参照。
「ショートカットファイルのリンク先を置換するマクロの改良~実用版~」
処理を2つに分けて、それぞれエラーチェック
ファイルのフルパスからリンク先のアドレスを取得
ファイルはあるか
拡張子は.lnkか
リンク先は生きているか
検索文字列と置換文字列を予め指定して、リンク先を修正
検索文字列があるか
置換したパスにファイルはあるか
UIを意識して、エラー内容表示とエラー箇所の網掛け表示に対応してみた。
うまくリンク先を変更した場合は、リンク前のパスはグレー文字にした。
なので、文字色と背景色も初期化する必要がある。
リンク先の存在チェックではまった。
ファイルの有無はDir関数で取得できるけど、フォルダの場合は存在するのに””を返す。
仕方なくFilseSystemObjectのサブルーチンを作って対応。
とりあえずつくったものの、大量データを入力した場合の処理速度は問題ありそう。
2023/4/23追記
リンク切れチェックについて、新しい記事を追加。
「ショートカットファイルのリンク先を置換するマクロの改良~パスの存在チェックをするバッチ~」
2024/5/7追記
リンク先取得時にエラーが出る対策について、記事を追加。
「ショートカットファイルのリンク先をショートパスで指定して文字数制限対策をした話」
上記対策をリンク先を置換するマクロに適用。
「ショートカットファイルのリンク先を置換するマクロの改良~実用版~」
以下ソース
セルの書式を引き継いだまま改行を追加する
2020年09月24日
エクセルの資料を印刷したら、改行位置が違ってて見切れが!!
よくある話かと思います。
自分なりの対策として、
選択範囲のセルに改ページを追加する処理をしていました。
if right(R ,1) <> chr(10) then
R =R & chr(10) ’Each R in Selection
end if
気に入って結構使っていたのですが、書式が変わっちゃう問題が発覚。
赤字やアンダーラインがクリアされるのはまだしも、
取り消し線が復活するのはアカン!
調べたところ、Characters.Insertを使えばいいとのこと。
よくある話かと思います。
自分なりの対策として、
選択範囲のセルに改ページを追加する処理をしていました。
if right(R ,1) <> chr(10) then
R =R & chr(10) ’Each R in Selection
end if
気に入って結構使っていたのですが、書式が変わっちゃう問題が発覚。
赤字やアンダーラインがクリアされるのはまだしも、
取り消し線が復活するのはアカン!
調べたところ、Characters.Insertを使えばいいとのこと。