今回は、Webページから取得したデータの中から、目的の検索結果の総数を
いかに取り出すかを一緒に考えてみたいと思います。
さて、前回は、左から2番目のシートに、データを取り込んだところまででした。
10行目に、検索結果の総数がありますね。
この数字だけを取り出したいのです。
しかし、毎回10行目にあるとは限らないのです。(確認したら、そうでした)
ですから、取り込んだ全てのデータから、何とか見つけ出すしかないのです。
つまり、1行目から、順番に検索結果の総数の数字があるかどうかをチェックしていけばいいのです。
取り込んだデータをよく見てください。
検索結果の総数は、「検索結果」という文字の後にあるのです。
従って、1行目から、「検索結果」という文字が存在するかどうかをチェックすればいいのです。
こんなときは、Instr という関数を使用します。
そして、存在したら、今度は、その数字の後ろの文字、「件中」までの間の文字を
抜き出せば、数字を取り出すことができそうです。
ただし、数字の前に、約 という文字がありますね。
何度か検索してみたところ、この 約 という文字は、必ずしもあるわけではないことが分かりました。
そんな時は、どうすればいいのでしょう。
約という文字がある場合と、ない場合で、処理を分岐する方法もありますが、
実は、もっと簡単な方法があります。
「置換」という機能を使うのです。
この方法を使うと、条件分岐をする必要がありません。だから、コードがシンプルになります。ありがたいですね。
あとは、求める数字の両端に空白がある場合がありますので、関数を使って除去します。
以上が、処理の流れです。
なお、今回の処理は、必ず答えが出るので、Functionプロシージャとして作ります。
いわゆる、ユーザー定義関数ですね。
関数名は、GetKensu としました。
コードで記述すると、以下のようになります。
一応、画像も載せておきます。
緑色の部分は、プログラムで実行されない部分、つまり、コメント行です。
ですから、なくてもかまいません。
この関数を実行すると、検索結果の総数を取得することができます。
VBAには、文字列の制御に関する様々な関数が用意されています。
活用しましょうね。
次回は、いよいよ、クライマックスですよ。、お楽しみに♪
だい
いかに取り出すかを一緒に考えてみたいと思います。
さて、前回は、左から2番目のシートに、データを取り込んだところまででした。
10行目に、検索結果の総数がありますね。
この数字だけを取り出したいのです。
しかし、毎回10行目にあるとは限らないのです。(確認したら、そうでした)
ですから、取り込んだ全てのデータから、何とか見つけ出すしかないのです。
つまり、1行目から、順番に検索結果の総数の数字があるかどうかをチェックしていけばいいのです。
取り込んだデータをよく見てください。
検索結果の総数は、「検索結果」という文字の後にあるのです。
従って、1行目から、「検索結果」という文字が存在するかどうかをチェックすればいいのです。
こんなときは、Instr という関数を使用します。
そして、存在したら、今度は、その数字の後ろの文字、「件中」までの間の文字を
抜き出せば、数字を取り出すことができそうです。
ただし、数字の前に、約 という文字がありますね。
何度か検索してみたところ、この 約 という文字は、必ずしもあるわけではないことが分かりました。
そんな時は、どうすればいいのでしょう。
約という文字がある場合と、ない場合で、処理を分岐する方法もありますが、
実は、もっと簡単な方法があります。
「置換」という機能を使うのです。
この方法を使うと、条件分岐をする必要がありません。だから、コードがシンプルになります。ありがたいですね。
あとは、求める数字の両端に空白がある場合がありますので、関数を使って除去します。
以上が、処理の流れです。
なお、今回の処理は、必ず答えが出るので、Functionプロシージャとして作ります。
いわゆる、ユーザー定義関数ですね。
関数名は、GetKensu としました。
コードで記述すると、以下のようになります。
Function GetKensu() As String Dim i As Integer Dim LastRow As Integer Dim StartPoint As Integer, EndPoint As Integer '定数に、今回は、「検索結果」を設定する Const StartKeyWord As String = "検索結果" Sheets(2).Select '最終行を見つける LastRow = Range("A65536").End(xlUp).Row For i = 1 To LastRow '行に、「検索結果」という文字があるかどうかをチェック。 StartPoint = InStr(Range("A" & i).Value, StartKeyWord) If StartPoint > 0 Then '見つかった場合の処理(見つかると、行頭からの文字数を返す) EndPoint = InStr(Range("A" & i).Value, "件中") '「件中」という文字までの間に、検索件数の数字が存在する GetKensu = Mid(Range("a" & i).Value, _ StartPoint + Len(StartKeyWord), _ EndPoint - (StartPoint + Len(StartKeyWord))) '「検索結果」と「件中」の間の文字を取得 GetKensu = Replace(GetKensu, "約", "") '「約」という文字を削除(こういう場合に、置換を使用する) GetKensu = Trim(GetKensu) '一応、数値の両端の空白を除去しておく Exit Function End If Next GetKensu = "なし" 'もし、検索結果の数値が見つからなかった場合の、この関数の答え End Function
一応、画像も載せておきます。
緑色の部分は、プログラムで実行されない部分、つまり、コメント行です。
ですから、なくてもかまいません。
この関数を実行すると、検索結果の総数を取得することができます。
VBAには、文字列の制御に関する様々な関数が用意されています。
活用しましょうね。
次回は、いよいよ、クライマックスですよ。、お楽しみに♪
だい