セルをコピーしてメモ帳などのテキストエディタに貼り付けした際に、その値が””(ダブルクォーテーション)で囲まれる場合があります。
この問題に対して原因と対策を書いていきます。
原因と挙動
原因はセル内で改行をしている為です。このセル内改行はASCIIコードの10番かな?Lfになっています。
これが存在するとエクセル(というかWindowsのクリップボード?)は、セルの値をダブルクォーテーションで囲んでしまうのです。
セル内改行の方法は編集モードの時に Alt + Enter です。
エディタによって挙動は違いますが、ダブルクォーテーションで囲まれるのは一緒です。
ちなみに当サイトはWordpressで作成していますが、そのエディタでも秀丸と同じような結果になりました。
対策
では対策ですが、いくつか方法があります。シーンに合わせて使いたい方法で対策してください。
- MicrosoftWordに貼り付ける
- エクセルの置換を使ってセル内改行を削除する(バージョンによって出来ない)
- CLEAN関数でセル内改行を削除する
- エディタに貼り付けた後に秀丸エディタのマクロや置換でダブルクォーテーションを消す
- エクセルのコピー時にダイレクトにクリップボード操作するマクロ
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
これをボタン設定しても良いですし、ショートカットキーに設定しても良いでしょう。
セルを選択してこのマクロを走らせるとコピーできています。(メッセージなどは出ないですし、コピー中罫線みたいなのも出ません。)
そしてテキストエディタに貼り付けます。
うん、ダブルクォーテーション無いね!
これも欠点があって、アクティブセルのみコピーで、複数セルに対応してないという点ですね。
コードを改良すれば出来そうな気はします。選択セル内をクリップボードに持っていけばいいだけなので。