趣味のIT
自宅サーバーの構築
ApacheとTomcatの連携
Javaのインストール
JavaWebStartの実装
Webプログラミング
JavaScript
Java Applet
PHP
Java Web Start
エクセルプログラミング
VBAでお絵かき
値を貼り付け←
セル参照

エクセルプログラミング

形式を指定して貼り付け→値→OK

エクセルの計算式を使っていると、途中で数値を固定したくなることがあります。
例えばメールでファイルを送る場合、 特定のシートだけを送りたい時は他のシートを参照している計算式はフィックスする必要があります。
通常ならば、このような操作は、クリップボードにコピーしてから、数値のみを貼り付けます。
具体的には、メニューから

  1. [編集]→[コピー]
  2. [編集]→[形式を指定して貼り付け]→[数値]→[OK]
あるいはツールバーのボタンで
  1. [コピー]
  2. [貼り付け]→[数値]
となります。

キーボード操作

このような操作が少ないうちはよいのですが、エクセルを使い込んで値を固定する操作が次第に増えてきます。
その都度キーボードから手を離してマウス操作するのは億劫になり、キーボード操作をしたくなります。
「コピー」操作は[Ctrl+C](Ctrlキーを押しながらCキーを押す)ことで代用できます。
ところが、「数値で貼り付け」のショートカットキーは用意されていないようです。
そこで、私はキーボードから [Alt]→[E]→[S]→[C]→[Enter] を使用するようにしています。
つまり、[Alt]キーでメニュー選択モードにして、メニューのショートカット文字を順に押していきます。
面倒なようですが、慣れてしまえばマウスを使うよりは速いです。
ついでに言えば、

  • 値コピー:[Alt]→[E]→[S]→[C]→[Enter]
  • 数式コピー:[Alt]→[E]→[S]→[F]→[Enter]
  • 書式コピー:[Alt]→[E]→[S]→[T]→[Enter]
  • 行列反転:[Alt]→[E]→[S]→[E]→[Enter]
  • 行列反転値コピー:[Alt]→[E]→[S]→[V]→[E]→[Enter]
なども覚えておけば便利です。

VBA

キーボードで操作できることはわかりましたが、それでも4回もキーをたたく必要があります。
更に簡単にする操作する方法があるのでしょうか?
そこで、思いついたのがVBAです。

PERSONAL.XLS

といっても、作業中のエクセルファイルにマクロを記述してもそのファイルでしか利用できません。 どの作業中でも共通にこのマクロが使えるようにしたいものです。
エクセルには起動時に自動的に読み込まれるブックがあり、そのブックにマクロの登録するとどの作業中でも共通にマクロが使用できます。
手順としては、まず新規にファイルを作成し、そのまま PERSONAL.XLS という名前で保存します。 ファイルの保存先は、
C:\
---Documents and Settings\
----(あなたのアカウント名)\
------Application Data\
--------Microsoft\
----------Excel\
------------XLSTART\
です(Windows XP)。階層が深いです。
以下、このファイルについてマクロを登録していきます。

VBAの登録

最初に、簡単のためにVisualBasicのツールバーを表示させます。 メニューから[表示]→[ツールバー]→[VisualBasic]を実行してください。

Visual Basic の編集画面を表示します。 VisualBasicのツールバーから、VisualBasicEditorを選択します。

Visual Basic の編集画面のプロジェクトの中から PERSONAL.XLS にモジュールを追加します。
(プロジェクトの画面が表示されてなかったらメニューから[表示]→[プロジェクトエクスプローラ]を選んでください)
PERSONAL.XLS を選んだ状態で、[挿入]→[標準モジュール]を選択します。
右側に編集画面が出てきますので、以下のコードを記述します。
Sub PasteValue()
' 値のみを貼り付ける
' Keyboard Shortcut: Ctrl+Shift+V
'
    If Application.CutCopyMode = False Then Exit Sub
    Selection.PasteSpecial Paste:=xlPasteValues, _
                                 Operation:=xlNone, _
                                 SkipBlanks:=False, _
                                 Transpose:=False
End Sub

Sub FixValue()
' 計算式の固定
' Keyboard Shortcut: Ctrl+Shift+C
'
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, _
                           Operation:=xlNone, _
                           SkipBlanks:=False, _
                           Transpose:=False
    Application.CutCopyMode = False
End Sub
            

ここで、動作を確かめてみます。
エクセルに戻って、Bookを新規作成し、以下の操作をします。

  1. 適当な計算式を作ります。
    [A1]に1
    [B1]に2
    [C1]に=A1+B1
  2. 計算式のあるセルを選んでコピー
  3. 別のセルを選ぶ
    [C2]を選ぶ
  4. VisualBasicのツールバーからマクロの実行を選ぶ
  5. リストから PERSONAL.XLS!PasteValue を選んで実行する
  6. セル内([C2])にはコピー元の値(3)が入る
  7. 計算式の入ったセルを選ぶ
    [C1]を選ぶ
  8. VisualBasicのツールバーからマクロの実行を選ぶ
  9. リストから PERSONAL.XLS!FixValue を選んで実行する
  10. セル内([C1])の計算式が値(3)に固定される

正常に動作したならOKです。
でも、値を固定させる度に [マクロ]→[実行] を選んでいては大変です。 そこで、キーボードショートカットを設定します。

  1. VisualBasicのツールバーからマクロの実行を選ぶ
  2. リストから PERSONAL.XLS!PasteValue を選んでオプションボタンを押す
  3. オプション画面でショートカットの入力欄にて[Shift]+[V]を押す
    ([Shift]キーを押しながら[V]キーを押す)
  4. OKボタンを押す
  5. 同じくリストから PERSONAL.XLS!PasteValue を選んでオプションボタンを押す
  6. オプション画面でショートカットの入力欄にて[Shift]+[C]を押す
    ([Shift]キーを押しながら[C]キーを押す)
  7. OKボタンを押す
  8. マクロの画面を閉じる

以上で設定は完了です、最終的な動作を確かめてみます。
先程と同じような操作をします。
  1. 適当な計算式を作ります。
    [A1]に1
    [B1]に2
    [C1]に=A1+B1
  2. 計算式のあるセルを選んでコピー
  3. 別のセルを選ぶ
    [C2]を選ぶ
  4. [Ctrl]+[Shift]+[V]を押す
    ([Ctrl]キーと[Shift]キーを押しながら[V]キーを押す)
  5. セル内([C2])にはコピー元の値(3)が入る
  6. 計算式の入ったセルを選ぶ
    [C1]を選ぶ
  7. [Ctrl]+[Shift]+[C]を押す
    ([Ctrl]キーと[Shift]キーを押しながら[C]キーを押す)
  8. セル内([C1])の計算式が値(3)に固定される
正常に動作したなら成功です。 PERSONAL.XLS を保存しましょう。
動作検証に使ったBookは不要です。保存せずに閉じてください。

仕上げに

以上が完了したら、エクセルを終了します。
次回から、エクセルの起動時に PERSONAL.XLS が自動的に起動してマクロが有効になります。 キーボードのワンアクションで値の固定が可能になりました。
ところが、マクロだけ働きをする PERSONAL.XLS が画面に現れるのは目障りなものです。 不必要に変更されても困ります。
そこで、以下の対策を施します。PERSONAL.XLS を表示した状態で、メニューから

  1. [ウィンドウ]→[表示しない]
を実行してください。
そのままエクセルを終了すると、保存するかどうか聞いてきますので保存終了してください。
次回のエクセル起動からは PERSONAL.XLS は表示されずに読み込まれます。

最後に

このマクロの欠点は。

  • 複数セルを選択していると正常動作しない
  • マクロを使っているため、アンドゥができない
です。やり直しがあるかもしれないときには、[Alt]→[E]→[S]→[C]→[Enter]を使ってください。
以上が私の持っている簡単なノウハウです。
もっと簡単な方法をご存知の方は教えてください。
また、PERSONAL.XML の活用の仕方ももっと考えていきたいものです。

Copyright (C) 2006 T.Fujiwara , All rights reserved.