質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.02%

エクセルで一部のセル(列)のみコピペ出来ないようにしたい

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 779

SAKURAI.Y

score 6

■|A|B|C|
1|社員番号|名前|データ|
2|123456|田中:|データ|

上記のようなエクセルのシートがあるとして、
社員番号の列のみコピーペーストを禁止したいのです。
名前とデータの列はコピペを許可したいです。

VBAでやる必要があるようで、ネットから以下のソースを拾ってきましたが、これらはシート全部に適用されます。
一部の列のみ適用するにはどのように改良すれば良いのでしょうか。

Option Explicit

'**
' オープン
'**
Public Sub Auto_Open()
    ' コピペの制御
    Call CopyPasteCommandControl(False)
End Sub
'**
' クローズ
'**
Public Sub Auto_Close()
    ' コピペの制御
    Call CopyPasteCommandControl(True)
End Sub
'**
' コピー&ペーストの制御
' 引数 true:利用可, false: 利用不可
'**
Public Sub CopyPasteCommandControl(Enabled As Boolean)
    Dim Cmd As Variant
    Dim CmdNames As Variant
    CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")
    'ショートカット制御
    If Enabled = False Then
        Application.OnKey "^c", ""
        Application.OnKey "^v", ""
        Application.OnKey "^x", ""
    Else
        Application.OnKey "^c"
        Application.OnKey "^v"
        Application.OnKey "^x"
    End If

    'コマンドボタン制御
    For Each Cmd In CmdNames
        If Cmd = "Worksheet Menu Bar" Then
            With Application.CommandBars(Cmd).Controls(2)
                .Controls(3).Enabled = Enabled
                .Controls(4).Enabled = Enabled
                .Controls(5).Enabled = Enabled
            End With
        Else
            With Application.CommandBars(Cmd)
                .FindControl(, 19).Enabled = Enabled 'Copy
                .FindControl(, 22).Enabled = Enabled 'Paste
                .FindControl(, 21).Enabled = Enabled 'Cut
            End With
        End If
    Next Cmd
 End Sub

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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ttyp03

    2019/02/07 17:02

    コピーもダメ、ペーストもダメってことでしょうか?それともペーストだけダメ?入力はOK?

    キャンセル

  • SAKURAI.Y

    2019/02/07 17:05

    失礼しました。 ここは手入力させる運用としたく、コピーもダメ、ペーストもダメとしたいです。
    どちらか片方だけなら「ペースト」のみ禁止としたいです。

    キャンセル

回答 3

checkベストアンサー

0

どこまで厳密さを求めるかにもよるとは思いますが、VBAのCommandBarsオブジェクトはApllicationのControlなのでこれを前提にするとアプリ全体のコントロールの変更にしかならないと思います。
アプリケーション全体で禁止して、独自のボタンなりメニューなりを作ってセル位置見てコピペ動作そのものを別途独自に作ればできないことはないような気もしますが、そんな面倒なことはしたくないです…。

なので、ご質問の内容ですと、コピペしてもいいところのセルなり行なり列なりをセルロックを外して、シート保護でロックされた範囲の選択そのものを禁止してしまえばよいのではないでしょうか?
対象セルの選択自体できませんので、コピペ以前の問題で防止できるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

特定の列で、キーボードからの入力は許可するが、コピー、ペーストは禁止したいということだと、難しいそうですね。
自分なら、シートを編集ロックしておいて、入力はユーザーフォームでという設計にするかな。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

hatena19さんが言われるように、
全ての操作を禁止し、独自の機能(してもいい操作)だけを独自のボタン等に割り当てるのが、
簡単かもしれませんが、完璧なやり方はないと思います。
(エクセルでコピペを禁止できたとしても、画面のコピーは出来ますので。。。
あと、メモ帳に貼付はありなのだろうかとか、いろいろ考えてしまいます。)

どういう作業をしていて、
どうなってはいけないから、コピペを禁止したいのですか?
あと、コピーするセルはどのブックのどのシートにあり、
貼り付けるのは、どのブックどのシート上ですか?
それから、どのシートのコピーを禁止し、
どのシートにペーストは禁止とかありますか?
想定している状況を全て書いて下さい。
あと、ユーザーがするであろう操作と、
期待している結果も書いて下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる