• ベストアンサー

エクセル・他のブックの文字を表示させたい

以下のようなことを考えています。 読取り専用であるBook1のA1の文字をBook2のB1に表示する。 Book1を名前を付けて保存する。 再度、Book1を開きA1の文字をBook2のB2に表示する。 Book1を名前を付けて保存する。 これを繰り返す。 Book2は次のようになっています。   A    B 1    111 ここにBook1のA1の文字を順次、表示したい 2   112  ↓ 3   113 4   114 5   115 ↓ A列は昇順で番号が入力されています。 以上、よろしくお願いします。 (エクセル2000です)

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

#2です。 >なぜでしょうか? ご質問文からはシート名わからなかったり質問内容が不明解だったので、コードはイメージの提示としているため、細かいところは適当に書いてあるからです。(実際のものは細かいところまできちんとしていないとエラーになります。それなので「イメージのみ」「未検証」と書いておきました。) 提示のものをそのままで動かせば、同じ調子で、以降も1行ごとにエラーが出ることでしょう。 面倒なので、Const部分に必要な内容を設定すれば動くものを作りました。 ついでにBook2が新しい場合に、2行目から書いてしまうというミスがありましたので修正してあります。 また、タイミングの問題はどうするのか不明ですので、手動のマクロです。 Sub test() Dim sh1 As Worksheet, sh2 As Worksheet Dim wb2 As Workbook Dim rw As Long Const sn1 = "sheet1" '//←Book1の対象シート名 Const sn2 = "sheet1" '//←Book2の記録対象シート名 Const p = "C:\book2.xls" '//Book2のパス Set sh1 = ActiveWorkbook.Worksheets(sn1) Set wb2 = Workbooks.Open(p) Set sh2 = wb2.Worksheets(sn2) rw = sh2.Cells(Rows.Count, 2).End(xlUp).Row + 1 If rw = 2 And sh2.Cells(1, 2) = "" Then rw = 1 sh2.Cells(rw, 2).Value = sh1.Cells(1, 1).Value Application.DisplayAlerts = False wb2.Save wb2.Close Application.DisplayAlerts = True End Sub

taka1012
質問者

お礼

度々のご回答ありがとうございます。 たいへん、お世話になりました。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

#2、#3です。 失礼しました。 直接代入できなかったみたいですね。 Workbooks.Open "Book2.xls" Set wb2 = ActiveWorkbook と2行に分ければよいでしょう。 なお、Book2も正しいファイル名(又はファイルパス)で指定しないと、実行時にエラーがでます。(当り前ですが)

taka1012
質問者

お礼

度々のご回答ありがとうございます。 今度は次の部分でデバッグします。 rw = wb2.Sheet1.Cells(Rows.Count,2).End(xlUp).Row+1 なぜでしょうか? よろしくお願いします。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 基本的には前回の回答の要領で、一部を修正いただければ可能でしょう。 Openイベントではなく、Workbook_BeforeSaveかWorkbookBeforeCloseのイベントなどで、A1の値が空白でなければBook2に記録するというようなふうにすれば、全体の流れとしては良いのではないでしょうか。 ただし、追加情報を見ると、ややこしい問題として残るのが、転記するタイミング(及びダブル転記の防止)の処理をどうするかということ。 別名保存されたBookからはマクロの機能を消しておかないとならないので、自分自身を消すか(←あまり良い感じではないですね)、識別子を用意しておいて、それがなければマクロを実行しないなどの処置をしておく必要があると思われますが、これを行うとその後はマクロが無効になることになります。(Book1のオリジナルは書き換えられないので、次回は実行される) 具体的には、非表示のオブジェクトを用意しておいてBook2に記載したらそれを消去しておくとか・・・(マクロ自体を消すことも、可能みたいですが) あるいは、Book1をフルパスで判断してオリジナルであることを判定するとか・・(これだと、Book1のディレクトリは固定になりますが・・・) 間違って上書き保存のコマンドでもイベントは発生すると思われるので、パスで判断する場合はこれを排除する方法を考える必要があるかも。 さらには、一回のエクセル立上げで「データ書換え+別名保存」を複数回行った場合、そのデータは記録すべきなのか記録しなくて良いのか、あるいは、一度、別名保存をした後でA1の値を修正して上書き保存をした場合はどうするのかとか、Book1を開いて即座に別名保存してからおもむろにA1に記入してそのまま保存した場合はどうするかとか。 ・・などなど、いくらでもややこしい状況が考えられそうなので、転記のタイミングに関しては、それらを整理した上で決定なさった方が良さそうですね。 まぁ、「自動的に」ではなく「意図的に」にして、「コマンドボタンを押したら転記」とかなら、↑のような面倒な問題は考えなくてもよくなりますが。

taka1012
質問者

お礼

