- ベストアンサー
エクセルで値だけを移動することはできるでしょうか?
値のみを移動したいのですが、切り取りにして貼り付けると切り取った部分の書式が消える上に、貼り付けた部分に数式も入ってしまいます。 なのでコピーして形式を選択して貼付け、値にしているのですが、そうするとコピー元の値は残ってしまいます。 なのでコピー後コピー元の値をDELキーで消しているのですが、いちいちコピーした部分に戻って範囲指定して消すというのは面倒です。 値だけが移動できるという機能があればいいのですが、そういった機能はエクセルにあるのでしょうか? マクロでそういったことができないものかといろいろ試したりしてみたのですがうまくいきません。 バージョンは2000です。 ご存知の方いたらよろしくお願いします。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
#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)
#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()も、エクセルの”切り取り”、”貼り付け”をした後、”コピー”し”形式を選択して貼り付け”で”値”を選んで貼り付ける作業を自動化したものです。 したがって、コピー元とコピー先のセル範囲中に互いを参照する計算式があると、コピー後の内容が変わってしまうのでご注意ください。
- sakenomo
- ベストアンサー率52% (35/67)
#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/17069)
#4の補足について (1) >ここの部分に下の回答にあった Public st ・・・・ End Sub この部分をコピーして貼り付けたり、 ---- Public stと Public s は Private Sub CommandButton1_Click() Endの外へ置いてください。Public変数で調べて見てください。 (2)注意事項 またデザインモーを解除しないとコマンドボタンをクリックしても、プロシージュアが反応しません(働きません)。慣れない人は、これが原因の場合が多い。 VBE画面で実行をクリックして、デザインモードをクリックしてアイコンの凹みをなくしてください。
補足
ご指摘の通り、Public stと Public s を Private Sub CommandButton1_Click() Endの外、わからないので適当に先頭の部分に置いてみました(Public変数はちょっとわからないです)。 そしてデザインモードを終了してからやってみるとできるようになりました。 ただできるのは1つのセルのデータのだけのようですね。 範囲指定してうつすので1つのセルだけではちょっとまずいです。 でもいろいろありがとうございました。
- sakenomo
- ベストアンサー率52% (35/67)
ボタンが選択されてしまうのは、デザインモードが終了していないからです。 ボタンをダブルクリックしてマクロをコピーした後、"コントロールツールボックス”バーにある"デザインモードの終了”ボタン(三角定規の絵柄)をクリックして、デザインモードを終わらせてください。そうすれば、ボタンが使えるようになります。 フォームや、ツールバーのコマンドボタンに登録する場合。 "ツール"→"マクロ”で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
補足
詳しく説明して頂いたおかげでやり方がわかりました。 ツールバーに登録できるなど希望どおりなのですが、1つだけ問題点がありました。 コピー元を範囲指定した後、貼り付けますが、コピー元と貼り付け先が重なってしまった場合、貼り付け先のデーターまでが消えてしまうんです。 例えばB1~C4を範囲指定してコピーでA1に貼り付ける場合、普通B1~C4の値はA1~B4に貼り付けられますが、コピー元と貼付け先が重なるB1~B4も消えてしまい、B1~B4がA1~A4にコピーされるだけになってしまいます。 このへんを改善できれば最高なのですが。 もし可能でしたらよろしくお願いします。
- sakenomo
- ベストアンサー率52% (35/67)
#6です。変な文章でした。 >"ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや"フォーム"ワークシート上に作るボタンに登録して試してみてください。 "ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや、"フォーム"でワークシート上に作るボタンに登録して試してみてください。 あと、"コントロールツールボックス"で作るボタンに登録する場合は、Sub test() から、end Sub の間の中身だけをコピーして使ってください。
- sakenomo
- ベストアンサー率52% (35/67)
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
補足
コントロールツールボックスからコマンドに Private Sub CommandButton1_Click() 最初からあった Dim r As Range ) ・ ) コピー End If ) end Sub 最初からあった こう入れた後、表示エクセルのアイコンで戻ってやってみたんですが、作ったボタンを押してもボタンが選択されるだけでした。 フォーム→ボタン→新規作成から Sub ボタン1_Click() End Sub 2段目にコピーしたものを入れたり、全部消してからコピーしたものを入れたりしましたが、エラーでてしまいました。 すいません、どうもどういうふうにコピーしていいのかわからないです。
- Hageoyadi
- ベストアンサー率40% (3145/7860)
#2です。 >普通にコピーされるだけでコピー元は消えませんでした。 >どうしてだろ。 コピー直後にDeleteキーでコピー元を消すんです。 アタシは左手でマウスを使いますので、この手のツールは重宝してますが、右手でマウスを使われる方にはかえってめんどくさいかもしれませんね。
お礼
なるほど、そうでしたか。 普通に右クリックコピーの後、貼り付ける前にコピー元をDELで消すとコピーできなくなってしまいますが、この方法だと消してからでもコピーできますね。 値だけがコピーできるみたいですし、これなら貼り付けた後コピー元に戻って消すという手間が省けますね。 ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
>コマンドボタンというのはユーザー設定のところにあるコマンドボタンでしょうか? エクセルのシートのメニューの余白部で、右クリックするとツールバー一覧が出て、その中に「コントロールツールボックス」があります。それをクリックして出てくるツールボックスの中の、四角いだけのアイコンがコマンドボタンです。これをクリックしボックス外のワークシート上にカーソルを持っていくと、+にかわえいますから、左マウスボタンを押しつつ、南東方向にドラッグすると、ボタンが現われます。これをWクリックすると、VBE画面になり Private Sub CommandButton1_Click() End Sub が現われます。
補足
Private Sub CommandButton1_Click() この空間 End Sub ここの部分に下の回答にあった Public st ・ ・ End Sub この部分をコピーして貼り付けたり、 Private Sub CommandButton1_Click() End Sub この部分を消してから貼り付けたりしてやってみたんですが、(3)の通りコマンドボタンを押しても何もおきませんでした。 このへんの機能は使ったことないのでやり方間違えてたかもしれません。 すいません、やはりちょっとわかりませんでした。
- imogasi
- ベストアンサー率27% (4737/17069)
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変数を使っていること、エクセルのシートのイベントがもうひとつ好みでない。例えば同じセルを指すと選択が変ったとしない(当たり前のようではあるが)ため、上記も同じセルへは戻せませんという限定つきになっている。
補足
コマンドボタンというのはユーザー設定のところにあるコマンドボタンでしょうか? すいません、ちょっとよくわかりませんでした。 マクロでできれば一番いいのですが・・
- Hageoyadi
- ベストアンサー率40% (3145/7860)
マクロではできるのかもしれませんが、それ以外のExcelの機能ではできないようです。 クリップボード拡張ツールを併用することでできるようになると思われます。 たとえばArtTipsでは 範囲を選択してコピーの直後にDeleteキーで範囲を削除します。 値のみを貼り付けたい場所で右クリック2回→clipboardの中の目指す文字列をクリック で目的のことができます。
補足
フリーソフトだったのでArtTipsというソフトをインストールして試してみました。 対象を右クリックコピーし、適当なセルで右クリックをダブルクリック後clipboardの中からコピーしたものを選んだのですが、普通にコピーされるだけでコピー元は消えませんでした。 どうしてだろ。
- 1
- 2
お礼
ありがとうございます。 やり方もわかりましたしこれでなんとかなりそうです。 他にも回答していただいた方ありがとうございました。