エクセル・マクロで最終行を表示する方法

このQ&Aのポイント
  • エクセル・マクロを使用して、指定した列の最終行を表示する方法について説明します。
  • 今回の場合、C列に入力された式が0以外の値や文字である場合、その行を最終行として表示します。
  • マクロを作成し、C列の最終行を特定するために、RangeオブジェクトとEndメソッドを使用します。
回答を見る
  • ベストアンサー

エクセル・マクロで最終行を表示することについて

エクセル・マクロで最終行を表示することについて C列の最終行を表示する場合、以下のマクロで表示できます。 今回はC列に C1=A1&B1 C2=A2&B2  ↓ という式が入力されている場合について質問します。 A列とB列が空白の場合、C列には0が表示されます。 したがって、下記のマクロだとこの0の行が最終行となります。 私の希望はこのC列の0は空白とみなし、0以外の値や文字が入力されている最終行を表示することです。 どのような工夫をすれば可能でしょうか? ご指導よろしくお願いします。 Sub 最終行表示() maxrow = Range("c65536").End(xlUp).Row MsgBox maxrow End Sub

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

>今回はC列に >C1=A1&B1 >という式が入力されている場合 >A列とB列が空白の場合、C列には0が表示されます。 >したがって、下記のマクロだとこの0の行が最終行となります。 これは少し勘違いがあるようです。 C1=A1&B1 の式は文字列結合ですから A1,B1空白のときに、0が表示されることはありません。 空白のとき0になるのは、 =A1 とか =A1+B1 とかの場合です。 また、C列には式が入っているので常に結果が入っていることになり その結果が空白あれなんであれ、Range("C65536").End(xlUp).Row では、 常に式の入っている最終行が取得されることになります。 で、簡単なのは、A列、B列の最終行の大きい方をとる方法でしょう。 '------------------------------------------- Sub 最終行表示t()  Dim MaxRow As Long  If Range("A65536").End(xlUp).Row > Range("B65536").End(xlUp).Row Then     MaxRow = Range("A65536").End(xlUp).Row  Else     MaxRow = Range("B65536").End(xlUp).Row  End If  MsgBox MaxRow End Sub '------------------------------------ それから、最終行を取得するときは、A65536は使わないで   Range("A" & Rows.Count).End(xlUp).Row のように、Rows.Countを使った方がいいでしょう。 xl2007ではシートの最大行が違いますから。 列も同様。 以上です。

saya1012
質問者

お礼

ご回答ありがとうございました。 希望どおりにできました。 >これは少し勘違いがあるようです。 すみません。私の勘違いでした。

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

文字通りmaxを取ってみる事で良いです。なんども同じ数字を調べに行く必要もありません。 sub macro1() dim maxrow as long maxrow = application.max(range("A65536").end(xlup).row, range("B65536").end(xlup).row) msgbox maxrow end sub

saya1012
質問者

お礼

ご回答ありがとうございました。 希望どおりにできました。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

A,B列にデーターが入っている場合のC列の最終行を求めたいのであれば A列かB列の最終行を取得すれば問題ないのでは?

saya1012
質問者

お礼

アドバイスありがとうございます。

  • BookerL
  • ベストアンサー率52% (599/1132)
回答No.2

スマートではないですが、やりたいことをそのまま書いてみたら? Sub 最終行表示() Dim maxrow As Long maxrow = Range("C65536").End(xlUp).Row While Range("C" & maxrow).Value = "" maxrow = maxrow - 1 Wend MsgBox maxrow End Sub なお、 >A列とB列が空白の場合、C列には0が表示されます。 はほんとにそうなりますか? A列B列ともに空白なら、C列も空白になるのでは?

saya1012
質問者

お礼

ご回答ありがとうございました。 希望どおりにできました。 >はほんとにそうなりますか? A列B列ともに空白なら、C列も空白になるのでは? すみません。おっしゃるとおりです。

