• ベストアンサー

エクセルで行挿入&コピー

エクセルにて下記のように入力してあります。 A     B    C     D 111   111 222   111 次にC列の一行目にM001、D列の一行目にA001を入力した後(セルは2行目)に任意の行数を挿入し、さらにA,B列は一行目をコピー、C,D列は連番になるようにVBで作成するにはどうしたらいいでしょうか。 よろしくお願い致します。

  • ty001
  • お礼率6% (1/16)

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.4

A~F列を直上の値のコピー、G、H列を連番にすると以下のようになります。 貼り直してください。 なお、挿入したくない場合は、InputBoxが表示された時点でキャンセルをクリックするか キーボードのEscキーを押していただければキャンセルします。 なお、私No3の回答で少しミスをしてしまってます。No3の回答では、InputBoxでキャンセルをクリックすると次回より働かなくなってしまいます。下のソースはその点修正済みです。 Private Sub Worksheet_Change(ByVal Target As Range)   On Error GoTo ERREND   If Target.Column <> 7 And Target.Column <> 8 Then Exit Sub   If Cells(Target.Row, 7).Value = Empty Or Cells(Target.Row, 8).Value = Empty Then Exit Sub   Application.EnableEvents = False   Application.ScreenUpdating = False   Dim 挿入行数 As Long '必要に応じてこの下の行を編集します------------------------------     挿入行数 = 0   'ここまで編集できます--------------------------------------------     Do While 挿入行数 = 0     Tmp = InputBox("挿入する行数を指定してください", "挿入行数", "1")     If Tmp = Empty Then GoTo ERREND     If IsNumeric(Tmp) Then 挿入行数 = CInt(Tmp)   Loop   Rows(CStr(Target.Row + 1) & ":" & CStr(Target.Row + 挿入行数)).Insert _   Shift:=xlDown   Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).AutoFill _   Destination:=Range(Cells(Target.Row, 1), Cells(Target.Row + 挿入行数, 6)), _   Type:=xlFillCopy   Range(Cells(Target.Row, 7), Cells(Target.Row, 8)).AutoFill _   Destination:=Range(Cells(Target.Row, 7), Cells(Target.Row + 挿入行数, 8)), _   Type:=xlFillDefault   Cells(Target.Row + 挿入行数 + 1, 7).Select ERREND:   Application.ScreenUpdating = True   Application.EnableEvents = True End Sub

ty001
質問者

補足

ありがとうございます。 少しためしてみましたが、G列を入力した時にINPUT BOXを 表示し、G列の値がSだった場合は何もしないようにするにはどうすればいいでしょうか。 何回もお手数をおかけします。

その他の回答 (4)

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.5

4行目と5行目の間 If Cells(Target.Row, 7).Value = Empty Or Cells(Target.Row, 8).Value = Empty Then Exit Sub と Application.EnableEvents = False の間に、以下の1行を追加します。   If Cells(Target.Row, 7).Value = "S" Then Exit Sub ""の間の文字を変えてやれば、他の文字にも対応できますよ。 他にも条件があるのであれば、どんどん追記していってください。 例えば、小文字のsも、全角のSも、全角小文字のsもということであれば   If Cells(Target.Row, 7).Value = "S" Then Exit Sub   If Cells(Target.Row, 7).Value = "s" Then Exit Sub   If Cells(Target.Row, 7).Value = "S" Then Exit Sub   If Cells(Target.Row, 7).Value = "s" Then Exit Sub と行を追加していけばよいです。H列も条件に入れたいのであれば、「Target.Row, 7」の部分を 「Target.Row, 8」と書き換えてやればよいだけです。 では、私これからしばらく席を外しますので、他に質問がありましたら、夜中に回答いたしますので宜しくお願いします。

ty001
質問者

お礼

丁寧に教えていただき、ありがとうございました。 解決いたしました。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.3

