エクセル実践塾 > エクセル実践塾2016

ドロップダウンリストで選んだデータを、 選んだ直後に、 対応する別データに置換して入力したい

 

セル値の変化を監視するマクロで実行できます

ワークシート上でセルの内容が変更されたときに発生する Worksheet_Change イベントを使います。

具体的には、 次のようなマクロで、 範囲 "F4:F30" のセルの値が変更された場合に、関数 GetData を呼び出して新しい値に変更します。


Private Sub Worksheet_Change(ByVal Target As Range)

 On Error Resume Next

 If Not Intersect(Target, Range("F4:F30")) Is Nothing Then

  Application.EnableEvents = False

  Target.Value = GetData(Target.Value)

  Application.EnableEvents = True

 End If

 On Error GoTo 0

End Sub

 

Function GetData(selectedValue As String) As String

' ここでドロップダウンリストの選択に基づいてデータを返す処理を行います

 Select Case selectedValue

  Case "30分"

   GetData = "0:30"

  Case "45分"

   GetData = "0:45"

  Case "1時間"

   GetData = "1:00"

  Case "1時間30分"

   GetData = "1:30"

 End Select

End Function

 

@作例では、F4〜F30のセル範囲に、左図のようなドロップダウンリストが設定されています

 

 

AVisual Basicを開いて、ドロップダウンリストが設定されているシートをダブルクリックし、そのコードとして左図のようなマクロを記述します

このVBAコードは、ワークシート上でセルの内容が変更された際に処理を行うための、イベントハンドラと関数の組み合わせです。

Private Sub Worksheet_Change(ByVal Target As Range)

 On Error Resume Next

 If Not Intersect(Target, Range("F4:F30")) Is Nothing Then

  Application.EnableEvents = False

  Target.Value = GetData(Target.Value)

  Application.EnableEvents = True

 End If

 On Error GoTo 0

End Sub

ワークシート上でセルの内容が変更されたときに発生する Worksheet_Change イベントに対するハンドラです。
具体的には、範囲 "F4:F30" のセルの値が変更された場合に、関数 GetData を呼び出して新しい値に変更します。

On Error Resume Next: エラーが発生した場合に次の行に進むようにします。これはエラーが無視されるという意味です。

If Not Intersect(Target, Range("F4:F30")) Is Nothing Then: 変更されたセルが範囲 "F4:F30" に含まれている場合に処理を行います。

Application.EnableEvents = False: イベントの無効化。これにより、値を変更しても再帰的なイベントが発生しないようになります。

Target.Value = GetData(Target.Value): GetData 関数を呼び出して、選択された値に基づいて新しい値に変更します。

Application.EnableEvents = True: イベントの再有効化。これにより、再びイベントが発生するようになります。

On Error GoTo 0: エラーハンドリングを元に戻します。

 

Function GetData(selectedValue As String) As String

 ' ここでドロップダウンリストの選択に基づいてデータを返す処理を行います

 Select Case selectedValue

  Case "30分"

   GetData = "0:30"

  Case "45分"

   GetData = "0:45"

  Case "1時間"

   GetData = "1:00"

  Case "1時間30分"

   GetData = "1:30"

 End Select

End Function

この GetData 関数は、引数として受け取った文字列 selectedValue に基づいて、ドロップダウンリストの選択に応じたデータを返します。
具体的には、Select Case ステートメントを使用して、異なる選択肢に対して対応するデータを返しています。
例えば、"30分" が選択された場合には "0:30" を返します。

これにより、ワークシート上で特定のセルの値が変更されたときに、その変更に対応する特定の処理が実行されるようになります。

Bドロップダウンリストで選択したデータに対応する、別のデータが入力されるようになります

 

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

 

●10行程度のマクロを使って、 用意した置換リストにしたがい、 複数の置換をまとめて行えるようにします

Dyson(ダイソン)オンラインストア

関連する他のページ

ドロップダウンリストで、 データを入力したい
「データ」タブの「データの入力規則」を使います

勤怠情報を、 ドロップダウンリストで入力したい
「データの入力規則」を使うと、 ドロップダウンリストを設定できます

コース名をドロップダウンリストから入力したい
「データの入力規則」を使います

ドロップダウンリストでプランを選びたい
「データの入力規則」で任意のドロップダウンリストを設定できます

都道府県名をドロップダウンリストで入力したい
都道府県が入力されているセル範囲を、 「データの入力規則」のリストとして設定すれば、ドロップダウンリストで選べるようになります

あとから見てもわかりやすいVLOOKUP関数式にしたい
「範囲」として指定するセル範囲に、 あらかじめ適当な名前を付けておけば、VLOOKUP関数式でもそれを使えるのでわかりやすくなります

一意の項目に該当する、 同一行内のデータを取り出したい
INDEXとMATCHの関数を組み合わせると、 検索列の左側であっても、 該当するデータを取り出すことができます

日別のシフト表から、 個人の勤怠データを抜き出して表示したい
日別勤怠表のシート名を数式で作りながら、 VLOOKUP関数で参照する方法があります

隔列のセル値を参照したい
値を参照する列の指定を、 数式で行う方法があります

日別の勤務表から、 個人別の勤務表を作りたい
シートタブ名が日にちしてあれば、 それを使ったVLOOKUP参照が可能です

成績一覧から上位10名を選び出して表示したい
同順が含まれる場合に備えて、 順位を表す数値に固有の小数を付加し、 それを使って順位から表引きを行います

住所から都道府県を取り出したい
あらかじめ都道府県の頭3文字を抜き出したリストを用意して、 それを使ってVLOOKUP関数による表引きを行います

アンケートをピボットテーブルで集計したい
数値で入力されている選択肢の情報を、 文字列に直してから集計します

