• ベストアンサー

Excelの外部参照

外部参照の数式→〔Book1.xls〕Sheet1!A1 の最後のA1の数字の部分を変えていきたいのです 複数のセルをいっぺんに変えたいのですがどうすれば良いのでしょうか? いちいち手で変えていくのにはウンザリです・・・ どうか助けてください

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

  • ベストアンサー
  • a999a999
  • ベストアンサー率68% (11/16)
回答No.4

毎日やるようなら一括で変更する方法を考えてみました。 良かったら、下のものを試してみて下さい。 マクロですが、簡単です。 最初だけ準備に少し手順が必要ですが その後はボタン一つです。ご協力下さい。 参照する「参照元ファイル」 参照される「参照先ファイル」 の二つが必要です。 補足にあるような表形式を想定しています。 ABCの3列のみ、10行だけ、を指定により更新。 どの列を参照するか指定します。 1と指定すると、シート1、2、3の各A列を参照する式に変えます。 31だとAE列を参照します。列を番号を指定して下さい。 参照元、先、の両方を開いた状態でスタートして下さい。 以下の手順でお願します。 「マクロの貼り付け」 「準備」 「実行」 「マクロの貼り付け」 1.参照元のブックを開いて 2.Alt + F11 を押して VBE を起動して下さい。 3.ツールバーの「挿入」-「標準モジュール」 を選んで下さい。 4.出てきた白紙に下のソースを貼りつけて下さい。 5.ツールバーの「ファイル」-「終了してエクセルに戻る」 を選択してエクセルに戻って下さい。 「準備」 1.参照元ファイルの、シートをアクティブにしてから (参照式の入っている、または式を入れたいシート) 2.ツールバーの 、「ツール」-「マクロ」-「マクロ」を選んで 中から「準備」を選択して、実行して下さい。 これで準備完了です。 「実行」 作られた、ボタンを押すとスタートします。 ボタンは右クリックすると移動やサイズ変更ができます。 適当な位置に配置して下さい。 下のマクロを貼りつけて下さい。 Sub 参照ズレズレ() ズレ = InputBox("1は、1日(A列)。31は、31日(AE列)。", "日、または 列", "1") ブック名 = "Book2" 'ここを変更して下さい。 シート名1 = "Sheet1" '参照先の ブック名、シート名は シート名2 = "Sheet2" 'ここで決まります。 シート名3 = "Sheet3" '実行前にここを変えて下さい。 For 行 = 1 To 10 式 = "=+[" & ブック名 & "]" & シート名1 & "!R[" & 0 & "]C[" & ズレ - 1 & "]" Cells(行, 1).FormulaR1C1 = 式 式 = "=+[" & ブック名 & "]" & シート名2 & "!R[" & 0 & "]C[" & ズレ - 2 & "]" Cells(行, 2).FormulaR1C1 = 式 式 = "=+[" & ブック名 & "]" & シート名3 & "!R[" & 0 & "]C[" & ズレ - 3 & "]" Cells(行, 3).FormulaR1C1 = 式 Next End Sub Sub 準備() 'ボタン作成 Range("D10:D11").Select ActiveSheet.Shapes.AddShape(msoShapeRectangle, 159.75, 158.25, 165.75, 27). _ Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Shadow.Obscured = msoTrue Selection.ShapeRange.Shadow.Type = msoShadow18 Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 11 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Fill.OneColorGradient msoGradientHorizontal, 2, 1# Selection.Characters.Text = "スタートボタン" With Selection.Characters(Start:=1, Length:=7).Font .Name = "MS Pゴシック" .FontStyle = "太字" .Size = 16 .ColorIndex = 7 End With Selection.HorizontalAlignment = xlCenter Selection.OnAction = "参照ズレズレ" Range("D8").Select End Sub この上までを貼りつけて下さい。 ブック名、シート名は固定になってます。 事前に上のマクロの先頭部分にある指定を変更しておいて下さい。 今は、"Book2"の"Sheet1""Sheet2""Sheet3"を参照先にしています。 ブック名 = "Book2" シート名1 = "Sheet1" シート名2 = "Sheet2" シート名3 = "Sheet3" ここを変えてほしい、ここが違うなど 何か不満、要望がありましたら連絡下さい。 できるだけ希望に近いものを作ります。

yukinojyou7
質問者

お礼

お礼が遅れてしまい、申し訳ありませんでした 教えていただいたマクロの応用で少し時間がかかってしまいましたが、 一発で変更することができました 本当にどうもありがとうございました また質問させていただく際はよろしくお願いします

yukinojyou7
質問者

補足