度々のご回答ありがとうございます。 ご提示いただいたコードを使わせていただきました。 すると以下の部分がエラーになります。(赤字になる) Set wb2 = Workbooks.Open "Book2" なぜでしょうか? よろしくお願いします。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

動作のイメージがよくわかりませんが・・・ >Book1を名前を付けて保存する ということは、Book1は名称が変わっていくということ? あるいは、Book1と言っているのはあくまでオリジナルのBook1ということ? >Book1を開きA1の文字をBook2のB2に表示する はBook1を開いたら、内容が変わる変わらないに関わらず、その内容がBook2に記録されると言う意味でしょうか? (想像するところでは、内容が変わったら記録するのだろうけれど、変えるのは誰だろうか?手入力なのか外部から流し込んでいるのか?) とりあえず、Book1およびそのコピー群(別名保存されたもの)のどれかが開く毎に、その時の値をBook2に保存すれば良いとするなら・・・ オリジナルのBook1のWorkbook Openのイベントを設定し、Book2のB列の最終行にA1の値を記録するマクロを作成しておけばよいのでは? (複数の箇所で同時に複数のブックを開く可能性まで考慮すると、少々複雑になりますが・・・) <質問をとらえきれないので以下イメージのみです>(未検証) Set wb1 = ActiveWorkbook Set wb2 = Workbooks.Open "Book2" rw = wb2.Sheet1.Cells(Rows.Count,2).End(xlUp).Row+1 wb2.Cells(rw,2).value = wb1.Sheet1.Cells(1,1).value Application.DisplayAlerts = False wb2.Close Application.DisplayAlerts = True

taka1012
質問者

お礼

ご回答ありがとうございます。 具体的なイメージはNO1様のお礼に記載したとおりです。 >Book1を名前を付けて保存する >ということは、Book1は名称が変わっていくということ? Book1は読取り専用なので、Book1というファイル名は変わりません。 順次、別Bookに名前を付けて保存します。 >Book1を開きA1の文字をBook2のB2に表示する >はBook1を開いたら、内容が変わる変わらないに関わらず、その内容がBook2に記録されると言う意味でしょうか? 順次、B列に自動的に表示したいのです。 >(想像するところでは、内容が変わったら記録するのだろうけれど、変えるのは誰だろうか?手入力なのか外部から流し込んでいるのか?) Book1(読取り専用)のA1は空白の状態になっています。 Book1を開く度にA1に「鈴木」あるいは「佐藤」などと入力します。 この「鈴木」がBook2のB1に、「佐藤」がBook2のB2に自動的に表示されるようにしたいのです。 >変えるのは誰だろうか? 変えるのはユーザーです。 >手入力なのか外部から流し込んでいるのか? 手入力です。 以上、よろしくお願いします。

  • ryo872
  • ベストアンサー率51% (37/72)
回答No.1

ご質問の趣旨がいまいち判らないのですが(特に、なぜ「名前を付けて保存」を繰り返すのか)、Book 2 の B1、B2、B3… に夫々 Book 1 の A1 のデータを表示させたい、と言う事であれば、そのデータを参照し、但し、…$A$1 と言うように絶対的な参照を行い、これを全て B2 から Bn までのセルにコピー&ペーストすれば良いのではないでしょうか。 若しご質問の趣旨を取り違えていた、と言う場合はパスして下さい。

taka1012
質問者

お礼

ご回答ありがとうございます。 >特に、なぜ「名前を付けて保存」を繰り返すのか Book1は読み取り専用だからです。 具体的に申します。 Book1(読取り専用)に顧客(1人分)の様々データを入力する。 Book1は読取り専用なので、「鈴木一郎」などの名前を付けて別Bookに保存する。 この際にBook2のB1に「鈴木」と表示させる。 次の顧客データをBook1に入力する。 今度は「佐藤次郎」などの名前を付けて別Bookに保存する。 この際にBook2のB2に「佐藤」と表示させる。 これを繰り返していきます。 Book2のB列に順番に顧客の名字を表示させたいのです。 以上、よろしくお願いします。

