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

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

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

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

Q&A

解決済

2回答

809閲覧

文字列(fullpathfileName)のファイルを一つ上のフォルダに移動させたい

ma2hiro

総合スコア159

VBA

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

0グッド

0クリップ

投稿2021/12/16 08:08

年末の引き継ぎのため度々お問い合わせしてもう本当に申し訳ございません……

今現在VBAで
String fullpathfileName を一つ上のフォルダに移動させるプログラムを書いております……

vba

1 Dim jinenndoFile As String, copyDir As String 2 jinenndoFile = range("B2").Value 3 copyDir = range("B3").Value & "\" 4 5 Dim fso As Object 6 Set fso = New FileSystemObject ' インスタンス化 7 Dim nextKonnenndoFilename, nextJinendoFilename As String 8 '次年度の方が同じファイル名でありそうだから先にする…… 9 Dim f As File 10 Dim dirname, dirnameMoto, strtpm2 As String 11 nextJinendoFilename = strKiPlusOne(jinenndoFile) 12 Set f = fso.GetFile(jinenndoFile) 13 f.Name = nextJinendoFilename 'コレでファイル名変更らしいhttps://www.tipsfound.com/vba/18011 14 dirname = fso.GetParentFolderName(jinenndoFile) 15 dirnameMoto = Left(dirname, InStrRev(dirname, "\")) 16 Debug.Print jinenndoFile, dirnameMoto 17 strtpm2 =dirnameMoto."\期+1と式コピー前\".nextJinendoFilename 18 fso.MoveFile strtpm2, dirnameMoto

と今B2のjinenndoFileの期をstrKiPlusOneという関数で
+1したファイル名をnextJinendoFilename のフルパスにしております……

それでそのファイルが格納されているフォルダ \期+1と式コピー前
の一つ上に移動させたく上記のように実装してしまったのですが
上記のように凄い不格好なのです……

なんかフルパスで持っているファイルを
一つ上のフォルダに移動させるVBAの関数は無いのでしょうか?
上記ソースでは\期+1と式コピー前\とソースに書いてあるのが不格好過ぎて自分が情けないのです……

度々申し訳ないのですが何か情報をお持ちな方はコメント頂けますと嬉しく思います。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/16 09:07

結局どうしたいのかよく判らないのですが。 不格好でも、想定通り動いているのなら問題ないのでは?
jinoji

2021/12/16 09:35

タイトルだけ見たら f.Move f.ParentFolder.ParentFolder.Path & "\" 的なことがしたいのかと思ったけど、コードを見てわからなくなりました。
ma2hiro

2021/12/20 00:18

説明不足大変申し訳ございません。 fullpathfilename に ”\\hoge\fuga\file.xlsx”と入っている時に そのfile.xlsxを\\hoge\file.xlsx に移動させたいと思っていて fugaが不明の場合そのような命令があれば良いと思っているのです…… そのような命令はVBAには無いのでしょうか?
ma2hiro

2021/12/20 00:47

と書いてjinoji様の f.Move f.ParentFolder.ParentFolder.Path & "\" が出来そうな気がするので見てみます……
退会済みユーザー

退会済みユーザー

2021/12/20 03:20

都合よく1命令で出来るものが用意されていない事なんて幾らでもあるので、無ければ複数のやり方を組み合わせたり、自分で関数を作ればいいだけです。 自分で考えないと、何時までたっても応用力が身に付かないですよ。
ma2hiro

2021/12/21 00:09

radian様 ご忠告痛み入ります。 今回は 1命令で 上のフォルダ を取得出来そうな気がしたのですが f.ParentFolder.ParentFolder.Path & "\"  ↑親の    ↑親の   ↑パス で出来ますね…… 失礼いたしました。
guest

回答2

0

具体的にはたとえば以下のようなフルパスがあったとき
D:\aaaa\bbbb\cccc\dddd.txt
これを↓
D:\aaaa\bbbb\eeee.txt
(dddd.txtを bbbbの直下に移動し
ファイル名 dddd.txt を eeee.txt にrename)

のようにしたいということでしょうか?

上記でよければ

  • FileSystemObjectを使う必要はありません
  • 「自分の1つ上のフォルダパス」は、後ろから数えて2つ目の""の位置なので
    instrRevを2回繰り返せば切り出せます。
  • VBAにファイル移動のコマンドはありませんが、コピーと削除のコマンドは
    あります。コピーの後、コピー元を削除すれば移動になります。
Dim fullPathFileName As String Dim dstPath As String Dim ix As Long fullPathFileName = "Z:\aaaa\bbbb\cccc\dddd.txt" ix = InStrRev(fullPathFileName, "\") ' 1つ目の\ ix = InStrRev(fullPathFileName, "\", ix - 1) ' 2つ目の\ dstPath = Left$(fullPathFileName, ix) ' 一つ上のパスの切り出し FileCopy fullPathFileName, dstPath & "eeee.txt" ' ファイルコピー、コピー先のファイル名は変更 Kill fullPathFileName ' コピー元の削除

注意:上記コードは「¥」が「/」で表現されていますのでご注意ください。

投稿2021/12/20 01:21

h.horikoshi

総合スコア505

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

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

ma2hiro

2021/12/20 01:50

FileSystemObject を使用しない方法のやり方ご教授頂き感謝いたします。 今回はファイル名変更などしたいのでFileSystemObjectは使用するのは確定なのですが 参考にさせて頂きます。 本当にありがとうございました。
guest

0

自己解決

jinoji様からツッコミがありました

Set f = fso.GetFile(jinenndoFile) f.Move f.ParentFolder.ParentFolder.Path & "\"

で解決しました……

本当に基本的な質問失礼しました。

投稿2021/12/20 01:49

ma2hiro

総合スコア159

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問