忙しい現代人の腰&肩のお悩み対策!

エクセルのマクロを使用して
グーグル検索を出来るようにしたいです。

処理としまして、プログラムを起動すると
ユーザーフォームが起動して、テキストボックスがあり
テキストボックス内に検索したいキーワードを入力して
ボタンをクリックしたら
IEが起動して自動で検索結果が表示されるようにしたいのですが

テキストボックスに入力したキーワードを
どうしても反映させることが出来ない状態です。

出来れば、検索結果の一番下のほうに
「他のキーワード」と言うのがありまして
ダイエットで検索すると
「他のキーワード」が

ダイエット日記
ダイエット方法
食べ合わせダイエット
骨盤ダイエット
ダイエット レシピ
ダイエット 運動
どうぶつダイエット
ダイエット ブログ
バナナ ダイエット
炭水化物ダイエット

といったキーワードが出てくるのを
メモ帳に自動で書き出すようにも出来ればありがたいです。

わかりにくい説明かもしれませんが
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

 TextBox1 にキーワードを入力し CommandButton1 をクリックしたら、デスクトップの "Google 他のキーワード.txt" に「他のキーワード」が追記されていきます。



'-------------------------------------------------------------------
Private Sub CommandButton1_Click()
 Dim MyKeyWord As String
 Dim objIE As Object
 Dim i As Integer
 Dim MyDir As String
 Dim MyTxt As String
 Dim j As Integer
 Dim HisKeyWord As String
 MyKeyWord = TextBox1.Text
 
'Internet Explorer の起動
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  
'キーワードの入力
  .navigate "ht" & "tp://w" & "ww.google.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  .document.forms.Item(0)(1).Value = MyKeyWord
  .document.forms.Item(0)(2).Click
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  For i = 0 To .document.all.Length - 1
   If .document.all.Item(i).className = "e" Then Exit For
  Next

'メモ帳の保存先フォルダとファイル名の指定
  MyDir = Environ("USERPROFILE") & "\デスクトップ\"
  MyTxt = "Google 他のキーワード.txt"
  
'メモ帳に自動で書き出す
  Open MyDir & MyTxt For Append As #1
  Print #1, "【キーワード】" & MyKeyWord
  If i = .document.all.Length Then
   Print #1, "「他のキーワード」はございません。"
  Else
   For j = 1 To 10
    HisKeyWord = .document.all.Item(i + j * 2 + 5).outerText
    If HisKeyWord = "12345678910次へ" Then Exit For
    Print #1, HisKeyWord
   Next
  End If
  Print #1, Chr(10)
  Close #1
  
'Internet Explorer の終了と テキストボックス の初期化
  .Quit
 End With
 Set objIE = Nothing
 TextBox1.Text = ""
 TextBox1.SetFocus
End Sub
「vbaを使ってグーグル検索をしたい」の回答画像1

この回答への補足

DOUGLAS_さんありがとうございます。

早速なんですが・・・
コードを貼り付けて実行しますと
「MyKeyWord = TextBox1.Text」の部分が黄色くなり
オブジェクトが必要ですと出てしまいます。

いろいろ調べてみたのですが
解決できないで居ます。

補足日時:2009/06/18 10:15
    • good
    • 0

>下記フォームに捨てアドレスでかまいませんので


 「下記フォーム」が見当たりません。

>メールで数通やり取りしていただけないでしょうか?
 こちら(OKWave)では、このような個人交渉は禁止されていないのでしょうか?
 もし、よいのでしたら、下記のコメント欄へお返事ください。

http://douglas.blog.shinobi.jp/Entry/1/

 なお、この質疑は、問題が解決されたようでしたら、締め切りの手続きをお願いいたします。
    • good
    • 0

>上記記載の通りに行いましたら


>ちゃんと実行することが出来ました。
ということは、元々お使いのブックでは、[回答番号:No.1] の マクロ が動かない、何か原因があるのだと存じますが、よくお分かりにならないようでしたら、[回答番号:No.4] で新規に作成されたブックを元々のブックのように作り直されればよいかと存じます。

---------------------------------------------------------------

【今後のために】
 なお、ご参考までに、