じゃあこういうことですか? 1) 任意の行のC列もしくはD列に入力され、且つその行のC列にもD列にも値が入っていた場合実行 2) 自動的にInputBoxを表示させ、挿入する行の数を入力 3) 入力された数の行だけ下に行挿入 4) A、B列には直上の値をそのままフィル 5) C、D列には直上の値を連番にてフィル 6) C列の、挿入された行の直下のセルをアクティブにする。 それでよければ以下をどうぞ 'ここから------------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)   On Error GoTo ERREND   If Target.Column <> 3 And Target.Column <> 4 Then Exit Sub   If Cells(Target.Row, 3).Value = Empty Or Cells(Target.Row, 4).Value = Empty Then Exit Sub   Application.EnableEvents = False   Application.ScreenUpdating = False   Dim 挿入行数 As Long '必要に応じてこの下の行を編集します------------------------------     挿入行数 = 0   'ここまで編集できます--------------------------------------------     Do While 挿入行数 = 0     Tmp = InputBox("挿入する行数を指定してください", "挿入行数", "1")     If Tmp = Empty Then Exit Sub     If IsNumeric(Tmp) Then 挿入行数 = CInt(Tmp)   Loop   Rows(CStr(Target.Row + 1) & ":" & CStr(Target.Row + 挿入行数)).Insert _   Shift:=xlDown   Range(Cells(Target.Row, 1), Cells(Target.Row, 2)).AutoFill _   Destination:=Range(Cells(Target.Row, 1), Cells(Target.Row + 挿入行数, 2)), _   Type:=xlFillCopy   Range(Cells(Target.Row, 3), Cells(Target.Row, 4)).AutoFill _   Destination:=Range(Cells(Target.Row, 3), Cells(Target.Row + 挿入行数, 4)), _   Type:=xlFillDefault   Cells(Target.Row + 挿入行数 + 1, 3).Select ERREND:   Application.ScreenUpdating = True   Application.EnableEvents = True End Sub 'ここまで------------------------------------------------------------- 今度は別の場所に貼り付けます。以下を参照ください。(Excel2000以降) 1) 目的のシートのタブを右クリックして、「コードの表示(V)」を選択 2) 現れた「Microsoft Visual Basic」の右側の空白の部分に、   上の「ここから」から「ここまで」を貼り付ける。 3) Microsoft Visual Basic を終了する。 今度はマクロの実行を行わなくても、セルに値を入力すると自動的に実行します。 また、C列を先に入力しても、D列を先に入力してもOKです。 (両方が埋まった時点で実行しますので)

ty001
質問者

補足

ありがとうございます。 実際に使用する列はA列~F列までが真上の値をコピー、 G、H列が真上の値を連番になります。 後,挿入がない場合がありますので自動的に実行しないようにするにはどうすればよいでしょうか。 よろしくお願い致します。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

ひょっとしてこういうことでしょうか? とりあえず下のマクロを実行してみてください。 'ここから-------------------------------------------------------------------------- Sub 挿入処理()   Dim 挿入行数 As Long '必要に応じてこの下の行を編集します------------------------------      挿入行数 = 0      '挿入したい行数を上の行の「0」の代わりに代入します。   '0のままだと、実行時に何行挿入するかを尋ねます。 'ここまで編集できます--------------------------------------------      Do While 挿入行数 = 0     Tmp = InputBox("挿入する行数を指定してください", "挿入行数", "1")     If Tmp = Empty Then Exit Sub     If IsNumeric(Tmp) Then 挿入行数 = CInt(Tmp)   Loop   Rows("2:" & CStr(1 + 挿入行数)).Insert Shift:=xlDown   Range("A1:B1").AutoFill Destination:=Range("A1:B" & CStr(挿入行数 + 1)), Type:=xlFillCopy   Range("C1:D1").AutoFill Destination:=Range("C1:D" & CStr(挿入行数 + 1)), Type:=xlFillDefault End Sub 'ここまで-------------------------------------------------------------------------- 上の貼り付け方が分からない場合は、以下ご覧下さい。 1) ツール(T)-マクロ(M)-新しいマクロの記録(R)を開く 2) 「マクロの記録」ウィンドウが表示されたら、何も変更せずにOKをクリック 3) 画面上に二つのボタンが表示されたツールバーが現れたら、左側の「■」をクリックして記録終了 4) Altキーを押しながらF8キーを押して、マクロウィンドウを開く 5) マクロウィンドウから、編集(E)ボタンをクリック 6) 現れた「Microsoft Visual Basic」の右側に Sub Macro1() ' ' ' End Sub と書いてある部分を削除して、上の「ここから」から「ここまで」を貼り付ける。 7) もう一度Altキー+F8キーでマクロウィンドウを開き、実行(R)ボタンをクリック

