Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11216 / 13644 ツリー ←次へ | 前へ→

【17384】ファイル名が一定ではないブックからの貼り付け 名雪 04/8/28(土) 0:06 質問[未読]
【17385】Re:ファイル名が一定ではないブックからの... かみちゃん 04/8/28(土) 0:15 発言[未読]
【17386】Re:ファイル名が一定ではないブックからの... 名雪 04/8/28(土) 0:39 発言[未読]
【17388】Re:ファイル名が一定ではないブックからの... Hirofumi 04/8/28(土) 8:31 回答[未読]
【17391】Re:ファイル名が一定ではないブックからの... かみちゃん 04/8/28(土) 9:34 発言[未読]
【17394】Re:ファイル名が一定ではないブックからの... 名雪 04/8/28(土) 11:25 回答[未読]
【17398】Re:ファイル名が一定ではないブックからの... かみちゃん 04/8/28(土) 12:44 発言[未読]

【17384】ファイル名が一定ではないブックからの貼...
質問  名雪  - 04/8/28(土) 0:06 -

引用なし
パスワード
   超初心者なのでおてやわらかにお願いしますねー
あるフォルダ内にある多数のブック(日付別になってます)
からの一定のデータのコピー&ペーストを行いたいのですが
そのフォルダには毎月別名のブックが保存されるので
ファイル名を指定する場合にうまくいきません。。。

例)8/25日は  2004.08.25A.EXL
  9/25日は  2004.09.25A.EXL

毎月の集計表を作成したいのですが
現状は毎月、最初から対象ブックを指定し直して
作成しています。

例)C:\DATA\2004.08.25A.EXL のように指定しています。
上記を毎月使えるようしたいです。。。

なお、月が替われば前月のデータはそのフォルダには残っていません。
つまり「****.**.25A.EXL」のような指定が出来れば
毎月その集計表を使用出来るので。

出来れば、1つのブック作成で毎月の集計が出来ればと思い
どうか、良い指定方法があればよろしくお願いします。

もしかしたらすごく単純な質問かもしれませんが・・・

どうかお力を貸してください。

【17385】Re:ファイル名が一定ではないブックから...
発言  かみちゃん  - 04/8/28(土) 0:15 -

引用なし
パスワード
   こんちには。かみちゃん です。

>出来れば、1つのブック作成で毎月の集計が出来ればと思い

年+月+25.xlsというファイル名をあらかじめ変数として作ってから処理するようにしたらいいのですが、年と月は、どのように取得するのでしょうか?
どこかのセルに入っているのか、処理時点の年月なのか、そのフォルダに入っている何かなのか・・・

もう少しそのあたりのことを教えてください。

【17386】Re:ファイル名が一定ではないブックから...
発言  名雪  - 04/8/28(土) 0:39 -

引用なし
パスワード
   単にファイル名として日付名で保存してあるだけです・・
中身にはその日の各実績がexlファイルとして入っています。

そこから実績の各数値だけ取り出して
1つのexlファイル(月別実績表)内の中に貼り付けたいのです。

今は例えば8月なら8月のexlファイルを作成して
各日の欄にそれぞれの該当ファイル(2004.08.25A.exl等)を
指定しています。
もし、別月になっても同じ月別実績表を使用出来たらと・・・

変数ってどうやるんですか?

例えば上記のファイルを指定する場合
どうすれば2004.09.25Aに来月変更した場合うまく同じ指定方法で
処理出来るんでしょうか?

説明わかりにくくてすみません。。。

よろしくお願いします。

【17388】Re:ファイル名が一定ではないブックから...
回答  Hirofumi  - 04/8/28(土) 8:31 -

引用なし
パスワード
   こんなので上手く行くかな?
尚、「2004.08.25A.EXL」て「2004.08.25A.xls」の間違い?

以下を標準モジュールに記述して下さい

Option Explicit

Public Sub Sample1()

'  ファイルを単独で選択する場合

  Dim strPath As String
  Dim vntFileName As Variant
  
  'パスを指定
'  strPath = "C:\DATA"
  strPath = ThisWorkbook.Path
  
  '表示させるFile名を指定
'  vntFileName = Format(Date, "yyyy.mm.") & "25A"
  vntFileName = Format(Date, "yyyy.mm.") & "??A"
  
  If Not GetReadFile(vntFileName, strPath, False) Then
    Exit Sub
  End If
  
  '*.xlsを開く
  Workbooks.Open vntFileName
  
End Sub

Public Sub Sample2()

'  ファイルを複数選択する場合

  Dim i As Long
  Dim strPath As String
  Dim vntFileName As Variant
  
  'パスを指定
'  strPath = "C:\DATA"
  strPath = ThisWorkbook.Path
  
  '表示させるFile名を指定
'  vntFileName = Format(Date, "yyyy.mm.") & "25A"
  vntFileName = Format(Date, "yyyy.mm.") & "??A"
  
  If Not GetReadFile(vntFileName, strPath, True) Then
    Exit Sub
  End If
  
  '*.xlsを開く
  With Workbooks
    For i = 1 To UBound(vntFileName)
      .Open vntFileName(i)
    Next i
  End With
  
