web-dev-qa-db-ja.com

MS Excelは、セルをコピーするときに改行を追加します

MS Excel 2010または2007、またはセルをコピーして(セルからテキストを選択せず​​に)任意のバージョンに貼り付けると、改行が追加され、カーソルが次の行に移動します。カーソルを上に移動して最後の行に戻すのは面倒です。

カーソルを最後の行に戻すのはそれほど手間がかかりませんが、プログラマーとして何度もこれを続けなければならない場合、私は本当に気分が悪くなります。これを停止する設定がExcelにある場合、何か提案はありますか?

オンラインで調べてみましたが、何も見つかりませんでした。また、Excelのオプションを調べても、何も見つかりませんでした。

18

セル全体を保存するのではなく、クリップボードにその値のみを保存する独自のコピールーチンを作成できます。

Sub OwnCopy()
    Dim DataObj As New MSForms.DataObject

    DataObj.SetText ActiveCell.Value 'depending what you want, you could also use .Formula here
    DataObj.PutInClipboard
End Sub

マクロをコンパイルできるようにするには、参照として「Microsoft Forms 2.0オブジェクトライブラリ」を含める必要があります(Visual Basicエディターで、[ツール]-> [参照]に移動します)。

これで、このマクロを別のショートカットに割り当てることができます(例: Ctrl-Shift-C)デフォルトのマクロ実行ダイアログを使用する-または上書きする Ctrl-cApplication.OnKey "^c", "OwnCopy"を実行します。ただし、上書きすることはお勧めしません Ctrl-c エディターに貼り付ける以外の場合は、通常は一緒にコピーされる他のすべての情報を使用する可能性が高いためです。

これを永続的にするには、マクロをパーソナルワークブックに保存するだけです。

複数のセル/選択領域も処理できる、より高度なコピールーチンが必要な場合は、次のコードを使用します。

Sub OwnCopy2()
    Dim DataObj As New MSForms.DataObject
    Dim lngRow As Long
    Dim intCol As Integer
    Dim c As Range
    Dim strClip As String

    Const cStrNextCol As String = vbTab
    Const cStrNextRow As String = vbCrLf

    With Selection
        If Not TypeOf Selection Is Range Then
            On Error Resume Next
            .Copy
            Exit Sub
        End If

        If .Areas.Count = 1 Then
            For lngRow = 1 To .Rows.Count
                For intCol = 1 To .Columns.Count
                    strClip = strClip & _
                        Selection(lngRow, intCol).Value & cStrNextCol
                Next intCol
                strClip = Left(strClip, Len(strClip) - Len(cStrNextCol)) _
                    & cStrNextRow
            Next lngRow
        Else
            For Each c In .Cells
                strClip = strClip & c.Value & vbCrLf
            Next c
        End If
        strClip = Left(strClip, Len(strClip) - Len(cStrNextRow))
        DataObj.SetText strClip
        DataObj.PutInClipboard
    End With
End Sub
13
Peter Albert

翻訳会社のExcelスプレッドシートとコードの間で、アプリケーションの翻訳の大きなファイルをコピーして貼り付けていました。毎回改行を削除しなければならないことは、私を壁に押し上げました。

最後に、シート全体をコピーして、新しいGoogleドキュメントのスプレッドシートに貼り付けました。次に、Excelのようにコピーに改行が追加されないため、コピーのニーズに使用しました。

お役に立てば幸いです。

12
Rob Murphy

煩わしいことには同意しますが、やるべきことがあるかどうかはわかりません。

Excelは、セルを自動的にフォーマットします...タブ区切りの列、行区切りの行(1つのセルは1列の行です)。

確認するには:.NETで、Clipboard.GetText()は、書式設定が既にクリップボードにあることを示します

説明するためのIronPythonを次に示します。

# Copy some cells in Excel, then run the following
import sys, clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Clipboard
Clipboard.GetText()
1
David J