
パワークエリでフォルダにある複数ファイルのデータ結合をしたいのですが、
パワークエリですとシート名が異なるデータの一括結合はできず困ってます。
こちらでフォルダにあるシート名を一括変更するマクロが記載されていましたので、
これだ!と思い
そちらを使わせていただいたのですが自宅のPCでは正常に変更できるものの、
会社のPCではエラーが発生して変更ができませんでした。
下記のマクロの 5行目 myfile = dir(mypath & "*.xls*") でエラーとなります。
コピペをして使いましたので入力間違いではないと思います。
原因はなんでしょうか?ほかに何か良い方法はありますでしょうか?
作業用のブックを一つ用意する
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける
sub macro1()
dim myPath as string
dim myFile as string
mypath = thisworkbook.path & "\"
myfile = dir(mypath & "*.xls*")
application.screenupdating = false
do until myfile = ""
if myfile <> thisworkbook.name then
workbooks.open filename:=mypath & myfile
activeworkbook.worksheets(1).name = "sheet1"
activeworkbook.close savechanges:=true
end if
myfile = dir()
loop
application.screenupdating = true
end sub
ファイルメニューから終了してエクセルに戻る
ブックを,100個のブックが保存してある同じフォルダに保存する
ALT+F8を押してマクロを実行する。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
こんばんは
>ご迷惑をおかけして申し訳ありません。
そのような事はありませんので気になさらずに・・
著作者の方(黒い箱の中 黒箱様)から返信がありましたので 追記しておきます
当スレッドの回答#5及び関連する記事については、コード本体の掲載が無いことなどから、配慮を頂きました
> 6行目のOneDriveUrlToLocalPathで配列がありませんとのエラーが
配列に関するコードは無くFunctionにおいても あくまで文字列型を引数としています(戻り値も文字列型)
アドレスを配列にして 後の配列ループで処理をされたいと言う事であれば
配列を作成する時に1つずつファンクションに値を渡し戻り値を配列に格納するようにします
調べられるとの事なので健闘を祈ります
No.6
- 回答日時:
#5です
すみません補足追記します。
ご質問の補足コメントにあるサイトの中にある参考リンクサイトの
FunctionコードはCopyrightが明記されライセンス宣言GPL-3.0を掲示されています
>自力では書き換えられず。
#5にも書きましたが、使用にあたっては当該サイトの規約を厳守してください
Function名を変えずに回答しましたので、Function呼び出し方法の例として回答した事を当該サイトへ報告しました。
(著作者の意図しない普及に抵触する恐れがある為)
Qchan1962 さん
いろいろ有難うございます。
>#5にも書きましたが、使用にあたっては当該サイトの規約を厳守してくだ>さい
>Function名を変えずに回答しましたので、Function呼び出し方法の例とし>て回答した事を当該サイトへ報告しました。
>(著作者の意図しない普及に抵触する恐れがある為)
ご迷惑をおかけして申し訳ありません。
承知いたしました。
#5 のコードを動かしたら 6行目のOneDriveUrlToLocalPathで
配列がありませんとのエラーが。
Function の理解不足ですので、これから調べてみようと思います。
ご丁寧に何度も教えていただき、ありがとうございます。
No.5
- 回答日時:
こんばんは
行きついたサイトのFunctionを使用する場合、#3のコードをどうすれば良いかと言う事でしょうか?
パスを使用(取得)する部分でFunctionに渡せば良い事になりますので
Sub Sample()
Dim f As Object
With CreateObject("Scripting.FileSystemObject")
Application.ScreenUpdating = False
On Error Resume Next
For Each f In .GetFolder(OneDriveUrlToLocalPath(ThisWorkbook.Path)).Files
If f.Name <> ThisWorkbook.Name And .GetExtensionName(f.Name) Like "xls*" Then
With Workbooks.Open(Filename:=OneDriveUrlToLocalPath(f.Path))
.Worksheets(1).Name = "sheet1"
.Close savechanges:=True
End With
End If
Next f
Application.ScreenUpdating = True
End With
End Sub
かな?
上手くいかない(何も変化がない)場合は、On Error Resume Nextをコメントにしてエラーを(F8実行で)確認してください。
同期している事が条件のようですね。私はOneDriveを使っていませんので試していません
参考サイトを評価することは出来ませんので、Functionの使用にあたっては
参考サイトの規約に従ってくださいね
No.4
- 回答日時:
こんばんは。
うろ覚えですが、OneDrive に保存されたファイルだと
ThisWorkbook.Path
の様な Path プロパティーが https://~ の様に URL で返る場合があると記憶しています。
私自身は OneDrive を利用していないので詳しくありませんが、URL が返ったとすれば、Dir 関数や Scripting.FileSystemObject ではエラーになりそうですね。
この時 URL となってしまったパスを ローカル OneDrive フォルダへのパスに変換してあげれば良いのですが、ちょうど同じ様な内容の記事がありましたので、リンクを貼っておきます。
https://tsurutoro.com/vba-trouble/
KenKen_SPさん
ありがとうございます!
確かに、 https://~ の様に URL になってました。
なるほど。これが原因でエラーになっていたのですね。
原因がわかってちょっとすっきりです。
https://tsurutoro.com/vba-trouble/ 調べていただいた記事と
https://kuroihako.com/vba/onedriveurltolocalpath/
こちらを参考に、ちょっと頑張ってみます。
No.3
- 回答日時:
#1です
一応可能性を書きましたが・・
使い捨ての加工用VBAで且つ、ご自身で色々探して理解されているようですので #1の内容を前提にコードを書きました
(おっしゃるように問題がネットワークドライブなどの場合はセキュリティ的な問題もあるかも知れませんので環境で(デスクトップなどで)対応してください)
>52 ファイル名または番号が不正です…と出ます
Dir関数で取得できない文字列名などの問題を対策しています
多分エラーは出ないと思うのですが・・パスに問題があると出るかも
同名シート対策(やっつけ)
On Error Resume Next はエラーがあった場合飛ばして次に進みます
(アバウトに表現するとエラーのあるコード行を処理しないと言う事です)
Sub Sample()
Dim f As Object
With CreateObject("Scripting.FileSystemObject")
Application.ScreenUpdating = False
For Each f In .GetFolder(ThisWorkbook.Path).Files
If f.Name <> ThisWorkbook.Name And .GetExtensionName(f.Name) Like "xls*" Then
On Error Resume Next
With Workbooks.Open(Filename:=f.Path)
.Worksheets(1).Name = "sheet1"
.Close savechanges:=True
End With
End If
Next f
Application.ScreenUpdating = True
End With
End Sub
Dir関数でパスを取得するのに対しScripting.FileSystemObjectでフォルダ内のオブジェクトを取得しています
Dir関数より処理速度が少し遅いですが100ファイル位では問題ないと思います
メイン処理はそのままですので説明は割愛します
試す場合は、コピーファイルなどを用意して自己責任で行ってください
(一応、ローカルで検証しましたがダメでしたら捨ててください)
Qchan1962さん
ご親切にいろいろ考えて下さりありがとうございます。
先ほど、帰宅して早速書いて頂いたマクロを動かしてみましたが、
やはり5行目の
For Each f In .GetFolder(ThisWorkbook.Path).Files のところで
76 パスが見つかりません
となってしまいます。
やはりOneDriveがネックなのでしょうかね。
No.1
- 回答日時:
こんばんは、
手順は間違っていないと思いますし自宅のPCでは正常・・
バージョンなどの依存コードは無い様な・・・
フォルダはローカルにあるものですよね?デスクトップとか・・
また、フォルダ名やファイル名に依存文字(UNICODE)㉑のような名前を付けていませんか?
エラー番号(内容)は、何ですか?
ちなみに保存せずに実行するとthisworkbook.pathは取得できないので
エラーが返ります
あと、これは無い事が前提かも知れませんが、変更しようとするシート名が既にある場合、エラーが返りますので対策が必要になります
(使い捨ての加工用VBAでこのような事が無ければ無視して良いです)
いずれかに該当する場合、コードを変更するか環境を変えるかが必要と思います
Qchan1962さん
早々にありがとうございます〜
▷フォルダはローカルにあるものですよね?
はい。ローカルにあります。会社のPCはOneDrive上にあるのとセキュリティがかたいです…
▷フォルダ名やファイル名に依存文字のような名前を付けていませんか?
はい。それはないです。
▷エラー番号(内容)は、何ですか?
52 ファイル名または番号が不正です…と出ます
▷ちなみに保存せずに実行するとthisworkbook.pathは取得できないので
エラーが返ります
なるほどです。一応保存はしてます…
▷変更しようとするシート名が既にある場合、エラーが返ります…
なるほど。こちらも同じシート名はないですねー
何となくお聞きした感じですと、ファイルの保存場所のような気がしますね。VBA難しいです…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
ExcelVBAで今開いているユーザ...
-
VBA セル入力された日付データ...
-
すでに開いているブックのマク...
-
コマンドボタンでマクロを起動...
-
[Excel VBA] フォルダ内の複数...
-
VBA、Excelのworkbook.open に...
-
VBAでEXCELのワークシートを削...
-
excelでハイパーリンク 別ブッ...
-
複数のデータ系列の線の太さを...
-
VBAを一度起動するとずっと出て...
-
秀丸エディタで1~1000までの数...
-
エクセルでツールバーに「縮小...
-
excelファイルに使われているVB...
-
複数のCSVファイルを横に並べて...
-
昨日まで動いていたエクセルの...
-
【マクロ】宣言は、何のために...
-
ファイル名を今日の日付、時刻...
-
「ほかのアプリケーションを無...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
VB2010でExcelの行をコピーして...
-
【ExcelVBA】指定の書式で、マ...
-
【Excel VBA】ブックを複数開い...
-
フォルダ内の全ブックのシート...
-
EXCELマクロでxlsとxlsxを開く方法
-
すでに開いているブックのマク...
-
VBAでEXCELのワークシートを削...
-
EXCEL VBA起動時の処理
-
excelマクロ、任意セルの値で名...
-
フォルダ内の全てのBookに同じ...
-
excelでハイパーリンク 別ブッ...
-
同じ名前で拡張子が違うファイル
-
[Excel VBA] フォルダ内の複数...
-
VBAでファイル名を変更したい
-
VBA セル入力された日付データ...
-
他のBookのユーザー定義関数を使う
-
【VBA】他のExcelを起動し、呼...
おすすめ情報
調べていたところ、こちらのサイトに行きついたのですが、
https://qiita.com/yoshi2045/items/527c0d196978b0 …
自力では書き換えられず。
Qchan1962さん
アドバイス頂けたりしないでしょうか?