• 締切済み

Excel VBA マクロ処理 リンク先参照変更方法

Excel VBA マクロ処理 リンク先参照変更方法で質問です。 データがあるsheet名を『データ』、 平均を集計するsheet名を『平均集計』とします。 行いたい処理は 『データ』にある【 】内の5コのデータの平均値をまとめたい。 『平均集計』に平均値を集計してまとめる。 5コデータの平均値を既に参照指定済のsheetを使用します。 ***『データ』詳細********** 縦軸【1×5】×25項目 = 130行 横軸に13列 A~M列 ************************** ■教えて欲しい処理部分はここ! 『平均集計』リンク参照先を一気に変更させたい。 ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照'!R[★]C:R[★]C)" ↑上記のリンク参照先を一気に変更させる方法はありますでしょうか? 例> ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[★]C:R[★]C)" のように…。 あと補足で、教えて欲しいのですが… ★データが追加された場合 例>5 → 7 この時行う処理方法がよくわかりません…。 単発だと ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[1]C:R[7]C)" で可能ですが… ↓ 複数になると…  x=1 y=7 FOR i=1 to 25 ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[x]C:R[y]C)" x=y+1 y=y*(i+1) NEXT …エラーになりました。 追加処理の場合、どのような方法がありますでしょうか? 以上、アドバイスよろしくお願い致しますm(__)m

みんなの回答

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

こんにちは。 私は、ご質問を良く理解しているわけではないけれども、A1方式をお使いなら、FormulaLocal でやってみたらいかがですか? >『平均集計』リンク参照先を一気に変更させたい。 これって、編集-置換で出来ませんか?マクロということもないと思います。 >補足で、教えて欲しいのですが… 最初に、Range(Cells(3, 1), Cells(9, 1)) または、Range("A3:A10") でも可 つまり、最初の「ものさし」です。 それから、本来、ActiveCell というのは、可変ですから、位置決めしたほうが安全です。あまり、記録マクロみたいな書き方をすると、返ってややこしいです。 後は、こんなことかなって思います。 Sub TestSample()   Dim rng As Range, i As Long, j As Long   '---------------------------------------   ''要設定 '目的のシートの最初の範囲のアドレス   Set rng = Range(Cells(3, 1), Cells(9, 1))   '---------------------------------------   ''ActiveCell の位置決めが必要 以下に設定   'Range("A1").Select   For i = 0 To 24 '最初を含めるので1を引く    For j = 0 To 12 '1を減らす      ActiveCell.Offset(i, j).FormulaLocal = "=Average(リンク参照先変更!" & rng.Offset(i * 5, j).Address(0, 0) & ")"    Next j   Next i End Sub

u-mesh12
質問者

お礼

お礼遅れましてすみません…。 >これって、編集-置換で出来ませんか?マクロということもないと思います。 ごもっともです。この方法が一番手っ取り早そうです。 今後この手法を活用しようと思います。 マクロ処理のご回答もありがとうございました! m(_ _)m

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな感じ? Sub Test1() Dim r1 As Range, r2 As Range  On Error Resume Next  Set r1 = Application.InputBox("現在の参照先のセルを1つクリック", "現在", Type:=8)  Set r2 = Application.InputBox("新しい参照先のセルを1つクリック", "変更後", Type:=8)  Worksheets("平均集計").Cells.Replace What:=r1.Parent.Name, Replacement:=r2.Parent.Name, LookAt:=xlPart End Sub Sub Test2() x = 1 y = 7  For i = 1 To 25   ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[" & x & "]C:R[" & y & "]C)"   x = y   y = x + 7   Activecell.Offset(1,0).Activate  Next i End Sub

