プロが教える店舗&オフィスのセキュリティ対策術

例えば、A列は縦に結合できるが、B列は結合できない、という風に設定できませんか?

質問者からの補足コメント

  • すみません、書き方が悪かったです。結合はできないが、入力はできるようにしたいのです。

      補足日時:2019/05/22 19:28
  • 「ブックオープン時に右クリックメニューにマクロを登録」以降を具体的に教えていただくことはできますでしょうか?今、No.3の方の記入はできるが、結合はできないまで、ついて行っています。

    No.4の回答に寄せられた補足コメントです。 補足日時:2019/05/24 20:16
  • 赤字は消えたのですが、結合できてしまいます。A5~C10です。何が悪いのでしょうか。

    No.10の回答に寄せられた補足コメントです。 補足日時:2019/05/27 16:47

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

セルに保護をかければ可能だと思いますが?

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2019/05/23 22:11

No1です。


「結合はできないようにする」
「入力はできるようにする」
というのは無理でしょう
    • good
    • 0

B列以降で複数セルの選択を出来ない様にすれば可能ですが、とりあえずコードを記載します


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count > 1 Then
If Target.Column > 1 Then
Cells(Target.Row, Target.Column).Select
End If
End If
End Sub
要は複数セルが選択されたときにA列ならOKだがB列以降は初期選択セルに強制的に選択をもどすという処理です
ただこれの欠点が2点
1.A列から開始した横方向への複数選択は許可される
2.複数選択での一括削除処理等でB列以降の選択が出来ない
上記が問題なければお試しください
    • good
    • 0
この回答へのお礼

皆様、ご親切にご説明頂きありがとうございました。きっと簡単にできるのだろうと思っていましたが、大変な事なのだとわかりました。コードのご説明を頂きましたが、コードが何なのかわからないレベルの私です。もし教えてやろうという方がおられましたらトライしてみたいと思います。ありがとうございました。

お礼日時:2019/05/23 21:39

こんにちは



No3様のアイデアがかなり良さそうに思いますが、思いついたので別案です。
結合する際の手順が少し変わりますが、かえって操作手間は減ることになるかも。
(右クリックからのメニュー選択だけで結合できるようになるので)

内容のイメージとして、
セルのロックを外した状態で、シートの保護をかけます。
(必要なら「セルの書式設定」も許可してもよい)
この状態で、各セルの入力は可能だが結合・解除はできない状態になります。
セルの右クリックメニューに「セル結合」を新しく登録しておいて、このメニュー経由で(指定された範囲であれば)セルの結合を行えるようにします。


後半部分の実現方法はマクロによることになりますが、
・ブックオープン時に右クリックメニューにマクロを登録
・メニューに対応するマクロは
 「選択範囲がA列内のみであれば結合する」内容
・ブッククローズ時に登録マクロを削除
といった感じでマクロを作成しておけば、あとは自動的に実現されるようにすることができるものと思います。

※ 対象が1シートだけの場合は、上記の登録・削除をシートの開閉に連動させるようにしておけばよいでしょう。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご親切にありがとうございます。

お礼日時:2019/05/23 22:12

No.3です


「教えてやろうという方」
呼びましたか?(笑)
コードとは?
Excelでもっといろんなことが出来るようになるプログラミングです
VisualBasicApplicationという言語で、基本はBASICという簡易プログラム言語をVISUAL化したものでVBと言います。それを更にOFFICEのアプリに特化したものということですね
プログラムが分からない人にとってはちんぷんかんぷんだと思いますが、実はプログラムって命令が3つしかないんですよ!
プログラマーという人たちは、言語を知っているというよりはロジックを組み立てる技術を持っている人なのです

おっと、話が脱線してきているので一先ず本題に

では一通りの手順です
・ファイルメニューよりオプションを選択
・リボンのユーザー設定タブを選択
・画面右欄リボンのユーザー設定メイン タブの中で開発のチェックボックスをON
・ウィンドウを閉じると開発タブが追加されています

これでコードが触れるようになりました
上段メニューの右端に開発タブが表示されますので、選択してみてください
一番左にある『Visual Basic』を押すとコードの画面が開きます
画面左の「プロジェクト」ウィンドウにVBAProject("ブック名")
階層を下げて「Microsoft Excel Objects」というフォルダがあります
更に下の階層に「Sheet1("シート名")」と「ThisWorkbook」というのがあると思います
では「Sheet1」をダブルクリックしてください、右側に真っ白なウィンドウが開きますので、左上の「(General)」の右側にあるプルダウン(▼)を押して「Worksheet」を選択してください。
すると下に「~SelectionChange」というのが勝手に記載されます
そしたら前回No.3で記載したコードをその中にそのまま張り付けて下さい
作業は以上で終了です

なんのこっちゃ!
という反論のために少し補足します
今コードを記載したところはSheet1に限定した機能の追加です
右側Worksheetというオブジェクトの中で、SelectionChange(セルの移動や選択の変更など)が行われた時になんらかの命令を下す
ということですね
先頭行の右側に「Target」というのがあると思いますが、ここにセルの情報が引き継がれてくるのです

前回のプログラムを要約すると

'当該ワークシートでセル選択が変更された場合
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 '選択されたセルの数が1つじゃない時に
 If Selection.Count > 1 Then
  '選択された先頭のセルがA列(1列目)ではない時に
  If Target.Column > 1 Then
   '選択された先頭のセルにフォーカスを移動する
   Cells(Target.Row, Target.Column).Select
  End If
 End If
