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

解決済みの質問

Excelで教えてください!

1つのファイルの中に
印刷用フォームのあるシートが1つと
入力用フォームのあるシートが複数あります。
印刷用フォームの中には、数式が組み込まれ
入力用フォームの中のセルを参照元として
います。
このファイルが50個弱あります。

したいことは、
入力用フォームの複数のシートをそれぞれ
印刷用フォームで数式を【全て置換】し印刷ができると、
《 例:=mid(入力用1!A1,1,1) →置換
           →=mid(入力用2!A1,1,1) 》
かなりの時間と手間のロスが軽減できるので
方法があれば、教えていただきたいのですが・・・。

当方、マクロやVBAは知識に乏しいため、
これらの方法での場合、できましたら詳細な
記載をお願いできれば、助かります。

一応、イメージ図を添付します。
(実際には、もっと複雑なフォームです。)
環境は、Office2007です。
よろしくお願いします。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2011-02-23 18:15:19

QNo.6545023

すぐに回答ほしいです

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

 今仮に、印刷用フォームがA1~N100のセル範囲を占めているとした場合、まず、A1~N100のセル範囲を印刷範囲に設定します。
 次に、印刷範囲外となる101行以下、或いはO列から右方にある適当なセルを、Sheet名入力用セルに決めます。(ここでは仮にO1セルにSheet名を入力する事にします)
 次に、印刷用フォームの関数中で、入力用フォームの中のセルを参照元としている全ての部分を、次の様に書き変えます。

【例1】

入力用1!A1

と記されている部分を

INDIRECT($O$1&"!R"&ROW(A1)&"C"&COLUMN(A1),0)


【例2】

入力用1!$A1

と記されている部分を

INDIRECT($O$1&"!A"&ROW(A1))

【例3】

入力用1!A$1

と記されている部分を

INDIRECT($O$1&"!R1C"&COLUMN(A1),0)


【例4】

入力用1!$A$1

と記されている部分を

INDIRECT($O$1&"!A1")


【例5】

入力用1!$A$1:$A$100

と記されている部分を

INDIRECT($O$1&"!A1:A100")


【例6】

入力用1!$A$1:$A100

と記されている部分を

INDIRECT($O$1&"!A1:A"&ROW(A100))


【例7】

入力用1!$A$1:$E$1

と記されている部分を

INDIRECT($O$1&"!A1:E1")


【例8】

入力用1!$A$1:E$1

と記されている部分を

INDIRECT($O$1&"!R1C1:R1C"&COLUMN(E1),0)


【例9】

入力用1!A:A

と記されている部分を

INDIRECT($O$1&"!C"&COLUMN(A:A)&":C"&COLUMN(A:A),0)


 その他のパターンもありますが、兎に角、印刷フォームの全ての関数中で、入力用フォームの中のセルを参照元としている全ての部分を、

