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で質問しましょう!
似たような質問が見つかりました
- 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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
VBAでワークブックの名前を変数にして開かせる?
Excel(エクセル)
-
excelで複数セル値を組合わせてファイル名にする方法
Excel(エクセル)
-
-
4
Excel-vba 文字列と変数を連結して更に変数として扱いたい
その他(プログラミング・Web制作)
-
5
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
6
エクセルVBA Workbook変数に変数を使ったファイル名を格納したい
Visual Basic(VBA)
-
7
ExcelVBAでBookを開く時にファイル名の一部だけを指定で
Access(アクセス)
-
8
vbaでファイルを開くパス名に変数を使いたい
Visual Basic(VBA)
-
9
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
10
VBAでセル値からフォルダ名を取得するコードについて
Excel(エクセル)
-
11
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
日付を入力したセルをファイル名にして保存するには
Excel(エクセル)
-
14
VBA 半角スペースを入れるには...
その他(Microsoft Office)
-
15
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
16
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
ファイル名の一部削除について
XML
-
19
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
20
エクセルをPDFで保存し、ファイル名はA1セルを参照するVBAの記述を教えてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
ダブルクォーテーションを含む...
-
Stringクラスの変数の格納アド...
-
特定の文字列を複数抜き出した...
-
matchesを否定文として使う方法...
-
DateTimePickerに値を入れたい...
-
このプログラミング誰か教えて...
-
このプログラミング誰か教えて...
-
Javaの問題なのですが、「3文字...
-
String str = "a\\\\b\\\\c";
-
DOSバッチで変数の値を変数名に...
-
【struts】<logic:iterate>で出...
-
日付や時刻の"01"を" 1"に変換...
-
テキストボックスに入力された...
-
WinInet.dllを利用したHttpQuer...
-
Request.formの値の初期化
-
テキストファイルを読み込んで...
-
JavaScriptの変数の値が消える!?
-
web系システムのテストについて
-
PSQLExceptionが発生する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
javaのCSVデータ読込についてです
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
結合した文字列をファイル名に...
-
Evaluate()に文字列の形式の数...
-
C言語の変数(LSB)の合わせ込...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
char型での演算子
-
String str = "a\\\\b\\\\c";
-
Javaの問題なのですが、「3文字...
-
8桁整数を限りなく短い文字列に...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
excel vba 時間計算と条件分岐...
おすすめ情報