• ベストアンサー

マクロ無しのbookでVBAを使う方法

マクロなしbook1があります。 このbook1をマクロで参照するには 1.book1で、VBAを使う 2.VBAで新規にbook2を開き、book1のシートを取り込む の方法を考えました。 2.は多分できるかとおもうのですが、1.のbook1でVBAを開く方法がわかりません。 VBAはずいぶん昔なので、今はVBAを使うBOOKの作り方をネットで学んだところです。(excelの神髄など) 1.の方法の手順を教えてください。 この手順がわかる良いサイトが教えていただけてもよいです。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.8

> ・book1を開く(マクロ無しで保存したもの) >・開発のvisualbasic(vba)をクリックでvbaのエディタ画面が開く > ・この状態では、エディタ画面にコードが書けないのです。 これはごく普通の操作なので出来て当たり前です。 「書けない」とは具体的にどういう現象なのでしょうか? 開発リボンのvbabasicのアイコンをクリックして、VBAエディターは起動するのですよね?その後どの段階でどうなりますか? 1.左上ペインに、開いたファイル名が表示されていない 2.開いたファイル名が表示されているが、右クリックできない 3.右クリックできるが、右クリックメニューに「挿入」が無い 3.右クリックメニューに「挿入」はあるが、その下に「標準モジュール」が無い 4.標準モジュールを挿入することを選択しても標準モジュールが作成されない 5.その他

qhtsige
質問者

お礼

詳しくご説明ありがとうございます。 書けないとは、VBAのコード編集画面がでないことです。 現象例の例示により確かめますと、 1.左上ペインに、開いたファイル名が表示されていない Sheet1があります 2.開いたファイル名が表示されているが、右クリックできない sheet1を右クリック、コード表示でコード編集画面(空白)がでました。この画面を期待していました。単に右クリックするだけなのですね。 3.右クリックメニューに「挿入」はあるが、その下に「標準モジュール」が無い →sheet1右クリックで挿入もあります  さらに標準モジュールがあり 4.標準モジュールを挿入することを選択しても標準モジュールが作成されない →標準モジュールが作成されました そうすると、VBAのコードは、sheet1用のコード画面でなく、 標準モジュール用のコード画面を使えばよいですか。 また、sheet1用と、標準モジュール用画面との使い分けはなにでしょうか。 お手数ですが最後にご教示をお願いします。

その他の回答 (9)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.10

難しく考えすぎです。 「book1」だけを開いた状態で VBE を起動し、 VBE の 左上(プロジェクトエクスプローラ)で おそらく「VBAProject (book1)」とかになっていると思いますが それを右クリック、「挿入」「標準モジュール」とクリックで出来ます。 それでも出来ないようなら、 「book1」で「マクロの記録」、 保存先を「現在のブック」にしてOKをクリック 「記録終了」をクリック 「マクロの記録」の隣にある、「マクロ」をクリック 開いたダイアログで表示されているマクロ名を選択し 「編集」をクリック とりあえずこれで VBA の編集ができます。 どんな マクロやシートモジュールがあるかが見えなければ プロジェクトエクスプローラの プラス表示をクリックして 展開すれば階層構造をみていくことができます

qhtsige
質問者

お礼

ありがとうございます。 わかりました。

  • sknbsknb2
  • ベストアンサー率38% (1125/2899)
回答No.9

回答No.5です。 Book1でVBAを立ち上げて、コードのウィンドウが表示されていない場合は、左上の"VBAProject(Book1)"の上にある3つのアイコンのうち一番左のアイコンをクリックしてください。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#3です。VBAでVBAコードを書く・エクスポートするなどの、ことまでは、WEBなどに記事があります。でも、小生はやりすぎだと思うので、深くは勉強したり、実用化したことはないです。  質問者も、本件について、設計思想を改められた方がよいと思います。 http://officetanaka.net/excel/vba/vbe/04.htm VBComponentの操作  (新規)ブックに、「vBAを許容する」ことを、VBAレベルのコードで行うというのも、MSはしてほしくないのではないですか。 ーー 田中亨先生の記事に、たまにお目にかかりますが、他の方の書籍などには、出さないようにしていると思う。