End Sub

Public Function GetReadFile(vntFileNames As Variant, _
            Optional strFilePath As String, _
            Optional blnMultiSel As Boolean _
                    = False) As Boolean

  Dim strFilter As String
  
  'フィルタ文字列を作成
  strFilter = "Excel File (*.xls),*.xls," _
        & "全て (*.*),*.*"
  '読み込むファイルの有るフォルダを指定
  If strFilePath <> "" Then
    'ファイルを開くダイアログ表示ホルダに移動
    ChDrive Left(strFilePath, 1)
    ChDir strFilePath
  End If
  'もし、ディフォルトのファイル名が有る場合
  If vntFileNames <> "" Then
    SendKeys vntFileNames & "{TAB}", False
  End If
  '「ファイルを開く」ダイアログを表示
  vntFileNames _
      = Application.GetOpenFilename(strFilter, 1, , , blnMultiSel)
  If VarType(vntFileNames) = vbBoolean Then
    Exit Function
  End If
  
  GetReadFile = True
  
End Function

【17391】Re:ファイル名が一定ではないブックから...
発言  かみちゃん  - 04/8/28(土) 9:34 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>そこから実績の各数値だけ取り出して
>1つのexlファイル(月別実績表)内の中に貼り付けたいのです。

月別実績表というのだから、・・・、6月、7月、8月、・・・となっていて、6月は、2004.06.25A.xls、7月は、2004.07.25A.xls、8月は、2004.08.25A.xlsというファイルからそれぞれ各数値を貼り付けたいということでしょうか?

それとも、6月と7月はもう貼り付けているから、8月だけを貼り付けたいということでしょうか?
その場合、いつ貼り付けるのですか?(8月中?9月以降に8月にさかのぼって貼り付けることはあるのか?)

どこかのセルまたは、InputBoxなど、貼り付ける月を指定すると、それを変数として扱うことなら簡単ですが・・・

なお、Hirofumiさんの例だと、Dateを使っていますので、マクロ実行時のパソコンの内臓時計の日付を変数としていますので、パソコンの内臓時計があっている場合、8月以外の月に8月のファイルを選択することはできなくなります。

【17394】Re:ファイル名が一定ではないブックから...
回答  名雪  - 04/8/28(土) 11:25 -

引用なし
パスワード
   月別実績表というのだから、・・・、6月、7月、8月、・・・となっていて、6月は、2004.06.25A.xls、7月は、2004.07.25A.xls、8月は、2004.08.25A.xlsというファイルからそれぞれ各数値を貼り付けたいということでしょうか?

 そうです。それぞれの月別集計表に貼り付けます。
 毎月集計は取っているのでその月のみでいいです。
 つまり、DATAフォルダにはもう2004.06.25A.XLSは存在しない訳です。

>その場合、いつ貼り付けるのですか?(8月中?9月以降に8月にさかのぼって貼り付けることはあるのか?)

 ほぼ毎日貼り付けていますが、場合によっては1週間程度
 一度に貼り付けたりしています。
 従って、月末前後には次月になってしまう場合もあります。
 (8/31の分を9月5日に貼り付けたり)

一応の現在の設定の一部は以下の通りです。

TドライブのDATAフォルダ内にある、2004.8.26Aのデータを
macroと言うブックに貼り付ける。

 Workbooks.Open Filename:="T:\DATA\2004.8.26A.XLS"
  ActiveWindow.SmallScroll ToRight:=1
  ActiveWindow.SmallScroll Down:=-9
  Range("BB11:BD12").Select
  Selection.Copy
  Windows("macro.xls").Activate
  Range("AA22:AA23").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Windows("2004.8.26A.XLS").Activate
  Range("BC14").Select
  Application.CutCopyMode = False
  Selection.Copy
  Windows("macro.xls").Activate
  Range("AA24").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Windows("2004.8.26A.XLS").Activate
  Range("BB15:BD17").Select
  Application.CutCopyMode = False
  Selection.Copy
  Windows("macro.xls").Activate
  Range("AA25:AA27").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Windows("2004.8.26A.XLS").Activate
  ActiveWindow.Close

【17398】Re:ファイル名が一定ではないブックから...
発言  かみちゃん  - 04/8/28(土) 12:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> ほぼ毎日貼り付けていますが、場合によっては1週間程度
> 一度に貼り付けたりしています。
> 従って、月末前後には次月になってしまう場合もあります。
> (8/31の分を9月5日に貼り付けたり)

もしかして、特定のフォルダにあるファイルをすべて読み込んでファイル名から月別実績表の何月分に貼り付けたらいいのかを判断したいということなのでしょうか?

>TドライブのDATAフォルダ内にある、2004.8.26Aのデータを
>macroと言うブックに貼り付ける。

この場合、T:\DATA\には、2004.8.26A.XLSの場合は、月別実績表の8月欄、2004.09.05A.xlsであれば、月別実績表の9月欄に貼り付けたいということでしょうか?

であれば、T:\DATAにある、すべてのExcelファイルのファイル名を取得して、それを変数にして、共通な処理をすればいいのではないでしょうか?

11216 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free