• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 行挿入)

VBAで行を挿入して数量を入れる方法

このQ&Aのポイント
  • Sheet1の特定の列の数量が1以外の場合、行を挿入し、H列に分子、I列に分母を入力する方法をVBAで実装したいです。
  • 連番がいくつまで存在するかわからないため、連番の範囲を自動で検出する機能も実装したいです。
  • VBAを利用して学校名、氏名、性別、ブレザーサイズなどのデータが格納されたSheet1の特定の列を条件に行を挿入し、H列とI列に数量の分子と分母を入力する方法を教えてください。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

>結果を別シートに表示させることはできますか? 現在のシートの右側に複製したシートで作業するように変更しました。 「結果を別シートに」の意味が特定のシートの特定の場所に 結果(の全てまたは一部)を表示させるとかであれば、別途補足願います。 >実行したら選択したまんまなのですが選択させないようにできますか? 選択とは行のコピー処理を行った状態の破線のこであれば 処理終了後にコピーモードを解除するように変更しました。 ■VBAコード Sub 挿入() Dim i As Long, j As Long ActiveSheet.Copy After:=ActiveSheet [H1:I2].Formula = [{"ブレザー","";"数量","数量"}] For i = Cells(Rows.Count, "A").End(xlUp).Row To 3 Step -1   If Cells(i, "G") > 1 Then     For j = 1 To Cells(i, "G")       If j > 1 Then         Rows(i).Copy         Rows(i + 1).Insert       End If       Cells(i, "H") = Cells(i, "G") - (j - 1)       Cells(i, "I") = Cells(i, "G")     Next j   Else   Range(Cells(i, "H"), Cells(i, "I")) = 1   End If Next i Application.CutCopyMode = False End Sub

meronsodanomu
質問者

お礼

また何かあるかもしれませんが十分です。 すごいなぁ。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1です。 申し訳ありません。 数量1の場合で、H・I 列に「1」を書き出していませんでした。 VBAコードを以下の物と差し換えてご利用ください。 ■VBAコード Sub 挿入() Dim i As Long, j As Long [H1:I2].Formula = [{"ブレザー","";"数量","数量"}] For i = Cells(Rows.Count, "A").End(xlUp).Row To 3 Step -1   If Cells(i, "G") > 1 Then     For j = 1 To Cells(i, "G")       If j > 1 Then         Rows(i).Copy         Rows(i + 1).Insert       End If       Cells(i, "H") = Cells(i, "G") - (j - 1)       Cells(i, "I") = Cells(i, "G")     Next j   Else   Range(Cells(i, "H"), Cells(i, "I")) = 1   End If Next i End Sub

meronsodanomu
質問者

お礼

やりたかったことができました! ありがとうございます。

meronsodanomu
質問者

補足

結果を別シートに表示させることはできますか? 実行したら選択したまんまなのですが選択させないようにできますか?

全文を見る
すると、全ての回答が全文表示されます。
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

ご提示の結果で7~9行目の連番4の場合ですが なぜ数量が3になるのでしょうか? 2である解釈で作成します。 (1)Alt+F11でVBEを開く (2)「挿入→標準モジュール」で標準モジュールを挿入する (3)以下のVBAコードを貼付る (4)右上の×か、ALt+F11でVBEを閉じる (5)対象の「Seet1」を表示した状態で、Alt+F8か、「表示→マクロ」から「挿入」マクロを選んで「実行」 ■VBAコード Sub 挿入() Dim i As Long [H1:I2].Formula = [{"ブレザー","";"数量","数量"}] For i = Cells(Rows.Count, "A").End(xlUp).Row To 3 Step -1   If Cells(i, "G") > 1 Then     For j = 1 To Cells(i, "G")       If j > 1 Then         Rows(i).Copy         Rows(i + 1).Insert       End If       Cells(i, "H") = Cells(i, "G") - (j - 1)       Cells(i, "I") = Cells(i, "G")     Next j   End If Next i End Sub

meronsodanomu
質問者

お礼

ありがとうございます。

meronsodanomu
質問者

補足

氏名4は数量3でした。間違えました。下の表があってます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • excelのマクロで条件による行の挿入

    列AとBがあり列Aに学校のクラス名A組、B組、C組・・・(20クラスほど)と氏名が 入るエクセルシートがあるのですが 先頭行はA組から始まり5行区切りで数え、(A組も5行のうちに入る) その5行内に次のB組が入らないように空白行を挿入したいです もし、5行以内にB組がない場合、次の5行でまたB組があるか判定しなければ氏名5つ あれば空白をいれてというのを20クラスぶん作るマクロは可能でしょうか? VBAの知識がさっぱりないので途方にくれています。 元のデータの例   マクロ実行後 列A   列B      列A   列B A組           A組   氏名1 111      氏名1 111  氏名2 222      氏名2 222 B組           空白行挿入 氏名3 333      空白行挿入 氏名4 444      B組 氏名5 555      氏名3 333 氏名6 666      氏名4 444 氏名7 777      氏名5 555 C組 氏名6 666              氏名7 777              空白行挿入              空白行挿入              空白行挿入              空白行挿入              C組  

  • (VBA)対応する番号の下に行挿入して文字列を追加

    以下を行うVBAのコードを知りたい シート名「Extra」のA列に文字列が複数行に渡って記入されています 必ずA1は1で数行後に2と以後連番が続く形式です。 Sheets名「Time」は、 A列に1から始まる連番 B列にA列に対応する文字列が対であります。 やりたいことは、 「Time」のA列の連番と「Extra」にある同じ連番行の一つ下に行を挿入して 「Time」のA列と同じ行のB列の文字列を書き込みです。 例えば、「Extra」が 435 ABC で 「Time」 435 123456 ならば 「Extra」を以下のように書き換える 435 123456 ABC 判りにくい内容でしょうがよろしくお願いします。 ’-----------------------------------------

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

    こんばんは、エクセルのマクロについてお伺いします。 現在 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 C D E F G H I J K 1 1 あ い 2  う え 3  お か 4  き く 5  け こ 列はA,B,Cのみにデータがあります。 行は1~5にあります。 A1は連番で数字があります。 この5行のデータが400近くあります。(約2,000行) このシートが10ほど存在します。 これらのシートを次のように1行に変換したいのです。   A B C D E F G H I J K 1 1 あ い う え お か き く け こ 2  3  4  5  行2~5はブランクのままでもかまいません。 何卒よろしくお願いいたします。

  • VBAと罫線の作成

    こんにちは。 VBA勉強中で初心者です。 今、以下の上段画像のような表をエクセル2003 で作成しました。 下段画像はVBA実行後の表です。 表は 番号と氏名、合否の結果を入力した ものです。 今、行いたい処理なのですが (1) B列の氏名欄に対応する、連番を A列に表示したい。 (2) さらに、氏名欄が入っている部分を A列からD列まですべてを罫線(普通線) で囲みたい。 の2点です。 (1)はなんとかできたみたいのですが、 (2)で完全に手が止まってしまいました。 最終の行と列の取得が、すこしわからないので 教えていただければと思います。 よろしくお願いします。 Sub sample() Dim num As Integer '行変数を設定 Dim num2 As Integer '番号変数を設定 Dim i As Long 最終行の取得? num = 4 'B列4行目から調べる num2 = 1 '連番は「1」からスタート Range("A:a").Clear 'A列のデータをいったんクリアにする Do Until Cells(num, 2) = "" 'B列の氏名欄が空白なるまで処理を繰り返す Cells(num, 1) = num2 '連番「1」をB4にまず、代入する num = num + 1 '行を1行分下げる num2 = num2 + 1 '番号変数に1をプラスする Loop i = Range("B4").End(xlDown).Row End Sub

  • エクセルVBAで不一致に空白セルを挿入

    エクセル2010です。 A、B列ともソートされています。 ごく少数ですが同一列内に重複するデータもあります。 そして A列に、1行目からA、B、C、E、F、F、H B列に、1行目からA、B、D、E、F、G、I (カンマは実際にはありません。) というような文字列データがある場合 別シートに A列に、1行目からA、B、C、空、E、F、F、空、H、空、 B列に、1行目からA、B、空、D、E、F、空、G、空、I、 (空は空白セルの意味です。) というように、お互いが一致しない場合は空白で飛ばし、一致するものは同じ行にするにはどのような方法がよろしいでしょうか? 例のように少ないデータなら目で見て手作業でできますが、実際は千件以上のデータです。 VBAでも関数でも結構です。よろしくお願いします。

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

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? 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列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

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

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

  • VBAで範囲を有するセルの記載位置を入れ替える

    お世話になります。 あるデータを扱うため、sheet_1に以下のような表を作成し管理を行っております。 sheetは複数存在するので、敢えてsheet_1とします。 (sheet_1)      B列ーC列ーD列ーF列ーG列ーH列ーI列ーJ列ーK列ーL列・・・  3行  A   A   A   A   B   B   B   B   C   C  4行  A   A   A   A   B   B   B   B   C   C  5行  A   A   A   A   B   B   B   B   C   C  6行  A   A   A   A   B   B   B   B   C   C  7行  F   F   F   F   G   G   G   G   H   H  8行  F   F   F   F   G   G   G   G   H   H  9行  F   F   F   F   G   G   G   G   H   H 10行  F   F   F   F   G   G   G   G   H   H 11行  K   K   K   K   L    L   L   L   M   M 12行 以下、上記のように続く 4列毎×4行毎の16セル分の範囲を1情報として扱っているのですが、VBAを利用して記入された横方向の情報を下部行(例えば150行目)で縦に置き換える方法をご教授いただきたく投稿致しました。 変換元の対象範囲はB3:BM126です。 (sheet_1)       B列ーC列ーD列ーF列ーG列ーH列ーI列ーJ列ーK列ーL列・・・ 150行  A   A   A   A   F   F   F   F   K   K 151行  A   A   A   A   F   F   F   F   K   K 152行  A   A   A   A   F   F   F   F   K   K 153行  A   A   A   A   F   F   F   F   K   K 154行  B   B   B   B   G   G   G   G   L   L 155行  B   B   B   B   G   G   G   G   L   L 156行  B   B   B   B   G   G   G   G   L   L 157行  B   B   B   B   G   G   G   G   L   L 158行  C   C   C   C   H   H   H   H   M   M 159行 以下、上記のように続く 同一sheet内ではなく、新たにsheetを作成して同じ結果を求める方法でも構いませんので、恐れ入りますがご教授宜しくお願い致します。

専門家に質問してみよう