セルを結合するエラーが出る

このQ&Aのポイント
  • セルを結合する際にエラーが出る場合、選択範囲が指定と違っている可能性があります。エラー1004が表示されることもあります。
  • A列の最後尾にエンドを入れることで、「最後の空白」と認識されるようになりますが、A列以外の列もエンドを入れる必要があります。
  • A列の2行目からでもエラーが出る場合、2行目や3行目でも対応する方法を考える必要があります。
回答を見る
  • ベストアンサー

セルを結合する エラーが出る

https://okwave.jp/qa/q9543025.html でおせわになりました。 ●上記の場合、選択範囲を指定よりズレるとエラー1004がでます。 選択範囲が指定と違っていた場合、「選択範囲が違います」といったメッセージを表示するにはどうすれば良いのでしょうか? ●A列の最後尾にエンドを入れることで「最後の空白」と認識するようにしてありますが、A列以外つまり、B列~M列もエンドを入れないとエラーになるようです。A列のみエンドを入れることで「最後の空白」と認識するようにしたいのです。 ●A列2行目からだとエラーになります。A列2行目もしくは3行目でも対応するにはどうすれば良いのでしょうか? お手数ですが、色々とご教鞭を宜しくお願いします。 例 =A2:M21 =A3:M21

  • 73sho
  • お礼率66% (18/27)

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>列からZ列までデータがあり、セル結合したいのはA列からM列 >最終列 = Cells(開始行, Columns.Count).End(xlToLeft).Columnを 最終列がM列と固定しているのであれば 最終列 = 13

73sho
質問者

お礼

ありがとうございます。 解決できました。マクロって難しいですね。 watabe007様のようにマスターするには何年かかるかな。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>文字を上揃いにするコード Sub test4()   Dim Rng As Range, blanks As Range   Dim ar As Range, 列 As Long   Dim 開始行 As Long, 最終行 As Long, 最終列 As Long   On Error GoTo ErrorHandler   If ActiveSheet.Name = "Sheet1" Then     開始行 = 2   ElseIf ActiveSheet.Name = "Sheet2" Then     開始行 = 3   ElseIf ActiveSheet.Name = "Sheet3" Then     開始行 = 4   End If   最終行 = Cells(Rows.Count, "A").End(xlUp).Row   最終列 = Cells(開始行, Columns.Count).End(xlToLeft).Column   For 列 = 1 To 最終列     Set Rng = Range(Cells(開始行, 列), Cells(最終行 - 1, 列))     Rng.VerticalAlignment = xlTop 'ここに記述してください。     Set blanks = Rng.SpecialCells(xlCellTypeBlanks)     For Each ar In blanks.Areas       Union(ar(1).Offset(-1), ar).Merge     Next ar   Next 列   Cells(最終行, "A").ClearContents ErrorHandler:   If Err Then MsgBox "Error Number = " & Err.Number & Chr(13) & _     "Error Message = " & Err.Description, , "Debug" End Sub

73sho
質問者

補足

ありがとうございます。 A列からZ列までデータがあり、セル結合したいのはA列からM列までにしたいですが、このコードでは一気にZ列までマクロ実行するため関係のないセルまで結合してしまいます。 最終列 = Cells(開始行, Columns.Count).End(xlToLeft).Columnを どう書き換えたら良いでしょうか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

Sub test3() Dim Rng As Range, blanks As Range Dim ar As Range, 列 As Long Dim 開始行 As Long, 最終行 As Long, 最終列 As Long On Error GoTo ErrorHandler If ActiveSheet.Name = "Sheet1" Then 開始行 = 2 ElseIf ActiveSheet.Name = "Sheet2" Then 開始行 = 3 ElseIf ActiveSheet.Name = "Sheet3" Then 開始行 = 4 End If 最終行 = Cells(Rows.Count, "A").End(xlUp).Row 最終列 = Cells(開始行, Columns.Count).End(xlToLeft).Column For 列 = 1 To 最終列 Set Rng = Range(Cells(開始行, 列), Cells(最終行 - 1, 列)) Set blanks = Rng.SpecialCells(xlCellTypeBlanks) For Each ar In blanks.Areas Union(ar(1).Offset(-1), ar).Merge Next ar Next 列 Cells(最終行, "A").ClearContents ErrorHandler: If Err Then MsgBox "Error Number = " & Err.Number & Chr(13) & _ "Error Message = " & Err.Description, , "Debug" End Sub

73sho
質問者

補足

