オンライン講座 質問と回答

無料・有料のオンライン講座で寄せられたメッセージの一部を紹介致します。

[9588]12ヶ月分のシートを作りそれぞれに日付、曜日等を設定し、土日には色をつける

2018-03-14 18:26:44 受講生さんからの投稿です。

小川先生

御回答頂きましてありがとうございます。
キャストの件了解しました。

また、日付の記載に関してもう一点質問がありますので、ご教授下さい。

日付の記載方法に関しては、ダブルクォートで囲む方法とシャープで囲む方法があるそうですが、
今回のプログラム作製におきまして、当初はシャープで囲んでおりましたが、日付の中に変数を組み込むと
エラーとなってしまうため(Sub test1)、ダブルクォートで囲んだという経緯があります(Sub test2)。

そこでお尋ねしたいのですが、test1のように日付の前後をシャープで囲んだ場合、
その中に変数を組み込んだ書き方というのは出来ないのでしょうか?

仮に、出来ないとするならば、(かなり主観的な考え方になりますが)ダブルクォートで囲んだ方が
扱いやすいのかなという気もします。
逆に、シャープで囲んだ方が良いというメリット等ありましたら、ご教授下さい。

以上、よろしくお願いします。

Option Explicit

Sub test1()
    
    Dim c As Long
    Dim d As Date
    
    c = 3
    d = "#2015/" & c & "/1#"

    Debug.Print d
    
End Sub


Sub test2()
    
    Dim c As Long
    Dim d As Date
    
    c = 3
    d = "2015/" & c & "/1"

    Debug.Print d
    
End Sub


[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[9581]12ヶ月分のシートを作りそれぞれに日付、曜日等を設定し、土日には色をつける

2018-03-13 21:51:35 受講生さんからの投稿です。

小川先生

お世話になっております。
本動画の内容に関して質問がありますので、投稿させて頂きます。

Q1の課題に関して、google等で検索を行い以下のプログラムを作成しました。
(結果に関しては、問題無いと思います。)

Sub rensyu17()

    Dim cMonth As Long
    Dim cGyo As Long
    Dim d As String
'    Dim d As Date
    
    For cMonth = 1 To 12
        cGyo = 2
        Sheets.Add After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = cMonth & "月"
        
        Range("A1").Value = "day"
        Range("B1").Value = "wkday"
        Range("C1").Value = "todo"
        Range("D1").Value = "comment"
        
        d = "2015/" & cMonth & "/1"
        
        Do While Month(d) = cMonth
            Range("A" & cGyo).Value = d
            Range("B" & cGyo).Value = WeekdayName(Weekday(d), False)
            d = DateAdd("d", 1, d)
            cGyo = cGyo + 1
        Loop
        Columns("A:A").EntireColumn.AutoFit
    Next
End Sub


ここで気になったのが、変数”d”についてです。
この変数dに関しては、日付を格納する変数であるためDate型で宣言するのが妥当と思いましたが、
String型で実行しても問題なく実行できているように思われます。

詳しくは調べていないのですが、文字型を日付型に変換するには、CDate という関数を使うようですが、
本プログラムにおいては、CDateは使用しておりません。

これは、日付に関して、d=”2015/1/1″のような記載をすれば、string型であったとしても、date型として
扱っているということなのでしょうか?

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[9555]1枚のシートに1年分または所定の月の分だけのカレンダーを作成する

2018-03-08 22:08:45 受講生さんからの投稿です。

動画を見て、日付に関する関数を復習しました。

・Weekday関数は、指定された日付が何曜日かを数値として返す。
・Weekdayname関数は、指定された数値を曜日に変換した文字列を返す。
(Weekdayname関数は、Weekday関数を組み合わせて使うことがほとんどである。)

また、発展編1のテキストを見て、monthname関数の存在を知りました。
色々な関数を試してマスターしたいと思います。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[9046]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2017-10-12 09:29:50 浦山大さんからの投稿です。

おはようございます。
コードの添削、ありがとうございました!
曖昧な部分がクリアになりました。
こういう微妙な部分は、勉強会等に参加させて頂いて、
「いつもひっかかるんですけどどういうことですか?」
「…そんなことか!」
って一つ一つ潰していけると更に伸びそうだなって感じました。
11月or12月に参加したいと考えています。
それまでに発展編1については一通りこなしておきたいと思います!

Option Explicit

Sub Yokonarabe()

Worksheets("Sheet1").UsedRange.Interior.ColorIndex = xlNone '[*1]
Worksheets("Sheet1").UsedRange.ClearContents                '[*2]    '↓一枚のシートでの話なので、これ不要では?

'ワークシート変数 1枚のシートでも、宣言して明示したほうがいいのかな?ってあいまいでした。
'インデント不正部分は、変数の値を設定する際、
'毎回「1インデント前」にずらしていました(手前側のほうがええのかな?とかそんないい加減なレベルでした)。
'ハナコのステップで作業してたら間違わないような気がします…。

Dim daHiduke As Date
Dim cMigi As Long
Dim loTitle As Long
Dim loYoko As Long
    daHiduke = #1/1/2015#
    cMigi = 2
    loTitle = -6
    loYoko = -4
    Do While Year(daHiduke) = 2015
        If Day(daHiduke) = 1 Then '↓インデント不正→一つ奥にずらしました
            loTitle = loTitle + 5
            loYoko = loYoko + 5
            cMigi = 2
            With Range("A1")
                .Offset(, loTitle + 1).Value = "Date"
                .Offset(, loTitle + 2).Value = "weekday"
                .Offset(, loTitle + 3).Value = "memo"
                .Offset(, loTitle + 4).Value = "comment"
                .Offset(, loTitle + 2).ColumnWidth = 10.89
                .Offset(, loTitle + 3).ColumnWidth = 30
                .Offset(, loTitle + 4).ColumnWidth = 20
            End With
        End If
        Range("A" & cMigi).Offset(, loYoko - 1).Value = daHiduke
        Range("B" & cMigi).Offset(, loYoko - 1).Value = WeekdayName(Weekday(daHiduke), True)
        Select Case Range("B" & cMigi).Offset(, loYoko - 1).Value
            Case Is = "土"
                Range("A" & cMigi & ":D" & cMigi).Offset(, loYoko - 1).Interior.Color = vbBlue
            Case Is = "日"
                Range("A" & cMigi & ":D" & cMigi).Offset(, loYoko - 1).Interior.Color = vbRed
        End Select '↓インデント不正→一つ奥にずらしました
        daHiduke = DateAdd("d", 1, daHiduke)
        cMigi = cMigi + 1
    Loop
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[9033]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2017-10-11 16:38:06 浦山大さんからの投稿です。

小川先生

お世話になります。
自分で作成してみました。
なんとか、形に出来ました。
しかし、先生のコードと比べると、
・私のは行列指定の変数が3つある→2つに出来る
・もっとすっきりさせられる(offsetの使い方、With文の使い方)
はまだまだだなあ、と感じました。
2週間前は手も足も出なかったので、
やりきれたことは喜ばしかったです。
引き続き、よろしくお願いします!

Sub Yokonarabe()

    ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
    ActiveSheet.UsedRange.ClearContents

    Dim ws As Worksheet
    Dim daHiduke As Date
    Dim cMigi As Long
    Dim loTitle As Long
    Dim loYoko As Long
    Set ws = Worksheets("Sheet1")
    daHiduke = #1/1/2015#
    cMigi = 2
    loTitle = -6
    loYoko = -4
    Do While Year(daHiduke) = 2015
        If Day(daHiduke) = 1 Then
        loTitle = loTitle + 5
        loYoko = loYoko + 5
        cMigi = 2
            With ws.Range("A1")
                .Offset(, loTitle + 1).Value = "Date"
                .Offset(, loTitle + 2).Value = "weekday"
                .Offset(, loTitle + 3).Value = "memo"
                .Offset(, loTitle + 4).Value = "comment"
                .Offset(, loTitle + 2).ColumnWidth = 10.89
                .Offset(, loTitle + 3).ColumnWidth = 30
                .Offset(, loTitle + 4).ColumnWidth = 20
            End With
        End If
        ws.Range("A" & cMigi).Offset(, loYoko - 1).Value = daHiduke
        ws.Range("B" & cMigi).Offset(, loYoko - 1).Value = WeekdayName(Weekday(daHiduke), True)
        Select Case ws.Range("B" & cMigi).Offset(, loYoko - 1).Value
            Case Is = "土"
                ws.Range("A" & cMigi & ":D" & cMigi).Offset(, loYoko - 1).Interior.Color = vbBlue
            Case Is = "日"
                ws.Range("A" & cMigi & ":D" & cMigi).Offset(, loYoko - 1).Interior.Color = vbRed
        End Select
    daHiduke = DateAdd("d", 1, daHiduke)
    cMigi = cMigi + 1
    Loop
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8917]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2017-09-23 18:09:10 浦山大さんからの投稿です。

