22

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

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

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

4

3 に答える 3

16

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

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

お役に立てば幸いです。

于 2014-04-17T08:41:51.193 に答える
15

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

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エディターで、[ツール]-> [参照]に移動し、 1%windir%\system32を参照します)。FM20.dll

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

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

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

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

1実際には、このファイルは次の場所に存在します-Office%ProgramFiles%\Microsoft Office\root\vfs\Systemは、仮想化のトリックを実行して、ファイルが存在する場所に表示されるようにします。

于 2013-02-04T21:35:36.863 に答える
1

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

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()
于 2013-02-04T21:37:52.807 に答える