ありがとうございます。 文字を上揃いにするコード Rng.VerticalAlignment = xlTop これをErrorHandler:のエラーコードの前に記述したのですが、反映されませんでした。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>A列以外つまり、B列~M列もエンド 最終行は全列同じとして行います。 >選択範囲が指定と違っていた場合 何を基準に選択範囲が指定の違いが >A列2行目もしくは3行目でも対応するにはどうすれば良いのでしょうか? 都度、メッセージが出ますまで従って入力してください。 Sub test2()   Dim Rng As Range, blanks As Range   Dim ar As Range, 列 As Long   Dim LastRow As Long, 開始行 As Variant   LastRow = Cells(Rows.Count, "A").End(xlUp).Row   開始行 = Application.InputBox("開始行を入力して下さい。", Default:=1, Type:=1)   If VarType(開始行) = vbBoolean Then Exit Sub   If Cells(開始行, 1) = "" Then     MsgBox 開始行 & " 目は空白ですので終わります。", 48     Exit Sub   End If   For 列 = 1 To 13     Set Rng = Range(Cells(開始行, 列), Cells(LastRow - 1, 列))     Set blanks = Rng.SpecialCells(xlCellTypeBlanks)     For Each ar In blanks.Areas       Union(ar(1).Offset(-1), ar).Merge     Next ar   Next 列   Cells(LastRow, "A").ClearContents End Sub

73sho
質問者

補足

ありがとうございます。 ●A列以外つまり、B列~M列もエンド うまくできました。 ●A列2行目もしくは3行目でも対応するにはどうすれば良いのでしょうか? シート1はA2行目、シート2はA3行目といった固定ですので、「都度、メッセージが出ます」ではなくてマクロを変更するだけにしたいのです。 ●選択範囲が指定と違っていた場合  For 列 = 1 To 13 はMセルまでですね。仮にDセルまでを選択した場合、デバックエラーがでます。それをエラー表示したいのですが。

