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

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

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

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

Q&A

解決済

3回答

1668閲覧

Excelでファイルを検索してファイル名を表示をするようにしたいです。

nagadora

総合スコア12

VBA

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

0グッド

0クリップ

投稿2019/01/24 07:25

編集2019/01/25 02:29

前提・実現したいこと

エクセルで指定するフォルダのフルパスを取得したいと考えております。
現在Excelを利用しておりますが、2013でもできるようなコードをご存知の方教えていただきたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
_("画像 ファイル (*.jpg), *.jpg")の部分でエラーがでます。

使用しているコード

https://tech.nikkeibp.co.jp/it/pc/article/NPC/20071122/287854/?P=2を拝見いたしまして、

Sub JpegSearch()
Dim i As Long
Dim myFldName As String

   On Error Resume Next
myFldName = Application.GetOpenFilename
_("画像 ファイル (*.jpg), .jpg")
myFldName = Left(myFldName, InStrRev(myFldName, ""))
With Application.FileSearch
.NewSearch
.LookIn = myFldName
.Filename = "
.jpg"
If .Execute(msoSortByFileName) > 0 Then
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = .FoundFiles(i)
Next
End If
End With

End Sub
をしておりましたが、うまくいかず
Sub GetFileList03(Search_Path)
Dim objFs As Object, objFiles As Object, objFolders As Object
Dim File_Path As String, File_Name As String
Dim i As Long, arrData
'処理が遅くなるのでプログラム実行中の画面描画を停止する
Application.ScreenUpdating = False
Set objFs = CreateObject("Scripting.FileSystemObject")
'パスの取得
For Each objFolders In objFs.GetFolder(Search_Path).SubFolders
'サブフォルダまで検索するために再帰実行
GetFileList03 objFolders.Path
Next

'ファイル名の取得 For Each objFiles In objFs.GetFolder(Search_Path).Files '\マークを区切り文字として各文字列を配列に代入 arrData = Split(objFiles.Path, "\") 'セルに配列の各値を書き込む For i = 0 To UBound(arrData) ActiveCell.Offset(0, i).Value = arrData(i) Next i Debug.Print Worksheets(Worksheets.Count).Name ActiveCell.Offset(1, 0).Select Next

End Sub
を御教授頂きましたが、実は、指定するシートにボタン一つで出力できるようにしたいと考えておりますが、うまくいきません。
また、マクロ名を登録したいのですが、Sub 名前()というのは利用できず困惑しております。
恐れ入りますが、再度ご教授いただければ幸いです。何卒よろしくお願い申し上げます。

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

Excel 2016/2013

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

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

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

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

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

nagadora

2019/01/25 03:06

ありがとうございます。 確認しましたが、理解不足でわからないです・・・(汗)
guest

回答3

0

エクセルで指定するフォルダのフルパスを取得したいと考えております。

やりたいことが↑この作業なら、

myFldName = Application.GetOpenFilename("画像 ファイル (*.jpg), *.jpg")

この1行でいいと思いますが?

参考URL>>
http://officetanaka.net/excel/vba/file/file02.htm

投稿2019/01/24 09:42

mattuwan

総合スコア2136

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

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

0

2007以降での代替案は【VBA】FileSearchの代わりにFileSystemObjectを使用するに書かれている通りです。これだけで足りるでしょうか。

きっと訳が分からない状態なんだとは思いますが、そうだとしても、ただ単にうまくいきませんではなく、どううまくいかないのか、わからないのかは伝えましょう。それによってどう答えれば通じるのかイメージできることもあります。(の割に、どう考えても不親切な回答をしている自覚はあります)

まずどういう問題が起こっているかは、On Error Resume Nextがあるために見えなくなっているので、これを消すと手がかりもつかめるようになるでしょう。

投稿2019/01/24 08:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

プログラムを丸々コピペするのも必要な場合もありますが、少なくとも、コピペしようとしているものが一体何をやっているのか、それぞれの命令について理解して使うように心がけましょう(でないと、この先ずっとこういう問題に行き当たりますよ)。

これはExcelで使われるVBAという言語で書かれたプログラムですが、VBAは1行が長すぎる場合、2行目に折り返す代わりに末尾に「 _ (アンダースコア)」を書くというルールがあります。

この日経のサイトに書かれているサンプルプログラムの、問題の箇所は長すぎて紙面に収まらないので、アンダースコアを書いて折り返しているのですが、本来、折り返すアンダースコアの前後に空白を入れないといけないところ、入れていないために文法エラーになっていると思われます。

問題の行(2行)を下記のように変えてみてください。

myFldName = Application.GetOpenFilename("画像 ファイル (*.jpg), *.jpg")

GetOpenFileName、と、括弧の間にあるアンダースコアを取っ払って、つなげてしまいましょう。これでエラーは消えませんか?

GetOpenFileName命令は、指定した種類のファイルを利用者に選んでもらう画面を開く命令で、後ろに続く括弧の中に、選ぶファイルの種類を表す名前と、ファイルの拡張子(ピリオドに続く3~4文字の英数字)を指定します。

まずはこれでエラーが消えるかを確認し、実際にやりたいことが実現できないか試して見てください。

投稿2019/01/24 07:54

backyard

総合スコア534

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

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

nagadora

2019/01/24 08:15

ご指摘ありがとうございます。 VBAに関して更に勉強をしていきたいと思います。 ただ、試してみましたが、うまくいきませんでした。 また、できれば指定したどのシートに書き込むかもご教授頂ければ嬉しいです。 あつかましく大変申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問