Excel2013のVBAで複数の結合表から最終行を取得する方法

このQ&Aのポイント
  • Excel2013のVBAで複数の結合表から上側の表の最終行を取得する方法を教えてください。
  • 表の上側には結合セルがあり、取得方法がわからない状況です。
  • A1からA100までの結合セルの中で最後の単体セルであるA101を取得する方法を教えてください。
回答を見る
  • ベストアンサー

Excel2013のVBA最終行取得結合表複数あり

いつもお世話になってます。表複数 Excel2013のVBAで質問です。 A1,A2セルは空欄です。そして、A3:A4は結合されています。その後、A5:A10、A11:A15・・・と結合セルが続いています。そして、A95:A100まで結合セルが続いているとして、A101は合計欄のような単体のセルになっています。 その下は、空白セルが10セル位続いており、またその下にも、上と同じような表があります。 結合セルには、何らかの値が入力されています。最終行のA101には入力されていません。 このようなシートの、上側の表の最終行にあたるA101を取得したいと思っているのですが、下の表の最終行は取得するのですが、上からいくと結合セルがあり思うように取得できないでいます。 何か方法があるでしょうか?

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

  • ベストアンサー
  • weboner
  • ベストアンサー率45% (111/244)
回答No.2

一例です Range("A1").Select MaxRow = Selection.Offset(Rows.Count - 1, 0).End(xlUp).Address StRow = Selection.End(xlDown).Address For Each l In Range(StRow & ":" & MaxRow) If Not l.MergeCells Then Exit For End If Next l.Select

hinoki24
質問者

お礼

試してみました。思い通りにできました。どうもありがとうございました。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! >結合セルには、何らかの値が入力されています >上側の表の最終行にあたるA101を取得したいと思っているのですが すなわちA列の最初のデータ入力セルから検索して、結合セルが途切れた次の行を取得するようにしてみました。 A101セルは結合していない!という前提です。 Sub Sample1() Dim i As Long, cnt As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "A").MergeCells Then cnt = i Exit For End If Next i Do Until Not Cells(cnt, "A").MergeCells cnt = cnt + 1 Loop With Cells(cnt, "A") .Select MsgBox .Address(False, False) End With End Sub こんな感じではどうでしょうか?m(_ _)m

hinoki24
質問者

お礼

どうもありがとうございました。 思い通りにできました。

  • weboner
  • ベストアンサー率45% (111/244)
回答No.1

提示された条件なら A3セルから下方向に Cell.MergeCells の返り値がFalseのセルを探せばいいのでは? その次の同状態のセルを取得する場合は End(xlDown) で一旦したのブロックまで下がってから再度検索していけばいい

hinoki24
質問者

お礼

どうもありがとうございました。

