こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル 別シート参照の簡単入力方法

エクセル2003にて、1ブックに100シートあります。

それぞれのシートで(F1~F80)、前のシートのセル(C1~C80)を参照したいのですが、簡単な入力方法を教えて下さい。

Sheet2F列は、Sheet1のC列を参照

Sheet2のF1に  =sheet1!C1
……………
Sheet100のF1に  =Sheet99!C1


現状ではSheet2のF1セルでShiftキーを押しながら=を押し、sheet1のC1をクリックこの作業を99回繰り返しその後で全てのシートを選択しC1からC80コピーをしています。

なにか良い方法はないでしょうか???
お答えよろしくお願いします。

投稿日時 - 2007-10-17 23:27:39

QNo.3438635

困ってます

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

横から失礼します。

>マクロ実行で”数式を記入する”様なもの

シート名に関わらず動作するようにしただけで、
#1さんのとほとんど一緒ですが…。

動作の概要
 2番目から100番目のシートの  (2行目)
 1行目から80行目までの     (3行目)
 F列のセルに            (4行目の6の部分)
 そのシートの前のシートの、同じ行の
 C列のセルを            (5行目のCの部分)
 参照する数式をを入れる

Sub Sample0710190()
 For i = 2 To 100
  For j = 1 To 80
   Worksheets(i).Cells(j, 6).Formula = _
    "=" & Worksheets(i).Previous.Name & "!C" & j
  Next
 Next
End Sub

投稿日時 - 2007-10-19 20:34:20

お礼

ありがとうございます。

お礼が遅くなってすみません。こういう形式の物が知りたかったので完璧です!!!!

さっそく仕事で活用させてもらいます。ありがとうございました。

投稿日時 - 2007-10-23 12:13:15

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

#4です。

#4で提示したコードについて、
シート名にスペースが含まれている場合は正常に動作しません。
検証不足、というより初歩的なミスで申し訳ありません。

お手数ですが下記のようにコードを修正してください。
(5行目にシングルクォート'を2ヶ所追加)

Sub Sample0710190()
 For i = 2 To 100
  For j = 1 To 80
   Worksheets(i).Cells(j, 6).Formula = _
    "='" & Worksheets(i).Previous.Name & "'!C" & j
  Next
 Next
End Sub

投稿日時 - 2007-10-23 23:00:44

ANo.3

#1です。
ひとつ疑問が浮かんだのですが、「この作業を99回繰り返しその後で全てのシートを選択しC1からC80コピー」をしたことで、既に各シートの F列には、「=Sheet○!C●」って式が入ってませんか。

それなら、C列に入力した時点で、次シートのF列に反映してませんかね?

*************************************************************
それはさておき、
>マクロ実行で”数式を記入する”様なもの
ですが、シート名を機械的に振れば何とかなるかと思います。

例えば、1枚目のシートを「1」、2枚目を「2」・・・100枚目のシートを「100」という名前にしてみます。
まさかシート名変更を100回やるわけにいきませんから、まずは以下のコードで。


◆◆◆注意◆◆◆
実行後は元に戻せないので、必ずバックアップを取った上でお試しください。

Sub name()
Dim i As Integer
For i = 1 To 100
Sheets(i).name = i
Next
End Sub

これでシート名が、「1」~100」と振られたと思います。
そのうえで、次のコード。


Sub Sono2()
Dim m As Integer, n As Integer
For m = 2 To 100
For n = 1 To 80
Sheets(m).Cells(n, 6).Formula = "=" & (m - 1) & "!c" & n
Next
Next
End Sub

そうしたら、各シートのF列には、前シートのC列のセルが数式で入っているかと思います。

シート名が何か別のもの(例えば、機械的に処理できないもので、ここを変更できないと言うならば私はやり方がわかりません。
どなたか詳しい方の回答を待つか、別の質問を立てることをお勧めします。

投稿日時 - 2007-10-19 01:18:01

お礼

何度もありがとうございます。

なんとか解決しましたので質問を締め切らしてもらいます。

非常に勉強になりました。本当にありがとうございました。

投稿日時 - 2007-10-23 12:14:48

ANo.2

#1の者です。
さっき書き忘れたので、念のため追加します。
ご存知でなければご一読ください。

さきほどのコードの使い方
・エクセルの上で、Alt + F11
・Visual Basic の画面が出てくる
・Alt + I (挿入) → M(標準モジュール)
・Module1 という真っ白な画面が出てくる
・そこに先ほどの、Sub ~ End Sub までコピペ
・エクセル画面に戻り、Alt + F8
・Tabを押して 、Shori を選び、Enter

これで実行されます。

ちなみに次回以降は、

・エクセル画面で、Alt + F8
・Tabを押して、Shoriを選び 、Enter

だけで大丈夫です。
(次回以降はこのファイルを開く時に、マクロ有効で開ける)

結構時間と労力が節約できると思います。

◆◆◆注意◆◆◆
実行後は元に戻せないので、必ずバックアップを取った上でお試しください。

投稿日時 - 2007-10-18 01:05:30

ANo.1

マクロを使う方法しか思いつきませんでした。
あまり詳しくないのですが、以下ではどうでしょう。



Sub Shori()
Dim p As Integer, q As Integer
For p = 2 To 100
For q = 1 To 80
Worksheets(p).Cells(q, 6) = Worksheets(p - 1).Cells(q, 3)
Next
Next
End Sub

投稿日時 - 2007-10-18 00:50:34

お礼

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

さっそく試してみたところ機能しました。

そこで、申し訳ないのですが追加で質問よろしいでしょうか???
参照先のC列は刻々と入力を行なってます。リアルタイムで次のシートのF列に反映してほしいのです。

今回、教えてもらったマクロでは実行するたびに、希望にかなった形になるのですが入力の度にマクロ実行しなければなりません。

できればマクロ実行で”数式を記入する”様なものがあればよいと思うのですが…

投稿日時 - 2007-10-18 10:38:47

あなたにオススメの質問