今日は、午前中、港区のとあるメーカーさんで法人向けのフォローアップであった。
その最中に、ある受講生の方から出た質問に、以下のようなものがあった。
「Excelのシートに載っている値の、整数部分だけを入れ替えたいんですけど。」
事情がよく分からなくて詳しく聞いてみたところ、製品の品質検査結果を入力するシートで、小数部分は正しくても、整数部分が正規の値でない場合があるとか、そういうこと。
つまり、乱暴に言うと、以下のような感じ。
29.82 正しくは→ 8.82
62.27 正しくは→ 8.27
64.78 正しくは→ 8.78
26.38 正しくは→ 8.38
27.93 正しくは→ 8.93
82.98 正しくは→ 8.98
82.46 正しくは→ 8.46
58.92 正しくは→ 8.92
98.61 正しくは→ 8.61
91.10 正しくは→ 8.10
22.69 正しくは→ 8.69
69.51 正しくは→ 8.51
98.00 正しくは→ 8.00
24.39 正しくは→ 8.39
53.39 正しくは→ 8.39
10.64 正しくは→ 8.64
99.94 正しくは→ 8.94
67.62 正しくは→ 8.62
1.57 正しくは→ 8.57
57.52 正しくは→ 8.52
10.01 正しくは→ 8.01
10.30 正しくは→ 8.3
79.89 正しくは→ 8.89
28.45 正しくは→ 8.45
4.56 正しくは→ 8.56
で、そういうとき、どうするか。
ひとつのやり方としては、ある値の整数部分を取得する関数として、Fix関数というものがあるので、それを使う。
Fix関数のサンプルを出してみると、こんな感じか。
以下の例では、セル「A1」に「29.82」という値が入っていたなら、セル「B1」には、「29」という値が入力される。
Sub sample1()
Range(“B1”).Value = Fix(Range(“A1”).Value)
End Sub
ならば、小数部分を取り出す、あるいは、整数部分を差し替えるマクロを作るなら、以下のような感じ。
Sub sample2()
Range(“B1”).Value = Fix(Range(“A1”).Value)
Range(“C1”).Value = Range(“A1”).Value – Fix(Range(“A1”).Value)
Range(“D1”).Value = 8 + Range(“A1”).Value – Fix(Range(“A1”).Value)
End Sub
ForNext構文を使って連続操作をするなら、以下の要領だ。
Sub sample3()
Dim c As Long
For c = 1 To 25
Range(“B” & c).Value = Fix(Range(“A” & c).Value)
Range(“C” & c).Value = Range(“A” & c).Value – Fix(Range(“A” & c).Value)
Range(“D” & c).Value = 8 + Range(“A” & c).Value – Fix(Range(“A” & c).Value)
Next
End Sub
もっとも、こういうことは、他の似たような関数についての知識と同様、頭の中に丸覚えしておくべきような内容ではない。
正しくは、以前にSamuel Johnsonの言葉を引用して説明したとおり、「調べ方」を知っていれば良いだけのことだ。
There are two types of knowledge. One is to know a thing. The other is where to find it.
– Samuel Johnson
http://bit.ly/cb4I1K
実際、この研修中に質問されたときも、僕は、以下のようなキーワードで検索した。
「vba 整数部分」 http://bit.ly/dsXMln
そした、その結果表示されたページのうちの上位のものを適当に調べ、その結果をもとにして、受講生に具体的な手法をお伝えした。
それにかかった時間は、説明をしながらでも、30秒にも満たなかった。
こういうところのセンスを磨くことこそが、プログラミングに上達するということで、エクセル VBAの世界で言えば、「Excel マクロの達人になる」ということだ。
つまり、ネット検索の場合であれば、
○調べたいことを、どういう検索キーワードで調べれば見つけられそうかを判断する能力
○検索結果のページから、自分が欲しい情報が載っていそうなページに見当をつける能力
○自分が開いたページから、欲しい情報を見つけてきて、利用できる能力
といったところか。
古来のことわざに、「人に魚を与えることは一回の食事にしかならないが、魚の採り方を教えることは、生涯の糧を与えることになる」というものがある。
どうせ人に何かを、教えるのなら、付け焼き刃な話だけではなく、本質の理解につながる、その人の中に応用力を育むような話をしたいものだ。
勤務時間計算プログラムから出力されたエクセルファイルでは、
時間表示が 4:30のところ、4.30になっており、これを4.5にする方法を
模索しているところ、このページが参考になり、INT関数を使うことで
成功しました。有難うございました!!
お返事遅くなりました。
ともあれ、よかったです。