- 締切済み
エクセル VBAについて
はじめて質問するのですが(閲覧もほとんどしていませんでした)、 ネチケット違反等がありましたら申し訳ありません。 エクセルVBAで下記のようなことをしたいのですが、 できずに困っています。 A列で文字が入っているセルを、上から下まで確認し、 『在庫』という文字が入ってるセルの下2行に空白行を入れたく 思っています。 とりあえず自分で作ってみたのは、 ******************** Sub 行挿入() Dim i As Integer Dim a As String For i = 1 To 1000 Cells(1, i).Value = a If a = "在庫" Then Rows(i + 1).Insert Rows(i + 2).Insert Else End If Next i End Sub ************************************ 初心者で申し訳ないのですが、上記を実行すると、 アプリケーション定義&オブジェクト定義というエラーが出ます。 何がいけないのでしょうか? 恐れ入りますが、教えてください。 よろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
#2でございます。 #4様回答のコードで動きますがねえ・・。 必ず文字が「在庫」である必要があり、「在庫 」とかだと動きませんが、 そこらへんはどうでしょうか。 若干の追加で、条件が真の時は、i =i + 2 としておくと、挿入した行をカウントしないので若干早くなります。 あとFORが1から1000になっているのは余裕を持ってのことだと思いますが、 実際に1000行あるとしたら、最後のほうは「在庫」があった場合でも、 機能しなくなるのでご注意。 (仮に全部の行に「在庫」があった場合、333行あたりで検索は終わる)
- zap35
- ベストアンサー率44% (1383/3079)
#04です >何も動きがありませんでした。 とのことですが、マクロを実行する際のアクティブシートは「在庫」が入力されたシートになっていますか? またセキュリティレベルが「高」になっていてマクロが実行できない状態になっているようなことはありませんか? (レベルは「中」にします) もしその点は正しいのなら、ステップ実行して確認されたらいかがでしょうか。VBE画面でコードの行のバーをクリックしてブレークポイントを設定すればマクロ実行がその行で止まりますから、F8で1行ずつ動作を確認できます。
- imogasi
- ベストアンサー率27% (4737/17070)
今までの回答に出てないが(既回答はうまく動くか良くチェックしてください) ーー 行削除 行挿入 は下の行からやっていくのが定石と思う。 For i = 1000 To 1 Step -1 上からやったら、挿入した行で全体行数が膨れ上がって、最初の終値1000行目は、上からいくらの番号の行になっているんだったケ?と混乱します。終値1000を増やしていくのもややこしいし。
- zap35
- ベストアンサー率44% (1383/3079)
Cells(1,i)と書いたら動きません。行、列を間違えていますよ。 Cells(1, i).Value = a も代入の方向が反対です Excelでは列は256までしかないのでエラーになるはずです。(でも違うメッセージになるはずだけど…) Sub 行挿入() Dim i As Integer For i = 1 To 1000 If Cells(i, 1).Value = "在庫" Then Rows(i + 1).Insert Rows(i + 2).Insert End If Next i End Sub なら動くと思います。 Cells(i + 1, 1).Resize(2, 1).EntireRow.Insert や Rows(i + 1 & ":" & i + 2).Insert なら2行いっぺんに挿入できます。 ただしRowsやCellsなどのレンジオブジェクトは Activesheet.rows(i) のようにシートを明示する方がよいですよ
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >アプリケーション定義&オブジェクト定義というエラーが出ます。 それは、Cells(1, i).Value = a で、列が、1000までないからです。 たぶん、Rows(i + 1).Insert なら、下に行くはずですから、 Cells(i, 1).Value ではないでしょうか? Rows(i + 1).Insert Rows(i + 2).Insert ↓ Rows(i + 1 & ":" & i + 2).Insert '一緒にしてよいと思います。
お礼
ご回答ありがとうございました。 Cells(1,i)ではなく、Cells(1,i)でした。 こんな基本的なことを間違えるとは・・。
とりあえず、 Cells(1, i)は Cells(i, 1)のような気がする。
お礼
ご回答ありがとうございました。 Cells(i,1)でした。 これは修正したのですが、まだ実行できずにいます・・。
- nakax
- ベストアンサー率13% (15/114)
If a = "在庫" Then Cells(1, i).Value =Rows(i + 1).Insert Cells(1, i).Value =Rows(i + 2).Insert Else End If こんな感じで、どこにRowsを入れないか、 指定しないと駄目なんじゃないですか?
お礼
ご回答ありがとございました。 すぐ回答頂いたにも関わらず、お礼が遅くなり申し訳ありませんでした。 ところで Sub 行挿入() Dim i As Integer For i = 1 To 1000 If Cells(i, 1).Value = "在庫" Then Rows(i + 1).Insert Rows(i + 2).Insert End If Next i End Sub これでマクロ実行してみたのですが、何も動きがありませんでした。 A列のセルには「在庫」の文字が入っているのですが・・。 なぜだろう?と再度考えている所です。