こんなに詳しい回答をしていただいてありがとうございます! 感激です!! ・・しかし一つ訂正があります 「4/1:Book1のSheet1のA1~A10をBook2のSheet1のA1~A10にリンク    Book1のSheet2のA1~A10をBook2のSheet1のB1~B10にリンク    Book1のSheet3のA1~A10をBook2のSheet1のC1~C10にリンク                 ・                 ・                 ・  4/2:Book1のSheet1のB1~B10をBOOK2のSheet1のA1~A10にリンク    Book1のSheet2のB1~B10をBOOK2のSheet1のB1~B10にリンク    Book1のSheet3のB1~B10をBOOK2のSheet1のC1~C10にリンク                 ・                 ・                 ・                」 としましたが、実は 「4/1:Book1のSheet1のA1~A10をBook2のSheet1のA1~A10にリンク     Book1のSheet2のA1~A10をBook2のSheet1のB1~B10にリンク     Book1のSheet3のA1~A10をBook2のSheet1のC1~C10にリンク                 ・                 ・                 ・  4/2:Book1のSheet1のB1~B10をBOOK2のSheet2のA1~A10にリンク     Book1のSheet2のB1~B10をBOOK2のSheet2のB1~B10にリンク         Book1のSheet3のB1~B10をBOOK2のSheet2のC1~C10にリンク                 ・                 ・                 ・                   」 でした それでも上のマクロは変わらないのでしょうか?? 実は他のことで忙しくまだ試せていません ただ、お礼と訂正をお知らせしようと思いました 明日実際に使用してみますので、またその後お返事します

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

Book2のどこかに、差し障りのない空きセルを探します。例えば、それをセルH1とします。 Book2の A1 に =OFFSET([Book1]Sheet1!$A$1,ROW()-1,$H$1-1) B1 に =OFFSET([Book1]Sheet2!$A$1,ROW()-1,$H$1-1) C1 に =OFFSET([Book1]Sheet3!$A$1,ROW()-1,$H$1-1) として下にコピーします。(フィルハンドルを引っ張ってもいいです) H1が『1』ならBook1のA列、『2』ならB列、『3』ならC列・・・となります。 算式を換える必要はないはずです。『H1』をかえるだけでBook2の値は変化します。 ご参考に。

yukinojyou7
質問者

お礼

回答ありがとうございます 上の補足でも書きましたが、具体例が少し違っていました スイマセン この関数を使ったやり方も是非試させていただきます もういい人ばっかりで恐縮しっ放しです

  • a999a999
  • ベストアンサー率68% (11/16)
回答No.2

たくさんの参照位置を変更したいというのは どういう状況でしょうか。 ブック1の参照位置をずらすというのは ブック1自体に変更があったのではないでしょうか。 もしそうなら、同時に参照先と参照元の両方のブックを 開いて更新作業を行うと ブック1に挿入などの位置ズレが あっても参照側も一緒にズレます。 上とは違い、単独の場合、たとえば 縦に並んだ A1 A2 A3 を A2 A3 A4 のように変えたいなら 仮に同名のブックを作成して 同時に開きます。 同名ブックでA1に下へ挿入するさぎょうを行います。 これで参照側に反映していると思います。 あとはマクロです。 強力にたくさんある場合はこれです。 どのような変更か分かれば もう少し具体的に説明できるかもしれません。 良かったら教えて下さい。

yukinojyou7
質問者

補足

回答ありがとうございます 実際にどういうことをしたいかというと 4/1:Book1のSheet1のA1~A10をBook2のSheet1のA1~A10にリンク    Book1のSheet2のA1~A10をBook2のSheet1のB1~B10にリンク    Book1のSheet3のA1~A10をBook2のSheet1のC1~C10にリンク                 ・                 ・                 ・ 4/2:Book1のSheet1のB1~B10をBOOK2のSheet1のA1~A10にリンク    Book1のSheet2のB1~B10をBOOK2のSheet1のB1~B10にリンク    Book1のSheet3のB1~B10をBOOK2のSheet1のC1~C10にリンク                 ・                 ・                 ・  となります 今まではまず4/1のものをコピーして新しいシートを作り、質問にあるように 数式の最後の数字だけ手作業で変更し、あとはセルのコピーをしていましたが 手作業での変更の時間を短縮したいと思い、質問してみました これでわかっていただけますでしょうか? もしわからなかったらまた補足いたします よろしくお願いします    

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.1

こんにちわ。 A1の部分を直接入力せずに、参照先アドレスを作業セル(たとえばF1)に入力します。 そして、数式の部分では、="[Book1.xls]Sheet1!" & indirect(F1) という風にすれば、作業セルの修正だけですみますので、ラクかも。 しかし、絶対参照、相対参照をうまく使い分けていれば、数式を複写しても、自動的に参照先は変わるのでは?

yukinojyou7
質問者

お礼

回答ありがとうございます 絶対参照・相対参照なんてわからないです・・・ 逆に質問されても困っちゃいますよー(^^;) もし良かったらわかりやすく教えてください

関連するQ&A