End Sub
といった感じでしょうか。つまり「もしA列を起点としない複数選択が行われた場合に、強制的に複数選択を解除して先頭のセルにフォーカスを戻す」という処理になるわけです

ん~~~長い・・・
ソロソロ読むのも疲れてきたでしょうから、この辺で去ります(笑)
    • good
    • 0
この回答へのお礼

なんと、できました。  結合はできないが入力が出来ました。びっくり。ありがとうございました。ですが、あるセルは結合できないが、その他のセルは結合ができるというのが目標です。No.4の方の方法がそれだと思うのですが、No.4の方、申し訳ありませんが、再度わかりやすくご説明頂けないでしょうか?

お礼日時:2019/05/24 20:13

No.3です


「あるセルは結合できないが、その他のセルは結合ができる」
出来ますよ

Targetのプロパティで
Row(縦位置)、Rows.Count(縦選択数)、Column(横位置)、Columns.Count(横選択数)
がありますが、これらは複数選択の際の座標を取得できるものです
なので、それぞれに判定を加えればいいので、例えば結合したくないセル範囲がA5~C10だけだとします、この場合座標で表記すると(1,5),(3,5),(1,10),(3,10)の範囲に複数選択の範囲が重なっていればNGという判定式にして
前回の「If Selection.Count > 1 Then」の部分に当てはめればいいのです
ではその判定式とは?
選択不可の四角い範囲と選択された四角い範囲が重なっているかどうかを見るので
それぞれ縦横の二次元判定を行います
 R1 <= Target.Row + Target.Rows.Count - 1
 R2 >= Target.Row
 C1 <= Target.Column + Target.Columns.Count - 1
 C2 >= Target.Column
この4つの条件を全て満たす場合に、それぞれの選択範囲が重なっているということになるのでとりあえず初めからすべてのコードを記載しておきます

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim R1 As Integer
 Dim R2 As Integer
 Dim C1 As Integer
 Dim C2 As Integer

 R1 = 1
 R2 = 3
 C1 = 5
 C2 = 10
 If Selection.Count > 1 Then
  If R1 <= Target.Row + Target.Rows.Count - 1 And _
   R2 >= Target.Row And _
   C1 <= Target.Column + Target.Columns.Count - 1 And _
   C2 >= Target.Column Then
   Cells(Target.Row, Target.Column).Select
  End If
 End If
End Sub

今回は変数を使用します
変数とは「Dim~」と記載しているところで、それぞれ4つの変数を数値として使いますと宣言している部分です。値を代入したり変化させたりする箱のようなものですね
なので、中段あたりにある4行の数値を変更するだけで、好きな範囲に対して結合操作が出来なくなります

ちなみに範囲が複数ある場合には変数を設定しているところから最初のIF文の最後の行までを繰り返し記載すればいくらでも設定可能です

べっ、別にNo.4の方に負けたくないとか、そんなんじゃないんだからね!

お試しください(笑)
    • good
    • 0
この回答へのお礼

ありがとうございます。今、やってみています。If R1 < =からの4行が赤字になってしまいます。同じように打ち込んでいるのですが。何が悪いのでしょうか?

お礼日時:2019/05/27 15:34

こんなのはどうでしょうか。


SelectionChangeイベントで、選択範囲が「B列を含む、且つ、複数セル」の場合、シートにプロテクトをかけています。それ以外の場合はプロテクトを解除します。基本的に、これだけで結合(正確には書式設定)は出来なくなります。
ただし、結合されているセルをB列にコピーすることはできてしまうので、それを防止するためにChangeイベントで、Undoをかけてみました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Range("B:B"), Target) Is Nothing Or _
Target.CountLarge <= 1 Then
If ActiveSheet.ProtectionMode Then ActiveSheet.Unprotect
Else
Cells.Locked = False
ActiveSheet.Protect UserInterfaceOnly:=True
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
If IsNull(Range("B:B").MergeCells) Then
MsgBox "B列を結合することはできません。"
Application.Undo
End If
Application.EnableEvents = True
End Sub
    • good
    • 0

No4です。



>No.4の方、申し訳ありませんが、再度わかりやすくご説明頂けないでしょうか?
現在PC環境がないため回答ができないのと、来週はたてこんでいてすぐには回答できそうもありません。
情況にもよりますが、最悪だと週末なので、かなり遅くなってしまいそうです。

私の考え方は示してあるので、どなたかが具体化してくださるかもしれません。
また、ご質問の内容を実現する方法はひとつとは限りませんので、他の回答者がアイデアを出してくださることもあるでしょう。

ご質問を実現できるなら方法は問わないものと思いますので、早い回答で満足のいくものがあれば、そちらをご採用なさってください。
    • good
    • 0

No.6です


赤字になるということは数式が正しくないなどなど
恐らくですが、文末の「_」(アンダーライン)の前に空白が無いのではないでしょうか
    • good
    • 0

No.6ですが!


もとい、『_(アンダーライン)』自体の記載が無いのかもしれません
基本的にIF文は一行で記載しなければなりません
それを補うために『_』を使用して、次の行に続きますよという命令をしているのです
ただしこの場合には、数式から一つスペースを開けて記載しなければならないので注意してください
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございますアンダーラインのスペースでした。赤字が消えました!

お礼日時:2019/05/27 16:30

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