タイトル通りなのですが、Excelで『 Ctrl + X (切り取り) 』を使用できなくする方法(マクロ・VBA等)をご存知の方、教えてください。
社内のシステムをExcelで作っているのですが、多くの方が『 Ctrl + X 』を『 Ctrl + C(コピー) 』と間違えて使用してしまい、シートが破壊されてしまう現状であります。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ANo.#1の追記です。


>このモジュールは、どこで、どのタイミングで実行させればよいのでしょう?
 マクロを動かすとかそういうことは何もしません。セルを選択したときに勝手に動きます。

>ちなみに、使用バージョンはExcel95なのですが、動作可能でしょうか?
 Excel97では確認しましたが、Excel95は手持ちがないため未確認です。コピーして試してみるのが手っ取り早いですが・・・
    • good
    • 0

標準モジュールに以下のプロシージャを登録しておきます。



Public Sub NoCtrlX()
Application.OnKey "^{x}", ""
End Sub

Public Sub CtrlX()
Application.OnKey "^{x}"
End Sub

で、作業の一番最初にマクロで、NoCtrlX()を実行しておきます。
その後はずっとCtrl+Xは使えなくなるはずです。

その後、もしCtrl+Xを使いたくなったら、マクロで、CtrlX()を実行して、元に戻します。
ちょっと無理やりっぽいですが。

この回答への補足

ご回答ありがとうございます。
なるほど、これは使えますね^^
ショートカットメニューの『切り取り』だけを使えなくする方法はご存知ありませんか?

補足日時:2001/09/06 13:45
    • good
    • 0

こんな方法はいかがでしょうか?(Excel2000で動作確認しました)


VBAに本文の無いマクロを記述する。
例)
Text()

End sub

ツール(T)-マクロ(M)-マクロ(M)...でマクロ一覧を出す。
一覧のなかから作成したマクロ(ここではTest)を選び、オプション(O)...をクリック
Ctrl + □
となっているので□の中に小文字でxを入れる
~~~~~~~~
OKをクリック
とすると、『Ctrl + X』 で実行文のないマクロを実行します。

マクロはpersonal.xlsなどの名前で保存して、xlstartフォルダに入れておけば毎回エクセルが立ち上がる際に起動されます。

もっと良い方法があるのかも知れませんが、私が思いついたのはこれです。
ご参考まで。

この回答への補足

ご回答ありがとうございます。
なるほど、ようは『Ctrl+X』を他の機能にすり変えてしまうわけですね。(この場合は、中身の無いモジュールの実行ですね^^)
あと、欲を言うと、ショートカットメニューの『切り取り』も使えないようにしたいのですが。。。
メニューバーの『切り取り』は殆どの人が使っていないので、どちらでもいいのですが。。。

補足日時:2001/09/06 13:40
    • good
    • 0

問題はCtrl-X(切り取り)をどこで感知するかですね。


下ではワークシートのSelectionChangeで行ってみました。切り取りモードなら解除しています。当然、編集から行う切り取りもできなくなります。
切り取りをさせたくないシートのコードウインドウに貼り付けます。こんなのでいい?

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  With Application
    If .CutCopyMode = xlCut Then
      .CutCopyMode = False
    End If
  End With
End Sub

この回答への補足

ご回答ありがとうございます。
このモジュールは、どこで、どのタイミングで実行させればよいのでしょう?
あまり知らないものですから・・・。
ちなみに、使用バージョンはExcel95なのですが、動作可能でしょうか?

補足日時:2001/09/06 13:36
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

QEXCELで、「CTRL+SHIFT」や「CTRL+Space」が効かなくなる時

 EXCELで、該当「行」「列」の一括指定をするためのショートカット機能(「CTRL+SHIFT」や「CTRL+Space」)が効かなくなる時が、忘れた頃に発生して、困るときがあります。片方はできるけど、片方はだめと言う様に。。。

 こんな時は、設定のどこをいじったら良いのでしょうか?ご存知の方教えてください。

Aベストアンサー

こんにちは。maruru01です。

[Ctrl]+[Space]の列ごと選択は知りませんが、[Shift]+[Space]の行ごと選択は、IMEモードがONの場合に使用出来ません。
(少なくとも私の環境では)
多分[Shift]キーがらみのものも同様だと思います。

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Q宜しくお願いします。Excelでフォルダ内のブックを全て開くのに、ctrl+Aで全て洗濯して右クリッ

宜しくお願いします。Excelでフォルダ内のブックを全て開くのに、ctrl+Aで全て洗濯して右クリックで開くとすると、他の業務でブックですが開くことができたのに、、今回は右クリックしても、開く、が現れません。なので、バーにある開くをクリックすると1枚だけしかひらきません。どうしてなのでしょうか?ブックの中のsheetは、各1sheetで、各sheet約3万行弱です。各ブックのサイズは4MBぐらいです。ブック数は月のデータなので、30か31です。何か考えられることがあれば教えて下さい。宜しくお願いします。

Aベストアンサー

全部開く時と開かない時でOSが違ってませんか?
Vistaからは、一括で開けるファイルが15個以下に制限されているようです。

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

Qexcel配列関数ctrl+shift+enter

いつも、大変お世話になっております。

vbaの記述で配列関数の部分が分からず投稿させていただきました。ご指導お願いいたします。

ご迷惑をおかけしないように、注意を払っておりますが、不行き等ございましたら、ご容赦ください。


具体的なコードと致しましては、下記です。

With ThisWorkbook.Worksheets("chart").Range("C4").Resize(myrows, 200)
.Formula = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
End With

式を埋め込んで、一つ一つのセルを選択して「ctrl+shift+enter」ボタンを押せば、いいのですが手間なので、

自動的に一括して「ctrl+shift+enter」ボタンを押してもらえるような記述内容の変更の仕方をご指導いただけないでしょうか

当方、excel2000を使用しています。

よろしくお願いいたします。

Aベストアンサー

とりあえず確実に簡単にできる方法としては,次のようなマクロにします。

with thisworkbook.worksheets("chart")
.range("C4").formulaarray = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
.range("C4").copy destination:=.range("D4").resize(1, 199)
.range("C4").resize(1,200).copy destination:=.range("C5").resize(myrows-1, 200)
end with




マクロ以前にエクセル画面で,どうやってその式を使うかと言えば
1.C4セルに数式を記入してCtrl+Shift+Enterで入力する
2.右に下にコピー貼り付ける
という手順を行います。
上述は,この「出来る手順」をそのままマクロに仕立てたものです。

先に範囲を選択してその式を記入し,Ctrl+Shift+Enterしても,意図した計算結果は得られません。
つまり
セル範囲まとめて.formulaarray = "=今の配列数式"
というマクロを書いても,上手く行かないということです。

とりあえず確実に簡単にできる方法としては,次のようなマクロにします。

with thisworkbook.worksheets("chart")
.range("C4").formulaarray = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
.range("C4").copy destination:=.range("D4").resize(1, 199)
.range("C4").resize(1,200).copy destination:=.range("C5").resize(myrows-1, 200)
end with




マクロ以前にエクセル画面で,どうやってその式を使うかと言えば
1.C4セルに数式を記入してCtrl+Shift+Enterで入力する
2.右に下に...続きを読む

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

Qexcel でctrl+shift + 矢印ボタン

入力しているセルだけをまとめて選択する 操作で とても便利でしたが、

ある日突然使えなくなりました。

ctrl + 矢印ボタン や shift + 矢印ボタン は使えています。

どうか原因をご教授ください。

Aベストアンサー

スクロールロックが有効になっていない?

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

QExcelのショートカット Ctrl+?

Excel使用中に、

Ctrl + ?

とキー操作すると、「該当するセルが見つかりません。」と書かれたポップアップが表示されます。これはいったいどんな機能なんでしょうか。どんな状態なら「該当するセル」が見つかるのでしょうか。
また、

Ctrl + {

でも同じポップアップが表示されますが、これは Ctrl+? と同じ機能なのでしょうか。

Aベストアンサー

>Ctrl + ?
ではなく、Ctrl + /

>Ctrl + {
ではなく、Ctrl + ]

で、それぞれ下記のサイトに
エクセルのショートカット一覧が記載されています。
http://www2.odn.ne.jp/excel/xlshortcut.html


人気Q&Aランキング

おすすめ情報