• ベストアンサー

エクセルで値だけを移動することはできるでしょうか?

値のみを移動したいのですが、切り取りにして貼り付けると切り取った部分の書式が消える上に、貼り付けた部分に数式も入ってしまいます。 なのでコピーして形式を選択して貼付け、値にしているのですが、そうするとコピー元の値は残ってしまいます。 なのでコピー後コピー元の値をDELキーで消しているのですが、いちいちコピーした部分に戻って範囲指定して消すというのは面倒です。 値だけが移動できるという機能があればいいのですが、そういった機能はエクセルにあるのでしょうか? マクロでそういったことができないものかといろいろ試したりしてみたのですがうまくいきません。 バージョンは2000です。 ご存知の方いたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.10

#8です。 >コピー元と貼り付け先が重なってしまった場合、貼り付け先のデーターまでが消えてしまうんです。 確かにそうなってしまいますね、改良しました。 #6の改良版 Sub test() Dim mr As Range, c As Range If Selection.Areas.Count = 2 Then Set mr = Selection.Areas(1) mr.Copy Selection.Areas(2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False With Selection For Each c In mr If c.Row < .Row Or c.Row >= .Row + .Rows.Count Then c.Value = "" ElseIf c.Column < .Column Or c.Column >= .Column + .Columns.Count Then c.Value = "" End If Next End With Else Beep End If End Sub #8のコードAの改良版 Public r As Range Sub test2() Dim c As Range If Application.CutCopyMode = xlCopy And TypeName(Selection) = "Range" Then ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False With Selection For Each c In r If c.Row < .Row Or c.Row >= .Row + .Rows.Count Then c.Value = "" ElseIf c.Column < .Column Or c.Column >= .Column + .Columns.Count Then c.Value = "" End If Next End With Set r = Selection Else Beep End If End Sub なお、Public r As Range の部分は、必ずモジュールのウィンドウ中の一番上にコピーしてください。

その他の回答 (11)

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.12

#11です。 #8の再改良版です、#8では二つのプロシージャが必要でしたが、一つで済むようになりました。 標準モジュールにコピーしてください。 使い方:コピー元を選択後エクセルの”切り取り”ボタンをクリック、コピー先を選択後マクロを登録したボタンをクリック。 Sub test2() If Application.CutCopyMode = xlCut And TypeName(Selection) = "Range" Then Cells(Selection.Row, Selection.Column).Select ActiveSheet.Paste Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Else Beep End If End Sub Sub test() も Sub test2()も、エクセルの”切り取り”、”貼り付け”をした後、”コピー”し”形式を選択して貼り付け”で”値”を選んで貼り付ける作業を自動化したものです。 したがって、コピー元とコピー先のセル範囲中に互いを参照する計算式があると、コピー後の内容が変わってしまうのでご注意ください。

fuka222
質問者

お礼

ありがとうございます。 やり方もわかりましたしこれでなんとかなりそうです。 他にも回答していただいた方ありがとうございました。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.11

#10です。 別のやり方を思いつきました。時間が無いので、とりあえずひとつだけ。 #6の再改良版 Sub test() If Selection.Areas.Count = 2 Then Selection.Areas(1).Cut Cells(Selection.Areas(2).Row, Selection.Areas(2).Column).Select ActiveSheet.Paste Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Else Beep End If End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.9

#4の補足について (1) >ここの部分に下の回答にあった Public st ・・・・ End Sub この部分をコピーして貼り付けたり、 ---- Public stと Public s は Private Sub CommandButton1_Click() Endの外へ置いてください。Public変数で調べて見てください。 (2)注意事項 またデザインモーを解除しないとコマンドボタンをクリックしても、プロシージュアが反応しません(働きません)。慣れない人は、これが原因の場合が多い。 VBE画面で実行をクリックして、デザインモードをクリックしてアイコンの凹みをなくしてください。

fuka222
質問者

補足

ご指摘の通り、Public stと Public s を Private Sub CommandButton1_Click() Endの外、わからないので適当に先頭の部分に置いてみました(Public変数はちょっとわからないです)。 そしてデザインモードを終了してからやってみるとできるようになりました。 ただできるのは1つのセルのデータのだけのようですね。 範囲指定してうつすので1つのセルだけではちょっとまずいです。 でもいろいろありがとうございました。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.8

ボタンが選択されてしまうのは、デザインモードが終了していないからです。 ボタンをダブルクリックしてマクロをコピーした後、"コントロールツールボックス”バーにある"デザインモードの終了”ボタン(三角定規の絵柄)をクリックして、デザインモードを終わらせてください。そうすれば、ボタンが使えるようになります。 フォームや、ツールバーのコマンドボタンに登録する場合。 "ツール"→"マクロ”でVisual Basic Editorを起動し、"挿入"→"標準モジュール”で開いたウィンドウにコードをすべてコピーします。 マクロの登録ダイアログを開き(ボタンを描画、クリック、ダブルクリック、右クリック→マクロの登録などで開きます)、マクロを登録してください。 もうひとつ。前回のマクロではシート・ブック間のコピーが出来なかったので、別案を考えました。 コードAは、VBEの標準モジュールにコピーし、ボタン(ツールバーのコマンドボタンが便利)に登録してください。 コードBは、VBEのプロジェクトエクスプローラを開き、ThisWorkbookをダブルクリックして開いたウィンドウにコピーしてください。 使い方: コピー元セル範囲を選択した後、エクセルの”コピー”ボタンをクリック、コピー先のセルを選択し、上で作ったボタンをクリック。 'コードA-------------------------------------------- Public r As Range Sub test2() If Application.CutCopyMode = xlCopy Then ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False r.Value = "" Application.CutCopyMode = False Set r = Selection End If End Sub 'コードB------------------------------------------------- Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Application.CutCopyMode = False Then Set r = Selection End If End Sub

fuka222
質問者

補足

詳しく説明して頂いたおかげでやり方がわかりました。 ツールバーに登録できるなど希望どおりなのですが、1つだけ問題点がありました。 コピー元を範囲指定した後、貼り付けますが、コピー元と貼り付け先が重なってしまった場合、貼り付け先のデーターまでが消えてしまうんです。 例えばB1~C4を範囲指定してコピーでA1に貼り付ける場合、普通B1~C4の値はA1~B4に貼り付けられますが、コピー元と貼付け先が重なるB1~B4も消えてしまい、B1~B4がA1~A4にコピーされるだけになってしまいます。 このへんを改善できれば最高なのですが。 もし可能でしたらよろしくお願いします。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.7

#6です。変な文章でした。 >"ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや"フォーム"ワークシート上に作るボタンに登録して試してみてください。 "ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや、"フォーム"でワークシート上に作るボタンに登録して試してみてください。 あと、"コントロールツールボックス"で作るボタンに登録する場合は、Sub test() から、end Sub の間の中身だけをコピーして使ってください。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.6

VBAでやってみました。 "ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや"フォーム"ワークシート上に作るボタンに登録して試してみてください。 使い方 コピー元のセル範囲を選択した後,キーボードの[Ctrl]キーを押しながらコピー先のセル(ひとつでOK)を選択。 [Ctrl]キーから指を離した後、上で作ったボタンをクリック。 コピー先のセル範囲に既存のデータがあると、上書きされてしまうので注意してください。 Sub test() Dim r As Range If Selection.Areas.Count = 2 Then Set r = Selection.Areas(1) r.Copy Selection.Areas(2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False r.Value = "" Else Beep End If End Sub

fuka222
質問者

補足

コントロールツールボックスからコマンドに Private Sub CommandButton1_Click() 最初からあった Dim r As Range )  ・      ) コピー End If     ) end Sub   最初からあった こう入れた後、表示エクセルのアイコンで戻ってやってみたんですが、作ったボタンを押してもボタンが選択されるだけでした。 フォーム→ボタン→新規作成から Sub ボタン1_Click() End Sub 2段目にコピーしたものを入れたり、全部消してからコピーしたものを入れたりしましたが、エラーでてしまいました。 すいません、どうもどういうふうにコピーしていいのかわからないです。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.5

#2です。 >普通にコピーされるだけでコピー元は消えませんでした。 >どうしてだろ。 コピー直後にDeleteキーでコピー元を消すんです。 アタシは左手でマウスを使いますので、この手のツールは重宝してますが、右手でマウスを使われる方にはかえってめんどくさいかもしれませんね。

fuka222
質問者

お礼

なるほど、そうでしたか。 普通に右クリックコピーの後、貼り付ける前にコピー元をDELで消すとコピーできなくなってしまいますが、この方法だと消してからでもコピーできますね。 値だけがコピーできるみたいですし、これなら貼り付けた後コピー元に戻って消すという手間が省けますね。 ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>コマンドボタンというのはユーザー設定のところにあるコマンドボタンでしょうか? エクセルのシートのメニューの余白部で、右クリックするとツールバー一覧が出て、その中に「コントロールツールボックス」があります。それをクリックして出てくるツールボックスの中の、四角いだけのアイコンがコマンドボタンです。これをクリックしボックス外のワークシート上にカーソルを持っていくと、+にかわえいますから、左マウスボタンを押しつつ、南東方向にドラッグすると、ボタンが現われます。これをWクリックすると、VBE画面になり Private Sub CommandButton1_Click() End Sub が現われます。