関連するQ&A

  • EXCEL 最終行に入力するマクロ

    マクロ初心者です。 シート”受注書”からシート”受注履歴”に 履歴情報を書き込むマクロを作成しています。 初心者丸出しで恥ずかしいのですが、 下記のように組んでいます。 Sub 受注情報書き込み() Dim ws01 As Worksheet Dim ws02 As Worksheet Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws02.Activate ' 受注No入力 ws01.Range("C2").Copy ws02.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ' 受注日入力 ws01.Range("M2").Copy ws02.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ' 出荷日入力 Sheets("粗利報告書").Range("D3").Copy ws02.Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ・ ・ ・ この場合、受注書シートが空白の場合、 受注履歴シートも空白になると思うのですが、 次回、履歴を書き込む時に空白を詰めて(最終行に) 入力してしまう事を避けたいです。 空白は残しつつ、一受注を同じ列に入力する為には、 どうしたら良いでしょうか?

  • エクセルVBAで行のコピー貼り付けについて

    初心者、勉強中でエクセル2007です。 A1行からK40行までの表があります。 これを下にコピーをしながら増やしていってるのですが、マクロでしようと思い下記のとおり 考えました。 selecion.row.Offset(39, -1).Select ここでオブジェクトが必要ですと出ます。 それからその下の?とを色々ぐぐってみますがどうしてもわかりません。 それと2007ですので65536行ではないのですが、MaxRow = Cells(Rows.Count, 1).End(xlUp).Row だと動かないみたいですので下記としています。 よろしくご教授お願いします。 Sub Gcopy() MaxRow = Range("B65536").End(xlUp).Offset(-39, -1).Select データの入ってる最終行を取得 Selecion.row.Offset(39, -1).Select 選択された行から上に39行移動し選択 ?                    下へ39行まで選択   MaxRow = Range("B65536").End(xlUp).Offset(1, -1) 最終行を取得 ActiveSheet.Paste 貼り付け End Sub

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

  • 行削除のマクロ

    B列~F列にデータが入っていてB列の最終行の下セルを選択しクリップボードのデータを貼り付けた後、貼り付けたデータの最初の3行を削除するマクロを作っています。 Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub これでB列の最終行の下にデータを貼り付けることまで出来たのですが貼り付けた最初の3行の削除の仕方がわかりません。 いい方法があれば教えていただけないでしょうか。  例えばB列の10行目まで既に入力されていた場合、11行目からクリップボードのデータを貼り付け(ここまでは上のプログラムで出来ました。)、11行目から13行目を削除したいのですがどうしたらいいでしょうか?

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

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

  • 空白行の削除マクロについてご教示ください

    空白行の削除に、下記マクロを活用させていただいていますが、 見た目空白なのに削除されない行が時々残ってしまいます。 削除されなかったセルを「Deleteキー」で空白にするとマクロが 実行され、きちんと削除されます。 こういった、スペースか何かが入っていても、見た目空白なら 削除するようにはできないでしょうか。 どなたかよろしくお願いいたします。 Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a5000").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub

  • エクセルマクロ 最終行ではなく途中行を検索したい

    よろしくお願いします。 今現在、どこからかの流用で、下記のように3(C)列の3行目から最終行まで 入力する形にしていますが、最終行ではなく(1)途中の空白、若しくは(2)指定の 行がある場合、又は(3)罫線が引かれている所まで はどのように書き換えれば よいでしょうか? ※(1)、(2)、(3)のそれぞれの場合で回等頂ければと思います。 Dim LastRow As Integer LastRow = Cells(Rows.Count, 3).End(xlUp).Row For p = 3 To LastRow Cells(p, 2).Select ActiveCell.FormulaR1C1 = p - 2 '開始位置の2行ズレ分、-2を入力 Next p

  • 行を非表示です

    お願いします A列にはコード番号を表示しています 7行目から 102 104 107 110 101 105 順不順です End(xlUp))で最終行を取得します 上記中のR列に空白セルがある場合その行をEntireRow.Hidden = True で非表示としたいのです どうかご指導おねがいします

  • マクロを使って最終行を取得して、範囲内の空白セルに

    マクロを使って最終行を取得して、範囲内の空白セルに指定の文字列を表示させたいです。 お世話になります。 要件としてはタイトルの通りです。 Excel2013を利用しています。 A列を参照して最終行を取得し、 B列の1~最終行までの空白セルに対して「未入力」という文字列を入力したいです。 この場合、考え方はいろいろあるのでしょうが どのようにコードを組めば良いでしょうか? 自分では、まったく書けていないというのが正直なところです。 そこで御手数ですが、ご協力をお願いいたします。

  • エクセル 行の表示非表示のマクロでエラーが

    たとえば     列A  行1 2300  行2 1500  行3  500  行4  300 となっていて、ボタンを押すたびに行2~行4の表示非表示を切り替えるマクロを以下のように設定しました。   Sub ()   With Rows("2:4")   .Hidden = Not .Hidden   End With   End Sub そして、A1のセルを保護しシートを保護したところマクロにエラーが出て使えなくなりました。 解決方法はあるのでしょうか? よろしくお願いします。

専門家に質問してみよう