こんにちは。環境:WinNT4.0、エクセル97

二つのエクセルブックがあります。(AとB)
Aは個人のデータが記入されています。このAは個人個人のデータのため
実際には複数存在します。(A1、A2・・・)
Bはこの個々のブックを集計したものになるため、Bを直接開くことはありません。
実際にAのみにデータを追加していって、それをBに反映させることは
できるのでしょうか?

以上、お願いします。

A 回答 (3件)

VBAでイベントプロシージャーを使用して、AのデータシートをBの然るべきシートにコピーするようにすれば良いと思います。



Private Sub Workbook_BeforeClose()
Sheets("Aのデータ").Cells.Select
Selection.Copy
Workbooks.Open Tinename:="B.xls"
Sheets("Aデータ貼付先").Cells.Select
ActiveSheet.Paste
WorkBooks("B.xls").Close SaveChanges:=True
End Sub


動作確認していませんが、Excel97だと上記のような形となると思います。
    • good
    • 0
この回答へのお礼

上記のやりかただとBを開けなければならず、ちょっと違うんです。
Bを開けてやるなら上記でOKだと思います。

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

お礼日時:2001/11/27 15:32

> ブックBのA1で=を入力し、アクティブ画面ををブックAに切替え(ウィンドウで)ブックAのA1を左クリックします。

ブックBのA1は”=[A.xls]Sheet1!$A$1”となるはずです。

私はこれが可能でしたよ。但し表示は、=[A]Sheet1!$A$1 でしたけど。
同じ環境:WinNT4.0、エクセル97 です

また、そのまま、=[A]Sheet1!$A$1というように打ち込んでもOKでした。

ちょっと謎です。
    • good
    • 0
この回答へのお礼

すいません、わかりました。
ウインドウ自体が複数になっていました。
2000とかだとファイルを開くごとにウインドウ(下のバー)が
増えていきますよね?
NT(エクセル97のほう?)の場合は、メニューバーのウインドウの中に
追加されていくだけなんですよね。
おっしゃっていた方法はこっちのやり方みたいですね。

確かにその方法でできました。
ありがとうございました。

お礼日時:2001/11/28 10:29

簡単にブックBのSheet1のA1に、ブックAのSheet1のA1を表示させる場合、ブックAとブックBを両方開き、ブックBのA1で=を入力し、アクティブ画面ををブックAに切替え(ウィンドウで)ブックAのA1を左クリックします。

ブックBのA1は”=[A.xls]Sheet1!$A$1”となるはずです。この後、A2以下からA10まで追加が予想されるとしたら、A1の計算式の行番号1の前の$を外し($A1の形)、A10までオートフィルを使ってコピーします。このあと先にブックAを閉じると計算式が'C\Winnt\Profiles\xxxxxx\デスクトップ\[A.xls]sheet1!A1'となるのを確認できると思います(ブックAがデスクトップに保存されているとした場合)。これでリンクは確立できたのでブックBを閉じ保存します。ブックAのA2以降にデータを追加した後保存し、ブックBを開けば確認できると思います。このときブックBを開く際、他にリンクされているうんぬんのメッセージが出るので、これを反映させる方を選択します。そうしないと意味がありません。あとブックAも新規に作成する場合は、必ずブックAから先に保存してください。
    • good
    • 0
この回答へのお礼

> ブックBのA1で=を入力し、アクティブ画面ををブックAに切替え(ウィンドウで)ブックAのA1を左クリックします。ブックBのA1は”=[A.xls]Sheet1!$A$1”となるはずです。

それがなりませんでした。=を入力後、アクティブ画面をAに切り替えてA1セルを
選択して、Bに戻しても=以降なにも表示されません。シート間の場合はそれでいけるのですが、Book間だとうまくいきません。

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

お礼日時:2001/11/27 15:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBA モジュールで共通に使う変数の宣言方法

VBAにてプログラミングを覚えている者です。

現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。
いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。