qhtsige
質問者

お礼

No7 imogasiさん >> (新規)ブックに、「vBAを許容する」ことを、VBAレベルのコードで行うというのも、MSはしてほしくないのではないですか。 もしご案内のサイトが必要ならば、私もそれまではやりたくないです。 やりたいことを、再掲しますと、 ・book1を開く(マクロ無しで保存したもの) ・開発のvisualbasic(vba)をクリックでvbaのエディタ画面が開く ・この状態では、エディタ画面にコードが書けないのです。 これは、普通でない難しいことなのですね。 つまり、マクロ無しで保存したのに、それをまたマクロありで編集するのは、おかしいという論理なわけですか。 そうするとマクロありで保存をしなければならないのですか。これはできなかったのです。 そうすると、やはり第2の方法で、マクロありのブックから、マクロ無しのシートを読むほかないようですね。

  • sknbsknb2
  • ベストアンサー率38% (1125/2899)
回答No.6

回答No.5です。回答No.5に補足します。 (1)操作する前にbook1を開いておいてください (2)VBAプログラムが追加された状態で保存するときは、拡張子をxlsbにしてください

  • sknbsknb2
  • ベストアンサー率38% (1125/2899)
回答No.5

回答No.1です。 質問は、 「Excel上で、VBAのプログラミングを開始したいが、どうすればいいか」 ですね? ネットワーク版ではないExcelなら、下記手順でOKです。 ○上部メニューの「開発」を選んで、一番左にある「Visual Basic」を押す 「開発」が表示されていない場合は、 ファイル->オプション->リボンのユーザー設定 とたどって、右の方にある「開発」にチェックを入れてください。 ネットワーク版Excelでは、VBAは使えませんが、Officeスクリプト(操作記録マクロに相当するもの)は使えます。

qhtsige
質問者

お礼

>○上部メニューの「開発」を選んで、一番左にある「Visual Basic」を押す book1を開いて ここまではやってみましたが、Visualbasicは起動されますが、 その中に、コード作成作業域であるエデッタ画面が表示されないのです。 book1を開かないで、初めからvbaを作る手順(サイトによる)では、標準モヅールがあって、エディタ領域ができたのです。 ここのあたりの関連がよくわからない点です。

  • kon555
  • ベストアンサー率52% (1743/3341)
回答No.4

 1については、そもそもマクロなしブックでは「マクロの保存」ができないだけなので、メモ帳などにコードをコピーしておいて、必要な時にエディタを開いてペーストすれば実行可能になります。  あとはマクロの組み方にちょっと工夫が必要になりますが、別途マクロ用のブックを作るのもアリです。 https://allabout.co.jp/gm/gc/297809/

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

初心者らしく、余分なことを考えているか、質問に、適切に、難しい点が書かれていないと思う。 読む対象の「ブック(A)」のシート・データを読んだり書いたりするのは、(A)ブックにマクロの(許容や存在の)ありなしと関係ないはず。だから何を心配しているかよくわからない。 ーー 何かの事情で、(A)ブックを開かないで、(A)ブック(を)に「読んだり書いたり」したいという質問が時々出るが、これを考えることそのものが、ニーズに納得が行かない。 === 新たに、データのあり場所を明示して、(VBAを忘れて)やりたいことを「文章で表現」してみたら。

qhtsige
質問者

お礼

最初にやりたいことをかけばよかったですね。別なお礼で説明しました。 さらに言えば、book1を開いた状態で、そのbook1に付随して、visualbasicのコードエディタが開くことができればよいのです。それをやろうとすると、マクロ無しのbookなのでできないのようだったと思いますので、お尋ねしました。ここの操作を勘違いしているかも知れません。

qhtsige
質問者

補足

コメントの修正とか、追加情報ができないので、この部分で説明します。 再度実際にやってみました ・book1を開く(マクロ無しで保存したもの) ・開発のvisualbasic(vba)をクリックでvbaのエディタ画面が開く ・この状態では、エディタ画面にコードが書けないのです。 ここがわからないところです。

  • sknbsknb2
  • ベストアンサー率38% (1125/2899)
