エクセルマクロで行挿入の方法

このQ&Aのポイント
  • エクセルマクロを使用して、特定の条件に基づいて行を挿入する方法について質問します。
  • A列に5桁コードがあり、そのコードの頭文字が「1」から「2」に変わる箇所に行を自動的に挿入したいです。
  • マクロの記録を使用して検索を行い、挿入の指定場所を特定しようとしましたが、エラーが発生しました。どのようにすれば良いでしょうか?
回答を見る
  • ベストアンサー

エクセルマクロで行挿入

「マクロの記録」でマクロを作っていて限界を見たので質問します。 A列に5桁コード、B列から付随するデータを使い、 この5桁コードの頭文字が「1」から「2」に変わる所に一行挿入させたいです。 挿入の指定場所に検索を入れ込むのかなぁとやってみたところ、エラーになりました。 ↓これがそれ。 Columns("A:A").Select range(Selection.find(What:="2????", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate) As range Selection.EntireRow.Insert てんで見当違いかもしれませんが参考に貼り付けてみました。 どうすれば良いか教えてください。 (WinNT・Excel2000)

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

  • ベストアンサー
  • u_marine
  • ベストアンサー率52% (38/73)
回答No.1

簡単ですがこんな感じでいかがでしょうか? ちなみに、テーブルの1行目は見出し行と仮定して、 2行目から処理を開始しています。 Sub Macro1() '変数のセット(開始行2行目) i = 2 'A列の値が空白になるまで処理を繰り返す Do While Cells(i, 1).Value <> "" 'i行が"1"かつi-1行が"2"のときの処理 If Left(Cells(i, 1).Value, 1) = "2" And _ Left(Cells(i - 1, 1).Value, 1) = "1" Then '行挿入 Rows(i & ":" & i).Select Selection.Insert Shift:=xlDown End If '処理行数をカウントアップ i = i + 1 Loop End Sub

paranoia135
質問者

お礼

ご回答ありがとうございました。 なりたいカタチになりました。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

>この5桁コードの頭文字が「1」から「2」に変わる所に一行挿入させたいです このセルは1箇所ですよね。 マクロ記録を書き換えていませんか?下のようにすれば動くはずです。 Columns("A:A").Select Cells.Find(What:="2????", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Select Selection.EntireRow.Insert

paranoia135
質問者

お礼

ご回答ありがとうございました。 コピぺで実行したところ1行目に空白行ができました。 やりたいことと少し違っていました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

結果として#1のご解答と似てしまいました。 for ,next でやろうとしたが,最終を動かすのが上手く行かなくてgotoで凌ぎました。A列にコードがあると仮定。 Sub test01() Sheet1.Activate '-------- a = Cells(1, "a") s = Trim(Str(a)) m = Mid(s, 1, 1) 'mは1行前のキー i = 1 '--------- p01: If Cells(i, "a") = "" Then GoTo p02 '---本行のキー作成 a = Cells(i, "a") s = Trim(Str(a)) k = Mid(s, 1, 1) MsgBox k & "=" & i '----キーが前行に比べ変ったか If m <> k Then Rows(i).Select Selection.EntireRow.Insert d = d + 1 '1行増えると終わりの行(数)は1増える End If '-----本行のキーを次行処理へ渡すためmに入れる m = k i = i + 1 GoTo p01 p02: End Sub ---------- (1)私の経験から、習い始めはFindを使うのは難しい。    特に2つ目以降を見つける処理。    ワイルドカードも、使えたかどうかうろ覚えです。 (2)行挿入・削除も、処理すべき最終行が動くので、プログラムを組むのに注意が要るので、勉強をはじめるのに「適当な分野でない」と思っています。 (3)ForNext,DoWhileなど、全行を繰り返し、見ていく ロジック(総なめ法)をまず身につけるべきと思います。 コンピュター処理が早くなったので、処理時間は気にする 必要がなくなりました。1本釣りで見つけるロジックの方法(例えばFind)の方が難しいのですよ。

paranoia135
質問者

お礼

ご回答ありがとうございました。 コピペで実行したところ「実行時エラー'13'型が一致しません」 4行目「s = Trim(Str(a))」が黄色くなりました。 何がいけないのかよくわかりませんが求めていたものにはなりませんでした。

関連するQ&A

  • エクセル マクロ 日付の検索

    エクセル2000にて検索のマクロを作っています。 オブジェクト変数またはwithブロック変数が設定されていません。とエラーがでます。 どなたか助けていただけませんか? ”メニュー”シートのAボタンを押すと”スケジュール”というシートの今日の日付のセルにカーソルが飛ぶようにしたいと思っています。 ”スケジュール”シートのR2セルに=today() 関数が入っています。 A列に日付が入っています。 Sub Macro3() Dim r2 As String   Application.ScreenUpdating = False  Sheets("スケジュール").Select  r2 = Range("R2").Value   Selection.Find(What:=r2, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate End Sub

  • エクセル2007のマクロ不具合について、

    次のようなマクロを「CTRL+T」のショートカットキーで作成しましたが、2回続けて実行すると2回目が違う結果となってしまいます。 1回目はちゃんと 2010/1/2 のセルがアクティブセルとなるのですが、2回目は 2010/11/2 がアクティブセルとなってしまいます。  原因と対処法があればぜひ教えていただきたいと思います。よろしくお願いします。 Sub 本日() Cells.Find(What:=Date, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • エクセルのマクロについていくつか質問があります

    エクセルのマクロについていくつか質問があります 1 例えばA1セルが赤く塗りつぶされている場合隣のB1セルに赤と表示させたいのですが出来ますか 実際には色は何色かあります 2 セルの検索で検索であったセルを選択状態にするにはどうすればいいですか いちおう検索構文まではできてます Selection.Find(What:="6", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate 以上ですよろしくお願いします

  • 文字検索マクロで質問です。

    文字検索マクロで質問です。 下記のマクロを作成したのですが、A1に検索する文字を入力してA列(A5:11700)のみを検索して該当が有ったらそのセルを色を付けし、又,該当が無ければMSG BOXで”該当なし”と表示するマクロを御教授頂けますか。 Cells.Find(What:=Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas,   LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub 以上、宜しくお願い致します。

  • Excel VBE 検索結果がない時の対処方法

    いつもお世話になっております。 Excelで簡単な文字当てゲーム的なものを作っています 文字列(100個程度)の中から、ある文字列を探し出して、そのセルの文字色を塗り替えるというマクロを組んでいます。 検索部分は下記のように記述してあります。 検索文字列がある時にはうまく動作しますが 検索文字列がない時にはエラーになります。 検索文字列がない時の対処方法を教えて下さい。 よろしくお願いします。 kaitou = Range("g2").Value Range("G2").Select Selection.Copy Columns("B:B").Select Selection.Find(What:=kaitou, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

  • EXCEL VBAでの 文字列検索

    セル内の文字列を部分一致で検索したいのですが、 下記の構文だと、検索対象シートを選択しなくてはならないため、 PGの動きが堅くなってしまいます。何かいい方法をご存知の方、 教えてください。 Selection.Find(What:=key, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate Cells.FindNext(After:=ActiveCell).Activate

  • VBA★findを使って見つけたセルの値を取得

    AA="タナカ" Selection.Find(What:=AA, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate 自動マクロでコレをつくりました。 タナカを見つけてその隣の変数を取得するというものを作りたいと思っています。 関数で言うとVlookupでやるものをマクロ化しようとしています。 検索して見つかったセルの右隣のセルの値を取得するにはどうしたらいいですか?

  • エクセル2000マクロで行を削除したいのですが

    エクセル2000で、社員台帳から特定の人物だけ削除しようと思いマクロを 組んだのですが、どうもうまくいきません。 社員には全員00から99の2桁のコードがついています。(列Aにあります) 2桁のコードが00の人物だけ削除したいのですが。 次のようなマクロを組んだのですが、どこがおかしいのでしょうか? とりあえず、20行程度処理しようと思います。 Range("A2").Select For Each セル In Range("A2:A20") If セル = "00" Then Selection.EntireRow.Delete Next

  • EXCEL マクロでの検索をお教えください

     下記のようなマクロを使いたいのですがこの場合×があるときは良いのですが、  無いときエラーが出ます。どの様にすれば良いのかお教えください。  無いときエラーは オブジェクト変数または With ブロック変数が設定されていません。  となります。 Sub 検索()    Range("K12:K70").Select    Cells.Find(What:="×", After:=ActiveCell, LookIn:= _    xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _    xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • エクセル 特定文字列のある列の削除と保存

    こんにちは いつもお世話になっています。 エクセル2010です 1行目に文字列が入力されています。 (1)1行目に特定文字列を含む列を削除するマクロ。 (2)1行目に特定文字列を含む列だけを残して、他はすべて削除するマクロ を教えてください。 2つ質問するのが不適当ならどちらか一方でも構いません。 指定したい文字列は複数ありますので「文字列A、文字列B、・・・」等で追記できる形だと助かります。フォーマットが決まっているので指定文字列を頻繁に変えることはありません。 特定行を削除するマクロはネット上でヒットしたんですが、列は見つかりませんでした。 マクロ記録で、文字列検索、列削除をしましたが、連携のさせ方がわかりません。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Rows("1:1").Select Selection.Find(What:="あ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Columns("A:A").Select Selection.Delete Shift:=xlToLeft End Sub

専門家に質問してみよう