● Excel VBA で インターネットブラウザ を操作する方法
● [回答番号:No.1] の マクロ がなぜあのような記述になっているか「不思議だなぁ」と思われるかも知れない部分
について解説をしておきます。

---------------------------------------------------------------
≫≫≫≫ [WebBrowser コントロール] について
---------------------------------------------------------------
1)Excel VBA で インターネットブラウザ を操作するときは、もっぱら「CreateObject("InternetExplorer.Application")」として [WebBrowser コントロール] を使います。
 ただし、詳細を解説した Web ページ が余りありませんので、まだまだ独自に開墾しなければならない分野のようです(未開拓分野)。
2)普通は オブジェクト名 を「IE」・「objIE」・「MyIE」などに設定し、
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
・・ 一連の操作 ・・
objIE.Quit
Set objIE = Nothing
のようにして使います。
 今回は、ブラウザ を表示する必要がありませんので、「objIE.Visible = True」は割愛しました。
3)Excel VBA で [WebBrowser コントロール] を使う場合、!!! 本当はもっと簡便で合理的な方法がある !!! と思うのですが、「未開拓分野」ですので、私自身、まどろっこしい コーディング をしています。
4)「探り方」としましては、逐一 ウォッチ式 を追加して プロパティ の内容を確認していくのが、結局のところ近道で、先ずは、「objIE」を ウォッチ式 に追加して配下の プロパティ を見ていきます([回答番号:No.1] の添付画像)。
5)「objIE」自体は「Internet Explorer」ですから、直下の プロパティ は IE 自体に関しての内容になりましょうから、ご質問の操作の場合には関係ありません。
 したがって、「objIE」配下で ウォッチウィンドウ で「+」記号の付いた プロパティ を見ていくと、[Application]・[Document]・[Parent] の3つがあることが分かります。
 [Application プロパティ] は IE 自体に関連する内容、更に、[Parent プロパティ] はその「親プロパティ」ですから、今回のような場合は関係ありません。
 ということで、目的の プロパティ は [document プロパティ] になりますから、ウォッチ式は [objIE.document] で十分です([回答番号:No.2] の添付画像)。
6)次に [objIE.document プロパティ] 配下を見ていきます。
 [objIE.document] は「Web ページのコンテンツ」ですから、それ自体では括りが大き過ぎますので、これも [objIE.document] 配下で ウォッチウィンドウ で「+」記号の付いた プロパティ を見ていき、ケースバイケース で [all]・[anchors]・[forms] などの プロパティ を利用します。
7)今回は、操作の目的上 [all プロパティ] を開きましたので、ウォッチ式は [objIE.document.all] に変更します([回答番号:No.3] の添付画像)。
8)[objIE.document.all プロパティ] には、[constructor]・[ie8_length]・[length]・[Item~~] の4種類の プロパティ しか付いておりませんが、[constructor] には内容がありません。
 [length プロパティ] は [Item] の数ですが、「length : 435」となっているのに、ウォッチウィンドウ では、[回答番号:No.3] の添付画像のように [Item 256] までしか表示されませんから、(16)のように、内容を セル に書き出さないと確認できません。もしくは、「objIE.document.all.Item(434)」のような ウォッチ式 を追加して ピンポイント で確認することになります。
※※本来なら、「objIE.document.all.Item(outerText:="他のキーワード")」というような「名前付き引数」で ピンポイント に ターゲット を絞り込めそうな気もするのですが、私には、その辺りの文法が分かりません。
9)ちなみに、[Item プロパティ] の インデックス は、ウォッチウィンドウ では「Item 1」~「Item 256」となっていますが、コーディング上は数字を1減らして「Item(0)」~「Item(255)」と書きます。
 従って、すべての [Item プロパティ] を書き出すには、
For i = 0 To objIE.document.all.Length - 1
 Cells(i + 1, 1) = Replace(objIE.document.all.Item(i).~~, "<", "<")
Next
とします。

---------------------------------------------------------------
【参考URL】
●WebBrowser コントロールの概要
http://msdn.microsoft.com/ja-jp/library/w290k23d(VS.80).aspx
●三流君VBAでIE操作 InternetExplorer.Applicationを操作する
http://www.ken3.org/cgi-bin/group/vba_ie.asp

