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

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

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

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

Q&A

解決済

1回答

1991閲覧

VBA ファイル自動選択

King_of_Flies

総合スコア382

VBA

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

0グッド

0クリップ

投稿2017/05/22 01:41

現在VBAを使用してファイルの自動選択を行う処理を追加したいと考えています。

ListBox.ListIndexを使用して、ファイル選択をしているのですが
毎日行う作業で、ある決められた命名のフォルダを選択するのに、
毎度、手動で選択しているのが手間です。

ListBox内に存在する複数のファイルのうち、1a+"yyyymmdd"の名前を持つものを全て選択する処理などを作成することは可能でしょうか?

現在のコードは下記の通りです。

VBA

1Private Sub CommandButton1_Click() 2 '未選択の場合は処理終了 3 Dim idxMoveItem As Long 4 idxMoveItem = lstBefore.ListIndex 5 If idxMoveItem < 0 Then Exit Sub 6 '右側の結合用のリストへ追加 7 Dim strSelItem As String 8 strSelItem = Me.lstBefore.Text 9 '重複チェック 10 Dim lstNum As Long 11 For lstNum = 0 To Me.lstConcat.ListCount - 1 12 If Me.lstConcat.List(lstNum) = strSelItem Then 13 Exit Sub 14 End If 15 Next 16 '重複がなければ登録 17 lstConcat.AddItem strSelItem 18End Sub

つくり的にはフォームが合って、
lstBeforeと呼ばれる、指定のフォルダ内の全てのpdfファイルを格納しているlistBoxと、
lstConcatと呼ばれる、lstBeforeから選択した任意のファイルのみを格納するlistBoxがあります。

上記のコードはlstBeforeからListConcatへの移行を行う処理のコードですが、これを一回のボタン押下で、決められた名前のファイルを一括で選択し、listConcatへ移行するように編集したいです。

よろしくお願いします。

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

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

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

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

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

ttyp03

2017/05/22 01:48

1aとは、A1セルのことですか?文字列で"1a"ですか?
King_of_Flies

2017/05/22 01:49

文字列で1aです。""が抜けていました。すいません。
ttyp03

2017/05/22 01:51

もうひとつ。yyyymmddは当日日付ってことですか?今日なら、"1a20170522"
King_of_Flies

2017/05/22 01:54

そうです!yyyyddmmは当日日付です。不足事項の確認、ありがとうございます、
guest

回答1

0

ベストアンサー

要望通りかわかりませんが、こんな感じでしょうか。

VBA

1Private Sub CommandButton1_Click() 2 3 Dim befIdx As Long 4 Dim sFile As String 5 6 ' 当日日付のファイル名を生成 7 sFile = "1a" 8 sFile = sFile & Year(Now) 9 sFile = sFile & Right("0" & Month(Now), 2) 10 sFile = sFile & Right("0" & Day(Now), 2) 11 12 ' リストボックスクリア 13 lstConcat.Clear 14 15 ' 当日日付を含むアイテムを検索しリストボックスに追加 16 For befIdx = 0 To lstBefore.ListCount - 1 17 If InStr(lstBefore.List(befIdx), sFile) > 0 Then 18 lstConcat.AddItem lstBefore.List(befIdx) 19 End If 20 Next 21End Sub 22

投稿2017/05/22 02:11

ttyp03

総合スコア16996

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

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

King_of_Flies

2017/05/22 02:47

ちょっと、業務用に編集して、動作確認してみます。 一応、listBoxの纏めて移行はできそうです。
King_of_Flies

2017/05/22 02:50

少し応用を加えれば、業務用に使える感じがしました。 一応、やりたいことの兆しは見えましたので、 現状解決ということで、BAにします! ありがとうございました。 また、今後の編集で不明点が出たときは、こちらに追記していく形で、 質問させていただくと思います。
King_of_Flies

2017/05/22 03:37

Right関数についての質問なのですが、 Year(Now)で取れているところは、Right("0",Year(Now),4)としないのには理由がありますか? また、Right("0",Month(Now),2)の箇所はYearのように、Month(Now)で取れないのですか?
ttyp03

2017/05/22 04:02

yyyymmddと固定長にしたいわけですね。 Month(Now)だと5が返却され、2017522になってしまうので、月と日には0を埋めるための処理を入れています。 年は必ず4桁あるのでそのまま使っています。
King_of_Flies

2017/05/22 05:05

12月に選択するファイルを選んだ際は、 Month(Now)だと12が返却されると思いますが、 その際の0を埋める処理はどう働くのですか? yyyy012ddになってしまわないですか?
King_of_Flies

2017/05/22 05:05

それとも無視されてyyyy12ddとでるのでしょうか?
ttyp03

2017/05/22 05:07

Right関数で右側から2文字を切り出しています。 つまり"012"の後ろ2文字を使っているので、"012"にはなりません。
King_of_Flies

2017/05/22 05:18

あぁ・・・理解できました!ありがとうございます! あと、最後に質問なのですが、 前日のファイル名を取得したい場合には Right("0",Month(Now -1 ),2)で取得可能でしょうか?
King_of_Flies

2017/05/22 05:18

間違えました。 Day(Now -1)です
King_of_Flies

2017/05/22 05:21

あぁ、質問しておいてあれですが、 月を跨いで前日のファイルを取得しようとしたとき、 かなりめんどくさいような・・・
ttyp03

2017/05/22 05:22

そうです、よくぞそこに気付いてくれました。 ホントは最初にキチンと書くべきでした。すみません。 次のようにしてみてください。 Dim d As Date d = Now ' 当日 'd = Now - 1 ' 前日 sFile = "1a" sFile = sFile & Year(d) sFile = sFile & Right("0" & Month(d), 2) sFile = sFile & Right("0" & Day(d), 2)
King_of_Flies

2017/05/22 05:27

すごく助かりました。! Right関数の使い方も理解できたので、感謝します!
King_of_Flies

2017/05/22 06:34

先ほどはものすごく助かりました。 追加の質問があったのですが、 新規にページ解説しましたので、 回答を持ち合わせていたらお願いしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問