回答No.2

回答No.1です。回答No.1のお礼についてです。 Excelにおいては、マクロとVBAはほぼ同義で、操作記録のマクロはVBAで記述されます。 なので、 「VBAを使わないbook1を、book1を開いた上で、vbaを使うというつもりでした。」 というのを、 「VBAのプログラムを含んでいないbook1上で、VBAのプログラムを実行したい」 と解釈したのですが、違っていたでしょうか? それとも「VBAを使う」というのは「VBAでプログラミングする」という意味でしょうか? どちらも違う場合は、もう少し詳しく説明をお願いします。 ちなみに、book1以外にVBAのプログラムを含むbookが開かれている場合は、book1の上部メニューで 「開発」->「マクロ」 とたどれば、開いているbookのすべてのVBAプログラムが表示されます。 同じ「開発」タブで、VBAのプログラムを開始することもできます。 お使いのExcelの上部メニューには、「開発」が表示されていますよね?

qhtsige
質問者

お礼

「VBAのプログラムを含んでいないbook1上で、VBAのプログラムを実行したい」 そのつもりですが、 「VBAを使う」というのは「VBAでプログラミングする」という意味でしょうか? ここのところが、よく解せないのですが、両者は同義と思っています。確実に言えば、プログラムの方です。 具体的な操作は次のようなことです。 book1はおおよそ、50万行(レコード)ぐらいで、1レコードは10列くらいです。 だいたい1500レコードごとにある、あるキーにマッチしたレコードを抜き出し、となりの列(例えば11列目から)、あるいは別シートに順次書くことです。実はその表を提供されたときは編集保護がかかっていたので、サイトの情報をもとに、値だけコピーしたのがbook1なのです。手作業では非実現的なので、vbaで処理しようと考えた次第です。VBAの環境さえ整えば,vbaのプロfグラムは問題ないです(と思う)。

  • sknbsknb2
  • ベストアンサー率38% (1125/2899)
回答No.1

「マクロを含まないbook1でマクロを使う方法」と解釈してお答えします。 下記に、どのbookからでも共通マクロを使えるようにする方法が書かれていますので、参照してください。 https://koukimra.com/archives/53

qhtsige
質問者

お礼

ご返事ありがとうございます。 どうも私はマクロとvba(visualbasic)と混同して表現していました。操作の記録のマクロではなく、VBAのことです。 VBAを使わないbook1を、book1を開いた上で、vbaを使うというつもりでした。 ということでご案内のサイトは違うと思いますが、私の目的を満足する方法はないでしょうか。