---------------------------------------------------------------
≫≫≫≫「className = "e"」の不思議について
---------------------------------------------------------------
10)Google で「ダイエット」を検索します。
11)Internet Explorer で [表示(V)] - [ソース(C)] し、HTML ソース の中から「他のキーワード」を検索すると、2ヶ所見つかります。
 前者は、ページ内 の検索結果の前に表示されている「他のキーワード」、後者は検索結果の後に表示されているものです。
 HTML ソース の前後を見てみると、それが判ります。
12)ここからは「偶然の産物」ですが。。。
 後者の HTML ソース の前後を見てみると
~~~<div class=e>~~~他のキーワード~~~
という記述がありました。
13)(11)の HTML ソース の中から「class=e」を検索してみると他にありません。
 「ラッキ~ッ!」ということで、
For i = 0 To .document.all.Length - 1
 If .document.all.Item(i).className = "e" Then Exit For
Next
として「他のキーワード」の行を突き止めました。
14)ちなみに、「objIE.document.all.Item(i)」という ウォッチ式 を追加して、「Exit For」のときの値を見てみると、[回答番号:No.4] の添付画像のように、「className」という プロパティ の値が「"e"」になっています。
15)以上で「className = "e"」の不思議は解けたかと存じます。

---------------------------------------------------------------
≫≫≫≫「Item(i + j * 2 + 5)」の不思議について
---------------------------------------------------------------
16)実は、(12)以前に、テストの段階では、「For i = 0 To .document.all.Length - 1」の行から「'Internet Explorer の終了と テキストボックス の初期化」の前までを
For i = 0 To .document.all.Length - 1
 Cells(i + 1, 1) = Replace(.document.all.Item(i).outerHTML, "<", "<")
Next
などとして、Excel の セル に [outerHTML プロパティ] の値を拾い出したりして、「他のキーワード」前後の値を何とか効率的に拾い出せないものかと試行錯誤しました。
17)(16)で「Replace(~~~, "<", "<")」としているのは、[innerHTML プロパティ] や [outerHTML プロパティ] のような HTML タグ を含む値を Excel の セル に ペースト すると、Excel が勝手に HTML タグ を飲み込んでしまいますので、HTML タグ の中の半角の "<" を全角の "<" に変換するようにしています。
18)(16)に「効率的に拾い出」すと書きましたが、ウォッチウィンドウ で「objIE.document.all.Item(i)」に続く プロパティ の内、使えそうなものを順に Excel の セル に吐き出させてみたところ [outerText プロパティ] の中に、「IE で表示されているままの文字列」を発見しましたので、[outerText プロパティ] を使うことにしました。
19)次に、実際に Excel の セル に吐き出された
Replace(.document.all.Item(i).outerText, "<", "<")
の中から、「ダイエット日記」~「炭水化物ダイエット 」の行を見つけ、「効率的に拾い出」す式を工夫したのが「(i + j * 2 + 5)」の部分です。
20)以上で「Item(i + j * 2 + 5)」の不思議は解けたかと存じます。
21)なお、検索対象の「キーワード」によっては、「他のキーワード」が3つしかなかったり、全然表示されなかったりしますので、
If HisKeyWord = "12345678910次へ" Then Exit For
としました。
    • good
    • 0
この回答へのお礼

ご親切解説ありがとうございます。

DOUGLAS_さんの人柄を見込みまして
個人的なお願い事がありまして
もしよろしければ
メールで数通やり取りしていただけないでしょうか?

下記フォームに捨てアドレスでかまいませんので
もしよろしければお返事下さい。

お礼日時:2009/06/19 16:54

>唯一違うのがIE7を使用しているところです。


 今、IE7 の マシン で試行してみましたが、やはり、問題なく終了しました。

 では、振り出しに戻って、一から始めてみましょう。

