web-dev-qa-db-ja.com

Excelでセルのプレーンテキストのみをコピーするにはどうすればよいですか?

ユーザーが所定の範囲のセルをコピーするコマンドボタンをクリックするExcelワークシートを設計しています。次に、ユーザーはFirefoxまたはIEを使用してコンテンツをWebアプリに貼り付けます。 Webアプリのデザインは私の手に負えないものであり、現在、データ入力に使用されるテキストボックスはリッチテキスト入力です。これにより、ユーザーがテキストを貼り付けると、テキストが奇妙に見え、Excelのようにフォーマットされます。

選択したセルのプレーンテキストのみをコピーするためにVBAを使用するExcelの方法はありますか?書式設定、タブリング、セルの境界線はなく、テキストだけで他には何もありません。私の現在の回避策マクロは、セルをコピーし、メモ帳を開き、メモ帳に貼り付けてから、メモ帳からコピーしてプレーンテキストを取得することです。これは非常に望ましくないことであり、Excel自体の中でこれを行う方法があることを望んでいます。教えてください、ありがとう!

4
Eli Greenberg

このようなもの?

Sheet1.Cells(1, 1).Copy
Sheet1.Cells(1, 2).PasteSpecial xlPasteValues

または

selection.Copy
Sheet1.Cells(1,2).Activate
Selection.PasteSpecial xlPasteValues

Copyはパーツ全体をコピーしますが、貼り付けるものを制御できます。

同じことがRangeオブジェクトにも当てはまります。

[〜#〜]編集[〜#〜]

AFAIK、VBAオブジェクト(変数、配列など)に割り当てずに、範囲のテキストのみをコピーする簡単な方法はありません。単一のセルと数値とテキストのみ(数式なし)で機能するトリックがあります。

Sub test()
    Cells(1, 1).Select
    Application.SendKeys "{F2}"
    Application.SendKeys "+^L"
    Application.SendKeys "^C"
    Cells(1, 3).Select
    Application.SendKeys "^V"
End Sub

しかし、ほとんどの開発者はSendKeysを避けています。これは、不安定で予測できない可能性があるためです。たとえば、上記のコードは、マクロがVBAからではなく、Excelから実行された場合にのみ機能します。 VBAから実行すると、SendKeysはオブジェクトブラウザを開きます。これは、VBAビューでF2を押したときに実行されます:)また、全範囲の場合、セルをループする必要があります。それらを1つずつコピーして、アプリケーションに1つずつ貼り付けます。よく考えたので、これはやり過ぎだと思います。

配列を使用する方がおそらく良いでしょう。これは、vba配列に範囲を渡したり戻したりする方法に関する私のお気に入りのリファレンスです: http://www.cpearson.com/Excel/ArraysAndRanges.aspx

個人的には、SendKeysを避け、配列を使用します。 VBA配列からアプリケーションにデータを渡すことは可能であるはずですが、アプリケーションについて詳しく知らなければ言うのは難しいです。

6
Ioannis

実際、これを行う最良の方法は、セルをコピーしてメモ帳に貼り付けることです。メモ帳はセルを認識しません。次に、テキストをコピーして任意のセルに戻すことができます。これは、複数のセルから単一のセルにテキストをコピーする場合に機能します。

2
Dan

Excelで、問題のセルを強調表示します。 F2を押します。 CTRL + Shift + Home。 (これにより、セルの内容全体が強調表示されます。)CTRL + C。宛先アプリケーションに移動します。 CTRL + V。多くの手順のように見えますが、実際に実行すると、リボンを使用して同じことを実行するよりもはるかに高速です。

[形式を選択して貼り付け]機能を使用せずに複数のセルをアプリケーションにコピーする必要がある場合は、通常のコピーとExcelからメモ帳への貼り付けを行ってから、メモ帳から宛先へのコピーと貼り付けを行います。面倒ですが、機能します。

0
Peter

これは、VBAを気にせずに簡単に解決できます。

ユーザーはクリップボードの内容を次の方法で貼り付けることができます。 CtrlShiftV 通常の代わりに CtrlV (フォーマットされたとおりに貼り付けます)。

CtrlShiftV クリップボードの内容をプレーンテキストとして貼り付けます。

0
Yukio Kikuchi

Excel 2013では、ショートカットを使用してこれを行うことができます。

押す CtrlAltV 貼り付け専用ウィンドウを開きます。これで、値のラジオボタンをクリックするか、を押すだけです。 V Excelが英語の場合。英語でExcelを使用していない場合は、1文字の下線を確認することで、どのボタンを押して目的のオプションを選択できるかを確認できます。

最後にプレス Enter コピーした選択範囲を貼り付けます。

0
qwerty

コピーするセルを大量に処理している場合、selection.copyメソッドは非常に遅くなります。 (200 000レコードでマクロを実行したときにそれを経験しました)。

100倍のパフォーマンスを発揮する方法は、あるセルの値を別のセルに直接割り当てることです。私のコードの例:

With errlogSheet
         'Copy all data from the current row

          reworkedErrorSheet.Range("A" & reworkedRow).Value = .Range("A" & currentRow).Value
          reworkedErrorSheet.Range("B" & reworkedRow).Value = .Range("B" & currentRow).Value
          reworkedErrorSheet.Range("C" & reworkedRow).Value = .Range("C" & currentRow).Value
          reworkedErrorSheet.Range("D" & reworkedRow).Value = .Range("D" & currentRow).Value
          reworkedErrorSheet.Range("E" & reworkedRow).Value = .Range("E" & currentRow).Value
0
Lee