質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

4948閲覧

Dir関数でファイル名取得が出来ない

ma2hiro

総合スコア159

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/11/17 07:03

編集2021/11/17 07:08

本当に度々失礼いたします。

今現在 excel上のB1、B2に指定のファイルを
B3で指定されたフォルダにコピーしようとしております。

vba

1Option Explicit 2 3'B1とB2から次年度、当年度のデータを作成する。 4Sub ボタン1_Click() 5 Dim strTmp, copyDest, konnnenndoFile, jinenndoFile, copyDir As String 6 Dim ret As Long 7 8 konnnenndoFile = Range("B1").Value 9 jinenndoFile = Range("B2").Value 10 copyDir = Range("B3").Value 11 12 'B1の当年度 のデータを読込 コピーする。 13 strTmp = Dir(konnnenndoFile) 14 copyDest = copyDir & strTmp 15 FileCopy konnnenndoFile, copyDest 16End Sub 17

上記のソースにて
konnnenndoFile = Range("B1").Value
と入れていてそのファイルはあるのは確実なのですが
(excelのB1をクリックして開くので)
strTmp = Dir(konnnenndoFile)
にてstrTmp="" なのです……
・Dir関数の使い方が不味いのでしょうか?
・変数の指定方法が不味いのでしょうか?
・フォルダとファイル名が長すぎると不味いのでしょうか?(半角190文字です。)

グーグルさんで調べても不明だったため本当に申し訳ないのですが
何か情報をお持ちな方はコメント頂けますと嬉しく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

D0NKAMA

2021/11/17 07:15

Dirの()の中はファイル名ではなくファイルのパスをいれるのですが、"B1"にはファイルのパスが入っているっということでよろしいですか?
ma2hiro

2021/11/17 07:20

1T2R3M4様 リファレンス読みましたが理解できなかったのです。(現在トラブルの原因究明が出来ず) 申し訳ございません。 D0NKAMA様 はい。ファイルのフルパスが入っております。 \\192.168.1.11\gyoumu\200_事業\★事業実績データ\事業実績自動化\テストフォルダ\\211112_10月末予定●7期社完工高と利益(2期以降)%20-%20コレが元.xlsx このようなデータがB1にははいっております。
bebebe_

2021/11/17 07:47 編集

一度コピー元のファイルと同じ場所でVBAが実行できるようにして Debug.Print ThisWorkbook.path なりを実行してみて表示されるとパスと一致していますか? また今回の問題とは関係ないと思いますがその宣言だとstrTmp, copyDest, konnnenndoFile, jinenndoFileはバリアント型になっています。
退会済みユーザー

退会済みユーザー

2021/11/18 01:11 編集

hatena19さんは原因の説明もしていて、既にFileSystemObjectの解説記事のリンクも貼ってるのに、後出しでソースだけ貼り付けているjinojiさんがベストアンサーって、さすがに選び方に問題がありすぎませんか。選んだ理由をお聞かせ願えますか?
ma2hiro

2021/11/18 05:59 編集

radian様 ご指摘ごもっともです…… Hatena19様大変失礼しました。 ご紹介して頂いたURLを参考にしていて うんうん唸っていた際に jinojiさんの直ソースを見て実装出来たので思わずBAにしてしまいました。
guest

回答2

0

ベストアンサー

Dir関数には、パス名の長さが256バイトまでという制限がありますが、それを超えてませんか。
ファイル名が半角190文字とのことですが、提示のフルパスには全角文字も含まれています。
全角文字は2バイトになります。それで計算して超えてないでしょうか。
また、UNICODE文字を含むファイル名も扱えません。

上記の点に引っ掛かっているなら、FileSystemObjectオブジェクトを使ってコピーすることを検討してください。

Dir関数の制限について|VBA技術解説

ファイルシステムオブジェクト(FileSystemObject)|VBA入門

投稿2021/11/17 08:01

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2021/11/17 08:37 編集

hatena19様 コメントありがとうございます。 >全角文字は2バイトになります。それで計算して超えてないでしょうか。 はい。私の使用しているテキストエディターでは全角は二文字としてカウントするので それで191文字なので超えておりません…… 念の為Cの直下に持ってきても動作しませんでしたが ファイル名を短くしたらDirが上手く行きました…… 211012_10月末暫予定●58期あああああああと利益(53期以降) - コレが元.xlsx ↓ 211012_10月末暫予定●(53期以降)コレが元.xlsx としたら上手く行ったのでファイル名そのものが長すぎた模様です…… Dirでのファイル名の長さの制限のドキュメントが見つけられませんでしたが 試行錯誤の結果 Dirの問題は解決しました。 Dirでのファイル名の長さの制限のドキュメントを探し中です。 FileCopyが上手くいかないです…… B3のコピー先フォルダが 私ではアクセス出来るのですが VBAのFileCopyではアクセス出来ない模様です…… 新規で質問立てるのは忍びないので ご紹介して頂いた https://excel-ubara.com/excelvba1/EXCELVBA419.html を見て実装してみようと思います。 本当にありがとうございました。
guest

0

VBA

1Sub sample() 2 Dim konnnenndoFile As String, jinenndoFile As String, copyDir As String 3 4 konnnenndoFile = Range("B1").Value 5 jinenndoFile = Range("B2").Value 6 copyDir = Range("B3").Value & "\" 7 8 With New FileSystemObject 9 If .FileExists(konnnenndoFile) And .FileExists(jinenndoFile) And .FolderExists(copyDir) Then 10 .GetFile(konnnenndoFile).Copy copyDir 11 .GetFile(jinenndoFile).Copy copyDir 12 End If 13 End With 14End Sub

投稿2021/11/17 10:21

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2021/11/18 00:25 編集

jinoji様 コメント本当にありがとうございます。 ' With New FileSystemObject ではなくて With CreateObject("Scripting.FileSystemObject") としたら出来ました。 [ファイルシステムオブジェクト(FileSystemObject)|VBA入門](https://excel-ubara.com/excelvba1/EXCELVBA419.html) には 参照設定>「ツール」→「参照設定」に、「Microsoft Scripting Runtime」にチェックを付ける と表記してあるのですがそちらはやってなく Microsoft Excel 16.0 Object Library と Microsoft Office 16.0 Object Library にはチェックが入っているので そこが原因だと思っております……(そこら辺の知識が疎いのですが参考文献見つからないのです) 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問