1)エクセルで新規ブックを開きます。
2)[Alt] + [F11] で VBE を開き、[挿入(I)] - [ユーザー フォーム(U)] します。
3)[ツールボックス] - [コントロール] - [テキスト ボックス] をクリックし、[UserForm1] の フォーム 上に [TextBox1] を配置します。
4)[ツールボックス] - [コントロール] - [コマンド ボタン] をクリックし、[UserForm1] の フォーム 上に [CommandButton1] を配置します。
5)[回答番号:No.1] の 「Private Sub CommandButton1_Click()」~「End Sub」をマウスでドラッグして選択し、コピー([Ctrl] + [C])します。
6)[CommandButton1] を [右クリック] - [コードの表示(O)] し、現われた コードウィンドウ で、すべて選択([Ctrl] + [A])し、貼り付け([Ctrl] + [V])ます。
7)[F5] キーを押下してマクロを実行します。
8)現われた ユーザーフォーム の テキストボックス に「ダイエット」と入力し コマンドボタン をクリックします。
9)テキストボックス に入力された「ダイエット」の文字が消え、フォーカス が テキストボックス に移ったら成功です。
10)デスクトップ 上に作成された「Google 他のキーワード.txt」を開いてみて、
-------------------------------------------------------------------
【キーワード】ダイエット
ダイエット日記
・・・・・・・・・・
炭水化物ダイエット


-------------------------------------------------------------------
という記述があれば大成功です。


 もし、上記の通りにマクロが進行せず、途中でエラーが出た場合は、現われた VBE の画面で黄色になっている
If .document.all.Item(i).className = "e" Then
の行の「i」にマウスを当て、「i=57」のような数字が表示されると存じますので、その数字をお知らせください。
「vbaを使ってグーグル検索をしたい」の回答画像4
    • good
    • 0
この回答へのお礼

何度もお付き合いいただきありがとうございます。

上記記載の通りに行いましたら
ちゃんと実行することが出来ました。

はじめの投稿で
回答してくれる人が居るのかと
心配していましたが
DOUGLAS_さんのように出会えてよかったです。

本当にありがとうございます。

お礼日時:2009/06/18 23:14

>書き込みできませんと言うエラー発生してしまいます。


>If .document.all.Item(i).className = "e" Then
 ん~。。。 おかしいですねぇ~。。。
 私の環境でしたら、全く問題なくできるんですけど。。。

 ちなみに、私の操作環境は、
・OS は Windows XP SP3
・Excel 2003 での VBA
・Windows Internet Explorer 8 が インストール されている
という条件です。

・ひょっとして、お使いの OS が「Mac」みたいなコトでしたら、私はお手上げです。
・Windows の場合でも、「Vista」でしたら
MyDir = Environ("USERPROFILE") & "\デスクトップ\"
の行を、
MyDir = "D:\"
などの、割と自由にアクセスできそうなフォルダに変更してお試しください。

 ということで、「OS」・「Excel」・「IE」の バージョン ぐらいはお示しいただいた方が解決が早いかと存じます。
「vbaを使ってグーグル検索をしたい」の回答画像3

この回答への補足

自分の環境ですが
DOUGLAS_さんとほとんど変わらないです。

唯一違うのが
IE7を使用しているところです。

補足日時:2009/06/18 21:37
    • good
    • 0

>「MyKeyWord = TextBox1.Text」の部分が黄色くなり


>オブジェクトが必要ですと出てしまいます。

【考えられる原因1:「TextBox1」という テキストボックス が存在しない】

 ご質問文内に
>ユーザーフォームが起動して、テキストボックスがあり
>テキストボックス内に検索したいキーワードを入力して
>ボタンをクリックしたら
とお書きですが、前回答のコードは「テキストボックス」の オブジェクト名 が「TextBox1」、「ボタン」の オブジェクト名 が「CommandButton1」の場合のお話しです。

 もし、ユーザーフォーム 上での当該の「テキストボックス」の オブジェクト名 が「TextBox2」とか「TextBox3」になっているのでしたら、前回答のコードの中の「TextBox1」を、すべて本当の オブジェクト名 に置換してください。


【考えられる原因2:コードの貼り付け先が違う】
 上記が原因でない場合は、先ず、確認ですが、前回答のコードをどこにコピペされましたでしょうか?

 [挿入(I)] - [標準モジュール(M)] で開く コードウィンドウ、つまり、[プロジェクト エクスプローラ] - [標準モジュール] - [Module*] を ダブルクリック して表示される コードウィンドウ でしたら、これは × です。

 [プロジェクト エクスプローラ] - [標準モジュール] - [フォーム] - [UserForm*] を ダブルクリック して開いた [UserForm*] のフォーム、あるいは、その上に配置された コントロール を [右クリック] - [コードの表示(O)] して表示される コードウィンドウ でしたら、これは ○ です。
