• ベストアンサー

EXCEL VBA 結合したセルの制御

いつもお世話になっております。 Excelで、VBAを使っているのですが、結合されたセルの値を Cells(Row,Column).ClearContents を使ってクリアしようとするとエラーになってしまいます。 結合されたセルには、Cells()のメソッドは処理不能なのでしょうか? どなたかご存知の方がいらっしゃいましたら教えてください。

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

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

No1です。 > Range(Cell1, Cell2).ClearContentsだと出来ないのですが 仮にC5C6が結合されているとしたら、C5とC6を両方指定して Sub Test() Range(Cells(5, 3), Cells(6, 3)).ClearContents End Sub これで消せますが。

sgk_shop
質問者

お礼

出来ました。 私のほうの勘違いだったようです。 ありがとうございました。

その他の回答 (2)

  • pon_kotu
  • ベストアンサー率21% (8/38)
回答No.2

内容を消したいだけなら、結合したセルの左上つかって Cells(左上のセル).Value = "" で消すことができます

sgk_shop
質問者

補足

ありがとうございます。 確かにこの方法だと可能でした。 また、値の設定も可能でした。

回答No.1

Cells(Row,Column).Select Selection.ClearContents でやってみてください。 結合されたセルはCells()でもRange()でも、一部だけの変更はできませんので。

sgk_shop
質問者

補足

ありがとうございます。 こちらの方法でも可能でした。 ただ、Range(Cell1, Cell2).ClearContentsだと出来ないのですが、わかりますでしょうか?

