VBAで結合セルについての処理方法

このQ&Aのポイント
  • VBAを使用して結合セルの処理を行う方法について説明します。
  • セルの結合を行う際に、入力されたセルと未入力セルの選択によってエラーを表示する処理方法について解説します。
  • サンプルコードを使用して、入力されたセルと未入力セルの選択に応じて適切な処理を行う方法を紹介します。
回答を見る
  • ベストアンサー

VBAで結合セルについて

任意のセル(行)を選択して、入力画面より文字を入力し表示させます。 複数セルを選択した場合は、選択セルを結合して表示しています。 すでに入力されたセルを含んだセルを選択した場合は、エラーを表示したいと思っています。 未入力セルを選択、入力(結合)されたセルのみを選択した場合は、処理を実行します。 例えば、、、 1)「入力されたセル」のみ選択した場合 → 処理 2)「未入力セル」のみ選択した場合 → 処理 3)「入力されたセル」+「入力されたセル」を選択した場合 → エラー表示 4)「入力されたセル」+「未入力セル」を選択した場合 → エラー表示 5)「未入力セル」+「入力されたセル」を選択した場合 → エラー表示 6)「未入力セル」+「入力されたセル」+「未入力セル」を選択した場合 → エラー表示 下記プログラムでは、上記1)2)3)4)の場合の処理はうまくいくのですが、 5)6)の場合はエラーが表示されません。 ------------------------------------------------------ x = Selection(1).Column y = Selection(1).Column + Selection.Column.Count -1 z = ActiveCell.Row If ActiveCell.Value <> "" Then Set CheckRange = Sheet1.Range(Cells(z,x),(z,y)) If CheckRange.MergeCells Then (処理) Else Message"(エラー表示)" End End If Set CheckRange = Nothing End If ----------------------------------------------------- どのようにしたらよいのでしょうか。

  • gazo
  • お礼率30% (74/241)

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

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

まずそのサンプルコードがそもそも正常動作しないようなんですが・・・コピペしてる訳ではないのでしょうか? それから If ActiveCell.Value <> "" Then の判別の結果(2)は処理にもエラーにも分岐しませんよ。当然5も6も。 単純に選択したRnage一つ一つに対してValueがあるかどうかを一つ一つチェックする必要がありますので、まずは根本的にアルゴリズムを考え直すところからやり直した方が宜しいかと。

