VBAショートカットキー セルの結合・解除

このQ&Aのポイント
  • VBAでエクセルで使用するショートカットキーを作成しました。Ctrl+Shift+F で選択したセルが、結合していたら解除、解除されていたら結合 という命令を作成しました。選択した範囲のセルに何も書かれていないときは良いのですが、入力された範囲を選択して実行すると警告ウィンドウが表示され、キャンセルを選択するとエラーになってしまいます。どのように修正すればよいでしょうか。
  • VBAで作成したエクセルのショートカットキーについて質問です。選択したセルが結合している場合は解除し、解除されている場合は結合するという命令をCtrl+Shift+Fで作成しました。しかし、選択範囲にデータが入力されている場合に警告ウィンドウが表示され、キャンセルを選択するとエラーになってしまいます。このエラーを回避するためにはどうすればよいでしょうか。
  • VBAを使用してエクセルのショートカットキーを作成しましたが、選択範囲にデータが入力されている場合にエラーが発生してしまいます。キャンセルを選択するとエラーになるのですが、問題なく実行するためにはどのように修正すればよいでしょうか。
回答を見る
  • ベストアンサー

VBAショートカットキー セルの結合・解除

VBAでエクセルで使用するショートカットキーを作成しております。 エクセルは2007を使用しています。 Ctrl+Shift+F で 選択したセルが、結合していたら解除、解除されていたら結合  という命令を作成しました。(ネットから拝借ですが、、、) 選択した範囲のセルに何も書かれていないときは良いのですが、何かが入力された範囲を 選択して、実行するとエクセル上で 【選択範囲には複数のデータ値があります。1つのセルとして結合すると、選択したセル範囲になるもっとも左上端になるデータのみが保持されます(空白セルは無視されます)】 という警告(?)ウインドウが表示されます。 その後「 OK 」 を押すと問題ないのですが「 キャンセル 」を選択すると VBAで ”実行時エラー’1004” RangeクラスのMergeCells プロパティを設定できません。 と エラーになってしまいます。 「キャンセル」を選択した際に、エラーにならないようにするには、どのように修正すれば良いか 教えて頂きたいです。 以下、作成したマクロです。 デバッグを確認すると[ .MergeCells = True ]の部分が黄色くなります。 ---------------------------------------------------------------------- Sub auto_open() Application.OnKey "+^F", "セルの結合解除" End Sub ’------------------------------ Sub セルの結合解除() With Selection If .MergeCells = False Then .MergeCells = True .HorizontalAlignment = xlCenter Else .MergeCells = False End If End With End Sub ---------------------------------------------------------------------- 何卒宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

あまりVBAは得意でないが、エラーが出た場合を処理するということで安直に考えてみた Sub セルの結合解除() On Error GoTo massage    With Selection    If .MergeCells = False Then        .MergeCells = True        .HorizontalAlignment = xlCenter    Else        .MergeCells = False    End If    End With Exit Sub massage: MsgBox "深刻なエラーが発生・・・" End Sub

jjnnkk
質問者

お礼

ご回答ありがとうございます!!! On Error GoTo というフレーズを初めて知ることができました。 エクセルの if iserror のような働きをしてくれるんですね!! 深刻なエラー・・・ にも笑わせて頂きました✩ ありがとうございます!! 今後エラーになってしまう際にも応用ができますね、とても安心しました!!!!

