オンライン講座 質問と回答
無料・有料のオンライン講座で寄せられたメッセージの一部を紹介致します。
[12211]イベントプロシージャを作ってみる
2020-06-17 16:13:09 受講生さんからの投稿です。
お世話になります。
動画では取り扱われていなかった内容で恐縮ですが、例えばエクセルシートのA1セルに氏名が表示されたら、イベント機能でシート名が苗字に変更されるコードを書きたいのですが、うまくいきません。
Left関数で左から2桁を取ってくるコードはうまく動きましたが、苗字が3文字あるいは1文字の方についてもうまく表示されるよう、Find関数を使って、空欄の前まで取ってくるコードを取り入れたのですが、(通常の関数ではうまくいくのですが)エラーで止まってしまいます。
イベント機能時はFind関数は使用できないでしょうか?
エラー表示:コンパイルエラー、subまたはfunctionが定義されていません。
(苗字2文字設定)正常に動きます
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(“A1”)) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range(“A1”), 2)
End Sub
(苗字3文字・1文字対応)正常に動きません
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(“A1”)) Is Nothing Then Exit Sub
ActiveSheet.Name = Left(Range(“A1″), Find(” ”, Range(“A1”)) – 1)
End Sub
[10925]Workbook_BeforeSaveイベント
2019-01-14 07:29:39 T.S.さんからの投稿です。
お世話になります。
教材のサンプルデーター「1251_workbook_beforesave.xls」の
thisworkbookモジュールにSaveAsUI As Booleanの説明の中で
‘Trueになる例(ダイアログが出るとき):
‘ Officeボタン→上書き保存(初回) – 保存先を指定するダイアログが出るから
‘ Officeボタン→名前をつけて保存 – 保存先を指定するダイアログが出るから
について質問です。
Trueになる例の1つ目「Officeボタン→上書き保存(初回)」をデバック機能を
活用しながらテストをして確かめています。自分でテストしてみたところ
保存先を指定するダイアログも出ず、SaveAsUIの変数もFalseのままです。
テスト方法が間違っているのか悩んでいる状況です。
再現方法やテスト方法等をアドバイスをいただけませんでしょうか?
[10648]複数セルを同時に編集する際の注意点
2018-10-11 20:56:34 田中 宏明さんからの投稿です。
Worksheet_Change イベントで不具合が出ない方法を習得できました。
これからはイベントプロシージャを積極的に使ってみます。
Private Sub Worksheet_Change(ByVal Target As Range) Debug.Print Target.Row & "-" & Target.Column '複数セル選択時は処理しない If Target.Count > 1 Then Exit Sub '対象行でない場合は処理しない If Target.Column <> 2 Then Exit Sub 'メインの処理(現在時刻を自動出力) If Target.Value <> "" Then If Target.Offset(, 2).Value = "" Then Target.Offset(, 2).Value = Now ElseIf Target.Offset(, 3).Value = "" Then Target.Offset(, 3).Value = Now End If End If End Sub
[9768]Worksheet_Changeイベントのサンプル その1
2018-04-18 00:14:43 受講生さんからの投稿です。
1321のサンプルデータが見当たらないです。
ファイルをダウンロードするから、eventform_material→sampledata→1321_worksheetchange??これが見つかりません。
私の操作が悪いのでしょうか?
[9734]イベントの連鎖(フラグで制御する方法)
2018-04-15 18:30:45 受講生さんからの投稿です。
「プレセミナーでも紹介しましたが」とおっしゃってますが、
プレセミナーの何回目で話していたのか、
見つけることができずにいます。
すみませんが、具体的に何回目の何分あたりで話されているか、
教えていただけませんでしょうか。
[9733]イベント実行の流れ
2018-04-15 16:56:59 kazumiさんからの投稿です。
「動画2イベント実行の流れ」の次が、
「動画3イベントの概要」になっていて、
第1章「周辺知識」が見当たりません。
第1章というからには、最初に出てくるんですよね?
それとも、途中で出てくるのでしょうか?
[9731]イベントプロシージャ実行と作成の流れまとめ
2018-04-15 04:26:11 受講生さんからの投稿です。
小川先生
いつも、お世話になっています。
つまずきながらですが、勉強させて頂いています。感謝!
動画22の講義を学んで、ここに戻ってきました。
下記のとおり、For Each構文を使用して実行してみましたが、上手く機能しませんでした。
(キャンペーンタイプをコピーして複数に貼り付けても反映されません)
書き方に問題があるのでしょうか?
添削の程、よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range) Dim r If Target.Count > 1 Then 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 ☞ For Each r In Target If r.Value = "D" Then Target.Offset(, 1).Value = "DVD無料" ElseIf r.Value = "C" Then Target.Offset(, 1).Value = "CD無料" ElseIf Target.Value = "J" Then r.Offset(, 1).Value = "ジャケット無料" Else r.Offset(, 1).ClearContents End If Next End Sub
[9134]Worksheet_Changeイベントのサンプル その1
2017-11-21 21:15:22 浦山大さんからの投稿です。
定数を使ったことがなかったです(-_-;)
とっても見やすいですね!
どんどん使えそうな材料が頭の中に入ってくる感じが心地よいです。
ありがとうございます(^^)
[9133]Worksheet_Changeイベントの概要
2017-11-21 20:48:27 浦山大さんからの投稿です。
お世話様です。
ひっそりこちらにお邪魔しています。
新しいところに顔を出す度に衝撃を受けています…。
練習していて、ふと感じました。
「挿入した列が塗りつぶされてしまうけどなんでかな」
「文字列とか、明らかに数値じゃないものが入ったら、
別の色にできないかな」
こういう感じで仕分けてみたくて、
練習がてら作成してみました。
1.空白セルを挿入した場合は何もしない
2.数値で、100より大きい場合は黒
3.数値で、100より大きくない場合は黄緑
4.数値として評価できない値が入ったら赤
当初、Isnumeric関数を使って条件判断すればいいのかな?
と思って試してみました。
しかし、空白セルを貼り付けるor列を挿入すると(1.を狙って)、
何故か黄緑(3.)になってしまいました。
TypeName関数で空白セルを貼り付けた際のデータ型を調べてみたらEmpty値でした。
あれ、Empty値って数値じゃないからIsNumeric関数はFalseなんじゃないの?と思い、
ヘルプを調べてみたら、数値としては「0」を判定し(この場合はIsNumericで判断してるのでEmptyは「0)」、
文字列(String型で変数が宣言されており、Empty値が入る場合)
としては「””」を返すと記載がありました…。
IsEmpty関数を更に上側に差し込んで、漸く機能実現しました。
この時点で深く追求することではないと思うのですが、
ちょっとムキになってしまって、調べてみたら学びが得られました。
折角学んだことだったので書いてみようと思いました(^^)
※色の指定や変数名が適当です…(Boolean変数は、ほぼほぼ初めて使いました…)。
※この後で、もっといい方法があるのかもしれません。進めていきます。
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Dim boo As Boolean For Each r In Target boo = IsEmpty(r.Value) 'Empty値かどうかを判断する Debug.Print TypeName(r.Value) If boo = False Then boo = IsNumeric(r.Value) 'Empty値は変数が初期化されていないことを示す。 'Empty値は数値としては0と評価され、 '文字としては長さ0の文字列("")と評価される。 If boo = True Then If r.Value > 100 Then Target.Interior.ColorIndex = 1 '黒 Else Target.Interior.ColorIndex = 4 '黄緑 End If Else Target.Interior.ColorIndex = 3 '赤 End If End If Next End Sub
[8843]Worksheet_Changeイベントの連鎖を避ける方法
2017-09-06 19:01:11 望月 晋一さんからの投稿です。
小川先生のコードは無駄がなく、プログラムを通して、論理や着眼点を的確に学ぶことができると思います。ワークシートのチェンジイベントの所は、学習時間はかかりましたが、それだけに収穫が多々ありました。
[8220]エクセルマクロ・VBA「イベントとフォーム」講座の概要
2017-05-26 02:12:04 受講生さんからの投稿です。
本動画中のform_demo.xlsが教材の中にありませんでした。
zipファイル中に動画と同じになるように保存頂けないでしょうか。
[8123]コマンドボタン、ラベル、テキストエリアに固有のプロパティ
2017-05-14 08:16:59 受講生さんからの投稿です。
お世話になっております。
フォーム frmTextArea 内で使用されている bNocheck という変数は、値を代入後も使用されていないように思えるのですが、必要なのでしょうか?
[8069]Worksheet_Changeイベントのサンプル その1
2017-05-03 13:30:53 受講生さんからの投稿です。
引数がTarget As Excel.Rangeとなっていますが、Target As Rangeとは何か違うのでしょうか?
[8040]イベントの連鎖(フラグで制御する方法)
2017-04-24 10:13:11 受講生さんからの投稿です。
質問が2点あります。
1. 0:46頃の動画で、flagsample や main1 のコードが一瞬で表示されるのは、どのようなテクニックを使っているのでしょうか。
2. プレセミナーでフラグの説明があったとのことですが、再帰呼び出しのことでしょうか。再帰についてはサンプルコードのみで、動画での解説はなかったように思えたのですが・・・。
以上2点、よろしくお願いいたします。
[7699]イベントの連鎖(フラグで制御する方法)
2017-02-20 00:44:39 受講生さんからの投稿です。
小川先生へ
サンプルコードを書いてくださってありがとうございます(*^^*)
いろんなコードを見て、動かしてみることはとても勉強になりますね。
「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" 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
[7681]イベントの連鎖(フラグで制御する方法)
2017-02-17 15:53:34 受講生さんからの投稿です。
小川先生へ
いつもお世話になっております。
現在、イベントの連鎖のところで頭がこんがらがっています(+_+)
練習でカレンダーを作成するマクロを作ってみたのですが、
一体どこにフラグを立てたらよいのかわからず困っています。
コードのチェックをお願いいたします。
☆マクロの内容☆
Sheet1にA1の日付の値が変更されたら
標準ジュールのNyuryoku_Calendarマクロが実行されるWorksheet_Changeイベントを作成しています。
Nyuryoku_Calendarは次の月になるまでB1に日付、B2に曜日が横方向に入っていくマクロです。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A" 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
[7672]イベントの生じたセルの行番号によって処理を切り分ける
2017-02-15 23:17:05 受講生さんからの投稿です。
小川先生へ
Select Case でしたか!!
1行で記述ができるのがいいですね。
モヤモヤがすっきりしました(^^♪
ありがとうございました。
[7667]イベントの生じたセルの行番号によって処理を切り分ける
2017-02-15 00:44:36 受講生さんからの投稿です。
小川先生へ
Targetの範囲を自由に設定できるのがおもしろくて、
いろいろ試しているところです。
複数の離れたセル(例えばC7とC9とC11)をTargetにする場合を考えて作ってみました。
これでもちゃんと動いたのですが
何かもっと良い方法があるような気がしています。
アドバイスをお願いします。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C" Then ElseIf Target.Address = "$C" Then ElseIf Target.Address = "$C" 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
[5302]Workbook_Openイベント
2015-11-20 15:08:18 受講生さんからの投稿です。
小川先生
いつもお世話になっております。
ThisworkbookのOpenイベントを実行させようとしたら「dataファイルが見つかりません。もしかしたらファイルの定義が異なっているかもしれません。」とエラー表示が出ました。この場合、どうやって修正したらよいでしょうか?
[2326]オプションボタン、チェックボックス、フレーム、マルチページ
2014-08-31 20:03:23 受講生さんからの投稿です。
チェックボックスが多いと記述が長くなりますが、何か工夫できますか?
変数やoffsetを利用したら良さそうなのですがうまくまとまりません。
下記の例で列が増え、チェックボックスの個数が増えると冗長なプログラムになってしまいます。
If Range(“E” & scrMain.Value).Value = “○” Then
chk1.Value = False
Else
chk1.Value = True
End If
各講座ごとのメッセージを見る場合はこちら
-
▶ITセンスがよくなるエクセル講座
(この講座の詳細はこちら) -
▶Windowsとエクセルの基礎知識
(この講座の詳細はこちら) -
▶「Windows 7」7つの設定
(この講座の詳細はこちら) -
▶いまさら聞けない!タイピングスピードをあげる方法
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA導入編
(この講座の詳細はこちら) -
▶エクセル仕事を劇的に楽にする「DPRフレームワーク」
(この講座の詳細はこちら) -
▶動画デモ「エクセルマクロ実践的活用例」
(この講座の詳細はこちら) -
▶エクセル、エクセルマクロよもやま話
(この講座の詳細はこちら) -
▶スピード3倍を目指すタイピング講座
(この講座の詳細はこちら) -
▶エクセルマクロを書くときによくある問題とその対処法
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA基礎編
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA基礎編フォローアップ ベーシック
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA基礎編フォローアップ アドバンスド
(この講座の詳細はこちら) -
▶演習「インターネットエクスプローラを使って取得した表の中身を解析する」
(この講座の詳細はこちら) -
▶実践添削事例-パソコンスクールのシフト表・予約フォーム生成マクロ
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA発展編1
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA発展編1フォローアップミニセミナー
(この講座の詳細はこちら) -
▶発展編1 フォローメールセミナー
(この講座の詳細はこちら) -
▶解説「伝票作成マクロ」
(この講座の詳細はこちら) -
▶解説「カレンダー作成マクロ」
(この講座の詳細はこちら) -
▶イベントとフォーム講座プレセミナー
(この講座の詳細はこちら) -
▶エクセルマクロ「イベントとフォーム」講座
(この講座の詳細はこちら) -
▶イベントとフォーム講座演習
(この講座の詳細はこちら) -
▶エクセルマクロ・VBA発展編2
(この講座の詳細はこちら) -
▶エクセルVBA外部連携講座
(この講座の詳細はこちら) -
▶エクセルマクロVBA「Web連携」
(この講座の詳細はこちら) -
▶「エクセルマクロ公開添削会」
(この講座の詳細はこちら) -
▶完全解説「アプリケーション作成講座」その1
(この講座の詳細はこちら) -
▶完全解説「アプリケーション作成講座」その2
(この講座の詳細はこちら) -
▶完全解説「アプリケーション作成講座」その3
(この講座の詳細はこちら) -
▶サラリーマンで年収1,000万円を目指せ!ジョイントセミナー講義録
(この講座の詳細はこちら) -
▶MindManager これ一冊でいますぐ上級者
(この講座の詳細はこちら) -
▶[ダイジェスト版] イヤでもWindowsとエクセルの操作が早くなるワークショップ
(この講座の詳細はこちら) -
▶[ライブ版] イヤでもWindowsとエクセルの操作が早くなるワークショップ
(この講座の詳細はこちら) -
▶[心理学パート]イヤでも身体から力が抜けて仕事が楽になるワークショップ
(この講座の詳細はこちら) -
▶[ボディワークパート]イヤでも身体から力が抜けて仕事が楽になるワークショップ
(この講座の詳細はこちら) -
▶イヤでも思考が整理されて文章作成が早くなるワークショップ
(この講座の詳細はこちら) -
▶エクセルVBAでのシステム開発・保守を低コストで行うためのライブラリ “dLib for Excel VBA”
(この講座の詳細はこちら) -
▶ショートカットってすごいよ!
(この講座の詳細はこちら)
まずはここから!スマホでも学べる無料動画講座
今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。- Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒。
- PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
いますぐ無料で試してください。