
No.11ベストアンサー
- 回答日時:
>では、なぜ私の質問のプログラムや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を行っておけば安全なので、
そのようにされるのがよいかもしれません。
この問題は、今すぐに結論を出さないで、中級者レベルになったとき、
再度考えてみると、良いかもしれません。
No.10
- 回答日時:
>以下のURLで、Set WSH=Nothingがなぜ付いているのでしょうか?
回答:
Set 〇〇 = XXXX
のようにして設定した〇〇は、それを使用しなくなったときに
Set 〇〇=Nothing
とするのが、作法とされています。
詳しくは下記を参照ください。
https://www.moug.net/tech/exvba/0150027.html
https://qiita.com/milky04/items/3dd47bc8b11ed88e …
No.8
- 回答日時:
>もし、マクロブックが2つ以上ある場合はどうすれば良いのでしょうか?教えて頂けると幸いです。
マクロブックがいくつあるかは、関係ありません。
A1.xlsm と A2.xlsmとマクロブックが2つあって、
A1.xlsmにsub sample1() があり
A2.xlsmにsub sample2() があり場合、
sample1でデスクトップのB.xlsxを開きたいなら、
sample1内にNo7のマクロを記述します。
sample2でデスクトップのB.xlsxを開きたいなら、
sample2内にNo7のマクロを記述します。
No.7
- 回答日時:
>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がオープンできます。
No.6
- 回答日時:
>マイドキュメントのパスの取得とデスクトップのパスの取得について教えて頂けると幸いです。
回答:下記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") & "\"
を行ってます。
上記の
①がデスクトップのパスを取得している箇所です。
②がマイドキュメントのパスを取得している箇所です。
No.4
- 回答日時:
>「自身と同じフォルダ」を利用するとはどういう事でしょうか?
回答:以下のようなブックが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"
の個所が、それに該当します。
>②これらを使うのも便利です。のこれらとは何でしょうか?
回答:マイドキュメントのパス、デスクトップのパスのことです。
No.3
- 回答日時:
「自身」については説明がありますね。
「パス」は「ファイルの住所」と書かれていますが、その後の説明を見るとフォルダパスのことのようです。ファイルシステム上のフォルダの場所を表す文字列です。たとえば、あなたのドキュメントフォルダはC:¥Users¥<ユーザ名>¥Documentsとかいう文字列です。
これらは「自身」のフォルダ、マイドキュメント、デスクトップです。ちゃんと読めばわかる筈。
しかし、なんかわかりにくい本です。やめた方がいいと思います。やりたいことが書いてあるWebページを検索して読んだ方がいいです。
No.2
- 回答日時:
自身と同じフォルダとは、パソコンの中で、そのエクセルが置いてある場所の位置であり、その位置の情報を入手して使うということです。
①→その位置を文字列で表したものをパスと言います。その文字列を得ることです。
②エクセルファイル自身が、VBAで自分が置かれているパスを入手できると、便利という意味です。パスを入手できると、パソコンのフォルダのどこに置いても同じようなファイル操作のプログラムを書くことができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excelVBAについて。
Excel(エクセル)
-
excelVBAについて。
Excel(エクセル)
-
excelVBAについて。
Excel(エクセル)
-
-
4
excelVBAについて。
Excel(エクセル)
-
5
excelVBAについて。
Excel(エクセル)
-
6
excelVBAについて。
Excel(エクセル)
-
7
excelVBAについて。
Excel(エクセル)
-
8
フィルターをかけた時の、別の列に書いてある数字の表に現れた数量のみを表す式を教えてください。
Excel(エクセル)
-
9
excelVBAについて。
Excel(エクセル)
-
10
excelVBAについて。
Excel(エクセル)
-
11
ExcelVBAについて。
Excel(エクセル)
-
12
excelVBAについて。
Excel(エクセル)
-
13
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
14
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
15
エクセル初心者です 用語とか良く分からないので簡単に説明していただけると幸いです 表を作っているので
Excel(エクセル)
-
16
Excelで合計を求めたいです
Excel(エクセル)
-
17
excelVBAについて。
Excel(エクセル)
-
18
excelVBAについて。
Excel(エクセル)
-
19
エクセル
Excel(エクセル)
-
20
編集者ってパソコンスキルどのくらい要りますか?お堅い学術雑誌などとします。 エクセルならどのレベルで
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
vba テキストボックスとリフト...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
【マクロ】【相談】Excelブック...
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
【マクロ】元データと同じお客...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
LibreOffice Clalc(またはエク...
-
【マクロ】【画像あり】❶ブック...
-
【関数】3つのセルの中で最新...
-
【関数】=EXACT(a1,b1) a1とb1...
-
セルにぴったし写真を挿入
-
Excelに貼ったXのURLのリンク...
-
【マクロ】【画像あり】4つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報
ThisWorkbook.Pathで、A.xlsmの格納されているフォルダが分かるので、A.xlsmがどこのフォルダに保存されているか分かるということですね?ちなみに、このプログラム片(ThisWorkbook.Path)は、マクロが使われているブックのパスを求めるのに使われるということでしょうか?教えて頂けると幸いです。
迅速な回答ありがとうございます!
所で、マイドキュメントのパスの取得とデスクトップのパスの取得について教えて頂けると幸いです。何か両者ともCreate〜となっているのですが。詳しく書いてほしければ、また、聞き返して頂けると幸いです。
CreateObject("WScript.Shell").SpecialFolders("Desktop") と、CreateObject("WScript.Shell").SpecialFolders("MyDocuments") でこれで、これを実行すると、どのような物をが表示されて、どういう時に、使われるのでしょうか?先ほどのパスの表記と全く違う感じですね。教えて頂けると幸いです。
B.xlsxがマイドキュメントの場合でも、このプログラムをDesktopを変えれば良いだけという事でしょうか?教えて頂けると幸いです。
すみません。以下のURLで、Set WSH=Nothingがなぜ付いているのでしょうか?教えて頂けると幸いです。
http://officetanaka.net/excel/vba/tips/tips107.htm
では、なぜ私の質問のプログラムやtatsumaru77様の挙げてくれたプログラムでは、なぜ、SETWSH=Nothingが出てこなかったのでしょうか?教えて頂けると幸いです。