「みんな教えて! 選手権!!」開催のお知らせ

以下の写真の説明が分かりません。「自身と同じフォルダ」を利用するとはどういう事でしょうか?①パスの取得とは何でしょうか?②これらを使うのも便利です。のこれらとは何でしょうか?
いまいちここでやっている事が分からないので、もう少し詳しく教えて頂けると幸いです。

「excelVBAについて。」の質問画像

質問者からの補足コメント

  • ThisWorkbook.Pathで、A.xlsmの格納されているフォルダが分かるので、A.xlsmがどこのフォルダに保存されているか分かるということですね?ちなみに、このプログラム片(ThisWorkbook.Path)は、マクロが使われているブックのパスを求めるのに使われるということでしょうか?教えて頂けると幸いです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2024/10/31 20:53
  • 迅速な回答ありがとうございます!
    所で、マイドキュメントのパスの取得とデスクトップのパスの取得について教えて頂けると幸いです。何か両者ともCreate〜となっているのですが。詳しく書いてほしければ、また、聞き返して頂けると幸いです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2024/10/31 21:06
  • CreateObject("WScript.Shell").SpecialFolders("Desktop") と、CreateObject("WScript.Shell").SpecialFolders("MyDocuments") でこれで、これを実行すると、どのような物をが表示されて、どういう時に、使われるのでしょうか?先ほどのパスの表記と全く違う感じですね。教えて頂けると幸いです。

    No.6の回答に寄せられた補足コメントです。 補足日時:2024/10/31 21:24
  • B.xlsxがマイドキュメントの場合でも、このプログラムをDesktopを変えれば良いだけという事でしょうか?教えて頂けると幸いです。

    No.7の回答に寄せられた補足コメントです。 補足日時:2024/11/01 04:02
  • すみません。以下のURLで、Set WSH=Nothingがなぜ付いているのでしょうか?教えて頂けると幸いです。
    http://officetanaka.net/excel/vba/tips/tips107.htm

    No.8の回答に寄せられた補足コメントです。 補足日時:2024/11/01 04:13
  • では、なぜ私の質問のプログラムやtatsumaru77様の挙げてくれたプログラムでは、なぜ、SETWSH=Nothingが出てこなかったのでしょうか?教えて頂けると幸いです。

    No.10の回答に寄せられた補足コメントです。 補足日時:2024/11/01 16:41

A 回答 (11件中1~10件)

>では、なぜ私の質問のプログラムやtatsumaru77様の挙げてくれたプログラムでは、なぜ、SETWSH=Nothingが出てこなかったのでしょうか?



作法なので、作法を守る人と守らない人がいます。
私は、原則守らないほうです。
従って、SET WSH=Nothingは行いません。
しかしながら、SET WSH=Nothing を行ったほうが悪くなることはないので、SET WSH=Nothingを行ったほうが第三者からは好まれるかもしれません。

https://www.moug.net/tech/exvba/0150027.html
https://qiita.com/milky04/items/3dd47bc8b11ed88e …
をみると、SET WSH=Nothingを行わなくてよい場合もあるが、
SET WSH=Nothingを行わないといけない場合もあるとなっています。

では、どういうときに行わなくてよいのか、どういうときに行わないといけないのかは、かなり高度な判断が必要になるようです。

私は、SET WSH=Nothingを行わなくても、いままで、特に不都合がなかったので、SET WSH=Nothingを行っていません。

あなたが、今後、どうするかは、あなた自身で判断されればよいかと思いますが、とりあえずは、SET WSH=Nothingを行っておけば安全なので、
そのようにされるのがよいかもしれません。

この問題は、今すぐに結論を出さないで、中級者レベルになったとき、
再度考えてみると、良いかもしれません。
    • good
    • 0

>以下のURLで、Set WSH=Nothingがなぜ付いているのでしょうか?


回答:
Set 〇〇 = XXXX
のようにして設定した〇〇は、それを使用しなくなったときに
Set 〇〇=Nothing
とするのが、作法とされています。