「vbaを使ってグーグル検索をしたい」の回答画像2

この回答への補足

たびたびありがとうございます。

コードの貼り付け場所を言われたとおりに
したところ「MyKeyWord = TextBox1.Text」では
問題ないのですが・・・

今度は、下記のコードで
書き込みできませんと言うエラー発生してしまいます。
If .document.all.Item(i).className = "e" Then

補足日時:2009/06/18 20:11
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルからGoogle検索

エクセルの複数のセルに入っているテキストで
それぞれのGoogle検索を一気に行う、ということは可能でしょうか?

A1 「モバイル パソコン」
A2 「パソコン GPS」
A3 「NTT GPS」
と各セルに入力されていたとして、
「モバイル パソコン」「パソコン GPS」「NTT GPS」
とそれぞれのGoogle検索を一度に行い、
別々のウィンドウで検索結果を開き、検索結果を比較したいのです。
検索語が少なければ、手動で行っても時間はかからないのですが、
多数の検索語のパターンで検索するため、一度にできる
方法はないかなあ、と悩んでいます。
テキストの入力されているソフトはエクセルでなくても良いのです。
困っています!
よろしくお願いいたします。

Aベストアンサー

こんにちは。一例です。

IE 限定でなく、OS の規定ブラウザで開くためあえて API を使いました。
なお、コードを VBE にコピペすると Google Url の部分が若干文字化け
します。適当に直して下さい。

Option Explicit

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Public Const SW_SHOWNORMAL = 1


Sub Googleで選択範囲を一括検索()

  Const BASEURL As String = "http://www.google.co.jp/search?hl=ja&ie=UTF-8&q="
  ' // 無制限にウインドウを開くのはリソース不足が発生する可能性があるため、
  ' // ウインドウ数を制限する仕組みは必要かもしれない。とりあえず、簡易的
  ' // に選択セル数で制限しておく。
  Const MAX_CNT As Long = 5
  
  Dim url As String
  Dim tmp As String
  Dim r  As Range
  
  If Not TypeOf Selection Is Range Then Exit Sub
  If Selection.Cells.Count > MAX_CNT Then
    MsgBox "選択セル数が多すぎます(制限:" _
        & CStr(MAX_CNT) & "以下)", vbCritical
  End If
  For Each r In Selection.Cells
    If Len(r.Text) Then
      url = BASEURL & UrlEncode(Replace$(r.Text, " ", " "))
      Call ShellExecute(0&, "OPEN", url, vbNullString, vbNullString, SW_SHOWNORMAL)
    End If
  Next r

End Sub

' // URL エンコード
Public Function UrlEncode(ByVal sText As String) As String
  If Len(sText) = 0 Then Exit Function
  With CreateObject("ScriptControl")
    .Language = "JScript"
    UrlEncode = .CodeObject.encodeURI(sText)
  End With
End Function

こんにちは。一例です。

IE 限定でなく、OS の規定ブラウザで開くためあえて API を使いました。
なお、コードを VBE にコピペすると Google Url の部分が若干文字化け
します。適当に直して下さい。

Option Explicit

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
...続きを読む

Q検索結果のURLの取得

こんにちは、ExcelVBAの初心者です。
上司から検索サイトでの検索結果に出てくる上位URLをコピー&ペーストするように指示を受けたのですが、作業が大変で全然進まず困っています。
もしからた、ExcelVBAで解決できるのではと、ご相談させて頂きました。

具体的には以下のような作業を手作業でやっています。
これを自動化することは可能でしょうか?

1.エクセルに検索するキーワードがセル(A列)ごとにおさめられています。
(セルには2つのキーワードが入っていてand条件となります)
2.それをコピーしてyahooかgoogleで検索をします。
3.検索結果の上位3つまでのURLをコピーして、キーワードの右側のセルにペーストしています。(スポンサードサーチなど広告系は含みません)


