エクセル術

エクセルのダブルクォーテーション問題

セルをコピーしてメモ帳などのテキストエディタに貼り付けした際に、その値が””(ダブルクォーテーション)で囲まれる場合があります。

この問題に対して原因と対策を書いていきます。

原因と挙動

原因はセル内で改行をしている為です。このセル内改行はASCIIコードの10番かな?Lfになっています。
これが存在するとエクセル(というかWindowsのクリップボード?)は、セルの値をダブルクォーテーションで囲んでしまうのです。

セル内改行の方法は編集モードの時に Alt + Enter です。


これをコピーしてテキストエディタに貼り付けると、


メモ帳の場合

 


秀丸エディタの場合

エディタによって挙動は違いますが、ダブルクォーテーションで囲まれるのは一緒です。
ちなみに当サイトはWordpressで作成していますが、そのエディタでも秀丸と同じような結果になりました。

対策

では対策ですが、いくつか方法があります。シーンに合わせて使いたい方法で対策してください。

MicrosoftWordに貼り付ける

Wordに貼り付けるとダブルクォーテーションが付きません。理由は正確には分からないのですが同Officeなので何らかの仕組みがあるのでしょう。ExcelとWordの連携機能もあるのでその関係でしょうか。

エクセルの置換を使ってセル内改行を削除する

※これはバージョンによって使用出来ない可能性があります。自分の環境では出来ませんでした(Excel2010)

置換の検索する文字列欄に Ctrl + J を押して(表示には何も表示されない)、置換後の文字列に任意の文字を入れる、もしくは何も入れません。

http://www.0yen-coding.com/2009/06/excel.html

ただこの方法は改行を消してしまうので、改行の見栄えをそのまま貼り付けたい場合には使えません。

CLEAN関数でセル内改行を削除する

Excelの関数にCLEAN関数というのがあります。これは印刷できない文字列を削除する関数で、ASCIIコードの0~31の32文字を消します。ここに改行コードが含まれていますので、CLEAN関数を使えばセル内改行を削除する事ができます。

https://dekiru.net/article/4497/

この方法も上記と同じく改行を消してしまうので、改行のまま貼り付けたい場合は使えません。

エディタに貼り付けた後に秀丸エディタのマクロや置換でダブルクォーテーションを消す

テキストエディタ側の機能を使う方法です。

http://www.shuiren.org/chuden/teach/hidemaru/04.htm

そのエディタを持っていないといけないので多少ハードルは上がりますかね。

エクセルのコピー時にダイレクトにクリップボード操作するマクロ

コピー時に Ctrl + C や右クリックによるコピーをしないで、マクロを使ってWindowsのクリップボード(コピーの内容を一時的に保存する機能)にダイレクトに操作する方法です。

この方法はまずVBEditorを開いて、ツールの参照設定にある Microsoft Forms 2.0 Object Library を使えるようにする必要があります。

そして以下のコードを使います。

Sub Copy()
    Dim buf As String, buf2 As String, CB As New DataObject
    buf = ActiveCell
    With CB
        .SetText buf        ''変数のデータをDataObjectに格納する
        .PutInClipboard     ''DataObjectのデータをクリップボードに格納する
        .GetFromClipboard   ''クリップボードからDataObjectにデータを取得する
        buf2 = .GetText     ''DataObjectのデータを変数に取得する
    End With
End Sub

これをボタン設定しても良いですし、ショートカットキーに設定しても良いでしょう。

セルを選択してこのマクロを走らせるとコピーできています。(メッセージなどは出ないですし、コピー中罫線みたいなのも出ません。)

そしてテキストエディタに貼り付けます。

うん、ダブルクォーテーション無いね!

これも欠点があって、アクティブセルのみコピーで、複数セルに対応してないという点ですね。
コードを改良すれば出来そうな気はします。選択セル内をクリップボードに持っていけばいいだけなので。

 

モバイルバージョンを終了