ty001
質問者

補足

文章があいまいですみません。 結果から書くと A     B      C    D 111  111 M001 A001 111  111 M002 A002 111  111 M003 A003 222  111 333  111 C、D列の一行目を入れた後に行数(任意)を入力するINPUT BOXを表示させる。同時に上記のようにコピーする。後はC、D列の4行目を入力後繰り返す。 マクロの起動時はC、D列を入力した後です。 よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

VBとは、VBAのことでしょうけれども、手順として、マクロの範囲が分かりませんし、マクロの起動時がどこか文章では分かりません。(VBですと、EXCELを開けるところから始りますが、VBをお持ちでいなと、こちらは、ソースのみになってしまいます) C1 に、M001 と D1 にA001 を入力することが、マクロに影響しますか? (質問文は、それが半角全角混在ですが、それが正しいのですか?) マクロで入れるのですか? A1とB1 を、C3:D3 にコピーするのですか? それとも、C2 の任意の行数を入力した場所に上書きするのですか? その行数は、セルに直接、ユーザーが入れるのですか? その連番の増加は、1 なのですか? それとも、A1~A2, B1~B2 の差の増加率なのですか? よく分かりませんので、こちらは、独自に解釈して作りました。以下は<該当するシートモジュール>に貼り付けます。 こちらが書いたマクロの内容は、C1 に、M001 と D1 にA001 をユーザーが書き、C2 に、コピーする行数をユーザーが入れる。すると、A2とB2 が、どのような値を持っていても、C2 の数字のコピー数だけA1,B1 の増加率は1として、コピーされる、という内容です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$2" And Range("C1").Value = "M001" And _ Range("D1").Value = "A001" Then  If Range("C2").Value <= 0 Then Exit Sub  Range("A1:B2").Copy Range("C3")  Range("C3:D3").Resize(Range("C2").Value).DataSeries _     Rowcol:=xlColumns, _     Type:=xlLinear, _     Date:=xlDay, _     Step:=1 '増加率:1 End If End Sub したがって結果は、  C  D M001  A001 2 111  111 112  112 となります。

ty001
質問者

補足

文章があいまいですみません。 結果から書くと A    B   C   D 111  111  M001 A001 222  111 333  111

