質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1011閲覧

VBA マクロの自動実行

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/05/27 13:17

編集2018/05/28 10:50

B3の番号に値を入力し、マクロを実行するとメーカー・製品名が反映される。(G~Iのデータを反映。)

B3に入力した際に、C6~E6を自動で反映されるようにしたい。
また、番号を削除したらメーカー・製品名が消えるようにしたい。
今は番号を消すときに、右下に入力されたものもいちいち手で消さないとならない。

スムーズにできる方法はありますでしょうか。

イメージ説明

Sub if_jirei_1() If Range("B3").Value >= 100 And Range("B3").Value <= 499 Then Range("C6:E6").Value = Range("H6:J6").Value End If If Range("B3").Value >= 500 And Range("B3").Value <= 999 Then Range("C6:E6").Value = Range("H7:J7").Value End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/27 13:29

どういうときに「番号を消す」のでしょうか?そのイベントを取得して空を設定すれば良いですが、「消したいタイミング」によっては手動で消した方が早いかもしれません。「クリア」ボタンを設置する あたりが現実的かとは思いますが、それも要件次第です。
hatena19

2018/05/28 23:04

画像がリンク切れになってます。再度、アップロードしてください。
guest

回答2

0

ベストアンサー

セルB3に、番号が入力されたり、削除されたりした時、マクロが自動で実行されればいいということですよね。(削除された時だけ、自動実行ではあまり意味ないと思いますので)

ワークシートのChange イベントを使えばいいでしょう。

Worksheet.Change イベント (Excel)

vba

1Private Sub Worksheet_Change(ByVal Target As Range) 2 If Intersect(Target, Range("B3")) Is Nothing Then Exit Sub 3 Application.EnableEvents = False 4 Call if_jirei_1 5 Application.EnableEvents = True 6End Sub 7 8Sub if_jirei_1() 9 If Range("B3").Value = "" Then 10 Range("C6:E6").ClearContents 11 ElseIf Range("B3").Value >= 100 And Range("B3").Value <= 499 Then 12 Range("C6:E6").Value = Range("H6:J6").Value 13 ElseIf Range("B3").Value >= 500 And Range("B3").Value <= 999 Then 14 Range("C6:E6").Value = Range("H7:J7").Value 15 Else 16 MsgBox "100以上999以下の数値を入力してください。" 17 Range("C6:E6").ClearContents 18 End If 19End Sub

追記

if_jirei_1は、Select Caseを使った方がシンプルで読みやすく記述できます。

vba

1Sub if_jirei_1() 2 Select Case Range("B3").Value 3 Case "" 4 Range("C6:E6").ClearContents 5 Case 100 To 499 6 Range("C6:E6").Value = Range("H6:J6").Value 7 Case 500 To 999 8 Range("C6:E6").Value = Range("H7:J7").Value 9 Case Else 10 MsgBox "100以上999以下の数値を入力してください。" 11 Range("C6:E6").ClearContents 12 End Select 13End Sub

追記2

さらに、言えば、参照範囲の番号列を検索(WorksheetFunction.Match等で)するようにすれば、
よりシンプルに記述できますし、参照範囲の番号が変更されても
コードを変更する必要はなくなり、より実用的です。

vba

1Sub if_jirei_2() 2 Dim r As Long 3 Select Case Range("B3").Value 4 Case "" 5 Range("C6:E6").ClearContents 6 Case Else 7 On Error Resume Next 8 r = WorksheetFunction.Match(Range("B3"), Range("G6:G9"), 1) 9 On Error GoTo 0 10 If r = 0 Then 11 MsgBox Range("G6").Value & "以上の数値を入力してください。" 12 Else 13 Range("C6:E6").Value = Range("H5:J5").Offset(r).Value 14 End If 15 End Select 16End Sub

投稿2018/05/27 19:19

編集2018/05/30 05:31
hatena19

総合スコア33782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/29 23:29

詳細にありがとうございます。 スマホから操作で画像を間違って消してしまいました。 後ほど、アップいたします。
guest

0

hatena19 さんの二番煎じですが、
SelectCase等の書き方で別バージョンを参考まで。

VBA

1Sub if_jirei_1() 2 Range("C6:E6").ClearContents 3 Dim Val As Variant 4 Select Case Range("B3").Value 5 Case 100 To 499: Val = Range("H6:J6").Value 6 Case 500 To 999: Val = Range("H7:J7").Value 7 Case "" 8 Exit Sub 9 Case Else 10 MsgBox "100以上999以下の数値を入力してください。" 11 Exit Sub 12 End Select 13 Range("C6:E6").Value = Val 14End Sub

投稿2018/05/29 01:34

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/29 23:33

ありがとうございます。 とても勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問