関連するQ&A

  • VBA:結合されたセルに対する「Target」について

    Private Sub Worksheet_Change(ByVal Target As Range)   If Target = "" Then     MsgBox "空欄です"   End If End Sub 上記コードで、セルにカーソルを合わせてDeleteキーを押すと正常にメッセージが表示されます。 ただし、カーソルを合わせたセルが結合されていた場合、 「型が一致しません」というエラーで停止してしまいます。 結合されているセルに対しても同じ処理をするには、   If Target = "" Then の部分をどのように指定すればよいでしょうか。

  • エクセル VBA セルのデータを見に行ったのですが・・・

    いつも皆様には大変お世話になっております。 エクセルVBAなのですが・・・ sa = ActiveCell.Row tu = ActiveCell.Column z = Cells(sa + 18, tu + 3).Text MsgBox z If z = "" Then sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 18, tu + 3) = a Else sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 32, tu + 3).End(xlUp).Offset(1, 0) = a と、入力したのですが z = Cells(sa + 18, tu + 3).Text この zのセルに文字が入っていても MsgBox z  をみても何も入っていないと表示されてしまいます。 何が原因かさっぱりわかりません;; 皆様よろしくお願いいたします

  • 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 ---------------------------------------------------------------------- 何卒宜しくお願い致します。

  • ExcelVBAで、選択範囲内で同じ値が入力されたセルを調べる

    選択範囲内(縦一列)で同じ値が入力されたセルの色を黄色にするプログラムを作りました。 Sub 選択範囲内で同じ値が入力されたセルを調べる_縦() Dim startrow As Byte Dim lasrow As Byte Dim i As Long Dim j As Byte Dim atai If TypeName(Selection) <> "Range" Then Exit Sub startrow = ActiveCell.Row '最初のセルの列番号を取得 lasrow = Selection.Rows(Selection.Rows.Count).Row '最終列番号を取得 '同じ値が入力されているセルを黄色にする For i = startrow To lasrow - 1 If ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = xlNone Then atai = ActiveSheet.Cells(i, ActiveCell.Column).Value For j = i + 1 To lasrow If atai = ActiveSheet.Cells(j, ActiveCell.Column).Value Then ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = 6 ActiveSheet.Cells(j, ActiveCell.Column).Interior.ColorIndex = 6 End If Next End If Next End Sub 但し、上記のプログラムでは選択範囲内に結合セルがあるとエラーになってしまいます。 どなたか、解決方法をご教授頂けませんでしょうか? 宜しくお願い致しますm(._.)m

  • VBAでセルを結合

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

  • [VBA]型が一致しません

    EXCELWORKSHEET上で下記の処理をすると「型が一致しません」との エラーがでます。どうにも原因と対応策がわからず悩んでいます。 デバッグの良い方法ありませんでしょうか? <現象> *列2上のセルを選択して、DELETEキーを押す。⇒エラーなし。 *しかし、列2上のセルとその他のセルを同時選択した上で、DELETEキーを押すと「型が一致しません。」のエラー。 頭の「If Target.Column Like 2 And Len(Target.Value) > 0 Then 」が悪さしているのはわかるのですが・・・。 Private Sub WORKSHEET_CHANGE(ByVal Target As Range) If Target.Column Like 2 And Len(Target.Value) > 0 Then Range("c" & Target.Row).Value = Now If Target.Column Like 2 And Len(Target.Value) > 0 Then 'B列の場合だけ確認 Dim rng As Range Set rng = ActiveSheet.Range("B:B").Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, MatchByte:=True) If Not rng Is Nothing Then '発見した。 If rng.Address <> Target.Address Then '入力中セル以外で発見 Select Case MsgBox("過去に受け入れたLOTです。再度受入れますか?", vbYesNo) Case vbYes Range("B2").Activate Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Now ActiveCell.Offset(0, 1).Activate ActiveCell.Value = UserForm2.TextBox2.Value UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus Range("B2").Activate Selection.End(xlDown).Select Selection.Offset(1, 0).Select Case vbNo Range("B2").Activate Selection.End(xlDown).Select ActiveCell.ClearContents ActiveCell.Offset(0, 1).Activate ActiveCell.ClearContents UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus End Select End If End If End If End If End Sub

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • VBA 結合されているセルのオートフィル

    先程同じような質問をしてしまい すいませんが 結合されているセルのオートフィルのやり方が今一つわかりません でしたので質問させていただきます。 やりたいこと A列・・・A1セル『1』A2セル『2』・・・A10セル『10』と 数字が入っています。 BとC列・・・結合されており B1C1セル『1000』B2C2セル『1100』と数字が入っています。 F1セル・・・1~10までの数字が入っています。 処理内容 F1セルに『5』と数字が入っている場合 B5C5セルを選択後、数字が入っているB2C2セルまで移動します。 そのあと、B5C5セルではなく B4C4セルまで『1100』とオートフィルしたいのですが 可能でしょうか。 それともこのような処理をしたい場合オートフィルをするのは 間違っているのでしょうか? すいませんがコード記載していますので 回答宜しくお願い致します。 コード Sub Macro1() Dim a As Variant Dim i As Variant Dim RSta As Long Set a = Range("F1") '検索値'例えば5と入力したら For i = 1 To 10 If a.Value = Cells(i, 1).Value Then 'F1セルに5と入力されA5セルの数字が5なら If Cells(i, 2) = "" Then 'B5セルの値が何もなければ RSta = Cells(i, 2).End(xlUp).Row 'ここでBとCセルの結合されているセルの数字が入っている 一番上のセルを選択し Range("B" & RSta, "C" & RSta).AutoFill Destination:=Range("B" & RSta, "C"), Type:=xlFillCopy 'このコードが間違っているらしくうまくできません。ここでBとCの結合されているセル2行目から4行目までをオートフィル(数字のコピーのみを実施したい) End If End If Next i 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

専門家に質問してみよう