Excel関数

【Excel】日付が数字になる仕組みとVBA・PQでの扱い

日付を入力したはずのセルに「46285」と表示されて、驚いたことはないでしょうか。CSVを開いたら日付の列が数字だらけだった、という場面もあります。日付が壊れたわけではありません。Excelは日付を「シリアル値」という数字で保存していて、表...
Excel関数

【Excel関数】率の平均はAVERAGEでなくSUM/SUM

部署別の有給取得率の表を作り、最下行に「平均」を入れました。取得率の列をAVERAGE関数で平均すると62.0%です。ところが、取得日数と付与日数をそれぞれ合計して割ると44.2%になりました。同じデータなのに、なぜ数字が合わないのでしょう...
VBA

【VBA】全角氏名のバイト数チェックはLenBとStrConvで行う

取込先の氏名欄に「10バイトまで」のような上限があると、入力チェックをVBAで書く必要が出てきます。ここで Len を使うと、判定が合いません。Len が返すのは文字数であり、バイト数ではないからです。この記事では、全角を含む氏名のバイト数...
VBA

【VBA】エラー時も設定を元に戻す|ScreenUpdating等の後片付け

VBAを速くするために、Application.ScreenUpdating、Application.Calculation、Application.EnableEventsを切り替えるコードがあります。速度への効果は、以前の記事(【VBA...
VBA

【VBA】ZIP解凍の完了確認|CopyHereの戻りを実測

VBAでZIPを解凍し、その直後にファイルを開く。この流れで気になるのが、解凍が終わる前に次の行へ進まないか、という点です。Shell.ApplicationのCopyHereには、完了を知らせる仕組みがありません。そこで、実際にどう動くか...
実務設計

【Excel】手入力と自動計算を共存させる上書き優先列の設計

自動計算で出した値のうち、例外の行だけは人の手で直したい。実務ではよくある場面です。たとえば、振替休日の所定労働時間のように、数式では判定しきれない日があります。数式のセルへ値を直接打ち込むと、数式が消えます。どの行を手で直したのかも、あと...
Excel関数

【Excel関数】時間の丸めは順序で結果が変わる理由と対処

外部システムが集計した労働時間と、Excelで再計算した労働時間を突き合わせたところ、15分だけ合わない行が出てきました。丸めのルールも数式も合っているはずなのに、です。原因は、丸める順序でした。この記事では、時間の丸めで結果が変わる仕組み...
Excel関数

【Excel関数】TIMEVALUEが24時間以上で誤る原因と対処

勤怠データの月間労働時間が「171:00」のような文字列で出力されていて、計算に使える数値に変えたい。そんなときにTIMEVALUE関数を使うと、エラーにならないまま誤った値が返ってきます。この記事では、TIMEVALUEが24時間以上の値...
Power Query

【Power Query】CSVの文字化けをEncoding指定で防ぐ方法

古いシステムから出力されたCSVファイルをPower Queryで取り込もうとすると、日本語部分が文字化けすることがあります。古いシステムからCSV連携をしようとすると、文字コードの違いによる文字化けによく遭遇します。 Excelでファイル...
VBA

【VBA】線形探索とDictionaryの速度差を実測比較

数万件のデータの中から、条件に合う1件を探す処理を書いたことはないでしょうか。Forループで1件ずつ照合するコードは、書き方としては素直です。ただし件数が増えると、極端に遅くなることがあります。前回の記事「バブルソートとクイックソートの速度...