• ベストアンサー
  • すぐに回答を!

マクロの編集方法を教えて下さい。

自分で記録したマクロを親切な方に編集してもらいました。実行スピードが格段に速くなったのですが、さらに処理したい項目が出来たので、別に記録してコピー、適切な箇所に挿入したのですが、実行時エラーが出ます。どう直していいのか分かりません。分かる方教えて下さい。 Sub Incert12() Dim wRow As Long Dim i As Integer Dim tbl(1 To 12, 1 To 1) As Integer wRow = Range("A65536").End(xlUp).Row Rows(CStr(wRow) & ":" & CStr(wRow + 11)).Insert Range(Cells(wRow + 1, "B"), Cells(wRow + 11, "B")).FormulaR1C1 = "=R[-1]C" '↑(1)これの代わりにB列を12行全て結合したい For i = 1 To 12 tbl(i, 1) = i Next i Range(Cells(wRow, "C"), Cells(wRow + 11, "C")).Value = tbl '↑(2)これに加えてA列に以下の処理も加えたい 'ActiveCell.Offset(-2, -8).Range("A1").Select 'ActiveCell.FormulaR1C1 = "=R[-1]C+1" 'ActiveCell.Select 'Selection.AutoFill Destination:=ActiveCell.Range("A1:A12"), Type:= _ ' xlFillDefault 'ActiveCell.Range("A1:A12").Select '↓(3)F列ではなく、FからK列までにしたい。 Cells(wRow + 12, "F").AutoFill Range(Cells(wRow, "F"), Cells(wRow + 12, "F")) 'これが私が作ったマクロ。(2行目に問題ありとの事) 'ActiveCell.Offset(-1, 5).Range("A1:F1").Select 'Selection.AutoFill Destination:=ActiveCell.Range("A1:F13"), Type:= _ ’ xlFillDefault 'ActiveCell.Range("A1:F13").Select Cells(wRow, 1).Select End Sub 以上(1)~(3)を直したいのです。どなたかよろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数218
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

前回私が修正したものですよね? 前回同様自信なしです。(バックアップを取ってから試してくださいね) Sub Incert12()   Dim wRow As Long   Dim i As Integer   Dim tbl(1 To 12, 1 To 1) As Integer   wRow = Range("A65536").End(xlUp).Row   Rows(CStr(wRow) & ":" & CStr(wRow + 11)).Insert   Range(Cells(wRow, "A"), Cells(wRow + 11, "A")).FormulaR1C1 = "=R[-1]C+1"   Range(Cells(wRow, "B"), Cells(wRow + 11, "B")).MergeCells = True   For i = 1 To 12     tbl(i, 1) = i   Next i   Range(Cells(wRow, "C"), Cells(wRow + 11, "C")).Value = tbl   Range(Cells(wRow + 12, "F"), Cells(wRow + 12, "K")).AutoFill Range(Cells(wRow, "F"), Cells(wRow + 12, "K"))   Cells(wRow, 1).Select End Sub Selectをはずしてしまったので、 ActiveCellによる相対参照(Offset)はできません。 (そうしないと、処理が遅くなるため・・・多分) こちらも前回同様、間違っている箇所は補足してください。 (私もどんな書き方をすれば早くなるかは試行錯誤の為、  もっと早くする書き方もあると思いますが)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

taisuke555さん、またもやありがとうございます。質問してから回答までの時間がものすごく早い!その道のエキスパート、プロフェッショナルな方ですね。本当にどうもありがとうございます。今回もなんの問題も無く動作致しました。処理速度も十分早いです。 前回のマクロ編集に感動して、私も本屋でVBAの参考書を買いました。しかし、うーん・・・理解するにはかなりの時間が掛かりそうです。 本当にどうもありがとうございました。

