- ベストアンサー
結合した文字列をファイル名に使えない
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については、ファイル操作上のファイル名の設定項目として使えないのでしょうか。
- みんなの回答 (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" とダブルクーテーションも格納している訳ではないです。 コンピュータは、値を格納する際に<どこにどのように>が判らないと処理できないのです。 ダブルクーテーションは、単に、値を格納する箱のタイプを指示しているだけです。 一旦、格納した値を取り出す時は、中味だけでよいのでダブルクーテーションは不要です。 多分、この辺りの誤解が原因でしょう。
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
うん、手元ではChr(34)なしでないと動かなかった。 でも 本当にここであってる? >C:\Documents and Settings\デスクトップ\URIAGE.xls C:\Documents and Settings\ユーザー名\デスクトップ\URIAGE.xls が正しいと思うんだけど
お礼
ご指摘のとおり Chr(34)は不要のようでした。 パス名については説明上短くしましたが、確かにユーザー名が入っていました。 ありがとうございました。
- edomin
- ベストアンサー率32% (327/1003)
外しているかもしれませんが、 文字列を表すために「"」を使用しているだけなので、変数を使用した場合は、「"」(chr(34))はいらないのではないでしょうか? 「"」でくくった文字列を代入しても変数の中には「"」は含まれませんよね。
補足
ご指摘のとおり、「"」(chr(34))は不要のようでした。ありがとうございました。
お礼
大変丁寧にご説明いただき疑問が氷解しました。 ご指摘のとおり Chr(34)は不要のようでした。 文字列はとにかく””と頭から決めてかかっていたのがいけませんでした。 ありがとうございました。