【イメージです】
        A            B              C  
  ――――――――――――――――――――――――――
1|カメラ SONY     |________|______
2|電子レンジ シャープ|________|______
3|冷蔵庫 日立     |________|______


            ↓


        A            B              C  
  ――――――――――――――――――――――――――
1|カメラ SONY     |www.sony.jp/dslr|www.sony.co.jp
2|電子レンジ シャープ|healsio.jp     |www.sharp.co.jp/sup
3|冷蔵庫 日立     |________|______



素人で実現可能なのかも分かりませんが、もし分かる方がいらっしゃいましたら何卒お知恵をお貸しください。
どうかよろしくお願いいたします。

こんにちは、ExcelVBAの初心者です。
上司から検索サイトでの検索結果に出てくる上位URLをコピー&ペーストするように指示を受けたのですが、作業が大変で全然進まず困っています。
もしからた、ExcelVBAで解決できるのではと、ご相談させて頂きました。

具体的には以下のような作業を手作業でやっています。
これを自動化することは可能でしょうか?

1.エクセルに検索するキーワードがセル(A列)ごとにおさめられています。
(セルには2つのキーワードが入っていてand条件となります)
2....続きを読む

Aベストアンサー

利用規約に抵触しているようです。

接続に関する問題: ネットワークで表示される「申し訳ありません」ページ
http://www.google.co.jp/support/websearch/bin/answer.py?hl=jp&answer=86640
サービス利用規約
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=5689504

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel VBAで同じフォルダ内のファイルを開くには?

Windows2000、Excel2000を使用しています。

「経理」というフォルダに「見積」「請求」の2つのExcelファイルがあります。
「見積」から「請求」を開くマクロを作りたいのですが、どうすればいいでしょうか?
「経理」フォルダは場所が変わることがあるので、パスをどうすれば良いかがわからず苦しんでいます。
VBAはまったくの素人で、本を見ながら挑戦しているのですがうまくできないのです。

どうかよろしくお願いします。

Aベストアンサー

必ず「経理」というフォルダに「見積」「請求」の2つのExcelファイルがあると仮定。

以下ならどうでしょう?

フォルダごと移動されても上記のお約束があれば大丈夫と思います。
以下の記述は「見積」に記述してください。



Sub BookOpen()
Workbooks.Open Filename:=ThisWorkbook.Path & "\請求.xls"
End Sub

Qマクロ EXCELセルの文字を自動でIE入力

マクロ EXCELセルの文字を自動でIE入力フォームへ入力する方法

色々、検索してみましたが分からなくなりましたので質問させて頂きます。
IEの入力フォームへEXCELで入力してあるテキスト文を自動的に貼り付ける
ことをしたくネットで調べた結果、以下のことはできました。

=== 実行できたマクロ =================================================

◆サイトソース◆
某サイトのソースを調べたら以下のように表示されましたので
<input type="text" name="n1" id="name" size="14" maxlength="11" istyle>・・・

マクロを以下のように組んで見ました。
ObjIE.Document.getElementById("name").Value = Worksheets("Sheet1").Range("A1")

そうしたら、問題なくIEの入力フォームへ自動記入できました。

=== 実行できなかったマクロ =================================================
◆サイトソース◆
某サイトのソースを調べたら以下のように表示されましたので
<input type="text" name="n1" size="14" maxlength="11" istyle>・・・

上記と同様マクロを組んで見ました。
ObjIE.Document.getElementById("n1").Value = Worksheets("Sheet1").Range("A1")

そうするとエラーが起きてしまいます。

○考えられるエラー
実行できた方のソースには・・・
「id="name"」と入っていたので「ObjIE.Document.getElementById("n1").Value 」で
問題ないかと思いますが、実行できなかった方のソースには・・・
「name="n1"」と、id=の部分がなかったのでここのマクロの書き方なのかなと思います。

ちなみに
ObjIE.Document.getElementById("n1").Value = Worksheets("Sheet1").Range("A1")
                  ↓
ObjIE.Document.getElementByName("n1").Value = Worksheets("Sheet1").Range("A1")で
実行してみましたがダメでした。

ご助言いただけると助かります。
宜しくお願いします。

マクロ EXCELセルの文字を自動でIE入力フォームへ入力する方法