fuka222
質問者

補足

Private Sub CommandButton1_Click()       この空間 End Sub ここの部分に下の回答にあった Public st   ・   ・ End Sub この部分をコピーして貼り付けたり、 Private Sub CommandButton1_Click()        End Sub この部分を消してから貼り付けたりしてやってみたんですが、(3)の通りコマンドボタンを押しても何もおきませんでした。 このへんの機能は使ったことないのでやり方間違えてたかもしれません。 すいません、やはりちょっとわかりませんでした。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAでお遊び程度のものが出来ました。 (1)シートにコマンドボタンを貼りつけます。キャプション(テキスト)を「切り取り」とでもしてください。 (2)コードはSheet1のイベントプロシージュア部に Public st Public s Private Sub CommandButton1_Click() st = ActiveCell.Value ActiveCell = "" s = 1 End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If s = 1 Then Target = st End If s = 0 End Sub (3)操作 (A)切り取るセルをマウスでポイントしクリックします。 (B)そしてボタンをクリック (C)貼りつけるセルをクリック。 一セルでなく、範囲でもSelectionに置きかえれば出きるかもしれないが。 なぜお遊びに感じるか、Public変数を使っていること、エクセルのシートのイベントがもうひとつ好みでない。例えば同じセルを指すと選択が変ったとしない(当たり前のようではあるが)ため、上記も同じセルへは戻せませんという限定つきになっている。

fuka222
質問者

補足

コマンドボタンというのはユーザー設定のところにあるコマンドボタンでしょうか? すいません、ちょっとよくわかりませんでした。 マクロでできれば一番いいのですが・・

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.2

マクロではできるのかもしれませんが、それ以外のExcelの機能ではできないようです。 クリップボード拡張ツールを併用することでできるようになると思われます。 たとえばArtTipsでは 範囲を選択してコピーの直後にDeleteキーで範囲を削除します。 値のみを貼り付けたい場所で右クリック2回→clipboardの中の目指す文字列をクリック で目的のことができます。

fuka222
質問者

補足

フリーソフトだったのでArtTipsというソフトをインストールして試してみました。 対象を右クリックコピーし、適当なセルで右クリックをダブルクリック後clipboardの中からコピーしたものを選んだのですが、普通にコピーされるだけでコピー元は消えませんでした。 どうしてだろ。

