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.2
- 回答日時:
うん、手元ではChr(34)なしでないと動かなかった。
でも
本当にここであってる?
>C:\Documents and Settings\デスクトップ\URIAGE.xls
C:\Documents and Settings\ユーザー名\デスクトップ\URIAGE.xls
が正しいと思うんだけど
ご指摘のとおり Chr(34)は不要のようでした。
パス名については説明上短くしましたが、確かにユーザー名が入っていました。
ありがとうございました。
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)は不要のようでした。
文字列はとにかく””と頭から決めてかかっていたのがいけませんでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
VBAでワークブックの名前を変数にして開かせる?
Excel(エクセル)
-
excelで複数セル値を組合わせてファイル名にする方法
Excel(エクセル)
-
-
4
Excel-vba 文字列と変数を連結して更に変数として扱いたい
その他(プログラミング・Web制作)
-
5
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
6
エクセルVBA Workbook変数に変数を使ったファイル名を格納したい
Visual Basic(VBA)
-
7
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
8
vbaでファイルを開くパス名に変数を使いたい
Visual Basic(VBA)
-
9
VBAでセル値からフォルダ名を取得するコードについて
Excel(エクセル)
-
10
ExcelVBAでBookを開く時にファイル名の一部だけを指定で
Access(アクセス)
-
11
日付を入力したセルをファイル名にして保存するには
Excel(エクセル)
-
12
VBA 半角スペースを入れるには...
その他(Microsoft Office)
-
13
保存先のパスを変数に格納して使用する方法
Visual Basic(VBA)
-
14
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
15
ファイル名の一部削除について
XML
-
16
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
17
excel VBA 特定の文字列を含むフォルダを開く方法
Excel(エクセル)
-
18
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
ダブルクォーテーションを含む...
-
実行シェルからCOBOLへパラメー...
-
直し方について教えて頂きたい...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
テキストボックスの数値チェック
-
getParameterの値変更
-
char型での演算子
-
struts ActionFormについて
-
Evaluate()に文字列の形式の数...
-
matchesを否定文として使う方法...
-
Stringクラスの変数の格納アド...
-
プログラミング言語で変数って...
-
String型の値が大文字か小文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Stringクラスの変数の格納アド...
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
DOSバッチで変数の値を変数名に...
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
Javaの問題なのですが、「3文字...
-
matchesを否定文として使う方法...
-
8桁整数を限りなく短い文字列に...
-
JSPでの計算結果表示
-
指定した日付が何日前なのかを...
おすすめ情報