ファイルの操作・フォルダの操作説明

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

ファイルの操作・フォルダの操作を詳しく説明しています。

この教材についての過去の質問・感想

12821 : たかちゃんさんのコメント (2021-01-14 02:46:56)

小川先生、田中さん

すみません。ありがとうございました。
MsoTriState...どこかで見かけましたが、コメントを読んで意味が分かりました。

自分の備忘録として、また
簡単に実現できるシンプルなプログラムの場合は
いつか誰かのお役に立てそうかなと思って投稿しました。

声をかけて貰えるだけで嬉しいです。
お手間を取らせてしまい、すみません。(^^;

次回はcsvファイルを読んで作業する良い例題を見つけたので
それに挑戦しようと思います。

ネットにあるコードや他の生徒さんのコードを読むのは
本当に勉強になります。
まだ理解できないコードも多いですが、実践で困らないように
少しづつ技を増やしていきたいです。

> もしも、「どうしてもコメントしてくれ」と言われることがあるとしたら、AddPicture メソッドのリファレンスで、「LinkToFile, SaveWithDocumentの値にはMsoTriState列挙体を使う」と書かれているので、以下のようにリライトしてもいいかな、というくらい。


12811 : 小川慶一の回答 (2021-01-13 10:55:59)

田中 宏明さん:

> すご過ぎてコメントが思いつきません。

ですね。。

もしも、「どうしてもコメントしてくれ」と言われることがあるとしたら、AddPicture メソッドのリファレンスで、「LinkToFile, SaveWithDocumentの値にはMsoTriState列挙体を使う」と書かれているので、以下のようにリライトしてもいいかな、というくらい。

ビルトインの定数を使うと、可読性が高まる場合があります。
とはいえ、今回の例ではそんなことはなく、むしろ仰々しすぎる感じがあります。True/Falseで表現するほうが分かりやすい気がしますし、あえてそうされたのかなとも思いますが...あとからこの投稿を読まれる方向けのmsgという意味も込めてあえてその旨ここに記しておきます。

ws.Shapes.AddPicture _
    Filename:=objFile, _
    LinkToFile:=MsoTriState.msoFalse, _
    SaveWithDocument:=MsoTriState.msoTrue, _
    Left:=20, _
    Top:=lngTop, _
    Width:=300, _
    Height:=200

ws.Shapes.AddPicture _
    Filename:=objFile, _
    LinkToFile:=msoFalse, _
    SaveWithDocument:=msoTrue, _
    Left:=20, _
    Top:=lngTop, _
    Width:=300, _
    Height:=200


Shapes. AddPicture メソッド (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shapes.addpicture

MsoTriState列挙体
https://docs.microsoft.com/ja-jp/office/vba/api/office.msotristate


12810 : 田中 宏明さんのコメント (2021-01-12 22:16:28)

たかちゃんさん:

すご過ぎてコメントが思いつきません。
.Shapes.AddPictureメソッドを初めて知りました。
Excel2010以降のVBAで画像の実体を挿入できるのですね。


12809 : 小川慶一の回答 (2021-01-12 22:06:56)

たかちゃんさん:

こんばんは。

ありがとうございます。
投稿されたマクロ、さっそく動かしてみました。楽しいです☆


12806 : たかちゃんさんのコメント (2021-01-12 11:30:27)

ファイルシステムオブジェクトを使用して、エクセルに写真を張り付け
工事現場の作業報告書のようなものを作成してみました。

事前準備:
エクセルでは”ひな形”という名前のシートを作成し、全てのセルの高さ20に設定。
写真の横にコメントを書ける罫線を引くなどしておく。

ひな形シートをコピーして、指定フォルダの写真を3枚貼り
再び、ひな形シートをコピーして、指定フォルダの残りの写真を
3枚づつ貼っていくマクロです。

Excel2019で動作確認済み。記念に投稿させて頂きました。


'Microsoft Scripting Runtimeにチェック→FSOを使用する為
Sub 画像貼り付け()
    Dim lngTop As Long 'TOPの余白用
    Dim fs As FileSystemObject
    Dim objFile As Scripting.File
    Dim objFldr As Scripting.Folder
    Dim c As Long '写真貼り付けのカウント用
    Dim cFiles As Long 'ファイルの数
    Dim cLast As Long  '最後の3の倍数用
    Dim ws As Worksheet  '作業用ワークシート
    
    Set fs = New Scripting.FileSystemObject
    Set objFldr = fs.GetFolder(ThisWorkbook.Path & "\写真")

    '最初は、写真を貼るシートをコピーする
    Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = Format(Date, "yymmdd")
    Set ws = ActiveSheet
    
    c = 1 '写真を貼り付けるカウント用
    lngTop = 20 '写真貼の際、Topの余白を20の意味
    
    cFiles = objFldr.Files.Count 'フォルダの中のファイル数
    
    'A4 1枚に3枚づつ写真を貼り付ける。最後の3の倍数では
    'シート(ページ)を追加したくない為、ここで最後の3の倍数を確認
    If cFiles Mod 3 = 0 Then
        cLast = (cFiles \ 3) * 3
    End If
    
    '写真を貼り付け
    For Each objFile In objFldr.Files

        ws.Shapes.AddPicture _
            Filename:=objFile, _
            LinkToFile:=False, _
            SaveWithDocument:=True, _
            Left:=20, _
            Top:=lngTop, _
            Width:=300, _
            Height:=200
        
        lngTop = lngTop + 200 + 20
        
        '3回写真を貼ったら、次のページ(シート)を作成
        '但し、最後の3の倍数ではページ(シート)を作成しない
        If c Mod 3 = 0 And c <> cLast Then
            Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = Format(Date, "yymmdd") & "_" & c
            Set ws = ActiveSheet
            lngTop = 20
        End If
        
        c = c + 1
    Next
    
    Set objFile = Nothing
    Set objFldr = Nothing
    Set fs = Nothing
    
End Sub
 








10029 : 小川慶一の回答 (2018-05-21 18:44:19)

あじろうさん:

試しに、エクセルのメニューから新規作成やファイルを作り、それに、(よけいな組織等の設定は行わず)数値や文字日付等の情報だけを入れたシートを作ってみてください。

そのようなファイルを複数作り、それらの中身を読み取るマクロを書いて実行してみてください。

その結果と今回書いたマクロでの実行結果等を比べれば何か分るでしょう。

> いつも何気ない質問にお答えいただけるガラパゴスタディーに感謝です。

教科書的な話だけをするのは簡単ですが、実務ではいろいろな課題がありますからね。
今後とも、まずは、お気軽にいろいろ聞いてみてください。


9997 : あじろうさんのコメント (2018-05-17 00:04:27)

小川慶一さん:
返信ありがとうございます。
いつも何気ない質問にお答えいただけるガラパゴスタディーに感謝です。

開くファイルは重たくはないと思います。
普通に考えれば処理速度はそれほど遅くはないのかもしれません。
基礎編から始めて長く勉強していくうちに良い意味で麻痺しているかもしれません。もう少し講座を進めていくうちに気付くこともあるかと思います。また、疑問に思うことがありましたら質問させていただきます。

ありがとうございます。

> あじろうさん:
>
> ソース拝見しました。
>
> これなら、一瞬で処理は終わるはずですけどね。
>
>

Option Explicit
> Sub FileExists()
>     Dim fs As Scripting.FileSystemObject
>     Dim fname, st As String
>     Dim c As Long
>     Dim wb As Workbook
>     Debug.Print Now & "開始"
>     Set fs = CreateObject("Scripting.FileSystemObject")
>     Application.DisplayAlerts = False
>     Workbooks("syuukei").Worksheets("Sheet1").Range("A1").ClearContents
>     For c = 1 To 5
>         fname = ThisWorkbook.Path & "\siken\" & c & ".xlsm"
>         If fs.FileExists(filespec:=fname) Then
>             Workbooks.Open filename:=fname
>             Set wb = ActiveWorkbook
>             st = st & wb.Worksheets("Sheet1").Range("A1").Value
>             wb.Close
>         End If
>     Next
>     Workbooks("syuukei").Worksheets("Sheet1").Range("A1").Value = st
>     Application.DisplayAlerts = False
>     Set fs = Nothing
>     Debug.Print Now & "終了"
> End Sub

>
> 開けた先のファイルがよほど重たいとかですか?
> その場合は、手作業でファイルを開いても時間がかかりそうですが。
>
>
> > いつもお世話になっております。
> > 処理時間について教えてもらいたいことがあります。
> > 今迄、日ごとに分けたファイルから情報をあつめて集計しようと考えてます。
> > FileSystemObjectのサンプルコードを参考にして書いてみたコードがあります。
> > "siken"ファイルに"1.xlsm","3.xlsm""4.xlsm"3個が存在していて有無を確認した後、あったらSheet1の”A1”の値を "syuukei"シートに書き出す処理をしてみました。
> > 僅か3個の処理で2~3秒かかってます。コードの描き方がいけないのでしょうか?それともこのくらいはかかるものでしょうか?うまく説明できずすいません。よろしくお願いします。
> >


9985 : 小川慶一の回答 (2018-05-16 08:01:04)

あじろうさん:

ソース拝見しました。

これなら、一瞬で処理は終わるはずですけどね。

Option Explicit
Sub FileExists()
    Dim fs As Scripting.FileSystemObject
    Dim fname, st As String
    Dim c As Long
    Dim wb As Workbook
    Debug.Print Now & "開始"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Application.DisplayAlerts = False
    Workbooks("syuukei").Worksheets("Sheet1").Range("A1").ClearContents
    For c = 1 To 5
        fname = ThisWorkbook.Path & "\siken\" & c & ".xlsm"
        If fs.FileExists(filespec:=fname) Then
            Workbooks.Open filename:=fname
            Set wb = ActiveWorkbook
            st = st & wb.Worksheets("Sheet1").Range("A1").Value
            wb.Close
        End If
    Next
    Workbooks("syuukei").Worksheets("Sheet1").Range("A1").Value = st
    Application.DisplayAlerts = False
    Set fs = Nothing
    Debug.Print Now & "終了"
End Sub


開けた先のファイルがよほど重たいとかですか?
その場合は、手作業でファイルを開いても時間がかかりそうですが。


> いつもお世話になっております。
> 処理時間について教えてもらいたいことがあります。
> 今迄、日ごとに分けたファイルから情報をあつめて集計しようと考えてます。
> FileSystemObjectのサンプルコードを参考にして書いてみたコードがあります。
> "siken"ファイルに"1.xlsm","3.xlsm""4.xlsm"3個が存在していて有無を確認した後、あったらSheet1の”A1”の値を "syuukei"シートに書き出す処理をしてみました。
> 僅か3個の処理で2~3秒かかってます。コードの描き方がいけないのでしょうか?それともこのくらいはかかるものでしょうか?うまく説明できずすいません。よろしくお願いします。
>


9966 : あじろうさんのコメント (2018-05-14 00:55:23)

いつもお世話になっております。
処理時間について教えてもらいたいことがあります。
今迄、日ごとに分けたファイルから情報をあつめて集計しようと考えてます。
FileSystemObjectのサンプルコードを参考にして書いてみたコードがあります。
"siken"ファイルに"1.xlsm","3.xlsm""4.xlsm"3個が存在していて有無を確認した後、あったらSheet1の”A1”の値を "syuukei"シートに書き出す処理をしてみました。
僅か3個の処理で2~3秒かかってます。コードの描き方がいけないのでしょうか?それともこのくらいはかかるものでしょうか?うまく説明できずすいません。よろしくお願いします。


5563 : 小川慶一の回答 (2016-01-11 12:45:50)

山田 将之 さん:

よくある悩みです。
原理原則が分かれば簡単に理解できることでも、表面だけ追いかけていると分かりませんね。

>サンプルを抜き取って使ってたファイルとフォルダーの操作でしたが、その中身を完全に、理解していませんでした。ですので、基本からわかりやすく説明してもらい本当に助かります。


5546 : 山田 将之さんのコメント (2016-01-10 09:23:41)

サンプルを抜き取って使ってたファイルとフォルダーの操作でしたが、その中身を完全に、理解していませんでした。ですので、基本からわかりやすく説明してもらい本当に助かります。


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 これから取り扱うトピックを説明
    【動画1】 これから取り扱うトピックを説明 未習得
  2. 【動画2】 クラスとインスタンス、外部ライブラリの参照
    【動画2】 クラスとインスタンス、外部ライブラリの参照 未習得
  3. 【動画3】 「クラス」と「インスタンス」について
    【動画3】 「クラス」と「インスタンス」について 未習得
  4. 【動画4】 クラスの連携について
    【動画4】 クラスの連携について 未習得
  5. 【動画5】 「クラス」と「インスタンス」の生成を体験
    【動画5】  「クラス」と「インスタンス」の生成を体験 未習得
  6. 【動画6】 「New キーワード」と 「固有オブジェクト型での変数宣言とそのメリット」について
    【動画6】 「New キーワード」と 「固有オブジェクト型での変数宣言とそのメリット」について 未習得
  7. 【動画7】 外部ライブラリの参照について1
    【動画7】 外部ライブラリの参照について1 未習得
  8. 【動画8】 外部ライブラリの参照について2
    【動画8】 外部ライブラリの参照について2 未習得
  9. 【動画9】 ファイルの操作・フォルダの操作説明
    【動画9】 ファイルの操作・フォルダの操作説明 未習得
  10. 【動画10】 フォルダ内のサブフォルダとファイルをリストアップ
    【動画10】 フォルダ内のサブフォルダとファイルをリストアップ 未習得
  11. 【動画11】 テキストファイルの操作について
    【動画11】 テキストファイルの操作について 未習得
  12. 【動画12】 文字列操作の一例を紹介
    【動画12】 文字列操作の一例を紹介 未習得
  13. 【動画13】 データベース接続を簡単に実現する外部ライブラリについて
    【動画13】 データベース接続を簡単に実現する外部ライブラリについて 未習得
  14. 【動画14】 データベースとの接続と接続解除について
    【動画14】 データベースとの接続と接続解除について 未習得
  15. 【動画15】 Openメソッドについて
    【動画15】 Openメソッドについて 未習得
  16. 【動画16】 カレントレコードについて
    【動画16】 カレントレコードについて 未習得
  17. 【動画17】 簡単なSQL を使った.mdb ファイルからデータを取得するサンプルについて
    【動画17】 簡単なSQL を使った.mdb ファイルからデータを取得するサンプルについて 未習得
  18. 【動画18】 ORDER BYの紹介
    【動画18】 ORDER BYの紹介 未習得
  19. 【動画19】 データベースの更新について
    【動画19】 データベースの更新について 未習得
  20. 【動画20】 既存レコード内容の削除とデータリンクファイルによる接続について
    【動画20】 既存レコード内容の削除とデータリンクファイルによる接続について 未習得
  21. 【動画21】 Office アプリケーションを操作・連携するには
    【動画21】 Office アプリケーションを操作・連携するには 未習得
  22. 【動画22】 PowerPoint の主要オブジェクト紹介
    【動画22】 PowerPoint の主要オブジェクト紹介 未習得
  23. 【動画23】 Excel の表を貼り付けるには
    【動画23】 Excel の表を貼り付けるには 未習得
  24. 【動画24】 Wordと連携するには
    【動画24】 Wordと連携するには 未習得
  25. 【動画25】 文書中の一文を操作するには
    【動画25】 文書中の一文を操作するには 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