アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (12件中1~10件)

#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()も、エクセルの”切り取り”、”貼り付け”をした後、”コピー”し”形式を選択して貼り付け”で”値”を選んで貼り付ける作業を自動化したものです。
したがって、コピー元とコピー先のセル範囲中に互いを参照する計算式があると、コピー後の内容が変わってしまうのでご注意ください。
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/10/15 00:27

#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
    • good
    • 0

#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 の部分は、必ずモジュールのウィンドウ中の一番上にコピーしてください。
    • good
    • 0

#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つのセルだけではちょっとまずいです。
でもいろいろありがとうございました。

補足日時:2003/10/13 21:44
    • good
    • 0

ボタンが選択されてしまうのは、デザインモードが終了していないからです。


ボタンをダブルクリックしてマクロをコピーした後、"コントロールツールボックス”バーにある"デザインモードの終了”ボタン(三角定規の絵柄)をクリックして、デザインモードを終わらせてください。そうすれば、ボタンが使えるようになります。

フォームや、ツールバーのコマンドボタンに登録する場合。

"ツール"→"マクロ”で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にコピーされるだけになってしまいます。
このへんを改善できれば最高なのですが。
もし可能でしたらよろしくお願いします。

補足日時:2003/10/13 19:58
    • good
    • 0

#6です。

変な文章でした。

>"ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや"フォーム"ワークシート上に作るボタンに登録して試してみてください。

"ツール"→"ユーザー設定"で作るツールバーのコマンドボタンや、"フォーム"でワークシート上に作るボタンに登録して試してみてください。

あと、"コントロールツールボックス"で作るボタンに登録する場合は、Sub test() から、end Sub の間の中身だけをコピーして使ってください。
    • good
    • 0

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段目にコピーしたものを入れたり、全部消してからコピーしたものを入れたりしましたが、エラーでてしまいました。
すいません、どうもどういうふうにコピーしていいのかわからないです。

補足日時:2003/10/12 15:22
    • good
    • 0

#2です。


>普通にコピーされるだけでコピー元は消えませんでした。
>どうしてだろ。

コピー直後にDeleteキーでコピー元を消すんです。
アタシは左手でマウスを使いますので、この手のツールは重宝してますが、右手でマウスを使われる方にはかえってめんどくさいかもしれませんね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/12 14:56

>コマンドボタンというのはユーザー設定のところにあるコマンドボタンでしょうか?


エクセルのシートのメニューの余白部で、右クリックするとツールバー一覧が出て、その中に「コントロールツールボックス」があります。それをクリックして出てくるツールボックスの中の、四角いだけのアイコンがコマンドボタンです。これをクリックしボックス外のワークシート上にカーソルを持っていくと、+にかわえいますから、左マウスボタンを押しつつ、南東方向にドラッグすると、ボタンが現われます。これを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)の通りコマンドボタンを押しても何もおきませんでした。
このへんの機能は使ったことないのでやり方間違えてたかもしれません。
すいません、やはりちょっとわかりませんでした。

補足日時:2003/10/11 23:40
    • good
    • 0

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変数を使っていること、エクセルのシートのイベントがもうひとつ好みでない。例えば同じセルを指すと選択が変ったとしない(当たり前のようではあるが)ため、上記も同じセルへは戻せませんという限定つきになっている。

この回答への補足

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

補足日時:2003/10/11 18:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています