goo blog サービス終了のお知らせ 

パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

省略されたデータを取得するオリジナル関数

2010-10-21 09:00:23 | ExcelVBA
こんな質問を受けました。

「こんな表があるんです。A列の値が同じ場合は、省略されているのです。
その省略されているA列の値を調べるには、どうすればいいんですか?」

その表とは、こんな表です。




確かに、手書きでは、こんな風に書きますよね。

でも、エクセルで管理するには、A列の値を省略することはお勧めできません。
くどいようでも、同じ値を入力する必要があります。

それでも、どうしても、省略しろという上司の命令があるのなら、仕方がないですね。


こんな場合、例えば、4列目をどこかに転記する必要があるとき、A列の値は、空欄というわけにはいきません。

なんとかして、A列の値を求めなければなりませんね。

こんな感じです。





さあ、どうしましょうか?

VBAで、オリジナルの関数を、つまり、ユーザー定義関数をつくってみましょう。


エクセルを起動したら、Altキーを押しながらF11キーを押します。
すると、Visual Basic Editorが起動します。

コードを記述するモジュールが必要なので、「挿入」→「標準モジュール」とクリックします。

そこに、以下のようにコードを記述します。


Function GetMeisho(r As Range) As String
    If r.Offset(, -1).Value = "" Then
        GetMeisho = r.Offset(, -1).End(xlUp).Value
    Else
        GetMeisho = r.Offset(, -1).Value
    End If
End Function



画像も載せておきます。



解説です。
引数にB列のセルを指定し、そのセルの左隣(つまりA列)の値を取得します。
もし空欄なら、どんどん上を見に行って、値が出てきたらそれが、該当するA列の名称の値となります。




ユーザー定義関数は、VBAの中でも使用できますが、標準のワークシート関数のように、エクセルで使用することもできます。

今回は、E列にこの関数を設定します。
E列2行目に、関数を入力します。引数は、B2 を指定してください。
あとは、オートフィルで大丈夫です。



なお、注意事項があります。
関数は、引数が変更されると自動的に再計算されますが、引数以外のセルの値の変更時には再計算されません。
したがって、E列に関数を設定した後、A列の値を変更しても、答えは正しく更新されません。
再度、E列に関数を入力しなおしてください。



だい

コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「Flash」の動画が再生されな... | トップ | 過去のお勧め記事 »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
非常に勉強になりました! ((-_☆)-キラリ!IXIONです!)
2010-10-23 08:35:28
いつも本当にありがとうございます!

ポチ完了です♪


パソコンは、使い手の頭以上にはならないとよく言われますが、こういう知識を拝見すると僕のPCは、かなり頭が悪そうです(笑

また色々教えてくださいね♪
返信する
(-_☆)-キラリ!IXIONです!さんへ (だい)
2010-10-23 14:25:16
コメントありがとうございます。
パソコンは仕事柄毎日触っているのですが、やりたいことがいっぱいあって、しばらく取り組んでいないことはすぐに忘れてしまいます。

僕の頭もメモリ増設したいです。
これからも、訪問してくださいね。
返信する

コメントを投稿

ExcelVBA」カテゴリの最新記事