• ベストアンサー

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にたくさんコメントを入れていただくと助かります。 宜しくお願い致します。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

Sub test() Dim i As Integer, j As Integer, k As Integer j = 0 k = 1 For i = 1 To Range("C65536").End(xlUp).Row 'c列の1行からデータの入っている最後の行数までの回数ループ Range("D" & i).Formula = "=$A$" & k & "&$B$" & k & "&C" & i j = j + 1 If j = 3 Then k = k + 3 j = 0 End If Next i End Sub でいかがでしょう。

その他の回答 (2)

回答No.3

下記でどうでしょう。できるだけ短いコードで。 コメントを付けるような複雑なこともやってません。 Sub Sample() Dim i,j As integer For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row Step 3   For j = 0 To 2     Cells(i + j, 4).Formula = "=$A$" & i & "&$B$" & i & "&C" & i + j   Next j Next i End Sub <条件> C列に必ずA,B,Cがあること(AだけやA,Bで終わったりしない)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

C列の最終行までが範囲としたら、 Sub try() Dim r As Range Dim rr As Range For Each r In Range("C1", Cells(Rows.Count, 3).End(xlUp)) If r.Offset(, -2).Value <> "" Then Set rr = r.Offset(, -2) End If r.Offset(, 1).Formula = "=" & rr.Address & "&" & rr.Offset(, 1).Address & "&" & r.Address(0, 0) Next Set rr = Nothing End Sub こんな感じとか?

関連するQ&A

  • エクセル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 簡潔

    Sub 問10率() Range("AY994").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1007C[-49]" Range("AY994").Select Selection.AutoFill Destination:=Range("AY994:CT994"), Type:=xlFillDefault Range("AY994:CT994").Select Selection.AutoFill Destination:=Range("AY994:CT1007"), Type:=xlFillDefault Range("AY994:CT1007").Select Range("AY1011").Select ActiveCell.FormulaR1C1 = "=RC[-49]/R1020C[-49]" Range("AY1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1011"), Type:=xlFillDefault Range("AY1011:CT1011").Select Selection.AutoFill Destination:=Range("AY1011:CT1020"), Type:=xlFillDefault Range("AY1011:CT1020").Select End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      A     B    中略   AV     AW 993行  ラベル  北海    ~    沖     合計 994行  魚    21    ~    9    110 中略  1006行  他    60    ~    空欄    200 1007行  合計   11    ~    148   590 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      AX    AY    中略    CS     CT 993行  ラベル  北海    ~     沖     合計 994行  魚    0.2%   ~     0.0%    0.2% 中略  1006行  他    0.3%   ~     0.0%    0.3% 1007行  合計   100.0%  ~    100.0%   100.0% ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー     AX    AY     中略   CS      CT 993行 ラベル  北海     ~    沖      合計 994行 魚    B994/B$1007 ~ AV994/AV$1007   AW994/AW$1007 中略  1006行 他   B1006/B$1007 ~ AV1006/AV$1007  AW1006/AW$1007 1007行 合計  B1007/B$1007 ~ AV1007/AV$1007  AW1007/AW$1007 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー このコードをもっと短くする方法を教えてください。よろしくお願いします。 1個目と2個目の表は横につながっています。3個目は2個目の表の%を出した計算です。 値でなく式が入っています。空白のところは0.0%と表します。 3個目は実際はありません。

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • ExcelのVBAのAutoFillの使い方について

    Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。 何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。 下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、 「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」 の行でエラーが発生します。 「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。 Private Sub CommandButton1_Click()   ActiveSheet.Range("A1").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries   ActiveSheet.Range("A2").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries End Sub どなたかエラーの原因を教えていただけないでしょうか? よろしくお願いいたします。

  • excel2010 簡単にするコード

    Sub 問10SUM() ' ' 問10SUM Macro ' Range("B1007").Select ActiveCell.FormulaR1C1 = "=SUM(R[-13]C:R[-1]C)" Range("B1007").Select Selection.AutoFill Destination:=Range("B1007:AW1007"), Type:=xlFillDefault Range("B1007:AW1007").Select Range("AW994").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-47]:RC[-1])" Range("AW994").Select Selection.AutoFill Destination:=Range("AW994:AW1007"), Type:=xlFillDefault Range("AW994:AW1007").Select ActiveWindow.ScrollColumn = 20 ActiveWindow.ScrollColumn = 19 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 17 ActiveWindow.ScrollColumn = 16 ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("B1020").Select ActiveCell.FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)" Range("B1020").Select Selection.AutoFill Destination:=Range("B1020:AW1020"), Type:=xlFillDefault Range("B1020:AW1020").Select Range("AW1011").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-47]:RC[-1])" Range("AW1011").Select Selection.AutoFill Destination:=Range("AW1011:AW1020"), Type:=xlFillDefault Range("AW1011:AW1020").Select ActiveWindow.ScrollColumn = 22 ActiveWindow.ScrollColumn = 21 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 15 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 End Sub これはマクロの記録で作ったものです。AWにオートサムでBからAVを選択して右下の+を下に引っぱりました。。 ドラッグして選択せずにすむコード、もっと短くする方法を教えてください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー      A     B    中略   AV     AW 993行  ラベル  北海   ~     沖     合計 994行  魚    2    ~     9     1100 中略  1006行  他    6    ~     空欄    2000 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 簡単に載せると表はこうなっています。

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

    マクロ初心者です。 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列の最終行に合計を出す。

  • Excel VBAについて

    以下のコードをFor Nextでまわすには どうしたらよいでしょうか? Sub sample() Range("A2").Select ActiveCell.FormulaR1C1 = "=テスト!R[1]C" Range("A3").Select ActiveCell.FormulaR1C1 = "=テスト!R[3]C" Range("A4").Select ActiveCell.FormulaR1C1 = "=テスト!R[5]C" Range("A5").Select ActiveCell.FormulaR1C1 = "=テスト!R[7]C" Range("A6").Select ActiveCell.FormulaR1C1 = "=テスト!R[9]C" Range("A7").Select ActiveCell.FormulaR1C1 = "=テスト!R[11]C" End Sub

  • vlookupで参照するシート名と範囲を変えたい

    お世話になります。 vlookup関数について質問です。 新規作成する表の列B2からF2(1行目は項目行)に別のブック 「商品マスタ」からvlookupで必要なデータを検索して入力 B2からFのデータのある最終行までコピーするというマクロを作りました。 Range("B2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,[商品マスタ.xlsx]商品マスタ2017.10.5!R2C1:R430C6,COLUMN(RC),0)" Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Selection.AutoFill Destination:=Range("B2:F" & Cells(Rows.Count, "A").End(xlUp).Row) On Error Resume Next With Range("B:F").SpecialCells(xlCellTypeFormulas) .Value = .Value End With ★商品マスタの内容を更新時に新規シートを追加しているので 《商品マスタ2017.10.5!R2C1:R430C6》この部分のシート名と参照範囲を 毎回手動で書き直していますが、シート名と参照範囲を自動で切り替える 方法がありましたら教えてください。 シートは最新版のデータが入ったものを常に使用します。 よろしくお願いします。

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。