関連するQ&A

  • エクセル 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で結合セルについて

    任意のセル(行)を選択して、入力画面より文字を入力し表示させます。 複数セルを選択した場合は、選択セルを結合して表示しています。 すでに入力されたセルを含んだセルを選択した場合は、エラーを表示したいと思っています。 未入力セルを選択、入力(結合)されたセルのみを選択した場合は、処理を実行します。 例えば、、、 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 ----------------------------------------------------- どのようにしたらよいのでしょうか。

  • エクセルVBAの質問です。

    エクセルVBAの質問です。 セルに特定の値が入力された場合にエラーとし、「再試行」を選択するとセルが修正出来る状態にしたいのですが、下記のコードだと実行時エラーが発生してしまいます。 if cells(10,10).value > 1 then if msgbox("err", vbCritical + vbRetryCancel,"") = vbRetry then Cells(10,10).Select Cells(10,10).Active ⇒ エラー箇所 else Cells(10,10).ClearContents Endif Endif 実行時エラー '438' オブジェクトは、このプロパティまたはメソッドをサポートしてません。 いろいろネットを検索してみましたが、よくわかりませんでした・・・。 VBAは初心者です。 かなり困ってます。 どなたか助言をお願い致します。

  • VBAにてエクセルのセルを結合するには?

    VBAにて、エクセルのセルを結合したいのですが? やっていることは、Access97よりVBAで、 Excel97へファイルを落とし込んでいるのですが 罫線を引いたり、列幅等をかえることはできたのですが セルを結合する方法がわかりません。 よろしくおねがいします。

  • VBA 結合セルの

    EXCELにて結合セルを含む表の白紙化をしようとおもいます。しかしなぜか結合セルの部分はうまくいきません。 どうすればよいでしょうか。 range("A1:A6").clearcontents A1からA9に結合セル3つ含んでいます。

  • エクセルのVBAについて(エクセル2003)

    エクセルのVBAで、セルを下のように指定したのですが If .Row = 3 And .Column = 16 Then ここで、 セル 16(P)の3と、17(Q)の3を結合したら、 実行時エラー'13': 型が一致しません。 というエラーが出てしまいます。 P3とQ3のセルを結合した場合の、番地の記述方法を教えていただけませんでしょうか? マクロに全く無知なため、あさってな質問でしたら申し訳ありません。 よろしくお願いいたします。

  • エクセルVBA 現在のセルの4個上のセルの値

    こんにちは、 エクセルマクロの質問です。 イミディエイトウィンドウにて 現在のセルの4個上の値を表示しようと以下の文を入力したところエラーになりました。 ?cells(activecell.row-4,activecell.colum).value で 「実行時エラー 438 オブジェクトはこのプロパティまたまメソッドをサポートしてません。」 なぜでしょう? ?activecell.Row-4  ?activecell.colum はそれぞれ 正しく表示されます。

  • エクセルマクロでセルの結合をしたい

    エクセル2003です。 E列の値は昇順で並んでいます。 先頭E3行から下の行の値と比較し 同じ値の場合はセルを結合し 値が違う場合は結合しないで次の行を比較という処理を 最終行まで行いたいです。 (添付画像参照) 例えば E3-AA E4-BB E5-BB E6-CC E7-DD E8-EE E9-EE E10-EE E11-FF セルE4とE5を結合します セルE8とE9とE10を結合します。 次に結合した行と同じ行数のF列を結合します。 さらに結合した行と同じ行数のG列を結合します。 上記の場合 セルF4とF5を結合、 セルF8とF9とF10を結合します。 セルG4とG5を結合、 セルG8とG9とG10を結合します。 さらに結合した行と同じ行数のA列を結合します。 上記の場合 セルA4とA5を結合、 セルA8とA9とA10を結合します。 さらに結合したA列に数字を入力します A4とA5を結合したA4、A5セルには 2行を結合したので2と入力 セルA8とA9とA10を結合したA8、A9、A10セルには 3行を結合したので3と入力。 とりあえず、E列の結合を完成させてそのE列を 3行目から最終行までコピーして、 「形式を選択して貼付」の「書式」で 書式のみをF,G,A列にコピーすれば出来るのではと 以下の構文を作成しました。 セルの結合時は結合するセルの先頭の行の値が結合済セルの値に なるので最初にE列を結合していく時に A列に結合回数を記入しようと考えました。 ただ2行の結合は、A列に2と入力されたのですが 3行連結した時も2と入力されてしまったので改造しました。 テストデータでは期待しているようになったのですが 本番データでは結合される行が4行、5行等それ以上の行数が 結合する場合が有りこの構文ではなるべくしてなっているのですが 4行以上の行結合はA列の値はいずれも3になってしまいます。 (添付画像参照) どう修正すればいいか手段が考え付きません。 どのような方法がありますでしょうか? よろしくお願いします。 Sub セル結合2() '2013年10月25日 Dim 最終行 As Integer Dim 処理行 As Integer Dim 比較行 As Integer Dim 確認値 As Variant Dim 比較値 As Variant Dim 結合回数 Dim 戻行 Application.ScreenUpdating = False ThisWorkbook.Sheets("Sheet1").Select 最終行 = Cells(Rows.Count, 5).End(xlUp).Row 'F列の最終行を求めます。 Application.DisplayAlerts = False For 処理行 = 3 To 最終行 '3行目から最終行の前まで繰り返します。 比較行 = 処理行 + 1 '処理行の一つ下の行と比較します。→比較行とします。 確認値 = Cells(処理行, 5).MergeArea(1, 1).Value 'チェックする値を、確認値に代入します。 比較値 = Cells(比較行, 5) '比較する値を、比較値に代入します。 If 確認値 = 比較値 Then '値が同じかどうか Range(Cells(比較行, 5), Cells(処理行, 5)).MergeCells = True 結合回数 = Cells(処理行, 1) + 1 'セルを結合した回数 戻行 = 処理行 - 1 '処理行の1行上の行数を戻行とする Cells(処理行, 1) = 結合回数 '処理行のA列に結合回数を記入 Cells(比較行, 1) = 結合回数 '比較理行のA列に結合回数を記入 If Cells(処理行, 1) >= 3 Then 'もしも処理行のA列が3以上の場合 Cells(戻行, 1) = 結合回数 '戻り行のA列に結合回数をセット End If '同じでない場合は以下へ End If '同じでない場合は以下へ Next 処理行 Application.DisplayAlerts = True Application.ScreenUpdating = True Range(Cells(3, 5), Cells(最終行, 5)).Copy Range(Cells(3, 6), Cells(最終行, 6)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 7), Cells(最終行, 7)).PasteSpecial Paste:=xlPasteFormats Range(Cells(3, 1), Cells(最終行, 1)).PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False MsgBox "終了しました" End Sub

  • vba 結合されたセルの列番号を取得したい

    セルを結合しているセルに、値が入っていて、 その値を検索して列番号を取得したいのですが エラーになります。 A1セルとA2セルを結合して、 「a」をいれて Sub test() MsgBox Cells.Find(What:="a", LookAt:=xlWhole).Column MsgBox Rows("1:2").Find(What:="a", LookAt:=xlWhole).Column End Sub をしても、どちらもエラーになります。 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」 というエラーです。 でもB1に「a」を入れれば、問題なく2が返されます。 結合されててもセルを検索する方法を教えてください。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

専門家に質問してみよう