
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については、ファイル操作上のファイル名の設定項目として使えないのでしょうか。
No.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" とダブルクーテーションも格納している訳ではないです。
コンピュータは、値を格納する際に<どこにどのように>が判らないと処理できないのです。
ダブルクーテーションは、単に、値を格納する箱のタイプを指示しているだけです。
一旦、格納した値を取り出す時は、中味だけでよいのでダブルクーテーションは不要です。
多分、この辺りの誤解が原因でしょう。
大変丁寧にご説明いただき疑問が氷解しました。
ご指摘のとおり Chr(34)は不要のようでした。
文字列はとにかく””と頭から決めてかかっていたのがいけませんでした。
ありがとうございました。
No.2
- 回答日時:
うん、手元ではChr(34)なしでないと動かなかった。
でも
本当にここであってる?
>C:\Documents and Settings\デスクトップ\URIAGE.xls
C:\Documents and Settings\ユーザー名\デスクトップ\URIAGE.xls
が正しいと思うんだけど
ご指摘のとおり Chr(34)は不要のようでした。
パス名については説明上短くしましたが、確かにユーザー名が入っていました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPでHashMap・配列の変数の値...
-
wsprintf関数の使い方について
-
Javaの問題なのですが、「3文字...
-
JSPでの計算結果表示
-
ダブルクォーテーションを含む...
-
javaのCSVデータ読込についてです
-
バイト配列からfloat型の数値を...
-
【Excel VBA】繰り返し処理がで...
-
MySQLのblob型の日本語文字列を...
-
matchesを否定文として使う方法...
-
任意の変数が任意の値になった...
-
直し方について教えて頂きたい...
-
java nビット目を読み取る
-
8桁整数を限りなく短い文字列に...
-
PSQLExceptionが発生する
-
結合した文字列をファイル名に...
-
Request.formの値の初期化
-
Stringクラスの変数の格納アド...
-
ArrayListの要素数の上限
-
JSPやサーブレットでSystem.out...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ArrayListの要素数の上限
-
JSPでの計算結果表示
-
javaのCSVデータ読込についてです
-
JSPでHashMap・配列の変数の値...
-
DateTimePickerに値を入れたい...
-
ダブルクォーテーションを含む...
-
matchesを否定文として使う方法...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
ResultSetの内部構造(Java)
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
JavaScriptの変数の値が消える!?
-
String型の値が大文字か小文字...
-
Request.formの値の初期化
-
実行シェルからCOBOLへパラメー...
-
VB6,論理演算子Orの使い方がわ...
-
DOSバッチで変数の値を変数名に...
-
char型での演算子
-
日付や時刻の"01"を" 1"に変換...
おすすめ情報