色々、検索してみましたが分からなくなりましたので質問させて頂きます。
IEの入力フォームへEXCELで入力してあるテキスト文を自動的に貼り付ける
ことをしたくネットで調べた結果、以下のことはできました。

=== 実行できたマクロ =================================================

◆サイトソース◆
某サイトのソースを調べたら以下のように表示されましたので
<input type="text" name="n1" id="name" size="14" maxlength="11" istyle>・・...続きを読む

Aベストアンサー

ObjIE.Document.Forms(0).Item("n1").Value = Worksheets("Sheet1").Range("A1")

では駄目ですか?
ページ内に<form>~</form>が複数ある場合はForms()のカッコ内の数字を
変える必要があるとは思いますが。

QエクセルVBAで検索結果のリンク先URL取得について

エクセルのたとえばA列にヤフーかグーグルで検索したい飲食店(値)の名前が1,000行入っています。
それを上から順番に検索していきます。この作業はloopやfor ~ nextで対応可能だと思います。問題はここからです。
その検索した文字を、ヤフーかグーグルで検索します。検索結果で、「ヤフーロコ」、「ホットペッパー」のリンク先URL、例えばURLに”loco.yahoo.co.jp/”や”hotpepper.jp/”が入っているもののみを、B列、C列に抽出します。もし、ヤフーロコやホットペッパーの両方に、該当の飲食店がなけれが、うち1つか、もしくは該当なしとして空白のまま、次の列に行き、また検索を続けていくというものです。
自動化処理は可能でしょうか。

Aベストアンサー

こんばんは。

試しに、googleで調べてみました。
気になるレストラン名「ローターオクセン」(もうかつてのお店はなくなっていると思いつつ……)
を検索してみました。
「あった!」
 おまけに、”loco.yahoo.co.jp/”や”hotpepper.jp/”が入っているのでした。
