[[20170518181724]] 『ファイル名が日付のCSVファイル取得について』(たまごん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル名が日付のCSVファイル取得について』(たまごん)

こんにちは、VBAに格闘中です。

日付を指定して、同じ日付のファイル名のCSVファイルを読み込みたいのですが
参考になるサイトや情報ってありますでしょうか?
探しているのですが、OUTPUTする時に日付指定する等のサイトは見れたのですが…

希望としては

ネットワークフォルダ
\\p1030\1101\連携フォルダ\予定スケジュール\
の中にCSV(170501.csv〜170531.csv)ファイルが格納されています。

ワークブック名:「テスト」内のSheet1のセルH23に当日日付が入っています。
マクロを実行させるとその日付を元に上記ネットワークフォルダ内のCSVファイルを読み込む。
そのデータをテストのSheet2のセルA1より貼り付けてほしいのです。
マクロの記録もやっていますが、連続させるとなると???><

見る人によっては簡単かもしれませんが、苦戦しています。
良きアドバイスください。

どうぞよろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


>連続させるとなると???><

連続とは?
当日のCSVファイル一つだけを取り込むのではないのですか。

(マナ) 2017/05/18(木) 18:39


マナ様

 説明での言葉足らず、申し訳ございません。

日付指定し、その日付と同じファイルを取得するということで
1回処理すれば大丈夫でした。

ファイル名固定ではできるのですが、セルと同じファイル名となると
知識不足で分からなかったということです。

すいません。

(たまごん) 2017/05/20(土) 21:08


>ファイル名固定ではできるのですが、

では、それを提示いただけませんか。

(マナ) 2017/05/20(土) 21:15


マナ様

 たびたびすいません。

ファイルを指定し動かしたロジックとなります。
なお、データ2種より選択させるため、InputBoxを取り入れています。

Sub sample()
Dim idno As String

myfile = ActiveWorkbook.Name

Set myf = Workbooks(myfile).Worksheets("Sheet2")

idno = InputBox("A or Bを入力してください。(1:抽出/2:投入)")

Workbooks.Open FileName:="\\p1030\1101\連携フォルダ\予定スケジュール\170501.csv"
openfile = ActiveWorkbook.Name
k = 1
For i = 1 To 65536
If Cells(i, 1) = "" Then Exit For
If Cells(i, 3) = idno Then
For j = 1 To 10
myf.Cells(k, j) = Cells(i, j)
Next j
k = k + 1
End If
Next i
ActiveWindow.Close

End Sub

私が分かる範囲はこんなところです。
sheet1にある日付と同ファイルを読み込むよう教えてもらえますでしょうか?

よろしくお願いします。

(たまごん) 2017/05/21(日) 01:58


日付の入力されたセルを選択した状態で実行してみてください。

MsgBox Format(ActiveCell.Value, "yymmdd") & ".csv"

(マナ) 2017/05/21(日) 08:50


マナ様

 ありがとうございます。
ご指定のコードを入れてみるということですが、

MsgBox Format(ActiveCell.Value, "yymmdd") & ".csv"
で選択しているセル(日付)のcsvファイル名を表示させるというのは分かったのですが、
これをどこにどう入れるのかが分かりませんでした。

MsgBoxに表示したものを使って…のような感じは想像できたのですが、
上手く活用できませんでした。

まずは
sheet1のセルを選択し、MsgBoxに表示したファイル名のcsvファイルをファイルサーバより
引っ張りその中をコピーし、sheet2に貼り付ける

というイメージはあるのですが、知識が追い付いていません。

(たまごん) 2017/05/21(日) 22:12


こんな感じで、文字列を & で繋げることができます。
これでわかりますか。

 Sub test()
    Dim myDate
    Dim myCSV As String

    myDate = Worksheets("Sheet1").Range("H23").Value
    If Not IsDate(myDate) Then Exit Sub

    myCSV = "\\p1030\1101\連携フォルダ\予定スケジュール\"
    myCSV = myCSV & Format(myDate, "yymmdd") & ".csv"

    Msgbox myCSV	

 End Sub

(マナ) 2017/05/21(日) 23:08


マナ様

 夜遅くで申し訳ございませんでした。

"&"をつなげてのファイル名指定させるのですか。
すいません、"&"自体は他のマクロで使ったことはありますが、
ここでとは思いませんでした。

myCSVを指定することで、思うcsvファイルを開くことができました。

本当にありがとうございました。

夜遅くにも関わらず、大変助かりました。

(たまごん) 2017/05/22(月) 00:33


わたしも書いてみました。参考まで。
Option Explicitとインデントについて習慣づけたほうがよいです。

http://officetanaka.net/excel/vba/beginner/06.htm
http://kabu-macro.com/vba_apply/vba_indent.html

 Option Explicit

 Sub test()
    Dim myDate
    Dim myCSV As String
    Dim idno As Long
    Dim myWS As Worksheet
    Dim i As Long, k As Long

    myDate = Worksheets("Sheet1").Range("H23").Value
    If Not IsDate(myDate) Then Exit Sub

    myCSV = "\\p1030\1101\連携フォルダ\予定スケジュール\"
    myCSV = myCSV & Format(myDate, "yymmdd") & ".csv"

    idno = Val(InputBox("A or Bを入力してください。(1:抽出/2:投入)"))
    If idno <> 1 And idno <> 2 Then Exit Sub

    Set myWS = Worksheets("Sheet2")
    myWS.UsedRange.ClearContents
'
    With Workbooks.Open(Filename:=myCSV).Sheets(1)
        For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 3).Value = idno Then
                k = k + 1
                myWS.Cells(k, 1).Resize(, 10).Value = .Cells(i, 1).Resize(, 10).Value
            End If
        Next i
        .Parent.Close False
    End With

 End Sub

(マナ) 2017/05/22(月) 19:22


マナ様

 気づかず申し訳ございませんでした。

>Option Explicitとインデントについて習慣づけたほうがよいです。
もっと勉強しこの辺りのことも学んでいきたいと思います。

教えていただいたコードも自分なりに噛み砕いて動きを追ってみます。

色々ご指導、ありがとうございます。
(たまごん) 2017/05/30(火) 04:54


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.