関連するQ&A

  • Excel 該当文字列があるセルを見つける

    こんにちは。 Excel2003を使用しています。 Book1のA列に検索したい文字列(ABC123456のような)が100個ほど有ります。 Book2に表があり、特定の列に文字列が1000個ほど記載されています。 そこで100個ほどの検索したい文字列がBook2のどこに有るか 探す方法をお教えください。 希望は いちいち検索せずに一度に表示させたい できればBook1のB列にBook2の行番号を表示させたい です。 ご存じの方お教えください

  • 「Excel」で、異なるブックのデータを一つにまとめたい。

    「エクセル2000」を使用しています。 異なるブックのデータを、うまく一つにまとめる 方法があるかどうか、お教え頂きたいのですが…。 「Book1.xls」には A列に名前 B列に部署名 が、それぞれ入っています。 「Book2.xls」には A列に名前、 B列に内線番号 が入っているとします。 そこで、「Book1」のそれぞれの名前の行に 「Book2」の「内線番号」を表示させたいのですが… そんな事は可能でしょうか? 「Book1」と「Book2」の「名前」のデータは、 ほぼ同じものが入っているのですが 並び順は異なっています。 (「並べ替え」を行ったとしても、 「Book2」の方が遥かにデータ量が多いので、 どうしても行は一致しません) 「同じデータを探して貼り付ける」 という作業が必要になると思うので、 やはり難しいでしょうか…。 ご助言願います。

  • Excelでブック間のデータの比較について教えてください。

    ブック間で同じようなデータ(A列に番号とB列に名前)が入力されているのですが、1つのデータは更新されて、番号と名前が増えています。1つは、おくれたままなのですが、この2つのブックで誰が抜けているのかを調べたいのです。=Countif(A:A,[Book2.xls]社員一覧!$A1)としたところ異なった名前は1で空白セルのみが0になってしまいます。 2つのブックを比較したい場合はどうすればよいのでしょうか。 宜しくお願い致します。

  • Excel 別々のBookの照合と値の返し方

    いつもお世話になっております。 エクセルのデータで別々のBookの照合をしたいと思い、VLOOKUPで試しましたが、上手くできませんでした。。。 画像を添付しましたので、それにそって質問したいと思います。 (1)Book1のB列に式を入れたい。 (2)Book1のA列とBook2のA列の照合を行いたい。 (3)同じ内容なら、その隣のセル(Book2のB列に入っている値)を(1)に表示させたい。 というものです。 以上、宜しくお願い致します。

  • Excel 別々のBookの照合と値の返し方

    いつもお世話になっております。 質問するカテゴリを間違えてしまったので、重複してしまい申し訳ありません。 エクセルのデータで別々のBookの照合をしたいと思い、VLOOKUPで試しましたが、上手くできませんでした。。。 画像を添付しましたので、それにそって質問したいと思います。 (1)Book1のB列に式を入れたい。 (2)Book1のA列とBook2のA列の照合を行いたい。 (3)同じ内容なら、その隣のセル(Book2のB列に入っている値)を(1)に表示させたい。 というものです。この場合どのような関数式を入れたらよいのでしょうか。 以上、宜しくお願い致します。

  • 違うブックを参照して、数値を表示するには?

    質問失礼します。 エクセルで保存した違うブックにあるデータから、複数条件で一致するものを検索し、表示することは可能でしょうか? 例えばブック1のG2に、ブック2のE1を表示させたいのですが、 条件が、ブック1のG2がある行の「B2とC2とD2とE2」の数値や文字列、空白などが、一致する行を,ブック2から検索し、その行にある、E1を、ブック1のG2に表示させたいです。 ブック1とブック2の一致させたい範囲 ブック1のB列、C列、D列、E列の行単位のセルと並び方=ブック2のA列、B列、C列、D列の行単位のセルと並び方 求めたい物 ブック2の条件にあったE列のセルをG列に表示したいです。 可能でしょうか? ブック1   A  B  C  D  E  F  G 1    8  a1 50  1 2    8  a1 50       30 3    8  a1 60       20 4    8  a1 70 20 5    3  b5 60 20     3 ブック2   A  B  C  D  E  F 1 8  a1 50    30  2 8  a1 50  1 3         4 8  a1 60    20 5 8  a1 70 20   6 7 3  b5 60 20  3

  • 【エクセル】他のBookの、シート名を抽出したい

    ブックA,Bがあって、 ブックAのSheet1に「商品名、シリアル番号、商品サイズ・・・」とい ったような項目の表があります。また、Sheet1の表を基にして、数値の 違う表がSheet30まであります。 ブックBのSheet1のA列にはブックAのデータに対応するシリアル番号が ずらっと並べてあります(抜けてたり、多かったりするかもしれません)。 そこで、隣のB列に、A列に書いてあるシリアル番号をブックAから参照 (検索?)して、同じシリアル番号が入力されたセルのあるシートの、 シート名を表示したいです。おねがいします。 VLOOKUPで対応するシリアル番号のセルを探し出して、そのシートを表 示させるようなことを考えていたのだけど、参照するデータの列が左端 ではないし、検索するシートがたくさんあるし、ぜんぜんわかりませ ん。マクロを使用すれば出来るのでしょうか? エクセル2003を使用しています。 長文になってしまい、わかりにくいかと思いますが回答お願いします。

  • ExcelのBOOKが消えた!

     大変困っています。教えてください。 Excelで新規作成で入力していて、ファンクションキー(たぶんF4あたりだったと思います。)を押した時にBookが消えてしまいました。その時に、「Book1を保存しますか?」と画面には出てこなかったのであきらめてExcel自体を閉じようとした時に「Book1を保存しますか?」とでたので「はい」で名前をつけて保存をしました。が、そのファイルを開くとExcelを最初に開いた状態でそのデータが表示されません。(新規作成の画面も出なくてグレー色の状態のことです。)何も表示されないので閉じようとすると「保存しますか?」とでたので一応「はい」にしました。どこかに隠れていてデータ自体はあると思うのですがどのように表示をしたらよいのでしょうか?今日、半日がかりで作った物なのであせってます(^^ゞ教えてください。

  • リンクさせたくない(book間のコピー)

    エクセル2003においてbook1とbook2があります。それぞれのシートの名前は同じで[1-1]と[1-2]とします。 book1とbook2の[1-1]は同じ表で中身(書いてある文字)が違います。 book1の[1-2]にはbook1のシート[1-1]の列を参照して、例えば「しょうゆ」という文字がいくつ「みそ」という文字がいくつというように表示させています。 そこで、book2の[1-2]にもbook1の[1-2]と同じようにbook2の[1-1]を参照させて同じものを作りたいのですがbook1の[1-2]のシートをコピーするとbook1にリンクしてしまいます。また、book1の[1-2]の式の入った列を選択コピーして、book2の[1-2]に貼り付けてもリンクしてしまいます。 式が入っていてもリンクさせない、もしくは複数セルを一度にセルの中身だけコピーする方法はないのでしょうか。

  • 一致する文字列がある行だけを、別BOOKのプルダウンリストに表示させる方法

    OFFICE 2003のエクセルで作成した下記のような3つのBOOKがそれぞれあり、BOOK1のシートはマスターで、「案件NO」「案件名」「進捗」「メンバ1」「メンバ2」「メンバ3」の項目がある。 BOOK2とBOOK3のシートには「案件NO」「案件名」「進捗」「概要」「報告」の項目があります。 例えば、BOOK1のセルD2~F2の中のいずれかのセルに表示されているメンバの名前を参照し、「山田」と名前が入っているセルがある場合は、その同じ行の「A列、B列、C列」のセルをBOOK2の「A列、B列、C列」に設定したプルダウンリストの中に表示させる。 (つまり、山田さんの名前が入っている案件情報だけをプルダウンリストに表示する) また同様に、メンバ欄に「森」が入っている行の「A列、B列、C列」のセルをBOOK3の「A列、B列、C列」に設定したプルダウンリストの中に表示させる。 (森さんの名前が入っている案件情報だけをプルダウンリストに表示する) 上記のように、案件マスターを参照し、担当者ごとに作成している別ブックのセルにに設定してあるドロップダウンリストの中に、メンバ欄の中に自分の名前が入っている案件だけをリストアップすることは、可能でしょうか? ※ BOOK1は、自由に編集することができ、数千件のデータが入っている ※ BOOK2とBOOK3の「A,B,C」各列はドロップダウン設定がされている。   BOOK1のデータとリンクしており、自分が担当している案件だけが、ドロップダウンリストの中に表示される。担当以外の情報は表示されない。)   列(D,E)は、自由に編集できるようになっている。 BOOK1のシート(1) 「案件情報マスター」    A      B      C      D      E     F 案件NO   案件名   進捗   メンバ1   メンバ2   メンバ3 1 111111   あああ    A    山田    吉田      森 2 222222    いいい    B     森    吉田     佐藤 3 333333   ううう     C     伊藤     吉田      佐藤 4 444444   えええ     A     佐藤     森      佐藤 5 555555   おおお     B     吉田    山田      佐藤 ---------------------------------------------------------------- BOOK2のシート(1) 「山田さんのブック」    A       B       C      D      E       案件NO    案件名    進捗    概要    報告 1 11111     あああ      A     ****    ○○○  2 555555    おおお    B     ****    △△△ ---------------------------------------------------------------- BOOK3のシート(1) 「森さんのブック」    A       B       C      D      E      案件NO    案件名    進捗    概要    報告 1 11111    あああ     A     ****    ○○○ 2 222222    いいい     B     ****    ××× 3 444444    えええ     A     ****    □□□ ---------------------------------------------------------------- わかりずらい文章ですみません m(_ _;)m メニューの「挿入」→「名前」→「定義」名前の定義をすれば、別シートのリストをプルダウンで表示させることができ、またINDIRECT関数を利用すれば3つのドロップダウンリストを連動させることができると言うことは調べてみてわかったのですが… 他のBOOKを参照し、複数のセル(D列~F列)を参照し、そのいずれかのセルに一致する文字列がある場合のみ、その行の複数セル(A列~C列)を 別BOOKに設定しているドロップダウンリストに表示させることができるようにし、各メンバごとに管理できるBOOKを作成したいと思っております。 よい方法があれば教えていただけると幸いでございます。 宜しくお願い致します。

専門家に質問してみよう