【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言

下記のような表があって表の最終行に行を挿入したい場合にこのようなマクロを組んでみたのですが、思ったような動きをしてくれません。
アドバイスを頂けたらありがたいです。またこの場合名前の定義などを使う必要はあるのでしょうか。どうかよろしくお願いします。

   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

A 回答 (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_様のご回答が、
ご希望のご回答のように思えますが、いかがでしょうか?

同じことをするにも、色々なやり方があるので、私も勉強になりました。
    • good
    • 0

「商品一覧」の範囲は正常に指定できていますでしょうか?


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

merlionXXさんも書かれているとおり、Range("商品一覧")の商品一覧の意味がわからないのですが、



6の下に1行追加するだけなら以下のマクロで出来ると思います。
Sub 行挿入() '表の最下行に行を挿入
   With Range("A1").CurrentRegion
    .Rows(.Rows.Count + 1).EntireRow.Insert
  End With
End Sub
    • good
    • 0

おっしゃることがよく理解できないのですが、お書きのデータの最下行(さわら)の下に行を挿入するのですか?


ということは、この表の下の方にもまだ何らかの入力されたセルがあるのですね?
そうでなければこの行の挿入はまったく無意味ですから。

そうだとしたら、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

でどうでしょうか?
    • good
    • 0

>またこの場合名前の定義などを使う必要はあるのでしょうか。


 お示しの表内で「商品一覧」の範囲を
=Sheet1!$A$1:$D$6
としていらっしゃると存じますので、「6 さわら 300 150 150」の次の空白行も含めて
=Sheet1!$A$1:$D$7
として、「Sub 行挿入() '表の最下行に行を挿入」はそのままでお試しになってみてください。
    • good
    • 0

では、Offsetプロパティを外してみてください。



相対的なセルを参照する(Offsetプロパティ)
http://www.moug.net/tech/exvba/0050091.htm
    • good
    • 0

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



とか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/15 18:08

なんか変な気がしますが



Sub 行挿入() '表の最下行に行を挿入
Dim n As Long
n = Range("商品一覧").Rows.Count
Range("商品一覧").Cells(n, 1).End(xlUp).Offset(1).EntireRow.Insert
End Sub
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/03/15 18:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A