• ベストアンサー

マクロ最終行挿入

下記のような表があって表の最終行に行を挿入したい場合にこのようなマクロを組んでみたのですが、思ったような動きをしてくれません。 アドバイスを頂けたらありがたいです。またこの場合名前の定義などを使う必要はあるのでしょうか。どうかよろしくお願いします。    A    B    C    D   E   F 1 商品一覧 2 品名 売値 原価 利益 3 たい 1000 800 200 4 ひらめ 1200 800 400 5 かれい 1050 1200 -150 6 さわら 300 150 150 ※ ここに行を挿入したい※   Sub 行挿入() '表の最下行に行を挿入 Dim n As Long n = Range("商品一覧").Rows.Count Range("商品一覧").Cells(n, 1).EntireRow.Insert End Sub

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

  • ベストアンサー
noname#89471
noname#89471
回答No.8

セル範囲を"商品一覧"という名前で定義されているのでしょうね? 定義されていなかったら、エラーですから... Sub 行挿入() '表の最下行に行を挿入 Dim n As Long n = Range("商品一覧").Rows.Count Range("商品一覧").Cells(n, 1).EntireRow.Insert End Sub をそのまま使うとして、 セル"A1:A7"の範囲を"商品一覧"という名前定義したら、"A6"の下("A7"のところ)に一行入りました。 上記の定義範囲は、セル範囲が、A列の1行~7行なので... それをカウントすると、n = 7 です。 なので、 > 商品一覧のすぐ下の行に挿入されてしまい求めているものができません。。 ------------------- これは、おそらく... "A1"のみ名前定義されているので、Offset(1)しても、その下の行にしかOffsetしないので、 商品一覧のすぐ下の行に挿入されてしまうものと思われます。 ("A1"のみだと、n = 1) データの最終行に追加で挿入したいということであれば、merlionXX様、takana_様のご回答が、 ご希望のご回答のように思えますが、いかがでしょうか? 同じことをするにも、色々なやり方があるので、私も勉強になりました。

その他の回答 (7)

  • suo2k
  • ベストアンサー率44% (183/408)
回答No.7

「商品一覧」の範囲は正常に指定できていますでしょうか?  n への代入後 Msgbox n として、nが正常か確認してください。(もしくはブレイクポイントとか使って) 例の場合なら1~6行目の6か、2~6行目の5ですよね? それと、Cells(n, 1)ではなくCells(n+1, 1)ではありませんか? Cells(n, 1)だと、さわらの上に行が挿入されそうな…?

  • takana_
  • ベストアンサー率44% (21/47)
回答No.6

merlionXXさんも書かれているとおり、Range("商品一覧")の商品一覧の意味がわからないのですが、 6の下に1行追加するだけなら以下のマクロで出来ると思います。 Sub 行挿入() '表の最下行に行を挿入    With Range("A1").CurrentRegion     .Rows(.Rows.Count + 1).EntireRow.Insert   End With End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

おっしゃることがよく理解できないのですが、お書きのデータの最下行(さわら)の下に行を挿入するのですか? ということは、この表の下の方にもまだ何らかの入力されたセルがあるのですね? そうでなければこの行の挿入はまったく無意味ですから。 そうだとしたら、end(xlUp)で下から探せませんので上から探すことになります。 表がA1から連続しているものとして Cells(1, 1).End(xlDown).Offset(1).EntireRow.Insert でいかがでしょうか? あるいは、想像ですが、現在の表の範囲設定してある"商品一覧"という名前定義の範囲を一行下まで拡張したいという意味なのでしょうか? だとしたら Sub test01() With Range("商品一覧") Set myRng = .Resize(.Rows.Count + 1) ActiveWorkbook.Names.Add Name:="商品一覧", RefersTo:=myRng End With End Sub でどうでしょうか?

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

>またこの場合名前の定義などを使う必要はあるのでしょうか。  お示しの表内で「商品一覧」の範囲を =Sheet1!$A$1:$D$6 としていらっしゃると存じますので、「6 さわら 300 150 150」の次の空白行も含めて =Sheet1!$A$1:$D$7 として、「Sub 行挿入() '表の最下行に行を挿入」はそのままでお試しになってみてください。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

では、Offsetプロパティを外してみてください。 相対的なセルを参照する(Offsetプロパティ) ​http://www.moug.net/tech/exvba/0050091.htm

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Range("商品一覧").Item(Range("商品一覧").Rows.Count).Offset(1).EntireRow.Insert とか?

igu0625
質問者

お礼

ありがとうございます。 ただ、やはりこれも商品一覧のすぐ下の行に挿入されてしまい求めているものができません。。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

なんか変な気がしますが Sub 行挿入() '表の最下行に行を挿入 Dim n As Long n = Range("商品一覧").Rows.Count Range("商品一覧").Cells(n, 1).End(xlUp).Offset(1).EntireRow.Insert End Sub

igu0625
質問者

お礼

ありがとうございます。 ただ、商品一覧のすぐ下の行に挿入されてしまい求めているものができません。。