関連するQ&A

  • エクセルのマクロ(行を挿入し連番を振る)

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? A列2行目から 書類a 書類b 書類c 書類d 書類e C列2行目から 5 3 2 4 3 と入っています。C列は各書類の枚数です。 ボタンを押すと書類aと書類bの間に4行空白行が挿入され、A列とC列は増やした4行にそれぞれ書類a、5がコピーされ、B列には2列目から6列目まで1.2.3.4.5と連番が振られる。 というマクロです。 B列C列で1/5 2/5 3/5 4/5 5/5 であるという表現がしたいのです。(/は入りません) 書類が1枚の場合はB列C列共に空白で1/1とは入りません。 C列に入る書類の枚数により行が挿入されその書類の枚数分の連番が振られるようなマクロが作りたいです。 毎日何百行も手作業で挿入しコピーし連番を振る作業をしています。 決まった行数を増やすとか上の行をコピーするマクロならわかるのですが、C列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • エクセルでセルに数字を入力することにより行をコピー挿入

    仕事で送り状作成用のデーターを作っています。 行に郵便番号、住所、名前等が入力されてます。この1行をコピーしたいのですが、セルに必要する数字を入力することによりコピー挿入することはできないでしょうか? 例)    A       B       C      D 1  郵便番号  住所       名前    コピー行数 2  100-0001  東京都港区・・・ 山本太郎    5 3  101-0001  東京都江東区・・ 山田花子    8 以下複数行続きます。 D列に必要なコピー行数を入力することにより、一発でコピーできる方法をご教授くださいませ。エクセルのマクロを使えばできそうなのですが、マクロはあまりわかりませんので、できるだけ詳しくお願い致します。

  • エクセル行挿入 計算式のコピーができない

    エクセルでA列に得意先名、B列に製品名、C列に税抜き請求額、D列に税込み金額を設定して300行ほど入力した表組みに行を挿入したのですが税込み金額のとこの計算式が挿入時コピーされたり、されなかったりします。常に挿入時計算式がコピーできる方法があれば教えてください。 ちなみにA列に「かな」を設定していますがこれはコピーされます。しかしD列の税込み金額には、C列の税抜き金額かける1.05の計算式(C00*1.05)を設定しています。初歩的なことで申し訳ございません。よろしくお願いいたします

  • エクセルで数字を認識して行をコピーして挿入するマクロ

    以前ご質問がありましたが少し違います。 エクセルのマクロでこんなことは可能でしょうか? (1)ある「不特定のセル」に(数字)が入ったとき    (そのセルの列は固定) (2)自動的にそのセルの「行」全体をコピーして    その数字が5なら5行、1なら1行 (3)ひとつ下の行に「コピーしたセルの挿入」で行の追   加をする 例 列 A.B.C.D.E a.b.c.d.2 "a.b.c.d.2" "a.b.c.d.2" a.b.c.d.3 Eの列に2とある場合下に2行追加コピー "a.b.c.d.2"の部分。 不特定が難しい場合は E列とか列を決めていただいてもよろしいです。 あとでVBをこちらで変更いたします。 無理を言いますが可能であれば お詳しい方、ご教授宜しくお願い致します。

  • エクセルで数字を認識して、行をコピーして挿入するマクロ

    エクセルのマクロでこんなことは可能でしょうか? (1)あるセルに(数字)が入ったとき    (そのセルの列は固定) (2)自動的にそのセルの「行」全体をコピーして    その数字が5なら4行、1なら0行 (入力値より-1行) (3)ひとつ下の行に「コピーしたセルの挿入」で行の追加をする 例 列 A.B.C.D.E a.b.c.d.2 "a.b.c.d.2" a.b.c.d.3 "a.b.c.d.3" "a.b.c.d.3" Eの列に2とある場合下に2行-(1行)追加コピー "a.b.c.d.2"の部分。 無理を言いますが可能であれば お詳しい方、ご教授宜しくお願い致します。

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • 行の挿入で数式も自動的に挿入

    C1列に=SUM(A1:B1)を入力し、オートフィルを30行目までかけました。 3行目で行の挿入をした時に 自動的にC列に数式が入力されている状態 (上の行、又は下の行のコピーを挿入) にしたいのですがどうすればよろしいでしょうか? 行をコピー  → コピーしたセルの挿入 以外の方法はあるんでしょうか? よろしくお願い致します。

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • Excelの行挿入で

    Excelのシートにデータがつまっているのですが(これから新しく表を作るということではないということです。)、行の挿入をしたいのです。 このとき、行を選択して、右クリックで「挿入」を選べば挿入自体はできます。 しかし、 既にある表は、行が、A列とB列が結合されているのですが、 単に上記のように挿入すると、 A列B列が分かれている行が挿入されてしまいます。 新しく挿入された行のA列とB列を選択して、「セルの書式設定」の「配置」でセルを結合させてもいいのですが、 いちいちそうしなくても 挿入時点ですでに結合されているようにするにはどうすればよいですか。 (Excel2000)

  • Excelでコピーした行の挿入を繰り返すには

    Excelで行をコピーして、別の行で右クリックして コピーしたセルの挿入 を行うと、コピーした行を挿入できます。 しかし、一度 コピーした行を挿入すると、 もう右クリックしても 「コピーしたセルの挿入」はありません。 コピーした行の挿入を繰り返すには、どうすればよいですか。 Excel2000です。

専門家に質問してみよう