INDIRECT($O$1・・・・・

の形式に書き換えておきます。

 後は、O1セルに元データとして使用する入力用フォームのSheet名を入力すると、自動的に参照元の入力フォームが切り替わります。
 関数を書き換えるのには、手間がかかりますが、印刷時の手間は少なくなります。

 更に、P列に

P1セルに  入力用1
P2セルに  入力用2
P3セルに  入力用3

という具合に入力しておき、
入力規則のドロップダウンリストで、P列の範囲を選択出来る様にしておけば、更に楽になります。

投稿日時 - 2011-02-23 21:20:35

お礼

いくつもの例をありがとうございます。
おかげさまで、例にあげられたINDIRECT関数を
活用することで、無事に解決することができました。
ありがとうございました。

投稿日時 - 2011-02-24 18:54:45

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

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

回答(4)

ANo.4

>このファイルが50個弱あります。
>当方、マクロやVBAは知識に乏しいため、
>(実際には、もっと複雑なフォームです。)

実力にあった仕掛けでないのはひっかかる。

これをみただけでも、手に負えないというかこのまま進めても無駄に終わる感じがする。

今の仕掛けを全面的に改善する方向で考えなおすのが早いのではないか?。

複雑でかっこいい?、プログラムではそんな理屈はないので・・・。

利用方法よりも構成をシンプルにすることから始める、ことは考えないのか?。

アクセスは使えないのか?。

投稿日時 - 2011-02-23 21:42:46

補足

いいたいことはわかりますが、解決策のない
誹謗中傷は、ご遠慮ください。

投稿日時 - 2011-02-24 18:55:52

ANo.2

>このファイルが50個弱あります
先の処理のことも考えないでブックやシートを作りまくっておいて、VBAが出来ないで、仕事にエクセルを使おうというのは
おかしいのだ。
>できましたら詳細な記載をお願いできれば、助かります。
こんな他人依存の、甘えたことを書かないで、質問者が勉強しないといけないだろう。
ーー
質問内容(したいことの全貌)も説明不十分で、下記がどれだけ役立つか、判らないが、質問のようなことに使えそうなのは関数ではINDIRECT関数しかない。
持ってこれる値は、1セル単位であるので、式がシート全体の多数のセルの式に及ぶなら、初めからそう設計(考慮)しないといけないかも知れない。今すでにある式のすべての組み換えになるかもしれない。
ーー
下記が役立つかどうか判らないが
Sheet1のA3にasbdfg
Sheet2のA3にxysdf
とあるとする。
Sheet3のA1に持ってくるシート名を入れて
Sheet3のA3に=MID(INDIRECT(A1 & "!A3"),1,3)
と入れるとそのA3はxys
と鳴る。Sheet1と入れるとasbになる。
ーー
置換操作で考えると、
=MID(Sheet1!A3,1,3)とあるとして、Sheet1をSheet3に変えるなら、
編集ー置換
検索する文字列 Sheet1
置換後の文字列 Sheet3
オプションで検索対象 数式
すべて置換
で式は変わる。
しかし全シートの式で今一律にSheet1を参照しているかどうか、質問には書いてない。
この置換と印刷操作も50もあれば相当心理的には、うっとうしいが、VBAが出来なければ、手操作で間違いないように
置換をしないとならない。
私はいつも言っているように、思う時点では時間がかかるように思うが、こんなところに質問して数日費やす間に出来るよ。

投稿日時 - 2011-02-23 20:03:52

お礼

勉強不足、知識不足なのは認めます。
ですが、この場所は、わからないことを
聞く場ですよね?
いろんなアドバイスをもらったり、
解決方法からいろんなことを学んだりと
スキルアップできるところだと思うのですが、
そこを勉強不足だ、他人依存だとか
上から目線で言われるのは筋が違うと
私は思いますし、マナーに反していると思います。

ただ、あなた様のご意見は、今回非常に
今後のExcel活用の参考になりました。
もっとVBAだったりマクロだったり
勉強してスキルアップしたいと思います。
ありがとうございました。

投稿日時 - 2011-02-24 18:53:03

ANo.1

こんばんは!
外しているかもしれませんが・・・

↓の画像で「印刷用Sheet」のA1セルに「入力用Sheet」番号を入力すると
そのSheetのデータを表示するようにしています。

「印刷用」SheetのA3セルに
=MID(INDIRECT("入力用"&$A$1&"!$A$1"),COLUMN(A1),1)
(エラー処理はしていません)
という数式を入れ列方向にオートフィルでコピーすると
画像のような感じになります。

これでA1セルにSheet番号のみを入力すればそのSheet番号のデータが表示されるはずです。

以上、参考になればよいのですが、
的外れならごめんなさいね。m(__)m

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2011-02-23 19:26:09

お礼

図解付きでの回答ありがとうございます。
INDIRECT関数で解決できました。
ありがとうございました。

投稿日時 - 2011-02-24 16:32:29

あなたにオススメの質問