エクセルマクロオンライン講座 質問と回答

  • このエントリーをはてなブックマークに追加

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

[7730] Workbook_BeforeSaveイベント

多和田 真也さんからの投稿です。

Workbook_BeforeSaveイベントについて質問させてください。

たしか、Excel2010以降のバージョンでは、名前を付けて保存しても、リボンの中のタブが「ファイル」に
切り替わって表示され、ダイアログは表示されないので、1251_workbook_beforesave.xlsのサンプルは2010以降
のバージョンでは動作しない、という理解でよいでしょうか?

よろしくお願いいたします

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

[7699] イベントの連鎖(フラグで制御する方法)

受講生さんからの投稿です。

小川先生へ

サンプルコードを書いてくださってありがとうございます(*^^*)
いろんなコードを見て、動かしてみることはとても勉強になりますね。

「1枚のシートに1年分または所定の月の分だけのカレンダーを作成する」の
動画を見直して、Nyuryoku_Calendarをつくりなおしてみました。

Sub Nyuryoku_Calendar() ' ひと月分のカレンダーを作成する

Dim d As Date
Dim c As Long
Dim m As Long

m = Month(Range("A1").Value)
Range("A1").NumberFormatLocal = "yyyy" & "年" & "m" & "月"
d = Range("A1").Value
c = 0
Range("A1").CurrentRegion.Offset(0, 1).ClearContents 'データーを削除

Do While m = Month(d)
Range("B1").Offset(0, c).Value = Day(d)
Range("B2").Offset(0, c) = WeekdayName(Weekday(d), True)
c = c + 1
d = DateAdd("d", 1, d)
Loop
End Sub



小川先生がくださったヒントで

'[2] その月の月初日を日付型変数に格納。
'[3] DateAdd関数で一日づつ翌日の日付を調べる。

のところをどう書けばよいかわからず・・・
(調べてみてDateSerial関数を使うのかもしれないと思い試行錯誤したものの・・・
うまくつかいこなせずでした(+_+))

でも、このままではA1セルに1日以外の日付が入った場合、
カレンダーが月の途中からになってしまうので
イベントの方にも手を加えました(;^_^A

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And IsDate(Target.Value) Then
If Day(Target) = 1 Then ’A1セルに入った日付が1日だったら
Nyuryoku_Calendar
Else
MsgBox "日付を1日にして入力し直してください"
Exit Sub
End If
End If
End Sub


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

[7681] イベントの連鎖(フラグで制御する方法)

受講生さんからの投稿です。

小川先生へ

いつもお世話になっております。
現在、イベントの連鎖のところで頭がこんがらがっています(+_+)

練習でカレンダーを作成するマクロを作ってみたのですが、
一体どこにフラグを立てたらよいのかわからず困っています。
コードのチェックをお願いいたします。


☆マクロの内容☆
Sheet1にA1の日付の値が変更されたら
標準ジュールのNyuryoku_Calendarマクロが実行されるWorksheet_Changeイベントを作成しています。
Nyuryoku_Calendarは次の月になるまでB1に日付、B2に曜日が横方向に入っていくマクロです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Nyuryoku_Calendar
End If
End Sub




Dim bFrg As Boolean
Sub Nyuryoku_Calendar() ' ひと月分のカレンダーを作成する
Dim dDay As Date
Dim c As Long

dDay = Range("A1").Value
Range("A1").NumberFormatLocal = "yyyy" & "年" & "m" & "月"

Range("B1:AF2").ClearContents 'B1:AF2の値を削除する

Range("B1").Value = dDay
Range("B2").Value = WeekdayName(Weekday(dDay), True)


Do While Month(dDay + 1) = Month(Range("A1").Value) 'A1に入っている月と同じ間はloopする。
Range("C1").Offset(0, c).Value = DateAdd("d", 1, dDay) '日付
Range("C1").Offset(0, c).NumberFormatLocal = "d" '書式をd
Range("C1").Offset(1, c) = WeekdayName(Weekday(DateAdd("d", 1, dDay)), True) '曜日
dDay = Range("C1").Offset(0, c).Value
c = c + 1
Loop
End Sub


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

[7672] イベントの生じたセルの行番号によって処理を切り分ける

受講生さんからの投稿です。

小川先生へ

Select Case でしたか!!
1行で記述ができるのがいいですね。

モヤモヤがすっきりしました(^^♪
ありがとうございました。

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

[7667] イベントの生じたセルの行番号によって処理を切り分ける

受講生さんからの投稿です。

小川先生へ

Targetの範囲を自由に設定できるのがおもしろくて、
いろいろ試しているところです。

複数の離れたセル(例えばC7とC9とC11)をTargetにする場合を考えて作ってみました。
これでもちゃんと動いたのですが
何かもっと良い方法があるような気がしています。

アドバイスをお願いします。


 Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$7" Then

ElseIf Target.Address = "$C$9" Then

ElseIf Target.Address = "$C$11" Then

Else
Exit Sub
End If

If Target.Row <= 6 Then
Exit Sub
End If

If Target.Column <> 3 Then
Exit Sub
End If


If Target.Value <> UCase(Target.Value) Then
Target.Value = UCase(Target.Value) '受け取った文字列を大文字に直す
End If

If Target.Value = "D" Then
Target.Offset(, 1).Value = "DVD無料"
ElseIf Target.Value = "C" Then
Target.Offset(, 1).Value = "CD無料"
ElseIf Target.Value = "J" Then
Target.Offset(, 1).Value = "ジャケット無料"
Else
Target.Offset(, 1).ClearContents
End If
End Sub


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

[5302] Workbook_Openイベント

受講生さんからの投稿です。

小川先生
いつもお世話になっております。
ThisworkbookのOpenイベントを実行させようとしたら「dataファイルが見つかりません。もしかしたらファイルの定義が異なっているかもしれません。」とエラー表示が出ました。この場合、どうやって修正したらよいでしょうか?

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

[4774] エクセルマクロ・VBA「イベントとフォーム」講座の概要

岡崎年彦さんからの投稿です。

イベントとフォームオンライン講座を受講していますが、
講座動画(プレ・本編)で使うサンプルデータの取得方法がわかりません。

もしかすると、
「プログラムのソースは

 ... 

で囲っていただけると、以下のような表示になります。」
の事なのかなとも思いましたが、何をどのように

 ... 

で囲うのか、
イマひとつ理解が進みません。

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

[2326] オプションボタン、チェックボックス、フレーム、マルチページ

受講生さんからの投稿です。

チェックボックスが多いと記述が長くなりますが、何か工夫できますか?
変数やoffsetを利用したら良さそうなのですがうまくまとまりません。

下記の例で列が増え、チェックボックスの個数が増えると冗長なプログラムになってしまいます。

If Range("E" & scrMain.Value).Value = "○" Then
chk1.Value = False
Else
chk1.Value = True
End If

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


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

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

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

トップへ