性格いい人が優勝

タイトルでは何をどうしたいのかわかりにくいと思うので、私がしたいことを以下に書きます。
-------------------------------
Dim A as String
A = "ThisWorkbook.path"
*
Debug.print A
-------------------------------
このコードを実行したときに、このブックの保存場所を示すPATHを表示したいです。
このようなことが可能なのか不可能なのか、もしできるのであればどのようなコードを書けばよいのか教えてください。よろしくお願いします。

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

  • 特定のファイルを複数の候補フォルダから探すようなコードを書いているのですが、ブックが保存されているフォルダ内を調べる必要がない場合も考えられるので、必要がある場合だけブックが保存されているフォルダのPATHが取得したいのです。

    現状、エクセルのSheet1のA1、A2、A3に検索したいフォルダのPATHが入力されています。
    その情報をもとに特定ファイルの検索を行います。
    このとき、ブックが保存されているフォルダ内を検索したい場合は"ThisWorkbook.path"をA1~A3のいずれかに入力します。
    VBAでは"ThisWorkbook.path"はエクセルのシートから文字列として受け取ります。その後、文字列の"ThisWorkbook.path"から例えば「C:\Work」のような結果を得たいのですが、文字列として扱うことしかできないというのが現状です。

      補足日時:2015/12/09 20:08
  • 特定のファイルを複数の候補フォルダから探すようなコードを書いているのですが、ブックが保存されているフォルダ内を調べる必要がない場合も考えられるので、必要がある場合だけブックが保存されているフォルダのPATHが取得したいのです。

    現状、エクセルのSheet1のA1、A2、A3に検索したいフォルダのPATHが入力されています。
    その情報をもとに特定ファイルの検索を行います。
    このとき、ブックが保存されているフォルダ内を検索したい場合は"ThisWorkbook.path"をA1~A3のいずれかに入力します。
    VBAでは"ThisWorkbook.path"はエクセルのシートから文字列として受け取ります。その後、文字列の"ThisWorkbook.path"から例えば「C:\Work」のような結果を得たいのですが、文字列として扱うことしかできないというのが現状です。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/12/09 20:09

A 回答 (5件)

以下のようなことでしょうか?


-------------------------------
Dim A As String
A = "ThisWorkbook.path"
If A = "ThisWorkbook.path" Then
A = ThisWorkbook.path
Else
'Aのパス名をそのまま使用
End If
Debug.Print A
---------------------------
Aの内容が"ThisWorkbook.path"なら、そのbookのパスを求め、
そうでないなら、Aをそのまま指定されたパスとして使います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
一応、そのような手段を使ってコードを書く方法は思いついており、現状はおおよそそのようなコードになっております。
今回の質問の意図としては、どのように解決するかというよりは、技術的に可能なのかが気になるという側面が強いです。

お礼日時:2015/12/09 21:00

こんばんは。



>そのような手段を使ってコードを書く方法は思いついており
#3さんの書いた方法は思いつかないですね。(^^;
とても、私には、ユニークだと思いましたが……。

なお、私が、#2で書いた内容は、まったく次元に違うことです。文字列をVBAのコマンドラインに書き込むことです。

>特定のファイルを複数の候補フォルダから探すようなコードを書いているのですが、

そこには、何かの誤解が混じっているように思います。それが、元のご質問の内容に繋がるなら、ロジックそのものが違っています。そのような所には、ほぼ、ThisWorkbook.Path などは出てきません。ThisWorkbookは、特定のファイルではなく、現在、マクロを動かしているブックのことです。「ほぼ」と言うのは、それは、一種のマジックナンバーだからです。それは、定数のようで定数でないからです。つまり、該当することもたまにはあるということです。

かつては、FileSearch というコマンドがありましたが、今は、ありませんので、自分で組み込むしかありません。

>技術的に可能なのかが気になるという側面が強いです。

私としては、可能か可能でないかというような話はついていけませんが、ファイルを探して、そのフォルダーを出すぐらいなら、VBAですと、だいたいは、Dir 関数を使うことが多いのではないかと思います。

http://officetanaka.net/excel/vba/tips/tips36.htm

ここにも、FileSystemObject を使った書き方がありますが、もう少しこれは詰めないと、今回の要件とは少し外れています。例えば、VBA から、command line(Shell) で、Path を作っておいて、Where コマンドで探すという方法もあります。子プロセッサですから、Path は、テンポラリーでしかありません。それが残ってトラブルを起こすこともありません。

http://www.atmarkit.co.jp/fwin2k/win2ktips/1151w …

私としては、このぐらいまでです。
    • good
    • 0
この回答へのお礼

ThisWorkbook.pathをコードに組み込みたい理由は、ブックが保管されているフォルダに例えば"Work"のような作業用のサブフォルダをつくり、そこに保管するのを前提とした上で、必要であれば利用者が任意で作業フォルダを選択できるようなオプションをつけたかったからです。
とにかく、少なくとも私の技量では難しいと判断しましたので、自分が考えていた仕様は少し変えることにしました。何度も回答していただき、ありがとうございました。

お礼日時:2015/12/10 17:25

#3です。


>一応、そのような手段を使ってコードを書く方法は思いついており、現状はおおよそそのようなコードになっております。
>今回の質問の意図としては、どのように解決するかというよりは、技術的に可能なのかが気になるという側面が強いです。
実際に、#3のコードを実行すると、私の環境では、
c:\goo
が表示されました。(c:\gooにexcelファイルが保存されています)
ですので、技術的に可能です。
あなたも、実際に簡単なテストプログラムを作って試されれば、納得できるかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
tatsu99さんがおっしゃる方法は、文字列をエクセルの関数でいうINDIRECTのように、直接PATHに変換するのではなく(どういう表現すればいいのかわかりません。間違ってたらすみません)、IFで判定してから変数にPATHを代入しなおしてる感じですよね。
とにかく、自分の技量では実装不可能だと判断したので、ブックが保存されているフォルダは必ず確認するようなコードにしました。
お手数をおかけしました。

お礼日時:2015/12/10 17:19

こんばんは。



>タイトルでは何をどうしたいのかわかりにくい
文字列を変換して、コマンドにするというのは、禁断とは言わないまでも、ふだんはしませんね。
可能といえば可能なのですが、なぜ必要なのかご説明くださいませんか?

#1さんの回答で十分なはずなのですが、もしかしたら、他のExcelのVBEにプログラムを書くということでしょうか。もし、そうなら、アドインにしたほうがよいです。
この回答への補足あり
    • good
    • 0

ダブルコーテーションをはずしてください。


A = ThisWorkbook.path
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私の質問の仕方が悪く、回答がしづらくて申し訳ないです。

お礼日時:2015/12/09 21:00

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