顧客番号から顧客名を表引きしたい
VLOOKUP関数を使います

納品書の明細もVLOOKUP関数で転記したい
納品番号に行番号を追加すれば、 それを使って 各明細行の表引きが可能です

納品書の日付と顧客名を自動転記したい
元表がテーブル化されていれば、 そのテーブル名と項目列名を指定して、 納品番号から表引きできます

顧客名の顧客コードを表引きしたい
検索する「顧客名」を左端に移動して、 VLOOKUP関数で表引きします

テーブル化した商品リストから、 商品コードで商品情報を表引きしたい
表引きする側とされる側の両方をテーブル化すれば、 項目列名で表引きすることができます

住所から都道府県名を取り出したい
都道府県名の一覧を用意すれば、 VLOOKUP関数で住所から都道府県名を取り出せます

出退の時刻を簡単に記録したい
簡単なマクロを作れば、 「出社」や「退社」をクリック(タップ)するだけで現在日時を入力できる タイムカードを用意できます

『名前』に右隣セルの『ふりがな』を登録したい
簡単なマクロを作って、ふりがな登録する方法があります

セル範囲を対象とするユーザー定義関数を作りたい
For Each...Next ステートメントを使って、選択範囲に含まれるセルを順番に処理します

オリジナルの関数(ユーザー定義関数)を作りたい
Functionプロシージャとして、Visual Basicで作成できます

マクロを作りたい
「開発」タブを表示しておけば、そこから「Visual Basic」を実行してマクロを作ることができます

ブックを開いたときの新規シート自動挿入を、1日1枚に制限したい
新規シートの名前に日付を加え、マクロ実行時にその存在の有無を確認するようにします

ブックを開いたときに、新規シートを先頭へ挿入したい
ThisWorkbookのOpenプロシージャに該当コードを記述します

マイナス値をゼロに置換したいC
If...ThenステートメントによるVBAマクロを使えば、マイナス値をまとめてゼロに置換できます

“縮小して表全体を表示する”のマクロを、 クイックアクセスツールバーから実行したい
クイックアクセスツールバーにマクロを登録すれば、マウスからでも、キーボードからでも、簡単に実行できるようになります

“縮小して表全体を表示する”のマクロを使って、表の選択から一気に処理したい
Range.CurrentRegion プロパティを使えば、 アクティブセル領域となっている表全体をマクロで選択できます

“縮小して表全体を表示する”を、 ショートカットキーですばやく実行したい
実行手順をマクロとして記録すれば、 ショートカットキーでその一連の手順をすばやく実行できるようになります

“セキュリティの警告”が表示されるんだけど・・・
マクロを含むブックを開くときには、注意を促すべく、「セキュリティの警告」が表示されます

マクロ有効ファイルって何?
マクロを含むブックは、 マクロ有効ファイル(マクロ有効ブック)として保存しなければ、マクロが失われてしまいます

100行程度の表で、5行おきに、新しい行を挿入したい
あまり大きくない表でのパターン化された処理なら、一定の手順をマクロ記録すると便利です

オートシェイプをクリックするたびに、枠線の表示と非表示を切り替えたい
枠線の表示と非表示の切り替えマクロを、 オートシェイプに登録すれば、 オートシェイプをクリックするだけでそのマクロが実行されるようになります

オートシェイプの枠線の表示と非表示を、一つのマクロで切り替えたい
If〜Then〜Elseの構文を使えば、 オートシェイプの状態に応じて、表示と非表示を一つのマクロで切り替えられます

オートシェイプの枠線の表示の有無を、マクロで切り替えたい
Shape.LineのVisibleプロパティの設定を変えることで、 枠線を表示したり非表示にしたりすることができます

マクロを右クリックで実行したい
Worksheet_BeforeRightClickイベントのプロシージャにマクロを記述すると、 指定シートを右クリックしたときにそのマクロが実行されます

ブックを閉じるときに、マクロを自動的に実行したい
そのブックのWorkbook.BeforeClose イベントに、マクロを実行するコードを記述します

2つのフォルダへの保存マクロを、汎用的なものにしたい
ファイル名の部分を、 編集中のブックの名前を表すActiveWorkbook.Nameにすると、 編集中のブックならどれでもマルチ保存が可能になります

マクロ実行時に表示されるダイアログボックスを無視したい
Application.DisplayAlerts プロパティをFalseにすると、 マクロの実行中に警告やメッセージが表示されなくなります

編集中のブックを、現在のフォルダとは別のフォルダにも、すばやく保存したい
手間のかかる操作は、マクロ化すれば、簡単に処理できるようになります

ブックにたくさんのシートがあり、 それぞれのB2セルに入力してあるデータを、それぞれのシートの名前にしたい
For Each...Next ステートメントを使えば、 編集中のブックに含まれるすべてのシートを対象にして、同じ処理を実行することができます

マクロのコードを、見た目にわかりやすく、簡潔に記述したい
With ステートメントを使えば、作業の対象となるオブジェクトの記述が1回で済みます

B2セルに入力してあるデータを、そのシートの名前にしたい
シートの名前は、Worksheet.Name プロパティで変えることができます

リスト内の各データを、順番に個別で表示したい
専用のユーザーフォームにスクロールバーを追加すれば、リスト内のデータを順番に表示できます

リスト内の各データを、必要に応じて個別で表示したい
マクロを使えば、ダブルクリックしたデータを、専用のユーザーフォームで表示することができます

指定したページだけを、とびとびで印刷したい
マクロを使えば、指定したページだけを連続して印刷することは可能です

どのブックからでも利用できるマクロを作りたい
「個人用マクロブック」に登録すれば、どのブックからでもそのマクロを実行できるようになります

 

 

 

 

 

出前館

アウトドア&フィッシング ナチュラム