詳しくは下記を参照ください。
https://www.moug.net/tech/exvba/0150027.html
https://qiita.com/milky04/items/3dd47bc8b11ed88e …
この回答への補足あり
    • good
    • 0

>B.xlsxがマイドキュメントの場合でも、このプログラムをDesktopを変えれば良いだけという事でしょうか?



回答:はい、その通りです。
    • good
    • 0

>もし、マクロブックが2つ以上ある場合はどうすれば良いのでしょうか?教えて頂けると幸いです。



マクロブックがいくつあるかは、関係ありません。
A1.xlsm と A2.xlsmとマクロブックが2つあって、
A1.xlsmにsub sample1() があり
A2.xlsmにsub sample2() があり場合、

sample1でデスクトップのB.xlsxを開きたいなら、
sample1内にNo7のマクロを記述します。

sample2でデスクトップのB.xlsxを開きたいなら、
sample2内にNo7のマクロを記述します。
この回答への補足あり
    • good
    • 0

>CreateObject("WScript.Shell").SpecialFolders("Desktop") と、CreateObject("WScript.Shell").SpecialFolders("MyDocuments") でこれで、これを実行すると、どのような物をが表示されて、どういう時に、使われるのでしょうか?先ほどのパスの表記と全く違う感じですね。



回答:No4の話の続きでB.xlsxをデスクトップに格納するとします。
A.xlsmはデスクトップに格納する必要はありません。

B.xlsmをオープンするとき、デスクトップにあるので、
以下のようにすると、B.xlsxのパスが取得できます。

Dim Path As String, WSH As Variant
Set WSH = CreateObject("WScript.Shell")
Path = WSH.SpecialFolders("Desktop") & "\" & "B.xlsx"
Workbooks.open Path

とするとB.xlsxがオープンできます。
この回答への補足あり
    • good
    • 0

>マイドキュメントのパスの取得とデスクトップのパスの取得について教えて頂けると幸いです。




回答:下記URLを参照ください。
http://officetanaka.net/excel/vba/tips/tips107.htm

事前にWSHの宣言及び設定のために
Dim Path As String, WSH As Variant
Set WSH = CreateObject("WScript.Shell")
上記の行が必要ですが、そのあとで
①Path = WSH.SpecialFolders("Desktop") & "\"
②Path = WSH.SpecialFolders("MyDocuments") & "\"
を行ってます。
上記の
①がデスクトップのパスを取得している箇所です。
②がマイドキュメントのパスを取得している箇所です。
この回答への補足あり
    • good
    • 0
この回答へのお礼

もし、マクロブックが2つ以上ある場合はどうすれば良いのでしょうか?教えて頂けると幸いです。

お礼日時:2024/10/31 21:32

>このプログラム片(ThisWorkbook.Path)は、マクロが使われているブックのパスを求めるのに使われるということでしょうか?



はい、その通りです。
この回答への補足あり
    • good
    • 0

>「自身と同じフォルダ」を利用するとはどういう事でしょうか?



回答:以下のようなブックが2つあるとします。
1つは、A.xlsm でマクロが格納してあるブックです。マクロ名はsub sample()とします。
もう1つは、B.xlsxとします。

sampleを実行して、B.xlsxを操作する場合は、まずB.xlsxをオープンする必要があります。
この時、Workbooks.open "B.xlsx" としただけではだめで、B.xlsxの存在する場所をフォルダ名も含めて
指定する必要があります。例として、B.xlsxが"C:\data\sample1"というフォルダ内に存在するなら、
Workbooks.open "C:\data\sample1\B.xlsx"
と書く必要があります。
これは、
file_path = "C:\data\sample1\B.xlsx"
Workbooks.open file_path
のように書いても、同じ結果になります。
この文字列("C:\data\sample1\B.xlsx")をパスといいます。