関連するQ&A

  • 空白行を取得し、その次の行から2行ずつセルを結合するVBAコードについて

    例えばA列の空白行を取得し、 その次の行から2列ずつ結合し、 次の文字が入力されている手前まで連続でそれを続ける VBAコードはどのように記述したらよろしいでしょうか?

  • Excel VBAで結合セルに連番を振っていくには?

    Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。

  • VBA 21行目~表の最終行まで行削除

    WinXPでExcel2003を使用しています。 VBAで、21行目から表の最終行までの行削除するマクロを作りたいのですが、上手くいきません。 Sub 行削除() Range("A21").CurrentRegion.Select Selection.Delete End Sub だとその上下に文字が入ったセルがあると一緒に削除されてしまうので、 どの様にすればいいのか分からないでいます。 最終行を何行目と特定せずに表の最終行を取得して、 削除範囲を設定出来るものが希望です。 どなたか教えて下さると助かります。 よろしくお願い致します。

  • エクセルVBAで最終行取得ができない

    エクセルVBAでたとえばC列にどこまでデータが入力されているかを調べるとき、通常は r = Cells(Rows.Count, "C").End(xlUp).Row などでできます。 しかし添付画像のような入力フォームが出来上がっており、かつC列に最初から何らか(画像では〒マーク)の入力がされているので、そこに回答者が途中まで入力された場合、これでは最終行は取得できません。 逆に上からEnd(xlDown)でやろうとしても、途中に空白セルがあってお手上げです。 余分な〒マークを元データから削除してしまいたいのですがそれでは入力されているところのマークまで消えてしまいます。 このようなファイルが何百もあり、それを1枚のシートにまとめようとしているのですが、この最終行取得でつまずいてしまいました。 どのような方法があるでしょうか? 画像はエクセル2013ですが、実際にマクロを動かすのは2010です。

  • エクセルVBAにて最終行の取得とその活用

    エクセルVBA初心者です。 VBAで入力行最終行を取得するのは、色々なところに載っているですが、 その行から一個下の行を全て消すのはどうしたらよいのですか? Sub 最終行取得() Dim r r = Range("B4").End(xlDown) Rows(r + 2).ClearContents  ←ここは適当です。 ちなみに Range("a"&r+1).ClearContents で一つしたのセルを消す事は出来ました。

  • 【Excel VBA】空白の結合セルに右上り斜線を引く

    Excel VBAは初心者です。 仕事で必要なため、アドバイスをいただけると非常に助かります。 よろしくお願いします。 【VBAで実現したいこと】  下記のようなセルで構成されている簡単な  申請書を作成しております。    結合セル1:ABCD列と4行目で結合されたセルで、氏名を入力します。  結合セル2:EFGH列と4行目で結合されたセルで、氏名を入力します。  結合セルA:ABCD列から5678行で結合されたセルです。  結合セルB:EFGH列から5678行で結合されたセルです。  ※結合セル1、2~10まで存在し、結合セルA、B~Jまで存在します。  結合セルAは結合セル1を参照し、結合セル1が空欄の場合  結合セルAに右上りの斜線を引きます。結合セル1が空欄でない場合、  何もしません。  結合セルBは結合セル2を参照し、結合セル2が空欄の場合  結合セルBに右上りの斜線を引きます。結合セル2が空欄でない場合、  何もしません。  同様な処理を、結合セルJ、結合セル10まで行います。 【教えていただきたいこと】  1.結合セルA~J、結合セル1~10全てが空欄だった場合、   空欄の結合セルは右上りの斜線を引きます。   下記のプログラムを作成しましたが、右上りの斜線が   引けません。   どのようにしたら良いでしょうか。     2.上記「VBAで実現したいこと」を行うためには、   下記のプログラムにどのような追加を行えば良いでしょうか。 【作成したプログラム】 Private Sub worksheet_change(ByVal target As Range) Dim i As Range For Each i In target If i.MergeArea.Value = "" Then i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlContinuous Else i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlNone End If Next i End Sub 以上、よろしくお願いします。

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

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

  • VBA最終行取得

    Sub 最終セル取得() Dim gyou As Integer gyou = 1 Do Until Cells(gyou, 1).Value = "" gyou = gyou + 1 Loop Range("C1").Value = gyou End Sub 上記のプログラムのどこを変えれば 文字が入力されている最終行の取得ができますでしょうか。 A列に入っている文字の最終行(セル)がC1に表示される というようにしたいのですが…; このまま実行すると1つ多いセル行が表示されてしまいます 同じような質問をしてしまって申し訳ありません; どなたかわかる方回答お願い致します Excelは2000です;

  • VBAで行のコピー

    タイトルの通りなのですが、VBAで行のコピーを行いたいのですが、うまくいきません。教えて下さい。  あ 1 (空白)  い 2 A  う 3 (空白)  え 4 (空白)  お 5 B この様な表があるのですが、3列目に空白以外の文字があった場合その下に1行コピーをしたいのです。 上の表の場合は3列目にAがあるので"い"と"う"の間に"い"の行をコピーしてもう一行入れたいです。Bについても同様です。 すいませんが、教えていただければありがたいです。 よろしくお願いいたします。

  • Excelの最終行を取得

    ワークブックモジュールにこんなVBAを追加しました。 '入力行のセルをアクティブにする Private Sub Workbook_Open() Dim 入力行 As Long 入力行 = Worksheets(1).Range("A3"). _ CurrentRegion.Rows.Count + 1 Worksheets(1).Cells(入力行, 2).Select End Sub これは問題なく実行されました。 しかし、以前にこのような関数をA500まで設定していたので空白の行をアクティブにしてしまいました。 =IF(OR($B487<>"",$C487<>"",$D487<>"",$E487<>"",$F487<>""),ROW()-2,"") 関数を消すと実際の最終行を取得することはできたのですが、行番号の関数は追加されませんでした。 テーブルの大きさに合わせて自動で関数を追加するというようなことはできるのでしょうか?また更にいい方法があれば教えてください。

専門家に質問してみよう