OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Excelの外部参照

  • すぐに回答を!
  • 質問No.244523
  • 閲覧数1266
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 75% (322/424)

外部参照の数式→〔Book1.xls〕Sheet1!A1
の最後のA1の数字の部分を変えていきたいのです
複数のセルをいっぺんに変えたいのですがどうすれば良いのでしょうか?
いちいち手で変えていくのにはウンザリです・・・
どうか助けてください
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル7

ベストアンサー率 68% (11/16)

毎日やるようなら一括で変更する方法を考えてみました。
良かったら、下のものを試してみて下さい。

マクロですが、簡単です。
最初だけ準備に少し手順が必要ですが
その後はボタン一つです。ご協力下さい。


参照する「参照元ファイル」
参照される「参照先ファイル」
の二つが必要です。

補足にあるような表形式を想定しています。
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

お礼率 75% (322/424)

こんなに詳しい回答をしていただいてありがとうございます!
感激です!!

・・しかし一つ訂正があります

「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にリンク
                ・
                ・
                ・                   」
でした
それでも上のマクロは変わらないのでしょうか??
実は他のことで忙しくまだ試せていません
ただ、お礼と訂正をお知らせしようと思いました

明日実際に使用してみますので、またその後お返事します
投稿日時 - 2002-04-03 02:06:20
お礼コメント
yukinojyou7

お礼率 75% (322/424)

お礼が遅れてしまい、申し訳ありませんでした
教えていただいたマクロの応用で少し時間がかかってしまいましたが、
一発で変更することができました

本当にどうもありがとうございました
また質問させていただく際はよろしくお願いします
投稿日時 - 2002-04-07 21:34:01
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 25% (323/1260)

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

A1の部分を直接入力せずに、参照先アドレスを作業セル(たとえばF1)に入力します。
そして、数式の部分では、="[Book1.xls]Sheet1!" & indirect(F1)
という風にすれば、作業セルの修正だけですみますので、ラクかも。

しかし、絶対参照、相対参照をうまく使い分けていれば、数式を複写しても、自動的に参照先は変わるのでは?
お礼コメント
yukinojyou7

お礼率 75% (322/424)

回答ありがとうございます

絶対参照・相対参照なんてわからないです・・・
逆に質問されても困っちゃいますよー(^^;)

もし良かったらわかりやすく教えてください
投稿日時 - 2002-04-01 19:29:09

  • 回答No.2
レベル7

ベストアンサー率 68% (11/16)

たくさんの参照位置を変更したいというのは どういう状況でしょうか。 ブック1の参照位置をずらすというのは ブック1自体に変更があったのではないでしょうか。 もしそうなら、同時に参照先と参照元の両方のブックを 開いて更新作業を行うと ブック1に挿入などの位置ズレが あっても参照側も一緒にズレます。 上とは違い、単独の場合、たとえば 縦に並んだ A1 A2 A3 を A2 A3 A ...続きを読む
たくさんの参照位置を変更したいというのは
どういう状況でしょうか。

ブック1の参照位置をずらすというのは
ブック1自体に変更があったのではないでしょうか。
もしそうなら、同時に参照先と参照元の両方のブックを
開いて更新作業を行うと
ブック1に挿入などの位置ズレが
あっても参照側も一緒にズレます。

上とは違い、単独の場合、たとえば
縦に並んだ A1 A2 A3 を
A2 A3 A4 のように変えたいなら

仮に同名のブックを作成して
同時に開きます。
同名ブックでA1に下へ挿入するさぎょうを行います。
これで参照側に反映していると思います。

あとはマクロです。
強力にたくさんある場合はこれです。



どのような変更か分かれば
もう少し具体的に説明できるかもしれません。
良かったら教えて下さい。
補足コメント
yukinojyou7

お礼率 75% (322/424)

回答ありがとうございます

実際にどういうことをしたいかというと
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のものをコピーして新しいシートを作り、質問にあるように
数式の最後の数字だけ手作業で変更し、あとはセルのコピーをしていましたが
手作業での変更の時間を短縮したいと思い、質問してみました

これでわかっていただけますでしょうか?
もしわからなかったらまた補足いたします

よろしくお願いします    
投稿日時 - 2002-04-01 19:09:38
  • 回答No.3
レベル13

ベストアンサー率 68% (791/1163)

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) ...続きを読む
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

お礼率 75% (322/424)

回答ありがとうございます

上の補足でも書きましたが、具体例が少し違っていました
スイマセン
この関数を使ったやり方も是非試させていただきます

もういい人ばっかりで恐縮しっ放しです
投稿日時 - 2002-04-03 02:18:36
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