関連するQ&A

  • エクセル2000 VBA

    エクセル2000です。 シートをコピーして他のファイルにコピー&ペーストしようとしているのですが、シートに入っている数式までコピーされてしまうと元ファイルを参照しに行くので困っています。 次の方法として、形式を選んで貼り付けようとしてみました。 1) 値 2) 書式 3) 入力規則 の順序で貼り付けていくと、手動では出来るのですが、それをマクロで記録してから実行すると、一番最後の入力規則の部分で停止してしまいます。 数式以外のものはコピーしたいのです。 どなたかご存知でしたらよろしくお願いします。

  • 数式のみコピー / 書式のみ保護

    excel 2003 および 2007 を利用しています。 今、他の人にデータを記入してもらうためのシートを作成しているのですが、なかなかうまくいかないため、質問させていただきます。 シートには既にこちらでシートに条件付き書式を設定しています。 データは相手に入力して貰うのですが、相手がデータを切り取り・貼り付けをするため、条件付き書式も移ってしまうため、表示がめちゃくちゃになってしまいます。 相手の方が、「切り取り・形式を指定して貼り付け→数式」をやってもらえれば良いのですが、これでは相手の方の負担が多くなってしまいます。 そこで、ctrl+Vに[形式を指定して貼り付け→数式]のマクロを貼り付ける方法も考えたのですが、それたとctrl+zによる[元に戻す]も使えなくなってしまいます。 そこで (1)「数式のみをコピー」のマクロ (2)書式のみをロックして、条件付き書式および書式をコピーできない用にする方法 (3)ctrl+zも考慮にいれたマクロ など、方法を考えてみたものの、自分のスキルでは出来ませんでした。 何か良い方法はございますでしょうか?よろしくお願いします。

  • エクセルでのコピー方法

    エクセル97を使用しています。値はコピーせずに数式と書式だけコピーしたいのですがどうしたらいいですか?「形式を選択して貼り付け」をしても入力した値が入ってしまいます。できないのなら数式と書式だけ残して値だけ削除する方法があれば教えてください。

  • エクセルのデータ移動で

    いつもお世話になります。  エクセルで罫線はそのままでセルのデータを移動する場合、コピーであれば「値のみ」移動できるのですが、切り取り(元のセルは空白に変更)の場合は、どうしても罫線も一緒に切り取られてしまいます。  罫線は決められたものため変更できないのですが、データだけは切り取って移動したいのです。(コピーの値のみ移動であれば元のセルをデリートする手間が残ります。)  いろいろ調べましたがどうしてもわかりません。  どなたかお詳しい方ご教示ください。

  • エクセル・セルの値のみをコピーすることについて

    セルの値のみをコピーするには、「形式を選択して貼り付け」の「値」を選ぶことで可能なことはわかります。 しかし、値が貼りついた後にEnterキーを押すとその値がすべてをコピーしたように変わってしまいます。 例えば、元のセルに関数があればその関数もコピーされてしまいます。 Enterキーではなく、Escキーを押すと問題なく値のみが貼りつきます。 この現象を設定等を変えることによって、Enterキーを押しても値のみを貼りつけるようにすることは可能でしょうか? エクセル2000、2003、2007でも同様の現象がおきます。 よろしくお願いします。

  • EXCELで値のコピーをキーボードのみで行いたい

    あるセルに数式が入っていて、そこに計算結果があったとします。そのセルをコピーして、値を別のセルに貼付けたいのですが、通常は形式を選択して「値のみ」にチェックを入れて貼り付けますが、通常のコピペのように「CTRL+C」→「CTRL+V」のように、キーボード操作のみで値のみの貼付けを行う方法はありませんか?もしくは、ツールメニューはないですか?書式コピーのツールメニューはあるのですが、値コピーは見つけられませんでした。よろしくお願いします。

  • エクセル関数で検索した結果の値だけ表示したい

    エクセルのセルに値を探すvlook関数を入力していますが、そのままグラフや集計表を作ったり、移動させたりと色々編集したいので値を探した後、数式を値に変えたいのです。 =IF(ISNA(VLOOKUP(D6,**!$B:$E,4,FALSE)),"",VLOOKUP(D6,**!$B:$E,4,FALSE))のような値が見つからなかった時は空白になる数式が入っています。 値が見つかった場合、「コピー」して「形式を選択して貼付」のような「値」だけにする方法ありませんか? VBAは初心者でネットを見ながら作れる程度です。 イベントで実行するマクロなど調べてはみたのですが、値が見つかったら実行するマクロや空白でなくなったら実行するマクロなど作れたらと思っています。 詳しい方どうか教えて下さい。

  • エクセル2003 数式を値で挿入する方法 

    EXCEL2003 VLOOKUPでだした値と書式を 他シートに挿入したい。 VLOOKUPで作成した表を 形式で選択 値で貼り付けではなく 挿入したい のです。   現在 値の行列だけ 行挿入をし 形式選択で値を貼り付け 値と元の書式を選択して行列を貼り付けています。 これをマクロ以外でできる方法はないでしょうか? よろしくお願いします。

  • エクセル2010 マクロで値のみコピー

    こんばんは、エクセル2010を使っています。 マクロでデータを値のみをコピーしたいのですが、うまくいきません。 文は 以下の様なものです。 Sub ボタン1_Click() Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1").PasteSpecial Paste:=xlValues End Sub マクロの画面を閉じようとした時に、Pasteの部分が選択され  コンパイルエラー 修正候補:ステートメントの最後 と言うダイアログボックスが出てしまいます。 ご存知の方教えて頂けないでしょうか、よろしくお願いします。 ※ ちなみに Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1")  ならちゃんとコピーされるのですが、コピー元の数式がコピーされるので、値のみをコピーしたいのです。

  • Excelで、値や書式、行幅、行高はそのままセルの数式とリンク先を削除してコピーしたい

    Excelで、セルの数式とリンク先を削除し、シートの内容(値と書式、列幅、行高)をそのままコピーしたいです。貼り付けオプションの「値と元の書式」を指定してコピーし、さらに「元の列幅を保持」を指定しても、行高が変わってしまったままです。 値と書式、列幅、行高はそのまま、数式とリンク先を削除して、新しいシートにデータを貼り付ける方法はありますでしょうか?

専門家に質問してみよう