関連するQ&A

  • エクセル2010のマクロについて、セル結合の解除

    全てのセルを選択して、結合されているセルがあったら全て解除したいのですが、 マクロの記録で作成すると、↓を何百回も繰り返すソースになってしまいます With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With 長すぎるとエラーになってしまいますし、何回繰り返すかもランダムなので、↑の処理を、 結合されたセルがなくなるまで繰り返すという設定にしたいのですが、可能でしょうか? よろしくおねがいします。

  • アクティブセルの結合解除および再結合

    よろしくお願いします  任意のセルとその下のセルを結合しています。  R1C1形式でデーターを入れるときに、一旦結合を解いてデーター 入力後に再度結合させる。 ActiveCell.MergeCells = False ActiveCell.MergeCells = True で、実行したのですが、結合が解除されたままで再度結合することが できません。 再度結合する方法をお教えください。

  • 二つの違いを教えてください。

    エクセル2003です。 ////////////////// Sub Macro1() Cells.UnMerge End Sub Sub Macro2() Cells.MergeCells = False End Sub ////////////////// どちらを実行しても、セルの結合を解除するのですが VBA的にどちらを使った方が良いのでしょうか? どちらを使っても同じなのでしょうか?

  • セル解除後、各行に値をコピーし結合するマクロ

    A1からC3のセルが結合しており、 そのセル結合を解除すると、A列のみ値がコピーされる。 コピーした後、各行ごとにセルを結合していく…… という処理をしたいと思い、 調べて下記のマクロまでなんとかこぎつけました。 Sub セル結合() Dim date1 As Variant Dim range1 As Range Application.DisplayAlerts = False For Each range1 In Selection.Rows If range1(1).MergeCells = False Then range1(1).Merge Else date1 = Selection.Rows(1).Value With range1 .UnMerge .WrapText = False .ShrinkToFit = False Selection.Value = date1 End With End If Next range1 End Sub ※実行範囲に関しては、  任意選択をした範囲にしたいため、  range(1)にて処理を行いました。 困っているのは、上記のマクロを実行すると、 最初の行のみ結合できないということ。 もうひとつが、 セル結合をしない時に値を左端にコピーすると、 文字が自動縮小されてしまいます。 縮小しないようにするには、 どのような処理を入れたら良いでしょうか? お力添え頂けますと幸いです。 よろしくおねがいします。

  • VBAでセルの結合と分割(解除)をお願いします

    宜しくお願いいたします。 H5とH6のどちらかに数字か記号が入っています以下30個のセルも同様です、H6にデータを入れH5とH6を結合するとセルの認識はH5を認識するのでH6のデータは他へコピー出来ないので結合したセルを再度分割して一行に並び変えているのに下記の構文で実行しているのですが結合にかなりの時間がかかっています。分割は瞬時にできています。 お願いしたい件は即時もしくはなるべく早い方法がありましたらお願いいたします。 こんな感じで作りました Sub 結合() For a = 8 To 38 Range(Cells(5, a), Cells(6, a)).Select Selection.Merge Range(Cells(7, a), Cells(8, a)).Select Selection.MergeSub 以降29個    ・    ・    ・ Next a End Sub 分割() Dim range1 As Range Set range1 = Range("H5:AL5") range1.MergeCells = False Set range1 = Range("H7:AL7") range1.MergeCells = False 以降29個   ・   ・    ・ End Sub 良い方法をご伝授宜しくお願いいたします

  • 未入力セルとVBAについて

    エクセルのVBAについて教えて下さい。独学で調べたのですがわからず…お力をお借りしたいです。 未入力のセルがあった場合、入力しなければ保存できないマクロは知っているのですが、 では、それが結合セルであった場合はどの様になるのでしょうか?例えば、(A1~C1だったら) 又、複数の結合セルにその様な設定をしたい場合もどこに追加して行けばよいのでしょうか? 合わせて教えて頂けたら幸いです。 以下 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets("sheet1").Range("A1") = "" Then MsgBox "必須項目セルが未入力です", 48, "入力エラー" Cancel = True Else ActiveWorkbook.Save End If End Sub

  • VBAでセルを結合

    いつもお世話になっております。 VBAで「B列に●●が入力されたら、B列から10列はなれたセルから3つ分を結合して、そのセルに××と入力する」という処理を行います。 まだ途中なんですが、こんな感じで考えています。 If B.Value = "火" Then   Range(offset0, 10),Resize(1, 3)).MergeCells = True   'ここからの処理は未定  End If マージした後にさらに値を入れるので、variantかなんかで変数を用意して、その中に入れたほうがいいかな?と考えていますが、どうでしょうか?

  • マクロで連続結合

    横に並ぶ3つ以上のセルを 縦に続けて結合したいのですが、 Sub Macro1() Selection.MergeCells = True Selection.Offset(1).Select End Sub これだと、最初に結合し、下にずらした時に 選択するセルが1つになってしまいます。 横に並ぶセルの数は一定なので、 最初に選択していた数だけ、 下にずらした時も 選択しているようにしたいです。 お願いします。

  • エクセルのセルの結合範囲を可変にする場合

    教えて下さい。 VBAでセルの結合範囲を可変にする場合、行を可変にするのはわかるのですが、列を可変にするにはどのように記述すればよいのでしょうか?よろしくお願い致します。 以下の場合の「A」や「E」を可変にしたいのですが??? Range("A1:E5").Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With

  • エクセルのマクロ:結合をずらして行う

    Sub abc() Range("F7:F8").MergeCells = True Range("G7:G8").MergeCells = True Range("H7:H8").MergeCells = True Range("F15:F16").MergeCells = True Range("G15:G16").MergeCells = True Range("H15:H16").MergeCells = True Range("F23:F24").MergeCells = True Range("G23:G24").MergeCells = True Range("H23:H24").MergeCells = True End Sub エクセルのマクロで、 こんな感じで8ずつ下にセルの結合を していきたいのですが、 ループもしくは Selection.Offset(8,0).Select などを使って一括で行う方法はありませんでしょうか? お願いします。

専門家に質問してみよう