発展編1 フォローメールセミナー 第4回

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

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

解説

発展編1のフォローメールセミナー第4回のフィードバック記入ページです。 【動画はありません】個別ページにて重要事項満載のフォローメールをお読みいただけます。

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

12311 : 小川慶一の回答 (2020-07-29 08:35:14)

受講生 さん:

おはようございます。

くり返しの構文には、 for next, for each, do loop があります。
それぞれ別の特徴があります。 for next がいちばん概念を理解しやすいし取り扱いも簡単なので、講座では基礎編で for next、発展編1であとの2つ、という順序でノウハウをお伝えしています。


12310 : 受講生さんのコメント (2020-07-28 01:50:03)

12309 のコメント失礼いたしました。
一部修正します。
コメント投稿してみましたが、送信前の私のチェックが十分でないために
間違いに気づいて大変恥ずかしく思います。
削除頂けないでしょうか。

仕事でも、このような失敗があります。
チェックを怠ってミスすることや
自分の失言に自分でゲンナリすることもあります。
こうした自分自身も変わりたいです。

Option Explicit
 Sub yoshu01()
'[1]
    Dim shFm As Worksheet
    Dim lnFm As Long
    Dim lnFmMx As Long
    Set shFm = Worksheets("main")
    InFmMx = shFm.Range("C65536").End(xlUp).Row
    For lnFm = 2 To InFmMx
        If shFm.Range("B" & lnFm).Value <> shFm.Range("B" & lnFm + 1).Value Then 'ここで条件を追加しました
            Debug.Print shFm.Range("B" & lnFm).Value
        End If
    Next
    
 End Sub
Sub yoshu02()
'[2]
    Dim shFm As Worksheet
    Dim shTo As Worksheet
    Dim lnFm As Long
    Dim lnFmMx As Long
    Dim st As String
    Set shFm = Worksheets("main")
    lnFmMx = shFm.Range("C65536").End(xlUp).Row
    For lnFm = 2 To lnFmMx
        If shFm.Range("B" & lnFm).Value <> shFm.Range("B" & lnFm + 1).Value Then
            st = shFm.Range("B" & lnFm).Value
            Sheets("main1").Copy After:=Sheets(2)    'シート追加、シート名の指定しました
            Set shTo = ActiveSheet
            shTo.Name = st
        End If
    Next
    
End Sub
Sub yoshu03()
'[3]
    delete_renshu       'ここにシート削除のプロシージャを追加しました
    Dim shFm As Worksheet
    Dim shTo As Worksheet
    Dim lnFm As Long
    Dim lnFmMx As Long
    Dim st As String
    Set shFm = Worksheets("main")
    lnFmMx = shFm.Range("C65536").End(xlUp).Row
    For lnFm = 2 To lnFmMx
        If shFm.Range("B" & lnFm).Value <> shFm.Range("B" & lnFm + 1).Value Then
            st = shFm.Range("B" & lnFm).Value
            Sheets("main1").Copy After:=Sheets(2)
            Set shTo = ActiveSheet
            shTo.Name = st
        End If
    Next
    
End Sub
Sub delete_renshu()
    Dim sh As Worksheet
    Application.DisplayAlerts = False
    For Each sh In Worksheets
        If Left(sh.Name, 4) <> "main" Then
            sh.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub


11198 : 小川慶一の回答 (2019-02-22 21:41:10)

受講生 さん:

コードには、インデント入れましょう。
sub ... end sub の中身は、[Tab] 一回分インデントです。

Sub Sample_NG()
Dim shTo As Worksheet
Set shTo = ActiveSheet
shTo.Name = st
End Sub
Sub Sample_OK()
	Dim shTo As Worksheet
	Set shTo = ActiveSheet
	shTo.Name = st
End Sub



> ワークシートの変数便利ですね 
> 「目標 フォローメールセミナーには2回に1回は感想を送る事にする」
>
>
Sub Sample()
> Dim shTo As Worksheet
> Set shTo = ActiveSheet
> shTo.Name = st
> End Sub

