• ベストアンサー

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

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

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row とすると、4,5,6...になるみたいです。

yokokama46
質問者

お礼

hotosysさんありがとうございます。 早速Offsetで試しました。結合セルを跨いでくれますね。 1行ですみますので助かります。

その他の回答 (1)

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

最終行が2なら3とするだけでは LastRow = Range("A" & Rows.Count).End(xlUp).Row If LastRow = 2 Then LastRow = 3

yokokama46
質問者

お礼

watabe007さん ありがとうございました。 +1使わずOffsetでOKになると教えてもらいました。 お付き合い頂きありがとうございました。またよろしくお願いします。

yokokama46
質問者

補足

watabe007さんお早うございます。朝早くからありがとうございます。 その通りですね。 後学のために IF~THEN 使わずに A4からAの最終行の範囲を指定してその中での使用済み(罫線は除く)セル位置を求める方法が他にないものかと思って投稿した次第です。ただA4が空だと.End(xlUp).Rowは 4とならずに最終行になるので、範囲の指定のしかたとか、他の方法とかがあれば教えてもらえればと考えてました。もし、他はなくこういう場合は素直にwatabe007さんの示された方法がよいよとなりましたら、解決とさせて頂きます。いましばしお付き合い下さいませ。

関連するQ&A

  • エクセルVBAでデータ最終行取得方法

    エクセルVBAでデータ最終行取得方法で良い方法を教えてください。 データの行数、列数は不定。 最多のデータ行の列も不定。 この条件で、データ最終行を取得するにはどうすればよいでしょうか? lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row では、A列の最終行に限定されます。 lastrow = ActiveSheet.Cells(1, "A").SpecialCells(xlLastCell).Row では、列の限定はありませんが、一旦データ入力後、削除した部分まで入ってしまいます。 lastrow = ActiveSheet.UsedRange.Rows.Count では、データ入力後、削除した部分まで入ってしまい、かつ、1行目など上部が空白の場合、不正確になります。

  • エクセルのマクロ 最終行取得後の作業

    エクセルのマクロで(エクセル2010を使用) Range("A1:A900").Select Range("A" & Rows.Count).End(xlUp).Select i = Selection.Row 上記の900がセルの最終行で最終行数を取得し、iを利用して  Range("A1:A & i ").Select といった感じで使用したいのですが記述がわかりません。 申し訳ございませんが()内の書き方を教えてください。

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

    エクセル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

  • Excelでフィルターのかかっているときの最終行の取り方。

    Dim mySh As Worksheet Set mySh = Sheet("Sheet1") Debug.Print mySh.Cells(mySh.Rows.Count,1).End(xlup).Row でデータのあるA列の最終行を取得していますが、この場合、フィルターがかかっていると実際のデータのある最終行でなくて見えている部分の最終行が返ってきます。 Excel2003 SP3 WindowsXP SP3 フィルターがかかっていても実際のデータのある最終行を取得する方法あるのでしょうか?

  • 最終列に入力されている文字を表示する

    エクセルVBAで最終列に入力されている値の表示方法について教えてください。 最終行については表示できるのですが、最終列に入力されているものの表示がうまくいきません。 A列の最終行の値をセル”D1”に表示するについては Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまくいきました。 最終行、例えば3列目の10行目に”111”と入力されているときにセル”D1”に”111”と表示するようにはどうしたらよいのでしょうか。 どなたがご指南ください宜しくお願いします。

  • 【Excelマクロ】 行全体を選択したい

    下記マクロはデータが入っている最終行の次のセル(A列)を選択するマクロです。 但し、A列はデータが入っていないこともあるため、必ずデータが入っているB列をキーにしています。 NT = Cells(Rows.Count, "B").End(xlUp).Row + 1 Range("A" & NT).Select B125までデータが入っていた場合A126にカーソルが置かれますが、本当は126行全体を選択したいのです。 「Range("A" & NT).Select」部分をどのようなマクロに変更したらよろしいでしょうか?

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

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

  • 最終行/処理対象のデータまでを表すVBA

    こんばんは、データの最終行/処理する対象のセルまで処理する場合のVBAの記述について質問させてください!VBAの最終行/処理する対象のセルまで選択するために使用する記述方法が何種類かありますが、そのうち、書籍やネットで検索しても出てこない記述方法について今一つ理解ができていません(T_T) 本屋で売っている書籍やネットで検索すると出てくる記述方法 Range~.End(xlUp).Row Range~.CurrentRegion Range~.SpecialCells(xlLastCell) Range~.Cells(Rows.Count, 1).End(xlUp).Row 上記のようなVBAは書籍やネットで検索すると説明や違いについても出てくるので、説明を読めば理解ができるのですが、 Sheets("テスト").Range("A1:C" & Sheets("テスト").Cells _(1).CurrentRegion.Rows.Count) Range("A1").CurrentRegion.Cells(Range _("A1").CurrentRegion.Cells.Count).Row 上記のようなVBAについては検索しても説明など出てこないうえに、 なぜ上記のような記述になるのかあまり理解できていません(>_<) 書籍やネットで検索すると出てくる「Range~.CurrentRegion」などの記述方法から何となく、CurrentRegionやCells.Countを使わないといけないというのは理解できますが、なぜ「~CurrentRegion.Rows.Count)」はRowsがカッコの中に入っていて、「~CurrentRegion.Cells.Count).Row」はカッコの外に出ているのか??といった細かいことが分からずにいます。。。 半ば丸暗記のようにして使ってしまっているのですが、もし上記のようなVBAについてわかるかたがいらっしゃれば、ご教授いただけるととても嬉しいです! また、上記以外にもまだ検索しても出てこないようなVBAがあるのでしょうか?? 頭が混乱しそうです!(゜Д゜;)

  • 結合しているセルへのオートフィル

    セルの頭に式を入れていて、それを最終行までオートフィルしたいのですが、うまくいきません。 セルは全て2行ずつ結合しています。 その状態で With Cells(Rows.Count, 5).End(xlUp) .Offset(1, 1) = "最終判定" .Offset(1, 2) = "最終判定" .Offset(1, 3) = "最終判定" .Offset(1, 4) = "最終判定" .Offset(1, 5) = "最終判定" .Offset(1, 6) = "最終判定" .Offset(1, 7) = "最終判定" .Offset(1, 8) = "最終判定" .Offset(1, 9) = "最終判定" .Offset(1, 10) = "最終判定" .Offset(1, 11) = "最終判定" .Offset(1, 12) = "最終判定" Range("F5:F6").AutoFill Destination:=Range(Range("F5:Q6"), Selection.End(xlDown)), Type:=xlFillSeries というマクロを使用していますが(色々弄くり回していたので原型と少々変わってるかもしれません)、セルが結合している為出来ませんなどのエラーが出ます。 そこで回避手段として下記のマクロを組んでみました。 Public Sub testcode() 'ダミーデータ '5000行まで結合する為にダミーの判定用データを作成する(5000行までまずいかない) With Cells(5000, 5) .Offset(1, 1) = "最終行判定用" .Offset(1, 2) = "最終行判定用" .Offset(1, 3) = "最終行判定用" .Offset(1, 4) = "最終行判定用" .Offset(1, 5) = "最終行判定用" .Offset(1, 6) = "最終行判定用" .Offset(1, 7) = "最終行判定用" .Offset(1, 8) = "最終行判定用" .Offset(1, 9) = "最終行判定用" .Offset(1, 10) = "最終行判定用" .Offset(1, 11) = "最終行判定用" .Offset(1, 12) = "最終行判定用" End With '月の下のセルを結合する For m = 6 To 17 Set c = Cells(5, m) Cells(5, m).Activate Do Until c.Value <> "" Or c.Offset(1).Value <> "" c.Resize(2).Merge Set c = c.Offset(1) Loop Next m Range("F5") = "=IF~省略" Range("F5:F6").AutoFill Destination:=Range("F5:Q6"), Type:=xlFillSeries 'ダミーの5000行までオートフィルする Range("F5:Q6").AutoFill Destination:=Range("F5:Q5000"), Type:=xlFillSeries With Range("F5:Q5000") '選択範囲内で中央配置 .HorizontalAlignment = xlHAlignCenterAcrossSelection .Copy End With Range("F5").PasteSpecial Paste:=xlPasteValues 'コピーの解除 Application.CutCopyMode = False 'ダミーデータの選択 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(Rows.Count, 5).End(xlUp).Offset(1, 12)).Select '削除 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(5001, 17)).Delete End Sub 1.まず、F~Q列の5001行に文字を入れる 2.5000行まで2行ずつセルを結合する、F~Q列全て行う 3.F5にオートフィルしたい式を入れる 4.F5~Q6(ここも2行ずつ結合してあります)までオートフィルをする 5.F5~Q6に入っている式を下方向へオートフィルする 6.本来なら不要のダミーデータを選択し、削除する A~E列までは別にデータが入っていて、F~Q列はA~E列の最終行に合わせてオートフィルさせる、という目的で上記マクロを作成し使用しております。 一応これで動くのですが問題点があります。 1.5000行まで無駄なデータを入れているため結合処理が遅い(普段は300~1500程度だが中途半端に設定すると最終行が取得できない可能性があるため) 2.同じく無駄なデータの削除処理が遅い 以上2点が問題点となっております。 上記処理をなくしたいのですが、2行ずつの結合したセルに対して、位置が不明確な場合、オートフィルを飛ばすのは難しいでしょうか? よいマクロが有れば教えてください。

  • VBA 最終列に入力された値の表示について

    VBAで最終列に入力された値の表示について教えてください。 例えば10行目の10列目(J列)に”123”と入力された値をセル”D1”に表示させたいのですがどのようにすればよいのでしょうか。 A列の最終行については Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Cells(Rows.Count, 1).End(xlUp).Row Range("D1").Value = Cells(r, 1).Value End Sub でうまく表示できたのですが、最終列についてなかなかうまくいきません。 どなたかご指南ください宜しくお願いします。

専門家に質問してみよう