ユーザーが所定の範囲のセルをコピーするコマンドボタンをクリックするExcelワークシートを設計しています。次に、ユーザーはFirefoxまたはIEを使用してコンテンツをWebアプリに貼り付けます。 Webアプリのデザインは私の手に負えないものであり、現在、データ入力に使用されるテキストボックスはリッチテキスト入力です。これにより、ユーザーがテキストを貼り付けると、テキストが奇妙に見え、Excelのようにフォーマットされます。
選択したセルのプレーンテキストのみをコピーするためにVBAを使用するExcelの方法はありますか?書式設定、タブリング、セルの境界線はなく、テキストだけで他には何もありません。私の現在の回避策マクロは、セルをコピーし、メモ帳を開き、メモ帳に貼り付けてから、メモ帳からコピーしてプレーンテキストを取得することです。これは非常に望ましくないことであり、Excel自体の中でこれを行う方法があることを望んでいます。教えてください、ありがとう!
このようなもの?
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
配列からアプリケーションにデータを渡すことは可能であるはずですが、アプリケーションについて詳しく知らなければ言うのは難しいです。
実際、これを行う最良の方法は、セルをコピーしてメモ帳に貼り付けることです。メモ帳はセルを認識しません。次に、テキストをコピーして任意のセルに戻すことができます。これは、複数のセルから単一のセルにテキストをコピーする場合に機能します。
Excelで、問題のセルを強調表示します。 F2を押します。 CTRL + Shift + Home。 (これにより、セルの内容全体が強調表示されます。)CTRL + C。宛先アプリケーションに移動します。 CTRL + V。多くの手順のように見えますが、実際に実行すると、リボンを使用して同じことを実行するよりもはるかに高速です。
[形式を選択して貼り付け]機能を使用せずに複数のセルをアプリケーションにコピーする必要がある場合は、通常のコピーとExcelからメモ帳への貼り付けを行ってから、メモ帳から宛先へのコピーと貼り付けを行います。面倒ですが、機能します。
これは、VBAを気にせずに簡単に解決できます。
ユーザーはクリップボードの内容を次の方法で貼り付けることができます。 Ctrl + Shift + V 通常の代わりに Ctrl + V (フォーマットされたとおりに貼り付けます)。
Ctrl + Shift + V クリップボードの内容をプレーンテキストとして貼り付けます。
Excel 2013では、ショートカットを使用してこれを行うことができます。
押す Ctrl + Alt + V 貼り付け専用ウィンドウを開きます。これで、値のラジオボタンをクリックするか、を押すだけです。 V Excelが英語の場合。英語でExcelを使用していない場合は、1文字の下線を確認することで、どのボタンを押して目的のオプションを選択できるかを確認できます。
最後にプレス Enter コピーした選択範囲を貼り付けます。
コピーするセルを大量に処理している場合、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