グローディアのサービス一覧はこちら
 

VSCode→Excelのコピペで文字コードが変わる?

初投稿&初めまして。
2020年4月に入社しました佐藤と申します。

IT業界未経験から入社してわからないことだらけ&勉強の日々です。

今回は作業中に直面したExcelのいたずらを紹介しようと思います。
なんと、VSCodeからExcelにコピペすると、とある文字の文字コードが変わっていました。
一緒に作業していた先輩も初めて経験したようで、2人で「なんで!?」ってなったのでこれはブログのネタにしようと前から決めていました。

動作環境

Visual Studio Code 1.48.2
Microsoft Office Home and Business 2016

どのような状況か

もともとはExcelに2列用意されていて、片方の列に過去のコード、もう片方の列にVSCodeのコードをコピペして、左右で異なる記述がないかを確認していました。

簡単に状況の再現

1. Excelに適当に文字を入力
2. VSCodeに同じ文字を入力
3. Excelに関数・書式(今回は条件付き書式)を設定
4. VSCodeのコードをExcelに貼り付け

今回適用した条件付き書式は
1. 左右のコードが同じ判定のとき
    ・数式:=EXACT($B1,$A1)
    ・書式:黄緑の塗りつぶし
2. 左右のコードが異なる判定のとき
    ・数式:=NOT(EXACT($B1,$A1))
    ・書式:赤のフォント

ExcelとVSCodeはそれぞれこんな感じです。
コードの方はabcdef.ymlって名前にしてます。 ExcelとVSCode

それで、VSCodeからコピペするとこうなります。
result
?????なんで?????
A2とB2セルも一緒じゃん。
本当ならB1とB2のセルはどちらも塗りつぶしされるはずなのに・・・

解決まで

先に結論を言います。
「スペース」が原因です。
正確には「スペースの文字コード」が原因です。

Unicode文字ツールでそれぞれのパターンでスペースの文字コードを調べてみました。
1. Excelのスペース
    %20
2. VSCodeのスペース
    %20
3. VSCodeからExcelにコピペしたコードのスペース(上の画像のB2セルの「c」と「d」の間)
    %C2%A0

はい、こういうことです。
コピペしたときに文字コードが変わってしまったようです。
なので、EXACT関数が違うものだと認識したみたいですね。
じゃあ、どうするかというと・・・置換しましょう。

スペースを置換

1. 置換対象のスペースをコピー(B2セルの「c」と「d」の間)
2. Ctrl + h で「検索と置換」を開く
3. 「検索する文字列」にコピーしたスペースを貼り付け
4. 「置換後の文字列」に半角スペースを入力
5. 「すべて置換」を選択
置換
この画像は入力した後なんですが、置換前後がスペースなので見えないですね・・・
実行すると
置換後
このように判定をクリアできました。

※記事の内容は保証はしておりません(執筆時期や実施環境により挙動が変わるものがある為)。
別途検証してご利用いただくことをおすすめいたします。

グローディアのサービス一覧はこちら