例えば、

Dim pic1 As Picture
Dim cell1 As String
Dim pass1 As String
Dim pic2 As Picture

などです。


Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。

共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに
その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか?
(例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・)

ヒントを教えていただければと思います。よろしくお願いします。

Aベストアンサー

>モジュールで共通に使う変数の宣言方法

モジュールの先頭に書いたdimで宣言すると,そのモジュールの中だけ(に記入されている各プロシジャ)でパブリックになります。
モジュールの先頭に書いたpublicで宣言すると,全モジュール(に記入されている各プロシジャ)に対してパブリックになります。

「変数宣言モジュール」のようにモジュールを越えて参照させたいという事なので,DimではなくPublicで宣言します。


Module1:
public x as variant


Module2:
sub macro1() ’先に実行する
x = "abc"
end sub


Module3:
sub macro1()
msgbox x
end sub

Q異なるブック間でのセル範囲のコピー/VBA

異なるブック間でクリップボードを経由せず直接コピーしたいため
下記のマクロを記述していますが、実行エラーが発生します。
どうしてでしょうか。

ThisWorkbook.Worksheets(3).Range(Cells(3, 1), Cells(3 + a, 1)).Value = Workbooks("excel.xls").Worksheets(1).Range(Cells(11, 3), Cells(11 + a, 3)).Value

(補足)
(1)VBA実行中のThisWorkbook、excel.xlsは別のブック
ですが、同じフォルダにあります。
(2)aは数値が入る変数です。

Aベストアンサー

Cells(3, 1)や他のCellsが参照エラーになるためです。
ブックとワークシートを特定できないためエラーになってしまいます。
正しくは
ThisWorkbook.Worksheets(3).Range(ThisWorkbook.Worksheets(3).Cells(3, 1), _
ThisWorkbook.Worksheets(3).Cells(3 + a, 1)).Value _
= Workbooks("excel.xls").Worksheets(1).Range(Workbooks("excel.xls").Worksheets(1).Cells(11, 3), _
Workbooks("excel.xls").Worksheets(1).Cells(11 + a, 3)).Value

QエクセルVBA エクセルファイル間でのデータのやり取り

エクセルで次のようなことはしたいのですが、
参考になる本やHPなどあれば教えていただけない
でしょうか。

やりたい事
エクセルでAとBと言うファイルがあります。
AのファイルのデーターをBのファイルに記入
していくと言う事をAのファイルから行う。
と言う事をしたいのですが。
今、自分の持っている知識だと、Aのファイルを
一度、CSVファイルファイルに書き出して、それを
Bのファイルから読み込むという事しかできません。
このような操作をしたい理由は
Aのファイルは事務管理での入力フォーマット形式で
作成されていて、それを、必要な情報を取り出し、
顧客情報管理データーとして取り扱って行きたいためです。
Aのファイルは毎日更新されるので、Aのファイルが更新される
ごとにBのファイルが自動で更新されるようしたいのですが、
AのファイルからBのファイルを操作するためのスキルが自分に
ないので、何か参考になる本やHPがあれば勉強していきたいと
思っております。
使用しているのはエクセル2003。XPを使っております。

エクセルで次のようなことはしたいのですが、
参考になる本やHPなどあれば教えていただけない
でしょうか。

やりたい事
エクセルでAとBと言うファイルがあります。
AのファイルのデーターをBのファイルに記入
していくと言う事をAのファイルから行う。
と言う事をしたいのですが。
今、自分の持っている知識だと、Aのファイルを
一度、CSVファイルファイルに書き出して、それを
Bのファイルから読み込むという事しかできません。
このような操作をしたい理由は
Aのファイルは事務管理での入力フォー...続きを読む

Aベストアンサー

ただ単に他のブックのデータを参照したいだけならVBAを使うまでも
ないと思います。たとえば↓。
http://www.excel-jiten.net/formula/ref_other_books.html


VBAを使用した例ですが、