ここまでは動画見ながらですがやりきりました。
そして、カレンダーは一人でやりきるにはまだ自分のレベルが追いついていないなと感じました。

動画や、発展編で新しく教わった知識を繰り返した上で、
実力をつけてから再度チャレンジしたいと思います。
このあたりまでサラサラ書けてくると応用範囲がまた一気に広がりそうですね(*^^*)

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7471]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2017-01-04 07:23:26 平吹 敦史さんからの投稿です。

小川先生

お世話になっております。
素朴な疑問ですが、月ごとにsheet分けしたカレンダーを作成したのであれば、それをコピーして、
同一シート内に張り付けるマクロをつくれば、もっと簡単に横に並べるカレンダーが作れるのでは?

と、思ってつくりました。

その後、先生の解説動画を見たら、最初から、横に並べるカレンダーを作り始めたので、
どっちかを最初につくれば、どっちかはコピーでいけるのかな?とも思いました。
(どっちかとは、月別sheetが先か横並びが先かという意味です。)

ただ、DPRの考え方でいくと、Dはあくまで最初につくった縦に長い年間カレンダーであり、
月別のsheetにしたのは、Rなので、そこからRをつくるのは良くない、という考え方になる、
ということでいいのでしょうか?
                                        平吹敦史

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 

[7470]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2017-01-04 07:04:36 平吹 敦史さんからの投稿です。

お世話になっております。
動画の最後で、カレンダーマクロのfileをお渡しする、とあったのですが、そのfileはどこから、
入手すればいいのでしょうか?
発展編1の既入手済みのfileも調べましたが、それらしきfileはありませんでした。
すみませんが、教えていただければと思います。
                                        平吹 敦史

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 

[5905]1枚のシート内で12ヶ月を横に並べたカレンダーを作成する

2016-03-07 13:54:28 tomoki1105さんからの投稿です。

小川先生

いつもお世話になっております。

5:35でおっしゃっていた、Offsetの変数値設定の裏技ですが、もし良ければ教えて頂けますか??

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 


各講座ごとのメッセージを見る場合はこちら

 

まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