もし、B.xlsxの場所が永久に変わらないのであれば、特に、これから書くことは不要です。
なぜなら、ずっと、"C:\data\sample1\B.xlsx"を使い続ければよいわけですから。
何か、事情があって、B.xlsxの格納先が"D:\data\saple2"に変わったとすると、その場合は
file_path = "D:\data\sample2\B.xlsx"
Workbooks.open file_path
のようにB.xlsxのパスを変更する必要があります。
もちろん、変更することが大変でなければ、なんの問題もありません。
変更すれば正しく動作します。
ところが、このマクロを運用者が使っている場合、
(あなたがマクロの作成者で、そのマクロを使っている人を運用者とします。
運用者はマクロを使うだけで、マクロを修正するスキルはありません)
パスの変更があるたびに、マクロを修正をする必要があります。
そうなると、あなたは、その変更のために余分な時間を使わなければいけません。
頻度が少なければ、我慢できるでしょうが、たびたびこのようなことが起こると、
b.xlsxの格納場所が変わっても、パスを変更しないで済む方法があるなら、そのようにしたいと考えるはずです。

その場合、以下のような対策を施せば、b.xlsxの格納場所が変わっても、マクロの修正(パスの修正)
をしなくて済むようになります。
1.B.xlsxとマクロのあるブック(A.xlsm)は、必ず同じフォルダに格納すること。
(従って、B.xlsxを移動する場合は、A.xlsmも同じフォルダに移動すること)
2.マクロは、以下のように変更します。
file_path = Thisworkbook.Path & "\" "B.xlsx"
Workbooks.open file_path

A.xlsmを格納してあるフォルダは、Thisworkbook.Pathで参照可能です。
もし、A.xlsmが、"D:\data\saple2"に格納されているなら
file_path = Thisworkbook.Path & "\" & "B.xlsx"
を実行すると
file_pathの内容は、"D:\data\saple2\B.xlsx"になります。
従って、B.xlsxをどこに移動しても(マクロのあるブックも同じフォルダに移動するなら)
マクロは一切修正する必要がなくなります。

①マクロのあるブックと処理対象となるブックを同じフォルダ内に格納すること、
②そして、そのフォルダのパスをThisworkbokk.Pathで参照すること、
この①②が「自身と同じフォルダ」を利用するという意味になります。




>①パスの取得とは何でしょうか?

回答:すでに、出ていますが、
B.xlsxの位置を示す文字列を取得することを、パスの取得と呼びます。
file_path = "D:\data\sample2\B.xlsx"
とか
file_path = Thisworkbook.Path & "\" "B.xlsx"
の個所が、それに該当します。



>②これらを使うのも便利です。のこれらとは何でしょうか?

回答:マイドキュメントのパス、デスクトップのパスのことです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ついでに、マイドキュメントのパスと、デスクトップのパスについて教えて頂けると幸いです。

お礼日時:2024/10/31 21:01

「自身」については説明がありますね。


「パス」は「ファイルの住所」と書かれていますが、その後の説明を見るとフォルダパスのことのようです。ファイルシステム上のフォルダの場所を表す文字列です。たとえば、あなたのドキュメントフォルダはC:¥Users¥<ユーザ名>¥Documentsとかいう文字列です。
これらは「自身」のフォルダ、マイドキュメント、デスクトップです。ちゃんと読めばわかる筈。
しかし、なんかわかりにくい本です。やめた方がいいと思います。やりたいことが書いてあるWebページを検索して読んだ方がいいです。
    • good
    • 0

自身と同じフォルダとは、パソコンの中で、そのエクセルが置いてある場所の位置であり、その位置の情報を入手して使うということです。


①→その位置を文字列で表したものをパスと言います。その文字列を得ることです。
②エクセルファイル自身が、VBAで自分が置かれているパスを入手できると、便利という意味です。パスを入手できると、パソコンのフォルダのどこに置いても同じようなファイル操作のプログラムを書くことができます。
    • good
    • 0

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

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


おすすめ情報

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