エクセルで行が可変する時、VBAの記述

このQ&Aのポイント
  • エクセルで売り上げ集計をVBAを使って効率化しています。
  • 分量が一定ではないため、データの合計と行の挿入を自動化するためにoffset関数・名前の定義を使っています。
  • しかし、名前の定義したセルの上に数値が入っている場合に10行挿入するコードがうまく動作しません。アドバイスをお願いします。
回答を見る
  • ベストアンサー

エクセルで行が可変する時、VBAの記述

エンジニアのものです。 エクセルで売り上げ集計をVBAを使って効率化しています。 他のシートからデータをコピー、貼り付けるのですが 分量が一定ではありません。 今VBAで、データの合計と、行の挿入を自動化させようとしているのですが 分量が一定ではないために、うまく指定ができません。 Q&Aサイトを検索していると、offset関数・名前の定義をうまく使えとあり   Worksheets("Sheet1").Names.Add Name:="名前A"   RefersTo:=Range("B125")   Range("名前A").Select If ActiveSheet.Offset(-1, 0).Value = "1134 " Then .EntireRow.Resize(10).Insert shift:=xlDown End If これで 名前Aと定義したセル(集計表の一番下)の上に数値が入っていれば 10行挿入するはずだと思うのですが うまくいきません。 どなたかわかる方がいましたらアドバイスお願いします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

ANo.1です。 「数値」が入っていたら……と、有りながら文字列の"1134 "と、全角スペース付きの文字列を条件にされていたので真意が読み取れませんでした。 IF文からお望みですか? "名前A"の1つ上のセルの値が1134の時、10行挿入するコードです。 If Range("名前A").Offset(-1, 0).Value = 1134 Then   Range("名前A").Resize(10).Insert Shift:=xlDown End If 行挿入の部分は、ANo.1で回答した、名前定義された列にだけ挿入するコードにしてあります。

ridi8888
質問者

お礼

ありがとうございました。解決しました。 私は基本的なことがわかってないみたいです。 機会がありましたらまたよろしくお願いいたします。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

行の挿入箇所だけ その列だけの挿入で良いなら  Range("名前A").Resize(10).Insert Shift:=xlDown 全ての列に10行挿入するなら  Rows(Range("名前A").Row & ":" & Range("名前A").Row + 9).Insert Shift:=xlDown IF文の条件が本当にコレで良いのか不安ですが、そこは正しいんですよね?

ridi8888
質問者

お礼

アドバイスありがとうございます。 If文の条件に関してですが、添付した図の、 小計の上に数字(データ)入ってなかったら(挿入する) としたいのですが、そう読み取れないでしょうか?

関連するQ&A

  • VBA 可変行のデータを自動集計する

    vbaでシステムの効率化をしている エンジニアです。 添付の図のような表に100件~1000件 の可変するデータが入ります。 右の4つのコミッションを合計して小計のところに自動計算したいのですが データ量が変動するため(この表の上下のデータ量も変動する) vbaで何行目から何行目を合計するという指定ができません Q&Aを見ていくと offset関数・名前の定義をうまく使ったらいいとあり   Worksheets("Sheet1").Names.Add Name:="名前A"   RefersTo:=Range("コミッション1") Worksheets("Sheet1").Names.Add Name:="名前B"   RefersTo:=Range("(2)小計")   ActiveCell.Offset(-3, 2).Range("名前A:名前B").Select ActiveCell.Offset(15, 2).Range("名前A").Activate ActiveCell.FormulaR1C1 = "=SUM(R[-18]C:R[-1]C)" ActiveCell.Offset(-18, 0).Range("名前A:名前B").Select End If これで合計できると思うのですが、 どなたか添削していただけないでしょうか?

  • ExcelVBA 複数のシートへの行挿入

    現在下記の操作を行いたい為、Excelマクロを作成しています。 Sheet1のアクティブセルの行に(AからN列の)行の挿入 Sheet2から4はSheet1のアクティブセルの行+2の(AからN列の)箇所に行の挿入 Sheet5は行挿入を行わない。 このような操作をマクロで行う事は可能でしょうか。 またどのように記述すればよろしいでしょうか。 よろしくお願い致します。 例: Sheet1のアクティブセル = A3の場合 Sheet1 = A3からN3まで行挿入 Sheet2から4はA5からN5まで行挿入 Sheet5は行挿入を行わない。 現在ここまで作成しています。 Sub Add() ActiveCell.Offset().Activate ActiveCell.EntireRow.Range("a1:n1").Insert Shift:=xlDown End Sub

  • Excel VBA offset()関数で質問

    Excel VBA offset()関数で質問です。 現在集計のマクロを作成しております。 ■処理内容 各sheetの特定の範囲を"copy" して集計sheetに順に貼り付け… といった処理をさせようと作成中です。 以下がソースになります。 Sub 集計() Dim ws As Worksheet i = 1 For Each ws In ActiveWorkbook.Sheets If ws.Name = "集計" Then Else Range("E1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy ★Worksheets("集計").Range("A1").Offset(, i).Select ActiveSheet.Paste i = i + 1 On Error Resume Next ActiveSheet.Next.Select End If Next End Sub ★マークのところで現在エラーになっています。 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 と表示されます。 offset関数の使用方法の確認ですが… (とあるWebから抜粋したのですが… (^^; ) 例> Range("C3").Offset(,1).Selectとすれば、 行はそのままで、列が1列右に移動し、D3を選択します。 アドバイスよろしくお願い致します。

  • エクセルVBA 他ブックの同じ行に貼り付け(可変)

    皆さんこんにちは。 度々こちらでお世話になっております。 エクセル2013使用のVBA初心者です。 ブック1の「検索」シートで絞り込み結果が1つになるまで 絞り込んだ後の話です。 ブック1「検索」シートで絞り込み、結果が1行になったら その行をコピーして ブック”データベース.xlsx”のSheet1の(検索シートと)同じ行に 貼り付けをしたかったのですが 下記のコードですと”データベース.xlsx”を開いて保護をやめるところまで動くのですが 貼り付け箇所でエラーが出てしまいます。 エラーは「1004RangeクラスのPasteSpecialメソッドが失敗しました」です。 原因はなんとなく「行」をWith Sheets("検索").AutoFilter.Rangeじゃないところで 使っているからかな?と思っているのですが 『可変の検索シートの絞り込み結果行と同じ行を  他ブックで選んで貼り付け』 の書き方が分かりません。 ブック1検索シートの絞り込み結果1行(可変)をサーバー上にある データベース.xlsx”のSheet1の同じ行に貼り付ける方法を 教えていただけないでしょうか。 --------------------------------------------------------------------- With Sheets("検索").AutoFilter.Range With .Resize(.Rows.Count - 1).Offset(1) Dim 行 As Integer 行 = .Columns(1).SpecialCells(xlCellTypeVisible).cells(1).Row Sheets("検索").Range("A" & 行).EntireRow.Copy Workbooks.Open Filename:="¥¥***.**.**.**¥DATE¥データベース.xlsx" Workbooks("データベース.xlsx").Sheets("Sheet1").Unprotect Workbooks("データベース.xlsx").Sheets("Sheet1").Range("A" & 行).PasteSpecial Workbooks("データベース.xlsx").Sheets("Sheet1").Protect Workbooks("データベース.xlsx").Save Workbooks("データベース.xlsx").Close

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • VBA 複数の行を挿入後、挿入以外を削除

    知恵をお借りください。 A10に5行分挿入、A13に2行分挿入、A14に1行分挿入、A16に2行分挿入 以下がコードです。 Dim n As Long n = Worksheets("Sheet1").Range("A1").Value With Worksheets("Sheet2") .Range("A10").Resize(n).EntireRow.Insert .Range("A10").Resize(n).EntireRow.Interior.Color = vbYellow .Activate End With Dim k As Long k = Worksheets("Sheet1").Range("A2").Value With Worksheets("Sheet2") .Range("A13").Resize(n).EntireRow.Insert .Range("A13").Resize(n).EntireRow.Interior.Color = vbRed .Activate End With Dim m As Long m = Worksheets("Sheet1").Range("A5").Value With Worksheets("Sheet2") .Range("A14").Resize(n).EntireRow.Insert .Range("A14").Resize(n).EntireRow.Interior.Color = vbGreen .Activate End With Dim ka As Long ka = Worksheets("Sheet1").Range("A10").Value With Worksheets("Sheet2") .Range("A16").Resize(n).EntireRow.Insert .Range("A16").Resize(n).EntireRow.Interior.Color = vbBlue .Activate End With マクロ実行後、行の並び方がバラバラになっています。 ↓イメージ図 https://mega.nz/#!yUwXHTLK!TSZvMJ1CaiTi-OoX-1j9IeNleuXesrzU5O7o2vG-svI 理想図に整えるにはどうすれば良いのでしょうか? また、マクロで行を挿入したら、不要な行を削除するコードも教えてくださればありがたいです。 ↓イメージ図 https://mega.nz/#!fMRDAKAJ!GHMpiagpn-O_0aaMhrHOozFd8WHHkSQzOS-fSCInw-g 宜しくお願いします。

  • Excel VBA セル範囲に名前をつける

    Excel VBA独学中の初心者です。 セル範囲に名前をつける方法で以下の2つの方法があるようです。 (1) 同じように動作しますが違いは有るのでしょう。 (2) 本質的に考え方または内部動作は違うのでしょうか。 お分かりの方教えていただけますと助かります。 --------------- '方法1 Sub 名前の定義1() Range("sheet1!A2:B3").Name = "名前1" End Sub '方法2 Sub 名前の定義2() Range("A1").Select ActiveWorkbook.Names.Add Name:="名前2", _ RefersTo:="=sheet1!A2:B3" End Sub

  • Excel VBAでn行毎に行の選択

    Excel VBAでn行毎に行の選択 こんにちわ。 初めて質問をさせて頂きます。 今回ExcelのVBAを使ってあるシートを作成することになったのですが その過程で分からず、詰まっております。 色々調べてみたもののVBAの知識が浅いせいか 該当する様なものは見つかりませんでした。 実行したいのはタイトルの通りです。 例として10行毎に1行ずつ選択したい場合は下記の通りです。 A列 10行目←選択 ・ ・ 20行目←選択 ・ ・ 30行目←選択 ・ ・ 40行目←選択 実際にやりたいことは行を選択後に入力規則を入れたいだけなのですが 5000行近くあるので、一つ一つコードを書く場合 Range("A10,A20,A30,A40・・・").EntireRow.Select 結構な量になります・・・。 VBAなら他にもっと効率いいことができるのでは、と 自分なりに探してはいますが、どうしても見つからないので 皆様のお知恵をお借りしたいです。 よろしくお願いします。

  • エクセルVBAで表から行の削除

    添付画像のような表があります。 表はB列の名前でソートされています。 D列の比率をみて、100でないものは、必ず同じ名前で複数行にわかれ合計で100になります。この例では名前CとEとHがそうです。 同じ名前が複数行にわかれている場合、最大の比率の行を残し、他の行(例では、埼玉、栃木、長野、新潟の行)を削除したいのです。 複数行にわかれるのが名前CやEのように2行なら、以下のコードで出来ました。 しかし、めったにはありませんが名前Hのような3行以上に分かれるものには対応できません。 どうすればよいでしょうか? Sub test01()   Dim c As Range   Dim Rng As Range   Set Rng = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp))   For Each c In Rng '2地区の分担の場合、分担比率高い方を残す。(3地区以上は未対応)2012/08/29     If c.Value <> 100 And c.Offset(1).Value <> 100 Then       If c.Offset(, -2).Value = c.Offset(1, -2).Value Then         If c.Value >= c.Offset(1).Value Then           c.Offset(1).Value = False         Else           c.Value = False         End If       End If     End If   Next   If Application.WorksheetFunction.CountIf(Rng, False) > 0 Then     Rng.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete   End If End Sub

  • 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

専門家に質問してみよう