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

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

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

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

Q&A

解決済

1回答

1483閲覧

vbaでファイル移動

1008

総合スコア5

VBA

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

0グッド

0クリップ

投稿2019/10/08 08:29

編集2019/10/08 10:10

前提・実現したいこと
「ファイル名と同じフォルダ名に移動 」

ここに質問の内容を詳しく書いてください。
VBAでファイル移動システムを作っています。
ファイル名と移動先のフォルダ名が同じだった場合、それぞれ移動(複数)できる機能を実装中に以下のエラーメッセージが発生しました。
※説明不足で申し訳ございません。追記させていただきます。
・移動したいファイルはpsdデータです。

資料1.psd こちらを 資料1フォルダに格納させたいです。
同様に
資料2.psd こちらを 資料2フォルダに格納
… 
こちらを繰り返します
拡張子があると反応しなかったので、一度拡張子(.psd)を外した状態の名前を抽出して
そちらを使ってmove.File で移動できればと思いました。

発生している問題・エラーメッセージ

Functionまたは変数が必要です。

該当のソースコード

Function 拡張子を取り除いたファイル移動() As FileSystemObject Dim myFileFullName As String Dim myFilePath As String Dim myFileName As String Dim myFileNameCut As String Dim fso As New FileSystemObject Dim f As file myFileFullName = ThisWorkbook.PATH & "*.psd" If myFileFullName = "*.psd" Then Exit Function myFileName = Dir(myFileFullName) Do While myFileName <> "" myFilePath = Left(myFileFullName _ , Len(myFileFullName) - Len(myFileName)) If InStr(myFileName, ".") = 0 Then myFileNameCut = myFileName Else myFileNameCut = Left(myFileName _ , InStr(myFileName, ".") - 1) Debug.Print "選択されたファイル" & myFileFullName _ & vbCr & "ファイル名:" & myFileName _ & vbCr & "パス:" & myFilePath _ & vbCr & "拡張子を除いたファイル名:" & myFileNameCut If Dir(myFileName) <> "" Then fso.MoveFile myFileFullName, ThisWorkbook.PATH & "\" & myFileNameCut Else: myFileFullName = myFilePath & "\" & myFileNameCut & ".psd" End If For Each f In fso.MoveFile(myFileFullName, ThisWorkbook.PATH & "\" & myFileNameCut)    Next   End If myFileName = Dir() Loop Set fso = Nothing End Function

試したこと

プロシージャを分けてCallで呼び出そうとしてみましたが、
「引数の省略ができません」と出ました。
(自分が理解できてない同じところで止まってます。。)
それと無限ループにもなってしまいました。

補足情報(FW/ツールのバージョンなど)

VBAまだよくわかってないので、コードは引用させてもらっています
SubとFunctionの使い分け、filesystemobjectを2種類同時に使う際に
皆さんどのようにされてますでしょうか。初歩的ですがCallで呼び出す場合の引数の書き方なども教えていただけると助かります。

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

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

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

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

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

Zuishin

2019/10/08 08:31

VBA でする必要はありますか?
otn

2019/10/08 08:33

とりあえず、インデントを正しくして、 無意味な空行を削除しましょう。
1008

2019/10/08 08:35

ご返信いただきありがとうございます。 申し訳ございません、現在他の言語がわからないので、できればvba内でできると助かります。スクリプト使った方が早ければそちらも考えます
Zuishin

2019/10/08 08:45

VBA もよくわかっていないということなので、未知の言語でも結局同じことなのではないかと思います。やろうとしていることが説明からもコードからもよくわからないので、日本語の説明を充実させて、どんなファイルをどのように動かすかの具体例を書けば回答が付きやすくなるのではないでしょうか。
1008

2019/10/08 09:12

ご意見いただきありがとうございます。 稚拙な文章で大変お見苦しくなってしまい申し訳ございません。 少し追記させていただきました、ファイルと同じ名前のフォルダに移動したいという内容でした。
Zuishin

2019/10/08 09:15

多分、例を挙げた方が早いと思います。どういうファイルがあり、どういうフォルダがあり、その中のどれを選択して実行すればどうなるかを、抽象的な言葉ではなく、実際のファイル名(例)を作って書けば伝わると思います。
meg_

2019/10/08 10:50 編集

エラーはどこで起きているのですか? 【追記】 コードを読んだところ色々と問題ありそうですね。。。
meg_

2019/10/08 11:04

psdファイルがマクロブックと同じフォルダにある前提は良いとして、移動先のフォルダはどこにあるのでしょうか? psdファイルがあるPC内のどこかにあるという前提でしょうか?(存在しない場合もある??)
1008

2019/10/08 12:14 編集

移動先はブックと同じフォルダ内の、直下にあるフォルダです。存在しない場合もあります。 エラーは「functionまたは変数が必要です」と出ました。 fso.MoveFileの部分からできてないのかと思いました。理解ができてなく申し訳ございません。。
tatsu99

2019/10/08 13:14

移動先のフォルダが存在しない場合は、まず、移動先のフォルダを作成し、そのあとで、そのフォルダへ移動する必要がありますが、そのようにしたいということでしょうか?
1008

2019/10/09 06:06

移動先フォルダは既にある状態にします。 フォルダは事前に準備するので大丈夫です。 説明わかりにくくなってしまい申し訳ございません。
guest

回答1

0

ベストアンサー

下記でどうでしょうか?

vba

1Option Explicit 2 3Sub a() 4 5 Dim fso As Object 6 Dim f As Object 7 Dim fileList As Collection 8 Dim temp As String 9 Dim i As Integer 10 Dim a As Variant 11 12 13 temp = Dir(ThisWorkbook.Path & "*.psd") 14 Set fileList = New Collection 15 Do While temp <> "" 16 fileList.Add ThisWorkbook.Path & "\" & temp 17 temp = Dir() 18 Loop 19 20 Set fso = CreateObject("Scripting.FileSystemObject") 21 22 For i = 1 To fileList.Count 23 If Dir(ThisWorkbook.Path & "\" & fso.GetBaseName(fileList(i)), vbDirectory) <> "" Then 24 Name fileList(i) As ThisWorkbook.Path & "\" & fso.GetBaseName(fileList(i)) & "\" & Dir(fileList(i)) 25 End If 26 Next i 27 28 Set fso = Nothing 29 30End Sub 31

投稿2019/10/08 12:56

meg_

総合スコア10579

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

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

1008

2019/10/09 06:06

とてもきれいにまとめていただきありがとうございました。 また、説明がわかりにくく申し訳ございませんでした。 上記でやりたかったことができそうです。素晴らしいご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問