アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロの初心者で普段はマクロの記録を使って簡単なマクロを作っています。今回お尋ねしたいことは、特定のフォルダに入っているExcelのブックからデータを抽出したいと考えており、自身でも調べてみましたが、なかなか上手くいきません。

具体的にはパソコン上に「0601」「0602」・・・・と日付のフォルダを作成し、その中に複数のExcelのブックを格納しています。ファイルは2種類あり、「個人名の名前のファイル」と「集計用ファイル」があります。「個人名ファイル」は複数あり、「集計用ファイル」は1つです。
「個人名ファイル」の中には「投入シート」というシートがあり、そのシートのA2のセルとB2のセルのデータをコピーして、「集計用ファイル」のA列とB列の1行目から順にに張り付けています。10個の「個人名ファイル」があれば、それを10回繰り返しています。

この作業を自動化して、まず特定のフォルダを選択し、選択されたフォルダの中にある「個人名ファイル」の投入シートからA2とB2のデータをコピーして「集計用ファイル」に貼り付けていく作業のマクロが作成できないかなと思っています。な「個人名ファイル」はそれぞれパスワードを掛けています。」
この様なマクロは作成できないでしょうか?ご指導いただければ幸いです。

質問者からの補足コメント

  • Sub macro1()

    Dim Mypath As String
    Dim MyFile As String

    With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = True Then
    Mypath = .SelectedItems(1)
    MyFile = Dir(Mypath & "\*.xls")

    Do Until MyFile = ""
    ----------------------------------------------------------------

    -----------------------------------------------------------------
    Loop
    End If
    End With
    End Sub

      補足日時:2018/06/19 21:59

A 回答 (2件)

こんにちは



「個人名ファイル」は固定でどこかにリストのようなものが存在するのか、あるいはフォルダ内のファイルを総当たりで(集計用ファイルを除く)で処理すれば良いのかなどが不明ですが、仮に全部のファイルを処理するものと仮定すれば、概ね以下の手順で可能と思います。

1)ダイアログ等を表示し、フォルダを指定してもらう
2)指定フォルダ内の「集計用ファイル」を開いておく
 (集計用ファイルの該当シートのA、B列をクリア)
3)フォルダ内の各ファイルについて順に以下をループ
 ・ファイル名が「集計用ファイル」であれば処理をスキップ
 ・ファイルを開く
 ・「投入シート」のA2:B2の値を集計用ファイルに転記
 ・ファイルを閉じる
4)「集計用ファイル」を保存(閉じる)

直接全体を作成しても良いですが、大変な場合は、まず、3)の部分の「一つのファイルの処理(ブックを開き、データを読み、転記したら閉じる)」を作成してみるのが良いかも知れません。
その際に、最終的に可変になるものは、変数にしておいて変数の内容が変われば別のファイルを処理できる形で作成しておくのがコツと言えばコツです。
1ファイル分の処理がきちんと動作することを確認した上で、それを利用して複数ファイルの処理を行うという考え方です。
ご質問の例で言えば、
 フォルダパス、ファイル名、出力先
などを変数化しておくと、後の作業がスムーズに進むと思います。

一つの例として、最初に3)の部分だけを作成する際には
 Sub fileTreat()
  folderPath = "hogehoge"
  faileName = "fugafuga"
  set outputRange = ActiveSheet.Range("A1")
  '上の変数を使って、1ファイル分の処理を行う
 End Sub
のような形で作成しておいて、きちんとデバッグ終わったら
 Sub fileTreat(folderPath, fileName, outputRange)
  '1ファイル分の処理
 End Sub
のような形に変えることで、フィアル等を指定してこのサブルーチンを呼び出せばそのファイルの処理はしてくれるようになるので、順に指定しながらループで呼び出せば良くなりそうな気がしませんか?
上では、説明上の都合上でサブルーチン化して説明していますが、実際の処理では、サブルーチン化しなければならないというほどのものでもないように思います。

とは言え、ひとつひとつの手順をコード化してゆく際には、わからない点がいろいろ出てくるものと想像します。
個別の具体的な不明点であれば、それをキーに検索することで、いま時であれば大抵のことは答えがみつかるはずですので、一度に全部を何とかしようとするのではなく、ひとつずつ順に解決してゆくことが、結果的には全体の解決への近道になるものと思います。

頑張ってください。
    • good
    • 0
この回答へのお礼

回答有難うございました。もう少し伺いたいんですが
回答を参考にネットで調べながらマクロを以下のように作成してみました。
下のマクロではフォルダを指定しており、自分で任意のフォルダを指定できません。
任意のフォルダを指定するにはどのように修正すればよいでしょうか?


Sub macro1()

Dim myFile As String
Dim myPath As String

myPath = "C:\0601\"
myFile = Dir(myPath & "*.xlsx")

Do Until myFile = ""
Workbooks.Open myPath & myFile
With Workbooks("集計シート.xlsm").Worksheets("Sheet1").Range("A65536").End(xlUp)
.Offset(1, 0).Value = myFilev
.Offset(1, 1).Value = Workbooks(myFile).Worksheets("投入シート").Range("A2").Value
.Offset(2, 1).Value = Workbooks(myFile).Worksheets("投入シート").Range("B2").Value
End With
Workbooks(myFile).Close savechanges:=False
myFile = Dir()
Loop
End Sub

お礼日時:2018/06/19 20:08

No1です



>任意のフォルダを指定するにはどのように修正すればよいでしょうか?
もう、自己解決なさっていらっしゃるようですが、ご参考までに。

ファイル選択用のダイアログにも何種類かあるようです
http://officetanaka.net/excel/vba/tips/tips154.htm

このあたりが一般的かと
http://officetanaka.net/excel/vba/file/file02.htm
https://msdn.microsoft.com/ja-jp/vba/excel-vba/a …
    • good
    • 0
この回答へのお礼

解決しました

色々とご指導いただき有難うございました。お陰様で、考えていたように作成できました。

お礼日時:2018/06/20 18:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!