各部署からファイルを回収し、記入済データを手元資料に統合その2

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

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

解説

演習問題テーマ:各部署からファイルを回収し、記入済データを手元資料に統合その2

別々のフォルダにあるファイルを次々に開き、欲しいデータを取得します。さらに、既存テーブルにない新規の取引があった場合、その情報を記入済データから取り込めるようにします。

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

12419 : 小川慶一の回答 (2020-09-12 08:34:54)

たかちゃんさん:

おはようございます。

> アドバンスドに来て、値の記述が長くなることが多かった為、プログラムを書いていて「面倒だなぁ」とか「若干、頭が混乱するなぁ」と感じることがあり少し気にはなっていたのです。

腕力をつけていると思ってください。
思考力や構想力、それらをコードに落とせる手作業の正確さのトレーニングです。

発展編1に進んでさらに知識がつくと、このシリーズの課題ももっと簡単に書けるようになります。
なのですが、そのときはそのときで、実務でも、演習でも、そのときなりの腕力を要求される課題にチャレンジすることになります。

スキルは、知識と腕力でセットです。

ひきつづき、よい学びを (^^*


12418 : たかちゃんさんのコメント (2020-09-12 02:04:14)

【感想】
ここまで動画4以外は悩むことなく順調でしたが、ここに来てつまづきました。( ><) 類似問題(動画6)では問題なかったのですが。

アドバンスドに来て、値の記述が長くなることが多かった為、プログラムを書いていて「面倒だなぁ」とか「若干、頭が混乱するなぁ」と感じることがあり少し気にはなっていたのです。

良い機会なので、ここで動画1に戻って再度復習してから最後のピボットテーブルに挑戦することにしました。 


12195 : 小川慶一の回答 (2020-06-15 04:47:49)

受講生 さん:

これまでの学習状況から、安心して発展編2をお勧めできます。
よい学びになるでしょう。

> ・「理解できない部分」は無いものの、見たことがない応用課題が現れた時に、スラスラ解けるほどのスキルではない
> ・ただし、現在受講可能な本サイトの講座における演習(「基礎フォローアップアドバンスド」等、発展編1までのオンライン講座によって受講可能な各種演習)については、何周もしている為問題なく対応可能(応用力に不安・・・)

ここは、実戦でマクロをいろいろ書いているうちに、解消するものと思います。

発展編2も演習があります。
内容濃いので、楽しんでいただけるかと。

ひきつづきよろしくお願いいたします。


12192 : 受講生さんのコメント (2020-06-14 12:53:57)

小川先生:
ご確認いただきありがとうございます。
「thisworkbook」を活用した記述方法、参考にさせていただきます。

ここでご相談するのが正しいのかわかりませんが、発展編2について言及頂いたので、ご相談させていただきます。

先日申し上げた通り現在発展編1までを完了したステータスですが、今後の学習方法について御指南頂きたく存じます。
なお、現状のスキル及び環境は以下の通りです。

・発展編1までを受講完了(導入編から開始して約2か月ほど)
・発展編1までの内容であれば「理解できない部分」は無く、伝票作成マクロやカレンダー作成マクロについては2回ずつ程何も見ずに作成
・「理解できない部分」は無いものの、見たことがない応用課題が現れた時に、スラスラ解けるほどのスキルではない
・ただし、現在受講可能な本サイトの講座における演習(「基礎フォローアップアドバンスド」等、発展編1までのオンライン講座によって受講可能な各種演習)については、何周もしている為問題なく対応可能(応用力に不安・・・)

上記を踏まえて、今後の学習方法について検討及び懸案事項は以下です
①現状スキルの更なる徹底及び応用力を付ける
 →購入講座において手を付けていない演習が無い為、何かしら演習問題を拾ってくる必要がある(ネットで探す?書籍等教材を購入?)
 →実務において自身のスキルを実践してはいるが、業務は持ち帰れないため、自宅学習時の演習が欲しい
②発展編2を購入し、スキルの更なる向上に進む
 →先述の通り「発展編1」までの内容は理解し手を付けたことのある演習はスラスラとけるものの、全く目新しい課題を目の前にしたときにスラスラ解ける自信はない為、その状態で「発展編2」に進めてしまって良いものなのか不安

長くなりましたが、上記①か②か、もしくはもっと良い学習の進め方があればご教示頂けると幸いです。
また、①を進めることが適切な場合、小川先生のほうで何か適切な教材があればご紹介いただけると助かります。

> 受講生 さん:
>
> こんにちは。
>
> 投稿ありがとうございます。
>
> お手数いただき恐縮です。
>
> 「正常に動作する」という前提で、概観しました。
>
> 基本のスキルがしっかりしていらっしゃるので、もはやあまりコメントすべき点もありません。
> あえて挙げるなら以下でしょうか。
>
>

Set wsFm = Workbooks("部署情報.xls").Worksheets("部署情報") 'thisworkbookを使って書き直したほうがすっきりします
> 
> 'ディレクトリは thisworkbook.path を使った相対パスにしたほうがメンテナンス性が高まります。
> Workbooks.Open Filename:= _
>     "C:\Users\tomot\Desktop\ks301_305\配布物\03-さらなる課題\さらなる課題1\エクセルファイル\記入用.xls"
> ActiveWorkbook.SaveAs Filename:= _
>     "C:\Users\tomot\Desktop\ks301_305\配布物\03-さらなる課題\さらなる課題1\" & stFolderName & "\" & stFileName, _
>     FileFormat:=xlExcel8, _
>     Password:=""
> 
> '↓発展編2では、「自作関数を作り、その戻り値によって処理を分岐する」という書き方を学びます。
> If wsToNyu.Range("A" & lnTo).Value = .Range("A" & lnFm).Value And wsToNyu.Range("B" & lnTo).Value = .Range("B" & lnFm).Value And wsToNyu.Range("C" & lnTo).Value = .Range("C" & lnFm).Value Then
>     wsToNyu.Range("E" & lnTo).Value = .Range("E" & lnFm).Value
>     b = True
>     Exit For
> End If

>
>


12188 : 小川慶一の回答 (2020-06-14 08:14:48)

受講生 さん:

こんにちは。

投稿ありがとうございます。

お手数いただき恐縮です。

「正常に動作する」という前提で、概観しました。

基本のスキルがしっかりしていらっしゃるので、もはやあまりコメントすべき点もありません。
あえて挙げるなら以下でしょうか。

Set wsFm = Workbooks("部署情報.xls").Worksheets("部署情報") 'thisworkbookを使って書き直したほうがすっきりします

'ディレクトリは thisworkbook.path を使った相対パスにしたほうがメンテナンス性が高まります。
Workbooks.Open Filename:= _
    "C:\Users\tomot\Desktop\ks301_305\配布物\03-さらなる課題\さらなる課題1\エクセルファイル\記入用.xls"
ActiveWorkbook.SaveAs Filename:= _
    "C:\Users\tomot\Desktop\ks301_305\配布物\03-さらなる課題\さらなる課題1\" & stFolderName & "\" & stFileName, _
    FileFormat:=xlExcel8, _
    Password:=""

'↓発展編2では、「自作関数を作り、その戻り値によって処理を分岐する」という書き方を学びます。
If wsToNyu.Range("A" & lnTo).Value = .Range("A" & lnFm).Value And wsToNyu.Range("B" & lnTo).Value = .Range("B" & lnFm).Value And wsToNyu.Range("C" & lnTo).Value = .Range("C" & lnFm).Value Then
    wsToNyu.Range("E" & lnTo).Value = .Range("E" & lnFm).Value
    b = True
    Exit For
End If



12187 : 受講生さんのコメント (2020-06-13 10:44:11)

先ほどの投稿の2つ目のファイルです


12186 : 受講生さんのコメント (2020-06-13 10:43:02)

お世話になります。
Excelマクロ 発展編1を受講完了したものです。
「エクセルマクロ・VBA基礎編フォローアップ アドバンスド」動画13~17の講座にて、
「さらなる課題」が存在したことを思い出し、この度発展編1までの知識を踏まえたうえで取り掛かってみました。
コード書き下ろしたらお送りすれば添削いただけると記載ございましたが、お送り先はこちらでよろしかったでしょうか。

※添付ファイルのうち「部署情報.xls」にさらなる課題1のマクロを
 「全部1つ.xls」にさらなる課題2のマクロを記述しております。
※基本的には各課題に格納されていたテキスト内容に沿ってコード記述をしておりますが、
 「さらなる課題2」についてはテキスト内に記載のございました「実装例4」のイメージで作成しております。
※当方の理解不足により、そもそもの課題主旨と全く違う回答となっておりましたら申し訳ありません。
※ファイルが2つございますので2回に分けて投稿いたします


11788 : 小川慶一の回答 (2020-02-06 09:43:15)

受講生 さん:

> 今回見つけていただいたのは、ステップイン実行で1行ずつ実行されて問題の箇所を見つけられたのでしょうか。
> 自分で、ステップインで実行しても見つける事が出来なかったので

以下の [*1] で示した行にブレークポイントを入れてマクロを実行しても、一度もブレークポイントで中断しません。
そのことから、[*2]で示した行の比較演算が正しく機能していないと推定できます。

この件は、「複数ファイルを開いて処理する」という以前に、その前段階の、単体のファイルを開いて処理するマクロを作った段階で発見されるべき問題でした。
個々のステップでの検証を意識してしっかりやるようにしてください。

For moto = 2 To 51
    mitsukatta = False
    If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then '[*2]
        For saki = 2 To 51   '7.
            If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                mitsukatta = True
                Exit For
            Else
            End If
        Next
    Else
        Exit For '[*1]
    End If
    If mitsukatta = False Then
        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value

        shinkinyu = shinkinyu + 1
    End If
Next


> 見つけていただきました間違いは、全く考えの及ばない箇所でした。空白を見つけるという目的から、 "と"の間に空白を作っていました。

ブレークポイントの件もそうですが、この手の基礎的なスキルが身についていないようですと、今後も自力での解決に都度苦労するでしょう。
今回のご質問のようなレベルの課題にトライするには、より簡単な課題での演習が不足しています。
これは、コードのインデント、質問に回答者が答えるために必要な情報の過不足ない選択、すべてから感じられることです。

その状態でレベルの合わない課題にトライして苦労するより、「基礎編フォローのベーシックの問題は、見た瞬間勝手に手が動いて解ける」という状態になるまでひたすら手を動かしたほうがあなたレベルの方にはよい練習になります。
「基礎編フォローのベーシック」に何度もトライされることを強く推奨します。
結果的にはそのほうが近道です。


11783 : 受講生さんのコメント (2020-02-05 06:43:47)

小川先生、

お世話になります。ご回答ありがとうございました。見つけていただきました間違いは、全く考えの及ばない箇所でした。空白を見つけるという目的から、 "と"の間に空白を作っていました。

またcode全体のインデントについてのご指摘ありがとうございます。これからは、ご指摘いただいた点も注意して作成するようにします。

今後、codeを送付させていただくときは、各codeの挙動を再確認して、必要な箇所だけ送るようにします。

ちなみに今回見つけていただいたのは、ステップイン実行で1行ずつ実行されて問題の箇所を見つけられたのでしょうか。自分で、ステップインで実行しても見つける事が出来なかったので、質問させていただきました。

小川慶一さん:

> 添削を返送します。
> 結論だけ書くと、比較演算のところでひっかかっていました。
>
> " "だと、比較対象は「半角スペースひとつ」です。
> "" だと、比較対象は「長さ0の文字列」、すなわちブランクとなります。
>
>

Option Explicit
> 
> '以下で添削した箇所以外にも、不必要に空白行が多いです。そういうところも詰めましょう。
> Sub dataget_fin_fin1()
>     Dim moto '←インデント一段少なかったです
>     Dim saki
>     
>     Dim foldername
>     Dim filename
>     Dim busho
>     Dim shinkinyu
>     Dim shinkishu
>     Dim mitsukatta
>     
>     shinkinyu = 52
>     shinkishu = 42
>     For busho = 2 To 10
>         foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
>         filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value
>         
>         Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename
>         
>         
>         For moto = 2 To 51
>             mitsukatta = False
> '            If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
>             If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> "" Then
>                 For saki = 2 To 51   '7.
>                     If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
>                         Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
>                         mitsukatta = True
>                         Exit For
>                     Else
>                     End If
>                 Next
>             Else
>                 Exit For
>             End If
>             If mitsukatta = False Then '←インデント一段多すぎでした
>                 Debug.Print shinkinyu & vbTab & moto & vbTab & Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
>     
>                 shinkinyu = shinkinyu + 1
>             End If '←インデント一段多すぎでした
>             
>         Next
>         
>         
>         For moto = 2 To 41
>             mitsukatta = False
> '            If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value <> " " Then
>             If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value <> "" Then
>                 For saki = 2 To 41
>                     If Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value Then
>                         Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
>                         mitsukatta = True   '27.
>                         Exit For
>                     Else
>                     End If
>                 Next
>             Else
>                 Exit For
>             End If
>             '↓以下、インデント一段多すぎでした(ここから)
>             If mitsukatta = False Then
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("B" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("B" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("C" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("C" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("D" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("D" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
> 
>                 shinkishu = shinkishu + 1
>             End If
>             '↑インデント一段多すぎでした(ここまで)
>         Next
>         Workbooks(filename).Close
>     
>          
>     
>     Next
> End Sub

>
> 今後も、コードを送付されるときは、問題を再現できる、実行可能なもの送られるようにしてください。
> そのほうが解決にかかる手間も時間も減らせます。
>
> さらに言うと、次のステップは、「問題の再現可能な最低限のコードを作って送る」ということです。
> たとえば、以下でもよいですね。「歳出」にかかる部分を変数宣言含めてすべて削りました。
>
>
Sub dataget_fin_fin2()
>     Dim moto
>     Dim saki
>     
>     Dim foldername
>     Dim filename
>     Dim busho
>     Dim shinkinyu
>     Dim mitsukatta
>     
>     shinkinyu = 52
>     For busho = 2 To 10
>         foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
>         filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value
>         Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename
>         
>         For moto = 2 To 51
>             mitsukatta = False
>             If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
>                 For saki = 2 To 51
>                     If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
>                         Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
>                         mitsukatta = True
>                         Exit For
>                     Else
>                     End If
>                 Next
>             Else
>                 Exit For
>             End If
>             If mitsukatta = False Then
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
>                 Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
>     
>                 shinkinyu = shinkinyu + 1
>             End If
>         Next
>         Workbooks(filename).Close
>     Next
> End Sub

>
> こういうのは、「無関係な部分を削り、動作確認」ということをくりかえしていき、作ります。
> というより、こういうことをしていると自分で問題を発見できます。
> 僕自身も、自分が書いてるプログラムがどうしても不可解な動作をしてしまうというときにはこういう対処法で問題を探します。問題解決のテクニックのひとつとして、おすすめです。
>
>


11777 : 小川慶一の回答 (2020-01-31 12:15:28)

添削を返送します。
結論だけ書くと、比較演算のところでひっかかっていました。

" "だと、比較対象は「半角スペースひとつ」です。
"" だと、比較対象は「長さ0の文字列」、すなわちブランクとなります。

Option Explicit

'以下で添削した箇所以外にも、不必要に空白行が多いです。そういうところも詰めましょう。
Sub dataget_fin_fin1()
    Dim moto '←インデント一段少なかったです
    Dim saki
    
    Dim foldername
    Dim filename
    Dim busho
    Dim shinkinyu
    Dim shinkishu
    Dim mitsukatta
    
    shinkinyu = 52
    shinkishu = 42
    For busho = 2 To 10
        foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
        filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value
        
        Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename
        
        
        For moto = 2 To 51
            mitsukatta = False
'            If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
            If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> "" Then
                For saki = 2 To 51   '7.
                    If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
                        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                        mitsukatta = True
                        Exit For
                    Else
                    End If
                Next
            Else
                Exit For
            End If
            If mitsukatta = False Then '←インデント一段多すぎでした
                Debug.Print shinkinyu & vbTab & moto & vbTab & Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
    
                shinkinyu = shinkinyu + 1
            End If '←インデント一段多すぎでした
            
        Next
        
        
        For moto = 2 To 41
            mitsukatta = False
'            If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value <> " " Then
            If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value <> "" Then
                For saki = 2 To 41
                    If Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value Then
                        Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
                        mitsukatta = True   '27.
                        Exit For
                    Else
                    End If
                Next
            Else
                Exit For
            End If
            '↓以下、インデント一段多すぎでした(ここから)
            If mitsukatta = False Then
                Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("B" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("B" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("C" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("C" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("D" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("D" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value

                shinkishu = shinkishu + 1
            End If
            '↑インデント一段多すぎでした(ここまで)
        Next
        Workbooks(filename).Close
    
         
    
    Next
End Sub


今後も、コードを送付されるときは、問題を再現できる、実行可能なもの送られるようにしてください。
そのほうが解決にかかる手間も時間も減らせます。

さらに言うと、次のステップは、「問題の再現可能な最低限のコードを作って送る」ということです。
たとえば、以下でもよいですね。「歳出」にかかる部分を変数宣言含めてすべて削りました。

Sub dataget_fin_fin2()
    Dim moto
    Dim saki
    
    Dim foldername
    Dim filename
    Dim busho
    Dim shinkinyu
    Dim mitsukatta
    
    shinkinyu = 52
    For busho = 2 To 10
        foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
        filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value
        Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename
        
        For moto = 2 To 51
            mitsukatta = False
            If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
                For saki = 2 To 51
                    If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
                        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                        mitsukatta = True
                        Exit For
                    Else
                    End If
                Next
            Else
                Exit For
            End If
            If mitsukatta = False Then
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
                Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
    
                shinkinyu = shinkinyu + 1
            End If
        Next
        Workbooks(filename).Close
    Next
End Sub


こういうのは、「無関係な部分を削り、動作確認」ということをくりかえしていき、作ります。
というより、こういうことをしていると自分で問題を発見できます。
僕自身も、自分が書いてるプログラムがどうしても不可解な動作をしてしまうというときにはこういう対処法で問題を探します。問題解決のテクニックのひとつとして、おすすめです。


11774 : 受講生さんのコメント (2020-01-29 09:38:17)

ご回答ありがとうございます。ご質問への回答は以下になります。またcodeも再度送らせていただきましたのでご確認よろしくお願いいたします。

[a] shinkinyu の値が 52になるのは、どの行が実行されたときですか。 (回答)Shinkinyuが52になるのは、このプロシージャを開始直後に、shinkinyu=52を実行した時です。

[b] shinkinyu の値が 52からから変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
(回答 shikinyu=53となった直後)
変数 busho 2
変数 moto 8
変数 saki 52
変数 foldername 記入済ファイル置き場a
変数 filename aget.xls

[c] shinkinyu の値が問い[b]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
(回答shinkinyu=54となった直後)
変数 busho  2
変数 moto 9
変数 saki 52
変数 foldername 記入済ファイル置き場a
変数 filename aget.xls

[d] shinkinyu の値が問い[c]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
(回答shinkinyu=55となった直後)
変数 busho 2
変数 moto 10
変数 saki 52
変数 foldername 記入済ファイル置き場a
変数 filename aget.xls

[e] shinkinyu の値が問い[d]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
(回答shinkinyu=56となった直後)
変数 busho 2
変数 moto 11
変数 saki 52
変数 foldername 記入済ファイル置き場a
変数 filename aget.xls

Sub dataget_fin_fin()
Dim moto
Dim saki

Dim foldername
Dim filename
Dim busho
Dim shinkinyu
Dim shinkishu
Dim mitsukatta

shinkinyu = 52
shinkishu = 42
For busho = 2 To 10
foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value

Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename


For moto = 2 To 51
mitsukatta = False
If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
For saki = 2 To 51 '7.
If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
mitsukatta = True
Exit For
Else
End If
Next
Else
Exit For
End If
If mitsukatta = False Then
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value

shinkinyu = shinkinyu + 1
End If

Next


For moto = 2 To 41
mitsukatta = False
If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value <> " " Then
For saki = 2 To 41
If Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value Then
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
mitsukatta = True '27.
Exit For
Else
End If
Next
Else
Exit For
End If
If mitsukatta = False Then
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("A" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("B" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("B" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("C" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("C" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("D" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("D" & moto).Value
Workbooks("コピー全部1つ.xls").Worksheets("歳出").Range("E" & shinkishu).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value

shinkishu = shinkishu + 1
End If
Next
Workbooks(filename).Close



Next
End Sub


小川慶一さん:

> 質問の際は、実行可能なマクロ一式をお送りください。
> そうしていただけないと、正確な診断ができません。
>
> もしも「実行可能なマクロ一式」と言われても何が言いたいのか分からないようでしたら、新しく標準モジュールを作り、そこに、ここに投稿されたマクロを試しに貼り付けてみてください。
> そのマクロを実行しようとしても、エラーメッセージが出るはずです。
> こういうエラーが出ない状態のプログラムを渡す必要があります。
>
> でないと、通常、「いただいたコードでは、問題を再現することができませんでした」という回答だけしかできません。
>
> 少なくとも2行追加が必要です。
> というか、元のコードから取ってくるべき行が少なくともあと2行はあります。
>
> それから、インデントも揃えましょう。
> If mitsukatta = False Then
> End If
>
> の中身は、もう一段右にあるべきです。
>
>
> 「ブレークポイント」を使ってのデバッグでは問題発見はスキル的に難しいご様子ですので...。
> もうちょっと細かく指示しますね。
>
> 上記のコード整形を行ったうえで、そのコードを先頭からステップイン実行で1行ずつ実行しつつ、以下の問いについて調べ、結果をお知らせください。
> その際には、コードも再投稿してください。
>
> [a] shinkinyu の値が 52になるのは、どの行が実行されたときですか。
>
> [b] shinkinyu の値が 52からから変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
> 変数 busho
> 変数 moto
> 変数 saki
> 変数 foldername
> 変数 filename
>
> [c] shinkinyu の値が問い[b]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
> 変数 busho
> 変数 moto
> 変数 saki
> 変数 foldername
> 変数 filename
>
> [d] shinkinyu の値が問い[c]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
> 変数 busho
> 変数 moto
> 変数 saki
> 変数 foldername
> 変数 filename
>
> [e] shinkinyu の値が問い[d]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
> 変数 busho
> 変数 moto
> 変数 saki
> 変数 foldername
> 変数 filename
>
> [f] shinkinyu の値が問い[e]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
> 変数 busho
> 変数 moto
> 変数 saki
> 変数 foldername
> 変数 filename
>
> ... 以下、変数 sinkinyu の値が55より大きい値になるまで同様にくり返す。
>
> もしも[b]以降の問いで指示された調査を行う方法が分からない場合はその旨お知らせください。
>


11773 : 小川慶一の回答 (2020-01-28 11:59:24)

質問の際は、実行可能なマクロ一式をお送りください。
そうしていただけないと、正確な診断ができません。

もしも「実行可能なマクロ一式」と言われても何が言いたいのか分からないようでしたら、新しく標準モジュールを作り、そこに、ここに投稿されたマクロを試しに貼り付けてみてください。
そのマクロを実行しようとしても、エラーメッセージが出るはずです。
こういうエラーが出ない状態のプログラムを渡す必要があります。

でないと、通常、「いただいたコードでは、問題を再現することができませんでした」という回答だけしかできません。

少なくとも2行追加が必要です。
というか、元のコードから取ってくるべき行が少なくともあと2行はあります。

それから、インデントも揃えましょう。
If mitsukatta = False Then
End If

の中身は、もう一段右にあるべきです。


「ブレークポイント」を使ってのデバッグでは問題発見はスキル的に難しいご様子ですので...。
もうちょっと細かく指示しますね。

上記のコード整形を行ったうえで、そのコードを先頭からステップイン実行で1行ずつ実行しつつ、以下の問いについて調べ、結果をお知らせください。
その際には、コードも再投稿してください。

[a] shinkinyu の値が 52になるのは、どの行が実行されたときですか。

[b] shinkinyu の値が 52からから変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
変数 busho
変数 moto
変数 saki
変数 foldername
変数 filename

[c] shinkinyu の値が問い[b]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
変数 busho
変数 moto
変数 saki
変数 foldername
変数 filename

[d] shinkinyu の値が問い[c]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
変数 busho
変数 moto
変数 saki
変数 foldername
変数 filename

[e] shinkinyu の値が問い[d]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
変数 busho
変数 moto
変数 saki
変数 foldername
変数 filename

[f] shinkinyu の値が問い[e]の段階から変わった直後の、以下の変数の値を調べ、それぞれの変数の横に書き出しなさい。
変数 busho
変数 moto
変数 saki
変数 foldername
変数 filename

... 以下、変数 sinkinyu の値が55より大きい値になるまで同様にくり返す。

もしも[b]以降の問いで指示された調査を行う方法が分からない場合はその旨お知らせください。


11772 : 受講生さんのコメント (2020-01-28 06:47:05)

ご回答ありがとうございます。ブレークポイントを入れて調べてみました。shikinyuは52行目を示しています。これはexit forが機能していないということでしょうか。お手数ですが、codeを貼り付けましたので、原因についてご回答いただけないでしょうか。よろしくお願いいたします。

Sub dataget_fin_fin()
    Dim moto
    Dim saki
    
    Dim foldername
    Dim filename
    Dim busho
    Dim shinkinyu
    Dim shinkishu
    Dim mitsukatta
    
    shinkinyu = 52
    shinkishu = 42
    For busho = 2 To 10
        foldername = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("F" & busho).Value
        filename = Workbooks("コピー全部1つ.xls").Worksheets("部署情報").Range("G" & busho).Value
        
        Workbooks.Open filename:="C:\Users\PCUser\Documents\ガラパゴス\ad映像16\" & foldername & "\" & filename
        
        
        For moto = 2 To 51
            mitsukatta = False
            If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> " " Then
                For saki = 2 To 51
                    If Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value Then
                        Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                        mitsukatta = True
                        Exit For
                    Else
                    End If
                Next
            Else
                Exit For
            End If
            If mitsukatta = False Then
            Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("A" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value        '24.falseだったら、新しく行を追加して記入する。以下同じ
            Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("B" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value        '24.
            Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("C" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value        '24.
            Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("D" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value        '24.
            Workbooks("コピー全部1つ.xls").Worksheets("歳入").Range("E" & shinkinyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value        '24.

            shinkinyu = shinkinyu + 1
            End If
            
        Next



小川慶一さん:

> 受講生 さん:
>
> 海外のインターネット環境が整わない環境にいます。
> 資料のDLをできないので、とりいそぎのお返事です。
>
> ファイルの所在ではなく、起きている現象についてのコメントです。
>
> > 例えば、aget.xlsの追加情報が53行目から55行目に記載されるとbget.xlsの追加情報は96行目98行目に取り込まれる
>
> 「数行」というか、かなりの間隔ですね。
> この数字とファイル名は、実際にマクロを実行した結果から取得したものでしょうか。
>
> 原因はいろいろ考えられそうです。
> ソースを見ないとなんとも言えませんが、以下、慣れていないとハマりがちな点など、気になるところを。
>
> [1]
> exit for がきちんと実行されず、 sinkinyu = sinkinyu + 1 が aget.xls のすべてのデータについて実行されてしまっているのでは?というのがメールを読んでの感触です。
> つまり、変数 sinkinyu の値が 55 から 96 に突然変更されたわけではなく、「56行目から95行目には空白を記入している」ということです。
>
> ということで、 exit for の箇所にブレークポイントを入れて [F5] でマクロを実行したときに exit for で動作が止まるか?そのときの変数 sinkinyu の値はいくつか?というところから僕ならチェックします。
>
> [2]
> [1]が問題ではなかったならば、 aget.xls と bget.xls の処理の間に変数 sinkinyu の値を不用意に変更してしまっている箇所がありそうです。
> aget.xls での処理が終わったタイミング(すなわち、動画の10:07以降であれば最後の next のところですね)にブレークポイントを入れてまずは実行。
> ブレークポイントの段階での変数 sinkinyu の値をチェックする。
> それ以降は変数 sinkinyu の値を都度確認しつつ、ステップイン実行 [F8] ですね。
>
> そこまでして分からなければソースをこのコメント欄に貼りつけて相談してください。
>
>
> > お世話になります。ファイルについて確認させてください。動画の通りに自分でcodeを書いたつもりなのですが、VBAを実行しますと各ブックa,b,c,,,,それぞれのブックの追加情報が取り込めてはいるのですが、a,b,c,,,,それぞれのブックの追加情報の間に数行のスペース出来てしまっています。(例えば、aget.xlsの追加情報が53行目から55行目に記載されるとbget.xlsの追加情報は96行目98行目に取り込まれる)。
> > そこで正解のcodeを確認したいのですが、プロシージャー名dataget_fin_finの正解はどちらに保存されてますでしょうか。
>


11763 : 小川慶一の回答 (2020-01-26 09:08:53)

受講生 さん:

海外のインターネット環境が整わない環境にいます。
資料のDLをできないので、とりいそぎのお返事です。

ファイルの所在ではなく、起きている現象についてのコメントです。

> 例えば、aget.xlsの追加情報が53行目から55行目に記載されるとbget.xlsの追加情報は96行目98行目に取り込まれる

「数行」というか、かなりの間隔ですね。
この数字とファイル名は、実際にマクロを実行した結果から取得したものでしょうか。

原因はいろいろ考えられそうです。
ソースを見ないとなんとも言えませんが、以下、慣れていないとハマりがちな点など、気になるところを。

[1]
exit for がきちんと実行されず、 sinkinyu = sinkinyu + 1 が aget.xls のすべてのデータについて実行されてしまっているのでは?というのがメールを読んでの感触です。
つまり、変数 sinkinyu の値が 55 から 96 に突然変更されたわけではなく、「56行目から95行目には空白を記入している」ということです。

ということで、 exit for の箇所にブレークポイントを入れて [F5] でマクロを実行したときに exit for で動作が止まるか?そのときの変数 sinkinyu の値はいくつか?というところから僕ならチェックします。

[2]
[1]が問題ではなかったならば、 aget.xls と bget.xls の処理の間に変数 sinkinyu の値を不用意に変更してしまっている箇所がありそうです。
aget.xls での処理が終わったタイミング(すなわち、動画の10:07以降であれば最後の next のところですね)にブレークポイントを入れてまずは実行。
ブレークポイントの段階での変数 sinkinyu の値をチェックする。
それ以降は変数 sinkinyu の値を都度確認しつつ、ステップイン実行 [F8] ですね。

そこまでして分からなければソースをこのコメント欄に貼りつけて相談してください。


> お世話になります。ファイルについて確認させてください。動画の通りに自分でcodeを書いたつもりなのですが、VBAを実行しますと各ブックa,b,c,,,,それぞれのブックの追加情報が取り込めてはいるのですが、a,b,c,,,,それぞれのブックの追加情報の間に数行のスペース出来てしまっています。(例えば、aget.xlsの追加情報が53行目から55行目に記載されるとbget.xlsの追加情報は96行目98行目に取り込まれる)。
> そこで正解のcodeを確認したいのですが、プロシージャー名dataget_fin_finの正解はどちらに保存されてますでしょうか。


11762 : 受講生さんのコメント (2020-01-26 06:58:22)

お世話になります。ファイルについて確認させてください。動画の通りに自分でcodeを書いたつもりなのですが、VBAを実行しますと各ブックa,b,c,,,,それぞれのブックの追加情報が取り込めてはいるのですが、a,b,c,,,,それぞれのブックの追加情報の間に数行のスペース出来てしまっています。(例えば、aget.xlsの追加情報が53行目から55行目に記載されるとbget.xlsの追加情報は96行目98行目に取り込まれる)。
そこで正解のcodeを確認したいのですが、プロシージャー名dataget_fin_finの正解はどちらに保存されてますでしょうか。


8833 : 小川慶一の回答 (2017-09-06 00:12:52)

浦山大さん:

先日は、対面講座にお越しいただきありがとうございました。

> ※今日、昔記録マクロで作成していたちぎれた7つ程度の部分的なマクロを一つに繋ぎ、まとめて処理させてみたら動きました。コードをみてもたじろがない自分、「あ、繋げばいいじゃん」って簡単に出来た自分に驚いています(人に見せたらその人が固まってしまいました笑)。

さっそく、活用されてますね v(^^*

> 最後の方は1つの動画に1時間以上時間かかりました…笑
> きちんと辿り着けたので一安心です。

初めてでその時間程度なら、悪くないか?とも v(^^*

> 動画の流れの中でも、
> 何度も何度も同じ操作や考え方を口に出してくださる。
> 手を動かして教えてくださる。
>
> ↑この点が一番ありがたかったです。
> なぞっているだけでも、「これは前にも言ってたな…」ということで、

「大事なことはくり返して言う」は、教える側に立場に立ったときの、基本中の基本です。
反対に、学ぶ側に立ったときに、そういう扱いをされたものを、重要なものとして取り扱うことが大切です。浦山さんはそこしっかりされているので、サポートする側としてはとても楽です。

基礎編の演習は基本パターン(アルゴリズムと言います)の代表的なものをほぼ網羅しています。
基礎編演習くり返すだけでも、相当に力つきますよ!

あと、もういつでもお好きなタイミングで発展編1にお進みください。
ひきつづき、よろしくどうぞ☆


8828 : 浦山大さんのコメント (2017-09-05 00:20:43)

日、月使ってここまで動画を見、実際に小川先生の動きを真似て同じようにマクロを作成し、動くところまで持っていけました。
最後の方は1つの動画に1時間以上時間かかりました…笑
きちんと辿り着けたので一安心です。

動画の流れの中でも、
何度も何度も同じ操作や考え方を口に出してくださる。
手を動かして教えてくださる。

↑この点が一番ありがたかったです。
なぞっているだけでも、「これは前にも言ってたな…」ということで、
少し先まで自分でやってみてから検証→正誤チェック→次という流れで進めることが出来ました。
真似、少しtry&errorしているだけですが理解が進んだと考えます。

ここから先は独り立ち出来るように再度課題に向かっていきます。

※先日は対面講座&その他諸々ありがとうございました。
とても有意義でした。

※今日、昔記録マクロで作成していたちぎれた7つ程度の部分的なマクロを一つに繋ぎ、まとめて処理させてみたら動きました。コードをみてもたじろがない自分、「あ、繋げばいいじゃん」って簡単に出来た自分に驚いています(人に見せたらその人が固まってしまいました笑)。

続きも頑張ります!(いつも挨拶と感想ばかりですみません)


7463 : 小川慶一の回答 (2016-12-28 08:24:39)

受講生 さん:

こんにちは。

>小川さんの模範解答には
>

If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> "" Then

>
>というコードがありますで、そのコードがなくともできるのではないかとおもい

ということでしたら、このページで質問するのではなく、そのコードが登場した動画で質問してください。
つまり、この動画よりひとつ前の動画(*1)です。

まずは、改めて(*1)にて学んでみてください。その前半ですでにこのコードが登場しています(*2)。

(*1)の段階では理解できていたのでしょうか?
もしでしであればこのページに至ってもできていることでしょう。
もしそうでなかったとしたら、(*2)の段階のコードをまずは入念に研究していただければと思います。


7462 : 受講生さんのコメント (2016-12-28 05:16:17)

小川様

お世話になります。
フォローアップ追加分の最後に記入済みデータを手元資料に統合という課題の
最後に追加データもとってくるというのがありますが

小川さんの模範解答には

If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> "" Then


というコードがありますで、そのコードがなくともできるのではないかとおもい
以下のコードを作成しましたが、追記データがとびとびになってうまくいきませんでした。
原因を探ろうとしましたがお手上げです。
ご指導よろしくお願いいたします。

Sub hukusyuu() '
    
    Dim foldername
    Dim filename
    Dim tuikanyu
    Dim tuikasyu
    tuikanyu = 52
    tuikasyu = 42
    
    Dim gyo
    For gyo = 2 To 10
    
    foldername = Workbooks("全部1つ.xls").Worksheets("部署情報").Range("F" & gyo).Value
    filename = Workbooks("全部1つ.xls").Worksheets("部署情報").Range("G" & gyo).Value
    
        Workbooks.Open filename:="D:\h引越し\s仕事関係\VBA\f基礎追加フォローアップ解凍ファイル\配布物 最後の課題用に改変\01-課題一式\" & foldername & "\" & filename
            
        Dim moto
        Dim saki
        Dim mituketa
        
        
        For moto = 2 To 51 '←ここと(moto)
            mituketa = False
            For saki = 2 To 51 '←ここ(saki)が逆ではだめ。つまりフラグはあくまでmotoを見に行ったとき、ない場合の処理なので
                If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value = Workbooks("全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value Then
                    Workbooks("全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                    mituketa = True
                    Exit For
                End If
            Next
            If mituketa = False Then
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("A" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("B" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("C" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("D" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("E" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                tuikanyu = tuikanyu + 1
            End If
        Next
        
        
        For moto = 2 To 41
            mituketa = False
            For saki = 2 To 41
                If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value = Workbooks("全部1つ.xls").Worksheets("歳出").Range("A" & saki).Value Then
                    Workbooks("全部1つ.xls").Worksheets("歳出").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
                    mituketa = True
                    Exit For
                End If
            Next
            If mituketa = False Then
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("A" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("B" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("B" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("C" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("C" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("D" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("D" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("E" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
                tuikasyu = tuikasyu + 1
            End If
        Next
        
        Workbooks(filename).Close
    Next
    
End Sub



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

本講座の動画一覧

  1. 【動画1】 住所情報を都道府県から市区町村レベルで細かく分割する
    【動画1】 住所情報を都道府県から市区町村レベルで細かく分割する 未習得
  2. 【動画2】 保険料額表から標準報酬額ごとの保険料負担額を算出する
    【動画2】 保険料額表から標準報酬額ごとの保険料負担額を算出する 未習得
  3. 【動画3】 セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する
    【動画3】 セル内の文字列から区切り文字を見つけ、その出現回数+1回だけデータ転記する 未習得
  4. 【動画4】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す
    【動画4】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す 未習得
  5. 【動画5】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を反映しつつデータ転記する
    【動画5】 セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を反映しつつデータ転記する 未習得
  6. 【動画6】 VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ
    【動画6】 VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ 未習得
  7. 【動画7】 VLookUp関数、Index関数、Match関数より便利なマクロ-複数シート間、複数ファイル間でのマッチング
    【動画7】 VLookUp関数、Index関数、Match関数より便利なマクロ-複数シート間、複数ファイル間でのマッチング 未習得
  8. 【動画8】 転記先シートを生成してデータを流し込む。
    【動画8】 転記先シートを生成してデータを流し込む。 未習得
  9. 【動画9】 転記先ファイルを生成してデータを流し込む。
    【動画9】 転記先ファイルを生成してデータを流し込む。 未習得
  10. 【動画10】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で作成する。
    【動画10】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で作成する。 未習得
  11. 【動画11】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で同一ファイル内に連続的に作成する。
    【動画11】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で同一ファイル内に連続的に作成する。 未習得
  12. 【動画12】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で複数の別ファイルとして連続的に作成する。
    【動画12】 条件に一致するデータだけのリストを、条件に一致しないデータを削除する方法で複数の別ファイルとして連続的に作成する。 未習得
  13. 【動画13】 ファイル配布→配布先でのデータ記入→記入済データを手元資料に統合
    【動画13】 ファイル配布→配布先でのデータ記入→記入済データを手元資料に統合 未習得
  14. 【動画14】 データ記入用ファイルを配布する-その1
    【動画14】 データ記入用ファイルを配布する-その1 未習得
  15. 【動画15】 データ記入用ファイルを配布する-その2
    【動画15】 データ記入用ファイルを配布する-その2 未習得
  16. 【動画16】 各部署からファイルを回収し、記入済データを手元資料に統合その1
    【動画16】 各部署からファイルを回収し、記入済データを手元資料に統合その1 未習得
  17. 【動画17】 各部署からファイルを回収し、記入済データを手元資料に統合その2
    【動画17】 各部署からファイルを回収し、記入済データを手元資料に統合その2 未習得
  18. 【動画18】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その1)
    【動画18】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その1) 未習得
  19. 【動画19】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-1)
    【動画19】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-1) 未習得
  20. 【動画20】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-2)
    【動画20】 商品ごと、年ごとの販売額合計をピボットテーブルのように出力する(その2-2) 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