関連するQ&A

  • 同期の並び替えで、規則的ですが、数が多くて処理に困っています。何かいい方法はないでしょうか?

    同期の並び替えで、規則的ですが、数が多くて処理に困っています。何かいい方法はないでしょうか? 一通り最後までやったのですが、ものすごい数になってしまいました。 下記 Sub Macro1() Sheets("sheet2").Select 'sheet1のA君のデータ(C列の10,14,18,22~90)をsheet2(C列)に同期 Range("C8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C" Range("C9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C" Range("C10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C"      ・      ・      ・   Range("C31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C" 'sheet1のB君のデータ(D列の10,14,18,22~90)をsheet2(E列)に同期 Range("E8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C[-1]" Range("E9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C[-1]" Range("E10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C[-1]"      ・      ・      ・   Range("C31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C[-1]" 'sheet1のC君のデータ(E列の10,14,18,22~90)をsheet2(G列)に同期 Range("G8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C[-2]" Range("G9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C[-2]" Range("G10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C[-2]"      ・      ・      ・   Range("G31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C[-2]"       と続き 最終的には 'sheet1のV君のデータ(X列の10,14,18,22~90)をsheet2(AS列)に同期   Range("AS8").Select    ActiveCell.FormulaR1C1 = "=集計関連!R[2]C[-21]"      ・      ・      ・   Range("AS31").Select    ActiveCell.FormulaR1C1 = "=集計関連!R[71]C[-21]" End Sub と一応規則的に並び替えています。…が、途方もない数になってしまうのですが、何か省略したり…というような方法はないでしょうか? よろしくお願いいたします。

  • エクセル マクロ VBA について

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"

  • エクセルのマクロの作り方

    マクロ初心者です。 今勉強している最中ですが、以下の物を作りました。 Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet2").Select Range("A4").Select ActiveCell.Formula = "=Sheet1!IM4" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=Sheet1!R[-3]C[240]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-6]c[234]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-9]c[228]" End Sub わかる人はもうお分かりかもしれませんが、ループという機能でもっと簡単にできるように思います。 これを手打ちしていくのであれば、手間がかかってしまい、マクロの意味がないというか… [-3]→[-6]→[-9]と、縦に参照したいセルが3つずつ上がっていき、横には左に6ずつ移動していきます。正確にはアクティブセルが移動しているのでってことなのでしょうけど…(たぶん…) 最初が絶対参照になっていて2回目以降から相対参照になっているのは、1回目で絶対参照にすれば、そのセルを基準として相対参照でRC[-6]でループさせられるかなっと思ったからです。。。結局そうなりませんでしたが… 作りたいのは、sheet2のA4とsheet1のIM4、sheet2のA7とsheet1のIG4をイコールにし、それを間隔は同じでsheet2のA127まで繰り返したものです。 本を買って、ネットで検索して色々とやったのですが、どうにもわからなく。。。 どうかよろしくお願いします。

  • Excel 2007 マクロ 表の集計

    Excel 2007 マクロ 表の集計 「Sheet1」に2つの表があります。 <元データ>の項目ごとに<集計結果>の 計の列に数字が反映されるようにしたいと考えています。 表の画像を添付します。 <元データ>の項目のアルファベットごとに<集計結果>の 項目に分かれます。 マクロの記録では下記にようになりました。 Sub Macro1() ' ' Macro1 Macro ' ' Range("B15").Select ActiveCell.FormulaR1C1 = "=R[-12]C+R[-11]C+R[-10]C" Range("B16").Select ActiveCell.FormulaR1C1 = "=R[-10]C+R[-9]C" Range("B17").Select ActiveCell.FormulaR1C1 = "=R[-9]C+R[-8]C+R[-7]C" Range("B18").Select End Sub どのようにすれば、マクロでアルファベットごとに集計できるのでしょうか。 よろしくお願いいたします。

  • セルの参照先を入力にて

    こんにちは。スイマセンが、お願いします。 シート名"データ"を参照先にしたいのです。 アクティブなワークシートのRange("C4")に、 "=データ!C2"と入力したいのです。 セルのC4,C9,C14,・・・に、 各々 =データ!C2,=データ!C3,=データ!C4,・・・としたいです。 どのようにしたらいいのでしょう? まずは、少ない数を試そうと思いまして、以下のようなものを試しました。 For i = 4 To 34 Step 5 Cells(i, 3).Select For j = 2 To 7 Step 1 ActiveCell.FormulaR1C1 = "=データ!C" & "j" Next Next これでは、当然、駄目です。 ActiveCell.FormulaR1C1 = "=データ!C" & j ActiveCell.FormulaR1C1 = "=データ!C" & CStr(j) これも、予想通り駄目でした。 どうぞ、お教えください。お願いします。

  • エクセル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について

    以下のコードを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

  • マクロで名前をつけたセル範囲の平均値を求める

    Excel2000のマクロを使用しています。 まだまだ初心者なので、少し複雑になるとさっぱりです。 ぜひお力をお貸しください。 例) A1のセルに200、A2のセルに300、A3のセルに500のデータを持ち、 Range("A1":"A3")に "data"と名前を付けたとします。 ここでAVERAGE関数を使いたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE("A1":"A3")"という方法ではなく "data"で参照して平均値を求めたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE(data)としても参照してくれません。 この場合のいい解決法があったら教えてください。 よろしくお願いいたします。

  • とほほのエクセルマクロ

    以下の文の[-1899]の部分を可変型にしたいのですが。 どなたかご存知有りませんか? ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")" ==================================== マクロの説明です。 ==================================== エクセルマクロでsheet1にデータを入力していって、 sheet1のD列内に同一のコードがないかをチェックするために sheet1のコピーを作成してD列でソートしてから D列の1行目=2行目ならK列に”いっしょだよ”という メッセージを出すようにIF文を書きこんでいきます。 最後にこの”いっしょだよ”というメッセージが何件あったかを見たいので、 一番下の行+1行目に ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1899]C:R[-1]C,""いっしょだよ"")" という文を入れたのですがこれだと自分が居る一つ上のセルから 1899上までしか行かないのですが、毎回データを入力して行数は増えていってしまいます。 どのような、文にしたらよいのか教えてください。 お願いいたします。

  • Excel計算式の、参照先シートを簡単に変更する方法を教えてください。

    Excelの計算式で使用している参照先(別シート)を簡単に変更する方法を教えてください。 具体的には、『JPY』、『JPY集計』『USD』の3つのシートがあります。 『JPY集計』シートでは『JPY』シート値を参照しており、下記のような式が沢山あります。 =SUMPRODUCT(('JPY '!O7:O448=B8)*('JPY '!P7:P448="")*'JPY '!N7:N448) (ちなみに上記では、JPYシート内の複数条件に合致するレコードのN列セルを集計しています) そこで、『JPY集計』シートをコピーして『USD集計』シートを作成し、『USD』シートのデータを参照するよう変更したいのです。 一般的な’置換’機能では’JPY’を’USD’に変更することはできませんでした。また、INDIRECT関数でシート名を別に定義できないかと思いましたが不慣れのためかうまくいきませんでした。 今後もこのような集計シートを作成することが多々あるので、後任のためにも簡単にできる方法を教えてください。 よろしくお願いします。

専門家に質問してみよう