関連するQ&A

  • Excel VBAで他のブックを選択する方法を教えてください。

    こんにちは。VBA初心者です。 ブックを2つ開いた状態で、 マクロを保存してあるブック〔Book1〕から、 毎回ブック名が異なる[Book2]の選択されている2枚のシートを新しいブックに(仮Book3)コピーしたいのですが、どのように記述したらよいのでしょうか。(選択されるシートも毎回異なります。) 特に教えていただきたい部分は、 1.マクロが記録されているBOOK1以外のBookを操作する方法。 2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 マクロの記録では下記の感じになります。 Sub Macro4() Windows.Arrange ArrangeStyle:=xlVertical Windows("Book2.xls").Activate Sheets(Array("Sheet3", "Sheet4")).Select Sheets("Sheet4").Activate Sheets(Array("Sheet3", "Sheet4")).Copy End Sub 宜しくお願い致します。

  • エクセル)VBAで他のブックのセル参照

    はじめまして。 エクセルのVBAについて教えてください。 VBAで、 book1のsheet1のセルA1にあるデータを開いていない(アクティブでない)別のbook2のsheet2のセルB1にコピーしたいのですがこんなことってできるのでしょうか? ・・やはり開いていないとダメなんでしょうか? あと、これって"ブック参照"っていうことなんでしょうか?自分がやりたいことが何なのか判らないので上手く調べる事が出来ず難儀しています。 よろしくお願いします。

  • VBAで別のExcelブックのボタンのマクロ登録

    Excelブック1とExcelブック2があります。 Excelブック1はVBAで 1)Excelブック2を開いて 2)Excelブック1のワークシート(Sheet1)と  モジュールシート(Module1)を  Excelブック2にコピーします。 3)ワークシート(Sheet1)にはコントロール(ボタン)が貼り付けてあって  このボタンをクリックするとモジュールシート(Module1)の中の  Excute_Button()というプロシージャ(マクロ)を呼び出すため  Excelブック1のVBAで  wb.Worksheets("Sheet1").Shapes.Range(Array("Button 1")).Select  Selection.OnAction = "Excute_Button"  と記述してボタンのマクロの登録をします。   (wbはExcelブック2を指しています) 4)Excelブック2を保存して閉じる。 という処理をしています。 この後、Excelブック1を閉じて、 Excelブック2を開いてワークシート(Sheet1)のボタンをクリックすると Excelブック1が開いてしまいます。 Excelブック2のボタンのマクロの登録のマクロ名を見てみると Excelブック1のファイル名!Excute_Button となっています。 Excelブック1のVBAで、ここを単にExcute_Buttonだけにするには どのようにすればよいでしょうか。

  • エクセル-別のbookで同様のマクロ実行

    エクセル-別のbookで同様のマクロ実行 最初あるBook1に入っているmacro1はそのbook1のsheet1を処理するように作成しました。 次にBook1を開いたまま、Book2を開きそのsheet1に対してmacro1と同等の機能を実行したい場合は通常どうするのでしょうか。 (1) Book2にBook1のマクロをコピー (2) book2のマクロを開き、表示されるBOOK1 macro1を実行する。 (2) 場合でもうまくいくのでしょうか。Sheet1に対してやりたいことの論理は同じとします。試してみたらといわれそうですが、まず識者の説明をお聞きしたいのです。

  • 閉じているBookに処理をさせるマクロ

    Book1とBook2があり、Book1は開いていてBook2は閉じています。 Book1でマクロを実行し、Book2を開いてSheet1のA1に"A"を入力した後Book2を閉じる、という処理をさせることは可能でしょうか? また、上記の処理をBook2を閉じたまま実行することは可能でしょうか? 可能でしたらそれぞれのマクロを教えてください。

  • Excelのシート移動

    初めまして。エクセル超初心者です。  早速ですが、ここにBook1とBook2の二つのブックがあるとします。Book1で現在参照しているSheetをBook2の例えばSheet2の前に移動、というマクロ(VBA?)を作成し、ボタン一つで移動するようにしたいのですが、どの様にすればよいのでしょうか。お教えください。

  • Book間でのコピー

    エクセルで以下の処理を実行するマクロを知りたいのですが。 Book1とBook2が開いています。 Book2のSheet1のA1~A10を、Book2のSheet1のA1~A10にコピーします。 この処理を任意の2つのBook間で実行するためにはどんなマクロになるでしょうか。(Book3とBook5で行ったり、Book25とBook46で行ったり等) アクティブになってないBookからアクティブになっているBookにコピーするようにしたいのですが。 宜しくお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • Excelでブックをまたいでシートをコピーした時に、元のブックを参照させない方法

    Excelでブックをまたいでシートをコピーした時に、 元のブックを参照しないようにしたいです。 BOOK_AというブックのシートにBOOK_Aのブック内のセルを参照する式が ある場合、そのシートをBOOK_Bというブックにコピーすると、 式の中の参照先のセルを示す部分に自動的に[BOOK_A]が追加されて、 BOOK_Aを参照してしまいます。 ここではBOOK_B内のシートを参照してほしいので、そのままの式で コピーしたいのですが、可能でしょうか? よろしくお願いいたします。

  • ブックを開くマクロ

    データ管理というファイルの中にある データー(1)のファイルの中の データ表(1)というエクセルbookのあるマクロを実行すると 同じくデータ管理というファイルの中にある データー(2)のファイルの中の データ表(2)というbookを開き そのbookのsheet1のA1:B5をコピーして データ表(1)エクセルbookのsheet1のA1:B5に貼り付ける・・・ というVBAを組む事は出来ますでしょうか? 分かりにくくてすいません

専門家に質問してみよう