関連するQ&A

  • マクロについて教えてください

    マクロ初心者です。 A~D列の表が少ない時100行、多い時400行あり、同じ操作を何回か繰り返すため、できればマクロで処理したいと思っています。 マクロ記録で作成したのですが、最終行が一定ではないため行数が増えると上手く作動しません。 どこを修正したらいいでしょうか。ご教示いただければ幸いです。 Sub Macro1() ' ' Macro1 Macro ' ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""集計"","""")" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G4"), Type:=xlFillDefault Range("G2:G4").Select Range("H2").Select ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R13C1,RC[-1],R2C2:R13C2)" Range("H2").Select Selection.AutoFill Destination:=Range("H2:H4"), Type:=xlFillDefault Range("H2:H4").Select Range("H5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" Range("H6").Select End Sub ちなみに作成したいマクロ 1.F列にA列の「集計」を取り出して、G列にF列の「集計」文字を取り除く。 2.H列にB列「数」を計算する 3.H列の最終行に合計を出す。

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

  • エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

    シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub

  • Excel VBA 計算範囲の変更について教えてください。

    こんばんは。とても困っています。 下記のような表で=A1&B1&C1の計算式を入れ、A1とB1を絶対参照にして$A$1&$B$1&C1としてD3までオートフィルをかけます。 そしてD4は =$A$4&$B$4&C4のように絶対参照しているセルを変更したいのです。たくさんありすぎて参照する範囲を変更するのにとても大変な思いをしています。VBAでどのようにすればよいのか教えてください。   |A    B   C     D ------------------------------------- 1| 1T  11L   A    1T11LA (=$A$1&$B$1&C1) 2|          B    1T11LB (=$A$1&$B$1&C2) 3|          C    1T11LC (=$A$1&$B$1&C3) 4| 2T  20L   A    2T20LA (=$A$4&$B$4&C4) 5|          B     2T20LB (=$A$4&$B$4&C5) 6|          C    2T20LC (=$A$4&$B$4&C6) 7| 3T  31M   A    3T31MA (=$A$7&$B$7&C7) 8|          B     3T31MB (=$A$7&$B$7&C8) マクロで記録させたらところ下記のようになりました。 Sub 4行置きに参照範囲を変更する() Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=RC[-3]&RC[-2]&RC[-1]" Range("D1").Select ActiveCell.FormulaR1C1 = "=R1C1&R1C2&RC[-1]" Range("D1").Select Selection.AutoFill Destination:=Range("D1:D3"), Type:=xlFillDefault Range("D1:D3").Select Range("D4").Select ActiveCell.FormulaR1C1 = "=R4C1&R4C2&RC[-1]" Range("D4").Select Selection.AutoFill Destination:=Range("D4:D6"), Type:=xlFillDefault Range("D4:D6").Select Range("D7").Select ActiveCell.FormulaR1C1 = "=R7C1&R7C2&RC[-1]" Range("D7").Select Selection.AutoFill Destination:=Range("D7:D9"), Type:=xlFillDefault Range("D7:D9").Select End Sub ◎初心者なのでVBAにたくさんコメントを入れていただくと助かります。 宜しくお願い致します。

  • 一度に、任意の列全体へ、関数をコピーするマクロは?

    下記コードのように、 「 E 列 」 だけに実行するのではなく、 「 実行前 」 に、手動にて、好みの任意のセル1つに  「 関数 」 を貼り付けます。 そしてマクロを実行し、 下記 「 実行後 」 のようにするには、どのようなコードになりますでしょうか? 下記のような変数を組み入れるのだと思いますが、うまく出来ません。 ただ、先頭の 「 行番号 ( 変動しますが、例では60 ) 」 は、 手動にて貼り付けますので事前に解かっているとします。 また、 「 オートフィルタ 」 後に、使用する予定です。 何卒、よろしくお願い致します。 ------------------ Sub test() Range("E60").Select ActiveCell.FormulaR1C1 = "=RC[2]" Selection.AutoFill Destination:=Range("E60", Range("C65536").End(xlUp).Offset(0, 2)), Type:=xlFillDefault End Sub ------------------ Dim r As Range, base As Range Dim x, y Dim i Set r = Selection Set base = Selection.Cells(1, 1) x = r.Columns.Count y = r.Rows.Count ---実行前(オートフィルタ後)------------------ C列            E列  ・              ・  ・              ・ 2007/10/13       =G60    2007/10/13 2007/10/13 2007/10/13 2007/10/13 2007/10/14 2007/10/14 --実行後------------------- C列            E列  ・              ・  ・              ・ 2007/10/13       =G60    2007/10/13       =G60 2007/10/13       =G60 2007/10/13       =G60 2007/10/13       =G60 2007/10/14       =G60 2007/10/14       =G60

  • エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。?

    エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。? ●エクセルマクロのVBAで次のように記述しています。 Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C148"), Type:=xlFillDefault A列に文字が入っている最終行は A148なので、C2: C148 の範囲にオートフィルで貼り付けるように しています。 しかし、A列に文字が入っている最終行は、変動します。 なお、貼り付ける範囲はいつでも C2から始まります。 A列に文字が入っている最終行が A200であれば、C2: C200の範囲、 A列に文字が入っている最終行が A321であれば、C2: C321の範囲といったように、 C2の値を貼り付ける範囲を設定したいと思っています。 ●そこで、次のように記入してみました。 With Worksheets(2) Dim lRow As Long, lRow = .Cells(Rows.Count, 1).End(xlUp).Row Range("C1").Formula = "名称" Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)" Range("C2").Select Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), Type:=xlFillDefault 変数を使って最終行を指定しても上手くいきませんでした。 (C2:C150)や(C2:C160)といったように「C2」のセルを「C2のセル」から「A列に文字が 入っている行のC列」まで貼り付けたいと思っています。 どのようにVBAを記述したら良いのか教えていただけないでしょうか。

  • EXcelでオートフィルのパラメータを変数化

    お世話になります。 [変更前]マクロで「("A3:B72")」を変数化したくて[変更後]のようにした。 結果エラーになります。 実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。 [変更前] Sub 賞与明細MCR() Range("A3:B4").Select Selection.AutoFill Destination:=Range("A3:B72"), Type:=xlFillDefault Range("A3:B72").Select End Sub [変更後] Sub 賞与明細MCR() Dim 処理 As Characters 処理 = "A3:" & CStr(Range("d1")) Range("A3:E4").Select Selection.AutoFill Destination:=Range(処理), Type:=xlFillDefault Range(処理).Select End Sub

  • 突然、関数が正常に表示しなくなった。

    いままで、ずっと正常に表示されましたが、 下記のように、 突然、関数が正常に表示しなくなりました。 マクロではなく、手動にて行っても、同様に正常に表示しません。 よろしくお願い致します。 --------------- Range("J2").Select ActiveCell.FormulaR1C1 = "=RC[182]/100" Selection.AutoFill Destination:=Range("J2", Range("A65536").End(xlUp).Offset(0, 9)), Type:=xlFillDefault --------------- 実行前 1070 1100 1200 1300 実行後 10.7 10.7 10.7 10.7

  • マクロでVLookupが出来ません。

    マクロでVLookupが出来ません。 A列からE列までデータがあるシート1のA,B,C列の値が全て一致する シート2の行削除をしたいです。 2000行中500行残るはずのダミーで実験してますが全行削除されてしまいます。 Do Until Cells(Line, 6).Value →6の部分を1 VLookup(Cells(Line, 6) →6の部分を1にすれば 500行残ります。ですがこれでは検索値がA列のみの値です。 またそれぞれ1→2、1→3、1→4にしても同じく全行消えこんがらがってます。 シート1のA列のみ検索しているような動きです。どこを修正すればいいのでしょうか? Sub 行削除() 'シート1→8月シート2→9月 Sheets("8月").Select Range("F2").Select ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" Selection.AutoFill Destination:=Range("F2:F10000") Sheets("9月").Select Range("F2").Select ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" Selection.AutoFill Destination:=Range("F2:F10000") '検索する対象値があるシート選択 Sheets("9月").Select 'そのシートの検索開始の行数を選択2行目。 Line = 2 'そのシートの検索値の列指定6=F列。セルF2の値が検索したい値。 'その値がなくなったら検索を終了させる.Value = ""を追加。 Do Until Cells(Line, 6).Value = "" 'エラーとなっても次に進む On Error Resume Next '検索結果を記入する列を指定。Line7=G列(※1) '検索する値があるシートとその列を指定 'VLookup(Cells(Line, 6)の部分。6=F列 '検索されるシートと検索範囲を指定 'Worksheets("9月").Range("A2:F10000")→セルA2からセルF10000まで '検索されたらその行のどの列の値を結果とするのか指定 1=A列 '検索方法指定0=FALSE完全一致。 Cells(Line, 7).Value = Application.WorksheetFunction.VLookup(Cells(Line, 6)_ .Value, Worksheets("8月").Range("A2:F10000"), 1, 0) 'VLOOKUP関数が終了又はエラーが発生したら止まる On Error GoTo 0 '検索されなかったときの処理 '上記(※1)の部分Line7=G列に値がない If Cells(Line, 7).Value = "" Then 'Line7=M列に無と表示 Cells(Line, 7).Value = "無" End If '2行目から開始なので次の行の値を検索値とする Line = Line + 1 '検索する値がなくなるまで繰返す Loop '1行目が削除されるのを防止セルG1に無とセット Sheets("9月").Select Range("G1").Select ActiveCell.FormulaR1C1 = "無" 'データの最終行の行番号を保持する変数 Dim RwMax As Long '現在処理中の行番号を保持する変数 Dim Rw As Long '対象となるシートを選択。 Worksheets("9月").Select 'データの最終行の行番号を取得。 'Count, 7=G列 においてデータが入っている一番下のセルの行番号 RwMax = Cells(Rows.Count, 7).End(xlUp).Row '最終行から1行目まで繰返し処理。 '行の削除の為下から上へと処理。 For Rw = RwMax To 1 Step -1 '値が無ならそのまま If Cells(Rw, 7).Value = "無" Then Cells(Rw, 7).Value = "無" '無でなかったら行削除 Else Rows(Rw).Delete End If Next Rw 'シート2のF,G列を列削除 Sheets("9月").Select Columns("F:G").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft End Sub

  • VBAで関数式の値をセルに入力できるようにしたい。

    こんなマクロをマクロの記録で作ったのですが SUMIF関数の数式をセルに入力するのでなく 値だけを入力するしたいのですがどのように すればいいでしょうか? Sub Macro4() Columns("O:O").Select Selection.Insert Shift:=xlToRight Range("N3").Select Selection.AutoFill Destination:=Range("N3:O3"), Type:=xlFillDefault Range("N3:O3").Select Range("O5").Select ActiveCell.FormulaR1C1 = "=SUMIF(出荷貼付け!C1,RC1,出荷貼付け!C5)" ←ここのところを値だけをセルに入力したい。 Selection.AutoFill Destination:=Range("O5:O978") Range("O5:O978").Select Range("O4").Select End Sub