ジュリーは、誰かが値を入力すると、入力されたものに自動的に20%を追加する、ワークシート上のいくつかの入力セルを持ちたいと考えています。

たとえば、誰かがこれらのセルの1つに200を入力した場合、実際に入力されるのは240です。

マクロを使用してこのタスクに取り組む方法は多数あります。

最善の方法は、ワークシートでセルが変更されたときに自動的に実行されるマクロを作成することです。次に、入力セルの1つで変更が行われたかどうかを確認し、それに応じて値を調整できます。

次の例では、入力された値がA1、C3、またはB8の3つのセルのいずれかで作成された場合に変更します。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInput As Range     Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired     Set rInput = Range("A1, C3, B8")



Set rInt = Intersect(Target, rInput)

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

これはイベントハンドラーであることに注意してください。つまり、ワークシートで何かが変更されるたびに(この場合は)トリガーされます。このマクロを使用するには、ワークシートタブを右クリックし、表示されるコンテキストメニューから[コードの表示]を選択します。 ExcelにVBエディターが表示されたら、Worksheet_Changeコードを追加できます。

定義された3つの入力セルのいずれかで変更が行われたかどうかを判断するための鍵は、交差関数であることに注意してください。ターゲット範囲(Worksheet_Changeハンドラーをトリガーした変更されたセル)とrInput範囲(入力セル)の間に交差があるかどうかを確認します。存在する場合、rIntには交差したセルが含まれます。

次に、マクロはそれらのセルをステップスルーし、セルに数値が含まれている場合は、それらのセルに120%を乗算します。 (120%を掛けることは、値を20%増やすことと同じです。)掛け算が行われると、.EnableEventsプロパティがFalseに設定されることに注意してください。このセーフガードが取られなかった場合、各乗算はこのイベントハンドラーを再度トリガーし、セル値を繰り返し(そして永久に)120%乗算します。

特定の小数点数や整数値への丸めなど、値に対して他の処理を実際に実行したい場合は、実際に乗算を実行する1行に変更を加えるだけで済みます。

入力セルが連続した領域にある場合は、それらの入力セルを名前付き範囲として定義し、マクロ内でその名前付き範囲を使用して、変更されたセルの交差を判別することをお勧めします。このようにして、入力セルのグループが変更されたとき、または変更された場合にマクロを変更する必要はありません。

このアプローチを使用するために、入力セルの範囲がB7:B19であるとしましょう。それらのセルを選択し、セル領域の左上隅にある名前ボックスを使用して、「plus20pct」という名前を入力します。このアクションにより、名前が範囲に割り当てられます。その後、マクロ内でその名前を使用できます。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired

Set rInt = Intersect(Target, Range("plus20pct"))

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

唯一の変更は、セルの共通部分の決定方法にあることに注意してください。交差関数は、パラメーターとして「plus20pct」範囲を使用します。他のすべては以前と同じように機能します。

マクロを使用してこれを行う方法を確認したので、実際にマクロを使用してこれを行う必要があるかどうかについては疑問が残ります。まず、これらのマクロで実行できることには制限があります。たとえば、ユーザーが入力セルの1つに日付または時刻を入力した場合はどうなりますか?内部的には、Excelは日付と時刻を数値として処理します。つまり、日付と時刻も20%増加します。

次に、誰かが行または列を追加または削除してワークシートの構造を変更した場合に、ワークシートがどうなるかを考慮する必要があります。

マクロは、絶対セル参照(A1、C3、およびB8)または名前付き範囲(plus20pct)のいずれかを使用しています。名前付き範囲は行または列の追加または削除によって調整できますが、絶対セル参照は変更されません。したがって、最終的にマクロのチェック(および調整)が行われる可能性があります

予期されたデータ入力セルではなくなったセル。

第三に、誰かがあなたの入力セルの1つに値(200)を入力したとしましょう。自動的に20%増加し、240になります。人はこの変化を見て何が起こったのか疑問に思ったので、セルを選択し、F2を押してセルの編集を開始します。変更を加える前に、「ああ、そうだ。自動的に20%増加するはずだ」ということを覚えている。したがって、Enterキーを押すだけで240の値を受け入れることができます。

ただし、Excelはこれを変更と見なし、240を20%増やして、結果として288になります。これは、ユーザーやユーザーが意図したものではありません。

この2番目の考慮事項(ユーザーの混乱)は、ユーザーがワークシートに入力する内容を自動的に変更する際の最大の潜在的な問題です。混乱の少ないアプローチは、ワークブックの入力領域を明確に定義することです。ユーザーは数字を入力領域に入力し、それらの数字は入力したままになります。次に、他のセルまたは数式で、20%の調整を行います。

この設計アプローチ(データ入力を容易にするためにワークシートの設計を変更する)は、ワークシートのセルに入力した内容を自動的に変更するよりも、ユーザーの混乱を少なくする可能性があります。また、マクロが有効なワークブックに固有のリスクを取り除きます。ユーザーはマクロを有効にせずにワークブックをロードできるため、意図したとおりに数値が調整されないことが保証されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12684)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。