Sub ThisWorkbookPathSample()
Dim sPath
sPath = ThisWorkbook.Path & "\piyo.xlsm"
Workbooks.Open Filename:=sPath
End Sub
Sub FullPathSample()
Dim sPath
sPath = "C:\hoge\piyo.xlsm"
Workbooks.Open Filename:=sPath
End Sub
C\hoge\mokyu にある uni.xlsm を開くなら、以下。
Sub ThisWorkbookPathSample()
Dim sPath
sPath = ThisWorkbook.Path & "\mokyu\uni.xlsm"
Workbooks.Open Filename:=sPath
End Sub
Sub FullPathSample()
Dim sPath
sPath = "C:\hoge\mokyu\uni.xlsm"
Workbooks.Open Filename:=sPath
End Sub
受講生さんの投稿
(投稿ID: 3848)
初めて質問させて頂きます。
業務で2つのファイルを開いて転記をすることが多くあり、こちらで学んだ内容を活かしております。
が、いつも悩む事があります。
転記元と転記先とどちらにマクロを書きかますか?過去の動画の中でどっちに書かないといけません等、決まりについて説明している動画はありますか?
また、転記するファイルのパスはパソコンのドライブから指定しないとダメなものと平気なものとの違いを教えてください。
実務で使ってみているのですが、うまく行かず困っています。
よろしくお願いします。
小川慶一さんのコメント
(コメントID: 5373)
おはようございます。
> 転記元と転記先とどちらにマクロを書きかますか?過去の動画の中でどっちに書かないといけません等、決まりについて説明している動画はありますか?
↑
特に決まりはありません。
そればかりか、転記元でも転記先でもなく、マクロを記入するだけのファイルを作ることも考えられます。
その場合、以下の挙動になりますね。
[1] マクロが起動する。
[2] 転記元ファイルを開く。
[3] 転記先ファイルを開く。
[4] 転記を行う。
[5] 転記先ファイルを閉じる。
[6] 転記元ファイルを閉じる。
どの方法が良いかということの答えは状況によって変わります。
そこで、ご自身でも考えてみて欲しいです。
以下の[A]、[B]、[C]のそれぞれについて、メリットデメリットを考えてここに書いてみてください。
[A] 転記元ファイルにマクロを書く場合
[B] 転記先ファイルにマクロを書く場合
[C] ネット、マクロを記入するだけのファイルを作り、そのファイルにマクロ書く場合
いただいた答えを見て、さらにアドバイスをしたいと思います。
> また、転記するファイルのパスはパソコンのドライブから指定しないとダメなものと平気なものとの違いを教えてください。
Thisworkbook.Path について調べてみてください。
Thisworkオブジェクトは、そのマクロを含むファイルそのものを指します。
.Pathプロパティは、その直前で指定されたオブジェクトの存在するフォルダのパスを示します。
つまり、Thiswork.Pathは、そのマクロの入ったエクセルファイルの所在するフォルダのパスを示します。
> お世話になります。
> 初めて質問させて頂きます。
> 業務で2つのファイルを開いて転記をすることが多くあり、こちらで学んだ内容を活かしております。
> が、いつも悩む事があります。
> 転記元と転記先とどちらにマクロを書きかますか?過去の動画の中でどっちに書かないといけません等、決まりについて説明している動画はありますか?
> また、転記するファイルのパスはパソコンのドライブから指定しないとダメなものと平気なものとの違いを教えてください。
> 実務で使ってみているのですが、うまく行かず困っています。
> よろしくお願いします。
受講生さんのコメント
(コメントID: 5377)
ご返信、ありがとうございました。
先生から頂いた問題について私なりに考えてみたのですが、
いかんせん、初心者なものでいまいち違いがわかりませんでした。
わからないながら書いてみたので読んでみてください。
> [A] 転記元ファイルにマクロを書く場合
> [B] 転記先ファイルにマクロを書く場合
についてのメリットはアクティブになっていることで書いたマクロの
実行がその場で確認できる事。
デメリットはファイルが他の人に開かれていると操作できない。
> [C] ネット、マクロを記入するだけのファイルを作り、そのファイルにマクロを書く場合。
メリットは転記元ファイル、転記先ファイルが複数あり、それを一度に処理したい場合に便利だと思います。
デメリットは 転記元、転記先のファイルが開かれている場合は処理ができないので誰も転記元のファイルを開いていない状態でマクロを起動させる必要があると思います。
デメリットについてはExcel上で操作している以上、開かれているとその時には操作できないというのが共通ではないかと思いました。
> Thisworkbook.Path について調べてみてください。
調べてみました。
Thisworkbook.Path・・・ブックのフォルダまでのパスを取得する。
なのでファイルまで取得したいときはThisworkbook.Pathの後にFullNameを書く必要があるという解釈で良いでしょうか?
マクロ以前の問題でPC自体の仕組みがわかっていないので複数ファイル間でのコードの書き方は理解しにくいです。
現在の業務ではLEFT関数やInstr関数を使うような業務はありません。
それぞれの方が受けたお客様からの問い合わせについて記入しているファイルを読みに行って、一つのファイルに必要な情報だけを転記するといった内容です。そのため、フォローアップまで受講していますが実務に使えているのはIF文とFor Next構文で転記していくところぐらいです。
この先の中級編でそのような勉強はありますか?
小川慶一さんのコメント
(コメントID: 5396)
昨日以下の返事を差し上げたのですが、投稿先を誤ってしまいました。
ついては、こちらから改めてお返事いたします。
- - - 昨日のお返事ここから下↓ - - -
おお、がんばりましたね!
> [A] 転記元ファイルにマクロを書く場合
ひとつの転記元ファイルから複数の転記先ファイルにデータを転記するとにはこれで良いでしょう。
> [B] 転記先ファイルにマクロを書く場合
複数のの転記元ファイルからひとつの転記先ファイルにデータを転記するときにはこれで良いでしょう。
> [C] ネット、マクロを記入するだけのファイルを作り、そのファイルにマクロを書く場合。
↑
すいません。「ネット」は、「別途」の誤記でした。
複数の転記元ファイルから複数の転記先ファイルにデータを転記するとにはこれが最善でしょう。
> についてのメリットはアクティブになっていることで書いたマクロの
> 実行がその場で確認できる事。
↑
これは、メリットとは言えません。
テストをするプログラマーの都合でしかないので、きちんと動作するようになったらどうでもいい問題です。
> デメリットはファイルが他の人に開かれていると操作できない。
> デメリットは 転記元、転記先のファイルが開かれている場合は処理ができないので誰も転記元のファイルを開いていない状態でマクロを起動させる必要があると思います。
↑
これは[A]、[B]、[C]のいずれでも起きる問題です。
基礎編レベルの段階では、実運用でカバーですね。つまり、Excelマクロで制御するのではなく、利用者に通知するこのマクロの仕様方法についての注意事項として取り扱います。
> > Thisworkbook.Path について調べてみてください。
> 調べてみました。
例えばCドライブにhogeというフォルダがあるとします。
フォルダのパスは C\hoge です。
ここに、fuga.xlsmというファイルがあるとします。
このfuga.xlsmというファイルが、piyo.xlsmというファイルを開くとします。
その時、Thiswork.Pathを使ってマクロ書く場合と、ファイルのパスをフルパスで指定する場合との比較を以下に示します。
以下でどうでしょうか。
C\hoge\mokyu にある uni.xlsm を開くなら、以下。
> 現在の業務ではLEFT関数やInstr関数を使うような業務はありません。
> それぞれの方が受けたお客様からの問い合わせについて記入しているファイルを読みに行って、一つのファイルに必要な情報だけを転記するといった内容です。そのため、フォローアップまで受講していますが実務に使えているのはIF文とFor Next構文で転記していくところぐらいです。
> この先の中級編でそのような勉強はありますか?
基礎編フォローアップの後半に、まさにそんな内容のものがありますが…。これでは足りないでしょうか?
動画24以降。
https://forum.pc5bai.com/lesson/page/871
受講生さんのコメント
(コメントID: 5421)
遅くなりまして申し訳ございません。
なかなか理解できず今に至ります…。
ご回答ありがとうございます。
マクロを書く場所については理解できました。
ありがとうございました。
This workbook.Pathについては頂いた比較は理解できたのですが
実際にhogeのフォルダをcドライブに作って比較の通りにthis workbook.pathで書いた場合とフルパスで書いた場合とでマクロを書いてみたのですがうまく動きませんでした。
エラーコード1004 フォルダ内に指定したファイルが存在しませんとなってしまい、取得できませんでした。
そもそもコードの書き方で日本語用フォントの問題なのかバックスラッシュを打とうとしても半角の「¥」になってしまいます。
バックスラッシュはスラッシュでも同じことなのか?また「¥」マークで
対象のpathを取得するコードを書いている人も見かけます。
この部分はどうゆう違いがあるのか理解できず苦しんでました(笑)
この先も必ずここで引っかかってしまうと思うのでパソコンの仕組みというか、まず階層について勉強をしないとついていけないなと感じましたので別途、本を購入して勉強したいと思います。
また、基礎編フォローアップ後半の講座ですが、確かに私のしたいことなのですが、自動記録を用いていると思います。
自動記録で書いたものと自分自身でコードを書いたものではどこがどのように違うのかがわかりません。その為、急に自動記録でマクロを作ってそのコードを見てみてもそれをどう使ってアレンジするか等、応用がききません。自動記録ではなくコードを自分で書いていくことをしなければ理解ができないと思ったのでこの後の講座の内容をお聞きしたしだいです。
自分自身がマクロを書けるようになるだけでなく、今現在作ってもらったマクロを使って仕事をしている部分があるのでそのメンテナンスをできなくてはならないのですが、マクロ歴30年以上のベテランの方が作ったマクロなので手も足も出ません(今のところは・・・)
その方の書いたマクロを読んで理解できて、更に自分がメンテナンスできるレベルまでいかないとダメなので自動記録をごっちゃにされると混乱してしまいます。
自動記録でマクロを書くのなら自動記録を使わずに作ったマクロのコードを説明はしなくてもいいので比較用に紹介してもらえたらなと思います。
講座の質問フォームからの相談で長々とすみません。
マクロを書く以前にパソコンの仕組みや基礎知識の向上の為にこの教材はいいよというおすすめがあったら教えてください。
よろしくお願いします。
小川慶一さんのコメント
(コメントID: 5423)
> そもそもコードの書き方で日本語用フォントの問題なのかバックスラッシュを打とうとしても半角の「¥」になってしまいます。
> バックスラッシュはスラッシュでも同じことなのか?また「¥」マークで
> 対象のpathを取得するコードを書いている人も見かけます。
> この部分はどうゆう違いがあるのか理解できず苦しんでました(笑)
そうでした。webでコードを表示すると、どうしてもそういうことがありますね。
バックスラッシュと半角の「¥」は同じものです。
> エラーコード1004 フォルダ内に指定したファイルが存在しませんとなってしまい、取得できませんでした。
ファイルパスの記述に失敗しているようですね。
サンプルファイルを添えて、マクロを書いている様子を収録した動画をお送りします。
以下のリンクからどうぞ。
これでもう少し理解が深まるとよいのですが...。
http://www.exvba.com/download/AskAnswer/sample180506.zip
また、この動画が、フォルダの階層構造の理解にもつながるとよいのですが。
> また、基礎編フォローアップ後半の講座ですが、確かに私のしたいことなのですが、自動記録を用いていると思います。
> 自動記録で書いたものと自分自身でコードを書いたものではどこがどのように違うのかがわかりません。
基礎編では詳細な解説まではできません。
自動記録で作ったコードをしっかり読めるようになる方法は、「発展編1」で取り扱っています。発展編1まで学習を進めてください。
> その方の書いたマクロを読んで理解できて、更に自分がメンテナンスできるレベルまでいかないとダメなので自動記録をごっちゃにされると混乱してしまいます。
> 自動記録でマクロを書くのなら自動記録を使わずに作ったマクロのコードを説明はしなくてもいいので比較用に紹介してもらえたらなと思います。
上述のとおりですので、発展編1まで学習が進むとこの問題は根本解決するかと思います。
基礎編の演習にある程度対応できるようになったら、発展編1まで学習を進めてください。
特に、基礎編フォローアップの演習前半は重要ですよ。まさに、Instr関数とかLeft関数とかを組み合わせる問題です。
ファイルパスの記述も文字列操作です。こういうことを手作業でサラサラできるようになるかどうか?ということが、めぐりめぐって、ファイルパスの記述を正確にできるか?書き間違えがあったときにすぐに気づくか?といったところにもつながります。
ある程度のスキルのある方なら別ですが、基礎的な能力がない段階では、「ピンポイントに教えて欲しいことだけ教えてくれ。そこしか学ぶつもりはないから」というより、よりごのみをせず、与えられた課題に粛々と取り組んだ方が、パソコンスキルの向上という意味でも結局近道です。
受講生さんのコメント
(コメントID: 5434)
ご返信ありがとうございます。
また、動画をありがとうございました。
普段はPCを開く暇がないので、この週末でゆっくり拝見させていただきました。
何度も見せていただき理解を深めたいと思います。
また、ExcelだけではなくPC自体の基礎知識も合わせて学習していきたいと思います。
急がば回れの精神で取り組みたいと思います。
小川慶一さんのコメント
(コメントID: 5442)
お返事ありがとうございます。
> 普段はPCを開く暇がないので、この週末でゆっくり拝見させていただきました。
それで、現在の段階で、理解はどの程度でしょう?
[1] 前回お渡しした動画の内容について
[2] このページのメインテーマ「複数ファイル間でのデータ転記」について
> お世話になります。
> ご返信ありがとうございます。
> また、動画をありがとうございました。
>
> 普段はPCを開く暇がないので、この週末でゆっくり拝見させていただきました。
> 何度も見せていただき理解を深めたいと思います。
> また、ExcelだけではなくPC自体の基礎知識も合わせて学習していきたいと思います。
> 急がば回れの精神で取り組みたいと思います。