Dim aFile As Object
Set aFile = ActiveSheet
Workbooks.Open Filename:="C:\b.xls"
Range("B4").Value = aFile.Range("A3").Value
ActiveWorkbook.Save
ActiveWindow.Close

これはAファイルからCドライブにあるb.xlsを開き、
AファイルのA3セルの値をb.xlsのB4セルにコピーして
保存終了する例です。
ご参考になれば。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVBAでワークブックの名前を変数にして開かせる?

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=myMgs, Title:=mytitle)

If mywbname <> "False" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"

End If

End Sub
なんてなものを作ったのですが、mywbnameを変数として受け取ってくれません。なのでそんなファイルはない…なんてことになっています。

構文自体の見直しも含めてアドバイスお願いします。
蛇足かもしれませんが、○○○のところは個人名が入ります。
C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
の箇所のmywbnameを既存のファイル名にしてみるとMgsBoXに適当な文字さえ入れれば、そのファイルは開いたので問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが、よろしくおねがいします。

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Applicatio...続きを読む

Aベストアンサー

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
MsgBox "こちらは" & 変数 & "例です"
End Sub

違い分かりますか


修正したものを載せておきます

Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

mymgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=mymgs, Title:=mytitle)

If mywbname <> "" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"

End If

あと、InputBoxの未入力の戻り値は "False" では無く "" です
>If mywbname <> "False" Then
If mywbname <> "" Then

こんな所でしょうか

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
Msg...続きを読む

QエクセルVBA 他ブックのシートのsub呼び出し

ブックBのシート(*)に関数 sub aaaを定義します。

(*)シートオブジェクト名を任意のものに変更します。(→eee)

この時、ブックAのVBAからブックBを開き、その参照を得て(workbook型の
wbという名前の変数に格納します。)、「Call wb.eee.aaa」と
呼び出すことができると思っていましたが、"オブジェクトは
そのメソッド/プロパティを持っていません"という旨のエラーが
出て、呼び出すことができませんでした。

どのようにしたら呼び出すことができるようになりますか。

aaaはpublicで定義しています。

Aベストアンサー

> aaaはpublicで定義しています。

Workbook型の変数では、ユーザーが独自に定義したメソッドを呼び出せなくなります。
(Workbookオブジェクトに定義された(=組み込み済みの)メソッドしか呼び出せない)

そのオブジェクトを受ける変数の型をObject型にすれば、独自に定義したaaaメソッドを
呼び出すことができるかと思います。
(「Dim wb As Object」と宣言すればOk、と)


なお、VBEのメニューから「ツール(T)→参照設定(R)」で『参照設定』ダイアログを開き、
『参照(B)』ボタンを押して、ブックBへの参照設定を行うと、
 Dim wb As VBAProject.eee
といった宣言も可能になり、eeeシートに定義したPublicなプロパティ/メソッドに対して
インテリセンスによる入力支援を有効にすることもできますので、併せて参考まで。
(上記での「VBAProject」には、VBEのメニューで「ツール(T)→○○のプロパティ(E)」
 で開く『プロジェクトプロパティ』ダイアログの『全般』タブにある『プロジェクト名(N)』を
 指定します)

但し、ブックAを開くと同時に毎回ブックBが開かれることになりますので、運用できる
場面は限られるかと思いますが(汗)

> aaaはpublicで定義しています。

Workbook型の変数では、ユーザーが独自に定義したメソッドを呼び出せなくなります。
(Workbookオブジェクトに定義された(=組み込み済みの)メソッドしか呼び出せない)

そのオブジェクトを受ける変数の型をObject型にすれば、独自に定義したaaaメソッドを
呼び出すことができるかと思います。
(「Dim wb As Object」と宣言すればOk、と)


なお、VBEのメニューから「ツール(T)→参照設定(R)」で『参照設定』ダイアログを開き、
『参照(B)』ボタンを押して、ブックBへの参照設定を...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング