5

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

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

4

9 に答える 9

6

このようなもの?

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

または

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

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

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

編集

私の知る限り、範囲のテキストのみを 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は、不安定で予測できない可能性があるため、避けています。たとえば、上記のコードは、マクロが Excel からではなく Excel から実行された場合にのみ機能しVBAます。から実行するVBAと、SendKeysオブジェクト ブラウザが開きます。これは、VBA ビューで F2 を押したときの動作です:) また、全範囲を表示するには、セルをループして、1 つずつコピーし、1 つずつ貼り付けて、アプリケーション。今考えると、これはやり過ぎだと思います..

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

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

于 2013-09-19T20:06:12.173 に答える
3

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

于 2016-12-15T21:52:28.243 に答える
0

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

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

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

于 2016-03-11T08:56:37.317 に答える
0

コピーするセルが多数ある場合、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
于 2015-07-02T12:47:07.960 に答える
0

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

Ctrl+ Alt+を押しVて特殊貼り付けウィンドウを開きます。値のラジオ ボタンをクリックするVか、Excel が英語の場合は を押します。Excel を英語で使用していない場合は、1 文字の下線を見て、どのボタンを押して必要なオプションを選択できるかを確認できます。

最後に を押しEnterて、コピーした選択範囲を貼り付けます。

于 2016-05-31T14:05:09.017 に答える