>
> Right(Year(dt), 2) Year関数も覚えます。
> 紙に書いて持ち歩きます。


11188 : 受講生さんのコメント (2019-02-20 10:04:45)

ワークシートの変数便利ですね 
「目標 フォローメールセミナーには2回に1回は感想を送る事にする」

Sub Sample()
Dim shTo As Worksheet
Set shTo = ActiveSheet
shTo.Name = st
End Sub


Right(Year(dt), 2) Year関数も覚えます。
紙に書いて持ち歩きます。


2741 : 小川慶一の回答 (2014-10-16 19:50:04)

匿名 さん:

将来リリースされるエクセルのバージョンでもそうであり続けるかはわかりませんが、エクセル97のころからずっとそうです。
ダメになったらダメになったで、別の方法をそのとき考えようと思いますし、匿名さんなら考えられるようになることでしょう。

>コピーによって新規に作成されたシートは、アクティブになる。よく覚えておきます。
>今回の予習問題は今まで習ったことの復習だったので、わりとスムーズにできました。


2738 : 受講生さんのコメント (2014-10-15 19:40:10)

コピーによって新規に作成されたシートは、アクティブになる。よく覚えておきます。
今回の予習問題は今まで習ったことの復習だったので、わりとスムーズにできました。


3287 : ガラパゴスタディー事務局の回答 (2014-05-07 14:11:00)

荏隈さん:

いい感じにがんばってらっしゃいますね (^^

Sheets("main1 (2)").Name = st


↑これでもよいです。いつも、新規に作られるシートが "main1 (2)" という名前になるので。

> 今回のマクロでは、
> mainシートのC列の日付が取得されておりました。
> 今回のマクロ文のどこで、mainシートのC列の日付を取得しているのでしょうか?

以下のコメントを参考にしてください。

Sub GetNames_Final_BeforeDelete5()    DeleteSheets_Fin    Dim shFm As Worksheet    Dim lnFm As Long    Dim lnFmMx As Long    Dim st As String    Dim shTo As Worksheet    Set shFm = Worksheets("main")    Dim dt As Date '追加された行    lnFmMx = shFm.Range("B65536").End(xlUp).Row    For lnFm = 2 To lnFmMx        st = shFm.Range("B" & lnFm).Value        Sheets("main1").Copy After:=Sheets(2)        Set shTo = ActiveSheet        shTo.Name = st        shTo.Range("H16").Value = shFm.Range("F" & lnFm).Value        shTo.Range("E16").Value = shFm.Range("D" & lnFm).Value        shTo.Range("F16").Value = shFm.Range("E" & lnFm).Value        If shFm.Range("G" & lnFm).Value > 0 Then            shTo.Range("I16").Value = shFm.Range("G" & lnFm).Value        Else            shTo.Range("J16").Value = shFm.Range("G" & lnFm).Value        End If        dt = shFm.Range("C" & lnFm).Value '←ここです        shTo.Range("B16").Value = Year(dt)        shTo.Range("C16").Value = Month(dt)        shTo.Range("D16").Value = Day(dt)    NextEnd Sub


3286 : 荏隈 直樹さんのコメント (2014-05-06 18:36:00)

そういえば、前回の宿題での日付取得ですが、

 Sub GetYearMonthDay()    Dim dt As Date    dt = Date    Dim stYear As String    Dim stMonth As String    Dim stDay As String    stYear = Year(dt) '<-ここを改変してください    stMonth = Month(dt) '<-ここを改変してください    stDay = Day(dt) '<-ここを改変してください        Debug.Print "西暦: " & stYear    Debug.Print "月  : " & stMonth    Debug.Print "日  : " & stDay    End Sub


このようにやったとき、イミディエイトウィンドウには

西暦: 2014
月 : 5
日 : 6

という風に、本日の日付が取得されましたが、

今回のマクロでは、
mainシートのC列の日付が取得されておりました。
今回のマクロ文のどこで、mainシートのC列の日付を取得しているのでしょうか?


3285 : 荏隈 直樹さんのコメント (2014-05-06 18:25:00)

今回もなかなかハードでした。
shTo = ActiveSheetは思いもよりませんでした
自分は前回の宿題で、このように書いておりました。

Sub GetNames_Final()
    DeleteSheets_Fin
    Dim shFm As Worksheet
    Dim lnFm As Long
    Dim lnFmMx As Long
    Dim st As String
    Set shFm = Worksheets("main")
    lnFmMx = shFm.Range("B65536").End(xlUp).Row
    For lnFm = 2 To lnFmMx
        st = shFm.Range("B" & lnFm).Value
        Sheets("main1").Copy After:=Sheets(2)   '追加された行
        Sheets("main1 (2)").Name = st           'ここを変数stに変更して追加
        Worksheets(st).Range("H16").Value = shFm.Range("F" & lnFm).Value
        Worksheets(st).Range("E16").Value = shFm.Range("D" & lnFm).Value
        Worksheets(st).Range("F16").Value = shFm.Range("E" & lnFm).Value
        If shFm.Range("G" & lnFm).Value > 0 Then
            Worksheets(st).Range("I16").Value = shFm.Range("G" & lnFm).Value
        Else
            Worksheets(st).Range("J16").Value = shFm.Range("G" & lnFm).Value
        End If
    Next
End Sub


3276 : ガラパゴスタディー事務局の回答 (2013-11-08 10:50:00)

小俣さん:

いつも言っていますが、プログラムというのは、仕事の手順書です。

先日の講義のときにホワイトボードに書いた内容に即して言えば、どの手法がよいかという問いは、以下の問いと同値です。

・作成者にとってよい手順書か
・編集者にとってよい手順書か (※たいてい、編集者も実質的に作成者と同じですが)

ということで、頭の体操。
上記の視点で、以下の3つの項目について、よいアイデアかどうか再点検してみて。
理由も書き出してみると、また発見が深くなります。

> ・変数・定数名を日本語にしたいけど入力切替がウザったいので頑張ってアルファベットにする。
> ・なるべく意味が読み取れる変数・定数名にする。
> ・2回以上出てくるならすかさず変数・定数にする。


3275 : 小俣卓生さんのコメント (2013-11-07 21:55:00)

変数・定数の使い方が肝だな、感じる今日この頃です。

今時点でわたしが感じてる変数・定数へ思いは・・・。
・変数・定数名を日本語にしたいけど入力切替が
ウザったいので頑張ってアルファベットにする。
・なるべく意味が読み取れる変数・定数名にする。
・2回以上出てくるならすかさず変数・定数にする。

小川さんのshFmやshToなど変数名のつけ方を参考に
自分なりに慣れていくほかなさそうです。


3122 : ガラパゴスタディー事務局の回答 (2013-02-04 08:06:00)

大椛さん:

まずは、ぐちゃぐちゃでも良いので書いてみてください!

まあ、そうは言いつつ、最初はいろいろ無駄もしてしまうだろうと思います。


僕も、実力ギリギリのプログラムを書くときには、とりあえず動くようにしてから、変数を減らしたり、定数を変数化していったり、...という感じです (^^;


3121 : 大椛輝志さんのコメント (2013-02-04 03:25:00)

変数を参照として使うなど、これから先の展開では、変数の振り回し方がかなり重要になってくるように感じました。
(変数のネーミング、意味のない変数を設定しない、など)

一週間ぶりの発展編フォローでしたが、予習も難なく解くことができました。
書き上げる速度はまだまだですが、「身に付いてきている」と感じます。


3114 : ガラパゴスタディー事務局の回答 (2013-01-27 00:15:00)

山根さん:

> 私はWithを使って.Rangeと書いてしまいました。
> 日付の取得にはFormat(Now, "yyyy")を使用したのですが

どちらも、そのほうが高級だと思います。
それで書ききれるなら、そのほうがカッコよいですね。(特に With)

変数名の大文字小文字を混ぜるというのは、それらを呼び出すマクロを書くとき、全部小文字で書いておき、その行での編集を終了した瞬間、大文字小文字の組み合わせになるかどうかを見ることによって、スペルチェックができる、というのがメリットです。

..と書くだけで、伝わるかな。伝わりそう。


3113 : 山根信行さんのコメント (2013-01-26 01:39:00)

今回もメールを開ける前に予習を読んで書いてみました。

解説を読んでみるとActiveSheetをオブジェクト変数に格納するんですね。私はWithを使って.Rangeと書いてしまいました。
これも後々問題になりそうな予感がします。
あと日付の取得にはFormat(Now, "yyyy")を使用したのですが、こちらの方が扱いにくいのでしょうか。

        stYear = Format(Now, "yyyy")        stMonth = Format(Now, "mm")        stDay = Format(Now, "dd")

かなと思いstYearをRight関数で下二桁を持ってきました。
でも見比べたらこちらの方が記述も多くわかりにくいですね。

変数名の大文字小文字を混ぜるというのはCtrl+jの自動ヒントで見つけやすい。
じゃないですよね。
もう少し探ってみます。


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

本講座の動画一覧

  1. 【動画1】 発展編1 フォローメールセミナー 第1回
    【動画1】 発展編1 フォローメールセミナー 第1回 未習得
  2. 【動画2】 発展編1 フォローメールセミナー 第2回
    【動画2】 発展編1 フォローメールセミナー 第2回 未習得
  3. 【動画3】 発展編1 フォローメールセミナー 第3回
    【動画3】 発展編1 フォローメールセミナー 第3回 未習得
  4. 【動画4】 発展編1 フォローメールセミナー 第4回
    【動画4】 発展編1 フォローメールセミナー 第4回 未習得
  5. 【動画5】 発展編1 フォローメールセミナー 第5回
    【動画5】 発展編1 フォローメールセミナー 第5回 未習得
  6. 【動画6】 発展編1 フォローメールセミナー 第6回
    【動画6】 発展編1 フォローメールセミナー 第6回 未習得
  7. 【動画7】 発展編1 フォローメールセミナー 第7回
    【動画7】 発展編1 フォローメールセミナー 第7回 未習得
  8. 【動画8】 発展編1 フォローメールセミナー 第8回
    【動画8】 発展編1 フォローメールセミナー 第8回 未習得
  9. 【動画9】 発展編1 フォローメールセミナー 第9回
    【動画9】 発展編1 フォローメールセミナー 第9回 未習得
  10. 【動画10】 発展編1 フォローメールセミナー 第10回
    【動画10】 発展編1 フォローメールセミナー 第10回 未習得
  11. 【動画11】 午後のフォローアップ No.1
    【動画11】 午後のフォローアップ No.1 未習得
  12. 【動画12】 発展編1 フォローメールセミナー 第11回
    【動画12】 発展編1 フォローメールセミナー 第11回 未習得
  13. 【動画13】 午後のフォローアップ No.2
    【動画13】 午後のフォローアップ No.2 未習得
  14. 【動画14】 発展編1 フォローメールセミナー 第12回
    【動画14】 発展編1 フォローメールセミナー 第12回 未習得
  15. 【動画15】 午後のフォローアップ No.3
    【動画15】 午後のフォローアップ No.3 未習得
  16. 【動画16】 発展編1 フォローメールセミナー 第13回
    【動画16】 発展編1 フォローメールセミナー 第13回 未習得
  17. 【動画17】 午後のフォローアップ No.4
    【動画17】 午後のフォローアップ No.4 未習得
  18. 【動画18】 発展編1 フォローメールセミナー 第14回
    【動画18】 発展編1 フォローメールセミナー 第14回 未習得
  19. 【動画19】 午後のフォローアップ No.5
    【動画19】 午後のフォローアップ No.5 未習得
  20. 【動画20】 発展編1 フォローメールセミナー 第15回
    【動画20】 発展編1 フォローメールセミナー 第15回 未習得
  21. 【動画21】 午後のフォローアップ No.6
    【動画21】 午後のフォローアップ No.6 未習得
  22. 【動画22】 発展編1 フォローメールセミナー 第16回
    【動画22】 発展編1 フォローメールセミナー 第16回 未習得
  23. 【動画23】 午後のフォローアップ No.7
    【動画23】 午後のフォローアップ No.7 未習得
  24. 【動画24】 発展編1 フォローメールセミナー 第17回
    【動画24】 発展編1 フォローメールセミナー 第17回 未習得
  25. 【動画25】 午後のフォローアップ No.8
    【動画25】 午後のフォローアップ No.8 未習得
  26. 【動画26】 発展編1 フォローメールセミナー 第18回
    【動画26】 発展編1 フォローメールセミナー 第18回 未習得
  27. 【動画27】 午後のフォローアップ No.9
    【動画27】 午後のフォローアップ No.9 未習得
  28. 【動画28】 発展編1 フォローメールセミナー 第19回
    【動画28】 発展編1 フォローメールセミナー 第19回 未習得
  29. 【動画29】 午後のフォローアップ No.10
    【動画29】 午後のフォローアップ No.10 未習得
  30. 【動画30】 発展編1 フォローメールセミナー 第20回
    【動画30】 発展編1 フォローメールセミナー 第20回 未習得
  31. 【動画31】 午後のフォローアップ No.11
    【動画31】 午後のフォローアップ No.11 未習得
  32. 【動画32】 発展編1 フォローメールセミナー 第21回
    【動画32】 発展編1 フォローメールセミナー 第21回 未習得
  33. 【動画33】 午後のフォローアップ No.12
    【動画33】 午後のフォローアップ No.12 未習得
  34. 【動画34】 発展編1 フォローメールセミナー 第22回
    【動画34】 発展編1 フォローメールセミナー 第22回 未習得
  35. 【動画35】 午後のフォローアップ No.13
    【動画35】 午後のフォローアップ No.13 未習得
  36. 【動画36】 発展編1 フォローメールセミナー 第23回
    【動画36】 発展編1 フォローメールセミナー 第23回 未習得
  37. 【動画37】 午後のフォローアップ No.14
    【動画37】 午後のフォローアップ No.14 未習得
  38. 【動画38】 発展編1 フォローメールセミナー 第24回
    【動画38】 発展編1 フォローメールセミナー 第24回 未習得
  39. 【動画39】 午後のフォローアップ No.15
    【動画39】 午後のフォローアップ No.15 未習得
  40. 【動画40】 発展編1 フォローメールセミナー 第25回
    【動画40】 発展編1 フォローメールセミナー 第25回 未習得
  41. 【動画41】 午後のフォローアップ No.16
    【動画41】 午後のフォローアップ No.16 未習得
  42. 【動画42】 発展編1 フォローメールセミナー 第26回
    【動画42】 発展編1 フォローメールセミナー 第26回 未習得
  43. 【動画43】 午後のフォローアップ No.17
    【動画43】 午後のフォローアップ No.17 未習得
  44. 【動画44】 発展編1 フォローメールセミナー 第27回
    【動画44】 発展編1 フォローメールセミナー 第27回 未習得
  45. 【動画45】 午後のフォローアップ No.18
    【動画45】 午後のフォローアップ No.18 未習得
  46. 【動画46】 発展編1 フォローメールセミナー 第28回
    【動画46】 発展編1 フォローメールセミナー 第28回 未習得
  47. 【動画47】 午後のフォローアップ No.19
    【動画47】 午後のフォローアップ No.19 未習得
  48. 【動画48】 発展編1 フォローメールセミナー 第29回
    【動画48】 発展編1 フォローメールセミナー 第29回 未習得
  49. 【動画49】 午後のフォローアップ No.20
    【動画49】 午後のフォローアップ No.20 未習得
  50. 【動画50】 発展編1 フォローメールセミナー 第30回
    【動画50】 発展編1 フォローメールセミナー 第30回 未習得
  51. 【動画51】 午後のフォローアップ 最終回
    【動画51】 午後のフォローアップ 最終回 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