今日は、ユーザー定義関数のご紹介をします。
エクセルは、300以上の関数が用意されていますが、
VBAを使って、オリジナルの関数を作ることもできます。
今回は、生徒さんからの質問というか要望を取り上げてみます。
以下のような表があります。
紙面の都合で、データの数は、11行ですが、実際は、300行ほどあります。
「C列の規格に入っている数字と単位を分離してE列とF列に入れたい。簡単にできないか」というのが、
生徒さんからの要望でした。
データを見ると、単位の文字数もまちまちですし、
数字の桁数もまちまちです。
規則性があれば、最初から何文字とか、最後から何文字とかいうロジックで
対処できますが、今回はそうは行きません。
そこで、データの文字列を頭から1文字ずつ取り出して、
それが数字なのかどうかで、判断するというロジックを採用します。
数字だけを取り出す関数と、文字だけを取り出す関数を作れば、
今回の生徒さんの要望にこたえられそうですね。
これは、やはりVBAを使わないとできませんので、まずは、VBEを起動しましょう。
ALTキー + F11キー を同時に押して、
Visual Basic Editorを起動します。
「挿入」→ 「標準モジュール」とクリックして、
コード入力画面を表示します。
以下のようにコードを記述します。
下の画像のようにしてくださいね。
これで、2つのユーザー定義関数ができました。
あとは、この関数を使って、単位量と単位の列にデータを表示します。
エクセルの画面に切り替えて、E列2行目を選択します。①(下の画像を参照)
関数の挿入ボタンをクリックします。②
関数の分類を「ユーザー定義」にします。③
getNum関数を選択します。④
最後に、OKボタンを押します。
次に表示される画面で、C列2行目を選択してから、OKをクリックします。
すると、E列2行目に 数字が表示されます。
C列2行目の値から、ちゃんと数字だけ取り出されてますね。
それでは、次に 単位を取り出してみましょう。
F列2行目を選択してから、関数挿入ボタンをクリックして、
今度は、getStr関数を選択します。
あとは、最初の関数と同様にやってみてください。
以下の画像のように、kg が、F列2行目に入ります。
あとは、数式のコピーをして完了です。
オートフィルを使いましょう。
E2:F2 を選択して、右下のフィルハンドルを出したら、
12行目までドラッグします。
はい、完成です。
このように、必要に応じてユーザー定義関数を作成すれば、
作業効率もアップしますよ。
だい
エクセルは、300以上の関数が用意されていますが、
VBAを使って、オリジナルの関数を作ることもできます。
今回は、生徒さんからの質問というか要望を取り上げてみます。
以下のような表があります。
紙面の都合で、データの数は、11行ですが、実際は、300行ほどあります。
「C列の規格に入っている数字と単位を分離してE列とF列に入れたい。簡単にできないか」というのが、
生徒さんからの要望でした。
データを見ると、単位の文字数もまちまちですし、
数字の桁数もまちまちです。
規則性があれば、最初から何文字とか、最後から何文字とかいうロジックで
対処できますが、今回はそうは行きません。
そこで、データの文字列を頭から1文字ずつ取り出して、
それが数字なのかどうかで、判断するというロジックを採用します。
数字だけを取り出す関数と、文字だけを取り出す関数を作れば、
今回の生徒さんの要望にこたえられそうですね。
これは、やはりVBAを使わないとできませんので、まずは、VBEを起動しましょう。
ALTキー + F11キー を同時に押して、
Visual Basic Editorを起動します。
「挿入」→ 「標準モジュール」とクリックして、
コード入力画面を表示します。
以下のようにコードを記述します。
Option Explicit Public Function getNum(str As String) As Long Dim i As Integer Dim c As Integer Dim buf As String c = Len(str) buf = "" For i = 1 To c If IsNumeric(Mid(str, i, 1)) Then buf = buf & Mid(str, i, 1) End If Next If buf = "" Then getNum = 0 Exit Function End If getNum = CLng(buf) End Function Public Function getStr(str As String) As String Dim i As Integer Dim c As Integer Dim buf As String c = Len(str) buf = "" For i = 1 To c If Not IsNumeric(Mid(str, i, 1)) Then buf = buf & Mid(str, i, 1) End If Next getStr = buf End Function
下の画像のようにしてくださいね。
これで、2つのユーザー定義関数ができました。
あとは、この関数を使って、単位量と単位の列にデータを表示します。
エクセルの画面に切り替えて、E列2行目を選択します。①(下の画像を参照)
関数の挿入ボタンをクリックします。②
関数の分類を「ユーザー定義」にします。③
getNum関数を選択します。④
最後に、OKボタンを押します。
次に表示される画面で、C列2行目を選択してから、OKをクリックします。
すると、E列2行目に 数字が表示されます。
C列2行目の値から、ちゃんと数字だけ取り出されてますね。
それでは、次に 単位を取り出してみましょう。
F列2行目を選択してから、関数挿入ボタンをクリックして、
今度は、getStr関数を選択します。
あとは、最初の関数と同様にやってみてください。
以下の画像のように、kg が、F列2行目に入ります。
あとは、数式のコピーをして完了です。
オートフィルを使いましょう。
E2:F2 を選択して、右下のフィルハンドルを出したら、
12行目までドラッグします。
はい、完成です。
このように、必要に応じてユーザー定義関数を作成すれば、
作業効率もアップしますよ。
だい