これなら、できますね。(^^; 

VBA勉強中さんのVBAのお勉強のタシになるか分かりませんが、ちょっとコードを考えてみました。
実践的ではありませんし、雑な内容で、まだまだ修正の余地はありますが、基本的な考え方は分かっていただけるように思います。一応、検索は、1ページだけです。この辺りは、今のところ暗中模索です。

エラーを考慮していませんので、万が一には、ずれる可能性もありますので、検索値は、再び、セルに戻すようにしたほうがよいです。1,000件以上ですと、本当は、以下のようなコードはアクセス方法から変えないとダメだとは思いますが、当面のコードとしては、考え方は分かるはずです。

'//
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private objIE As InternetExplorer
''参照設定:Microsoft Internet Controls
Private Hpp As Boolean
Private Lya As Boolean
Sub MainAccess()
 Dim srcTxt As String
 Dim n As Variant
 Const BASE = "https://www.google.co.jp/" 'グーグル検索
 Cells(1, 1).Resize(, 5).Value = Array("店名", "loco.Yahoo", "URL1", "ホットペッパー", "URL2")
 Set objIE = New InternetExplorer
 With objIE
  .Visible = True ''安全だと分かったら、False 可
  .Navigate2 BASE
  Do While .Busy Or .ReadyState <> READYSTATE_COMPLETE
   DoEvents
  Loop
 End With
 For Each n In Range("A2", Cells(Rows.Count, 1).End(xlUp))
  ieSearch n.Value, objIE
 Next
 objIE.Quit
 Set objIE = Nothing
End Sub
Sub ieSearch(ByVal srcTxt As String, objIE As InternetExplorer)
 Dim srchBx As Object
 Dim srchBtn As Object
 Dim iSrc As Variant
 Dim v As Variant
 Dim buf As String
 Dim iHtml1 As String
 Dim iHtml2 As String
 Dim i As Long
 Lya = False: iHtml1 = ""
 Hpp = False: iHtml2 = ""
 With objIE
  Set srchBx = .Document.getElementById("lst-ib")
  srchBx.Value = srcTxt
  srchBx.form.Submit
  Sleep 1000 'ウェイトが重すぎるかも?しかし、抜けることもある
  Do
   DoEvents
  Loop Until .ReadyState = READYSTATE_COMPLETE
  Set iSrc = .Document.getElementsByClassName("g")
  If iSrc.Length > 0 Then
   For Each v In iSrc
    If InStr(1, v.innerHTML, "loco.yahoo.co.jp", 1) > 0 Then
     Lya = True
     buf = Mid(v.innerHTML, InStr(1, v.innerHTML, "href=""", 1) + 6)
     iHtml1 = Left(buf, InStr(1, buf, " target", 1) - 2) & vbCrLf
    End If
    If InStr(1, v.innerHTML, "hotpepper.jp", 1) > 0 Then
     Hpp = True
     buf = Mid(v.innerHTML, InStr(1, v.innerHTML, "href=""", 1) + 6)
     iHtml2 = Left(buf, InStr(1, buf, " target", 1) - 2) & vbCrLf
    End If
    buf = ""
   Next
   i = Cells(Rows.Count, 2).End(xlUp).Row + 1
   'Cells(i, 1).Value = srcTxt
   Cells(i, 2).Value = Lya
   Cells(i, 3).Value = iHtml1
   Cells(i, 4).Value = Hpp
   Cells(i, 5).Value = iHtml2
  End If
 End With
End Sub

こんばんは。

試しに、googleで調べてみました。
気になるレストラン名「ローターオクセン」(もうかつてのお店はなくなっていると思いつつ……)
を検索してみました。
「あった!」
 おまけに、”loco.yahoo.co.jp/”や”hotpepper.jp/”が入っているのでした。
これなら、できますね。(^^; 

VBA勉強中さんのVBAのお勉強のタシになるか分かりませんが、ちょっとコードを考えてみました。
実践的ではありませんし、雑な内容で、まだまだ修正の余地はありますが、基本的な考え方は分かっていただけるよう...続きを読む

QExcel VBAでのIE操作でクリックができないボタンはあるのでしょうか

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="user-select: none;">
<div class="goog-inline-block goog-imageless-button-outer-box">
<div class="goog-inline-block goog-imageless-button-inner-box"><div class="goog-imageless-button-pos">
<div class="goog-imageless-button-top-shadow"></div>
<div class="goog-imageless-button-content">保存</div>
</div>
</div>
</div>
</div>

お世話になります。

Excel2016 32bit Windows10

IE自動操作に取り組んでいます。まだ勉強が足りず、ボタンのクリックができません(画像Gカレンダー保存ボタン)。
InputTypeでもaタグでもありません。idで取得はでき、roleがボタンでタブ選択もできるのに、VBAでクリックができません。
この手のボタンはVBA操作不可能なのでしょうか。初歩的な質問かもしれませんが、みなさまのお力添えを頂きたいです。

<div class="goog-inline-block goog-imageless-button" role="button" tabindex="0" style="us...続きを読む

Aベストアンサー

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

With objIE

Set buttons = .Document.getElementsByClassName("goog-imageless-button-content")
For Each n In buttons
   If n.innerText Like "保存*" Then ''= "保存" でもよい
    n.Click
    Exit For
   End If
Next n

End With

で、行けるのではないでしょうか。
もちろん、オブジェクト配列になっているはずですから、それで、何番目か探して、直接、buttons(9).Clickとしても行けるかとは思います。

質問と食い違っていたら、補足をつけてください。

それと、余談なのですが、Googleで、IEを使うのは抵抗ありませんか?フルに動かないと思います。かと言って、Google Chrome をVBAで扱う方法が、なぜか確立できていませんね。Selenium VBAを使うことにはなっているのですが、いろいろやってみて、どうやらバージョンが遅れていることに気が付きました。前から、ずっと遅れているようです。

こんにちは。

すみません。画像が、ものすごく小さかったのが災いしたのと、

「:jc.save_top」って、wrapper となっている所をみると、何かと組み合わさっていると思います。それをクリックされようとしていたので、なんだろうと考えしまいました。

>(画像Gカレンダー保存ボタン)

カレンダーの赤い「保存ボタン」をクリックですか?
質問の回答になっているのか、あまり確信がありません。

初歩の初歩としては、
<div class="goog-imageless-button-content" unselectable="on">保存</div>
ここから、

Wit...続きを読む


人気Q&Aランキング