プロが教えるわが家の防犯対策術!

Excel上に入力されているパス名とファイル名のデータを組み合わせて、
様々なファイルを開いたりコピーしたりするVBAのコードを作ろうとしています。

仮にシート上のA1セルに、C:\Documents and Settings\デスクトップ というパス名
A2セルに URIAGE.xls というファイル名が入力されていたとして、
A1の文字列データとB1の文字列データを結合する場合、

Sub FileSousa()
 Dim a As String
 Dim b As String
 Dim c As String
 a = Cells(1, "A").Value
 b = Cells(2, "A").Value
 c = Chr(34) & a & "\" & b & Chr(34)
 Range("A3") = c

としてみると、確かにA3セルには、"C:\Documents and Settings\デスクトップ\URIAGE.xls"
と出力され、文字列が結合されたことがわかるのですが、その変数cのデータを使って

 Workbooks.Open Filename:=c

として、そのファイルを開こうとすると、ファイル名が見つからないとしてエラーになります。

ファイルはデスクトップ上の確かにその名前で存在しており、直接
Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\URIAGE.xls"
とすると開きます。

" を Chr(34)によって入力したのがいけないのでしょうか、
Workbooks.Open Filename:=××× には、変数を置いてはいけないのでしょうか。

そもそも文字列の結合は、"あ" & "い" → "あい" となるのが基本だと思うのですが、
a="あ"、b="い"、c=a&b → c="あい"として結合した変数cについては、ファイル操作上のファイル名の設定項目として使えないのでしょうか。

A 回答 (3件)

結論を先に述べれば、chr(34) 付加しているのが実行されない原因です。



例えば、

Workbooks.Open Filename:="C:\temp\book1.xls"

は実行されますが、

Workbooks.Open Filename:="""C:\temp\book1.xls"""

は '"C:\temp\book1.xls"' は見つからないとのエラーが出ます。
つまり、この場合、<">がパスとファイル名の一部として認識されています。

ところで、""" は chr(34) の表記の別形式です。
このことは、イミディエイトウィンドウで確認することができます。

[イミディエイトウィンドウ]
strA = Chr(34)
? strA
"
strA = """
? strA
"
|C:\temp\book11.xls|
+---------+

|"C:\temp\book11.xls"|
+----------+

変数は、C:\temp\book11.xls のみを格納しています。
けっして、"C:\temp\book11.xls" とダブルクーテーションも格納している訳ではないです。
コンピュータは、値を格納する際に<どこにどのように>が判らないと処理できないのです。
ダブルクーテーションは、単に、値を格納する箱のタイプを指示しているだけです。
一旦、格納した値を取り出す時は、中味だけでよいのでダブルクーテーションは不要です。

多分、この辺りの誤解が原因でしょう。
    • good
    • 0
この回答へのお礼

大変丁寧にご説明いただき疑問が氷解しました。
ご指摘のとおり Chr(34)は不要のようでした。
文字列はとにかく””と頭から決めてかかっていたのがいけませんでした。
ありがとうございました。

お礼日時:2006/12/23 21:59

うん、手元ではChr(34)なしでないと動かなかった。


でも
本当にここであってる?
>C:\Documents and Settings\デスクトップ\URIAGE.xls

C:\Documents and Settings\ユーザー名\デスクトップ\URIAGE.xls

が正しいと思うんだけど
    • good
    • 0
この回答へのお礼

ご指摘のとおり Chr(34)は不要のようでした。
パス名については説明上短くしましたが、確かにユーザー名が入っていました。
ありがとうございました。

お礼日時:2006/12/23 21:56

外しているかもしれませんが、


文字列を表すために「"」を使用しているだけなので、変数を使用した場合は、「"」(chr(34))はいらないのではないでしょうか?
「"」でくくった文字列を代入しても変数の中には「"」は含まれませんよね。

この回答への補足

ご指摘のとおり、「"」(chr(34))は不要のようでした。ありがとうございました。

補足日時:2006/12/23 21:53
    • good
    • 0

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

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


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