関連するQ&A

  • セルを結合するマクロ

    マクロ初心者です。 Aセルをブランク領域で選択してマクロを実行しますとセルが結合します。 最後の空白がどこまでかは、何か指定がないといけないので、仮にエンドと名付けます。 このコードはA列のみです。A列からM列またはL列までと指定するにはどうすれば良いですか? ご教鞭をお願いします。 Sub test() Set Rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) Set blanks = Rng.SpecialCells(xlCellTypeBlanks) For Each ar In blanks.Areas Union(ar(1).Offset(-1), ar).Merge Next Cells(Rows.Count, 1).End(xlUp).ClearContents End Sub

  • 作業したいセルにすぐカーソルをもっていく方法

    こんばんは。 セルの移動について教えてください。 1.Excelで自分が作業しているセルから、指定したセルに すぐカーソルがいくような何かよい方法はありませんか? たとえば、C3のセルからA1にもどりたければCtrl+Homeで 戻ることはわかったのですが。。。 C3からすぐにP9のセルにダイレクトでカーソルをうごかしたい、 といったときです。 2.VBA初心者のため自動マクロでプログラムを作成し、   それをいじって作業しています。   文字列がはいってる対象のセルの範囲をすべて削除したく   対象の最初のセルを選択し、Ctrl+Shift+↓+→   でやってみたところ、実は途中に空白セルがあり、   すべての文字列がはいっている範囲が選択できませんでした。   今は手でセルの範囲を指定していますが、セルの範囲が広がる   可能性もあり、できればCtrl+Shift+↓+→のような   方法でセル範囲を指定したいのです。   たとえば、A3からD20までの範囲を選択したいとします。   A行には空白行があります。そのためA3を選択後   上記Ctrl+Shift+↓+→をおこなうと、Dの途中の列で   選択が終わってしまいます。      ですが、B列はすべて空白ではない列となっています。   その空白ではないこのB列のまず行を数えて、   それからA列からD列までの上記で数えた行分選択   するといった方法でプログラムすれば、セルの範囲   が広がったあとでも対応するのでしょうか? わかりづらくて申し訳ありません。 VBAは本当に自動マクロをいじるくらいしかできないので、 超初心者にわかりやすく教えていただけたら幸いです。 よろしくお願いいたします。

  • エクセルで結合したセルをグラフにしたい

    エクセルでグラフ(レーダーチャート)を作成するにあたって、複数のセルを結合した箇所を1データ(セル)として認識させたいのですが、結合前の空白のセルもカウントしてしまいます。 現在、具体的な「グラフ データの範囲として」 ='〇〇シート'!$M$19:$M$25,'〇〇シート'!$O$19:$P$25 となっておりますが、 どの列でも23、24行目を結合しているので、見た目は結合されているので あるはずのない24行目が認識されていて、レーダーチャート上で空白になってしまいます。 どうにかして24行目を外して計算したいのですがどのようにグラフのデータ範囲を選択すればいいのでしょうか?

  • セルの結合

    VBAの勉強を始めたばかりの初心者です。 A1、A5 A9・・・・A25までのセルに、それぞれデータが入っていて、データが入っている各セルの下にはデータが入っていない空白の三行を作っています。隣のB列にもデーターはありません。 それをA1からB4、A5からB8・・・A25からB29までのセルを、手作業で結合をしているのですが、今後データが増えていくのでどうしてもVBAで行いたいのです。 ネットで調べてもありそうでなかなかないのでどなたか教えていただければ助かります。 わかりにくい説明ですが宜しくお願いします。   A列  B列 1 ああ  空白 2 空白  空白 3 空白  空白 4 空白  空白 5 ああ  空白 6 空白  空白 7 空白  空白 8 空白  空白 9 ああ  空白 ・ ・

  • Excelのセル選択範囲の指定について

    Excelのセル選択範囲の指定について d = Range("A65536").End(xlUp).Row Range("A1:K" & d).Select これでやると A1からk列のデータの最後の(データの入っている行)までを選択しますが このk列というところを n = ActiveSheet.Range("A1").End(xlToRight).Columnを使いKでなくデータのある列nを使った表現に変えたい。どうすればいいか。

  • エクセルで結合セルがあるため最終行が解りません。

    エクセルで結合セルがあるため最終行が解りません。 A列2行目と3行目が結合セル(見出し)のためA列の最終行(罫線を除きデータが入ってる行)を求めれなくて困ってます。データは4行目以降から入力していく予定ですが Range("A" & Rows.Count).End(xlUp).Row は2となるため+1で入力行を求めてると3となってしまいます。A4からAの最後の行の範囲で罫線を除く最終行を出せればよいのですが  最初は4 以下順次5 6 7 ‥ どなたかご教示頂けないでしょうか?

  • VBA:セルの空白を検索

    A列を上から検索して(とりあえず100行まで)最初の空白セルのアドレスを取得したいです。 Dim CellAd As Range Set CellAd = Range("A1:A100").CurrentRegion.Find(What:="ABC") If CellAd Is Nothing Then Exit Sub Else MsgBox CellAd.Address End If 以上のコードで、A列にABCがあればそのアドレスを$A$15のような形で表示できました。 検索したいのは空白なのですが、どのように指定すればよいでしょうか。 What:=""やNullではダメだったので(自分、「Null」を勘違いしてるかもしれません)。 また、ここでは取得したアドレスをmsgboxで表示させているだけですが、 実際は取得したアドレスの行番号のみを取得して変数Add1に入れ、 以降のコードのセル範囲指定として使いたいです。 「1行目からAdd1行目までをコピーする」のように。 私のレベルでは、 ・範囲指定はRange("A1:A100")のように、「""」でくくらなければ使えない ・変数は""の中に入れたら文字列として扱われる との認識があるのですが、 このようなコードは可能でしょうか。

  • エクセルVBAでセル範囲選択→並べ替え

    大きなデータを選択する場合でA列には空白がない場合、 Range("A1").CurrentRegion.Select でいいと思うのですが、このデータを並べ替えようとするとき、1行から4行めには別の文字列がはいっており、5行目以下がデータであるとき、 Range("A1").CurrentRegion.Offset(4).Selectで下にさげると、最終選択範囲も下がってしまいます。 最終の範囲を変えず、開始位置を5行目にかえるにはどうすればよいのでしょうか?

  • 空白までのデータを範囲指定する

    EXCEL VBAにて教えてもらいたい事があります。 空白までの行列を範囲指定したいのです。         A  B   C   D  1   1123 123  12  57 2    32 1 5 52 3 2 98 852 11 4 65 2 72 1 A列からD列の行が空白になるまでの範囲を指定する マクロを教えてほしいです。 A列の最終行の次の行にカーソルを合わせるマクロはわかるのですが 範囲を指定する方法がわかりません。 よろしくお願いいたします。 最終行の次の行にカーソルを合わせるマクロ Range("A1").End(xlDown).Select ActiveCell.Offset(rowOffset:=1).Activate Selection.Copy

  • エクセルの空白セルの選択

    こんにちは いつもお世話になっています。  エクセルの空白セルの選択について教えてください。 A列、B列にデータがあります。それぞれの列で空白セルがありますが、同じ行で両列ともに空白のセルだけを選択する方法を教えてください。  単に「ジャンプ」から空白セルを選択すると片方にデータがある行のセルも選択してしまいます。片方にデータのある行は残し、両列ともに空白の行を削除したのです。  よろしくお願いします。

専門家に質問してみよう