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

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

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

原因と挙動

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

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

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

20160906-02
メモ帳の場合

 

20160906-03
秀丸エディタの場合

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

対策

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

  • MicrosoftWordに貼り付ける
  • エクセルの置換を使ってセル内改行を削除する(バージョンによって出来ない)
  • CLEAN関数でセル内改行を削除する
  • エディタに貼り付けた後に秀丸エディタのマクロや置換でダブルクォーテーションを消す
  • エクセルのコピー時にダイレクトにクリップボード操作するマクロ

MicrosoftWordに貼り付ける

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

20160906-04

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

※これはバージョンによって使用出来ない可能性があります。自分の環境では出来ませんでした(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 を使えるようにする必要があります。

20160906-05

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

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

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

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

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

20160906-06

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

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

 

Comment

  1. 匿名 より:

    助かりました。
    ありがとうございます。

  2. shishow より:

    グラフの合計表示、できました。とても分かりやすいです。
    ありがとうございました。

  3. あか より:

    ありがとうございました!大変助かりました。
    Microsoft Forms 2.0 Object Library の追加が難しかったです。ユーザフォームを追加することで自動的に追加されるという記事を別サイトでみて、頑張れました。ありがとうございました。

  4. 匿名 より:

    ここに来てとても勉強になりました。
    とても助かって、感謝しております。

    可能かどうかはわからないのですが、「エクセルのコピー時にダイレクトにクリップボード操作するマクロ」で一番最後の行の改行を無くすマクロも可能でしょうか?

    Excelの特徴でもある、3行の箇条書きでも4行分コピーされてしまうのも同時に解消されれば良いなと思いました。

  5. 匿名 より:

    ここに来てとても勉強になりました。
    とても助かって、感謝しております。

    可能かどうかはわからないのですが、「エクセルのコピー時にダイレクトにクリップボード操作するマクロ」で一番最後の行の改行を無くすマクロも可能でしょうか?

    Excelの特徴でもある、3行の箇条書きでも4行分コピーされてしまうのも同時に解消されれば良いなと思いました。

  6. 匿名 より:

    マクロほんとに助かります。
    多いときはエクセルから貼り付ける文字列が一万文字近くのあったので、手動で遡るのは面倒ですし、置換しちゃうと文中にあるダブルクオーテーションも消えてしまうので、マクロを使いました。

    後、私もMicrosoft Forms 2.0 Object Libraryの追加が難しかったです。デバック中にはツール>参照がグレーアウトになるのも知らなかったので、追加でちょっと難しかったです。

  7. 匿名 より:

    セルが1つだけのときは
    セルを選んで、F2→CTRL+A→CTRL+Cでも行けますよ。

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

INDEX NA() 変換 ユーザー定義関数 テンプレート 検索 VLOOKUP 目標 図形 SUMIFS TODAY XLSTART 置換 コピペ 条件付き書式 バーコード SUM 日付 フロー図 ワイルドカード 作業効率UP MATCH 印刷 HLOOKUP COLUMN COUNTIF 無料 DATE SUMIF グラフ
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