• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルデータをWebに入力する方法(VBA))

エクセルデータをWebに入力する方法(VBA)

このQ&Aのポイント
  • エクセルデータをWebに入力する方法(VBA)についての質問です。エクセルのデータを1個ずつ社内のイントラネットの入力欄に転記し、検索結果を確認して判断する業務の効率化を図りたいです。
  • 現在、エクセルデータをクリップボードにコピーし、対象のURLを開くことはできていますが、セルを選択するたびに新しいウィンドウが開かれる問題があります。また、クリップボードのデータを入力欄に自動的に貼り付け、検索ボタンを押すまで自動化する方法も知りたいと思っています。
  • エクセルデータをWebに入力する方法(VBA)について効率化のヒントや自動化の方法を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

とりあえず、以下のようにobjIEをモジュール変数にしてはどうでしょう。前回使用した画面をそのまま使いまわす方法です。 Dim objIE As Object Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。 Dim tmp As String On Error Resume Next tmp = objIE.Name If Err.Number <> 0 Then 'エラーならIEが起動していないので、起動する Set objIE = CreateObject("InternetExplorer.Application") End If On Error GoTo 0 With objIE .Navigate "?http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 'オートコンプリートなどの機能が働く場合があるので、念のため待機 Do While .Busy = True DoEvents Loop .Document.forms(0).submit '送信ボタンクリック End With End Sub 以上です。

merlionXX
質問者

お礼

cistronezkさま、ありがとうございます。 こうなればいいと思ったとおりに出来ました! これで作業時間がかなり短縮されます。 ほんとうに助かりました。 これで作業を続けるうちにまた希望が出てくるとは思いますが、その際にはまたご指導賜れれば幸いです。

merlionXX
質問者

補足

cistronezkさま、大変申し訳ないのですが甘えついでにもう一点だけご教示ねがえませんでしょうか? 指定のIE画面が中途半端な大きさで開いてしまうのです。 通常の大きさ(□ボタンを押して広がるサイズ)で開くにはどうすればよいのでしょうか? .FullScreen = True で最大化するとメニューから何から全て無くなってしまいますのでこれは使えません。 宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

>通常の大きさ(□ボタンを押して広がるサイズ)で開くにはどうすればよいのでしょうか? こちらを参考にしてください。Top、Left、With、Heightで位置とサイズを指定できます。さらに必要なら外観も。 http://www.ken3.org/cgi-bin/group/vba_ie.asp

merlionXX
質問者

お礼

有難うございます。 やはりサイズ指定するしかないんですね。 エクセルだと Application.WindowState = xlMinimized でいけるのですが・・・・。

merlionXX
質問者

補足

まちがいました。 エクセルだとApplication.WindowState = xlMaximized ですね。 サイズ指定だと他のオフィスバーなどの有無で違う場合があるんですよね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

クリップボードを使わなくてもできると思います。 たとえば、以下のようなHTMLファイルがあるとします。 <html> <title>test</title> <body> <form> <input type="text" name="txt1" id="txt_1"> <input type="text" name="txt2" id="txt_2"> <input type="submit" name="btn1" id="btn_1"> </form> </body> </html> このテキストボックスにセルA1,A2の値を入力するには以下のようにします。 Sub Macro1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Navigate "http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True 'IE待機 Do While .Busy = True DoEvents Loop 'テストボックスへ入力その1:Name属性で指定する場合 .Document.all.Item("txt1").Value = Range("A1").Value .Document.all.Item("txt2").Value = Range("A2").Value 'テストボックスへ入力その2:ID属性で指定する場合 '.Document.getElementById("txt_1").Value = Range("A1").Value '.Document.getElementById("txt_2").Value = Range("A2").Value '送信ボタンクリック .Document.forms(0).submit 'IEを閉じる .Quit End With Set objIE = Nothing End Sub で、入力できます。 URLのソースを見れば、入力するinputタグのname属性かID属性がわかるはずです。実情に合わせて修正してください。

merlionXX
質問者

お礼

cistronezkさま、さっそくありがとうございます。 わざわざクリップボードを経由していたのは、値をWebに直接入力させる方法を知らなかったのでCtrl+Vで貼り付けるためでした。 今回、おかげさまで、ワークシートで選択した値を、Webの入力欄に自動的に入れ、検索することができるようになりました。 ただ、画面がすぐに閉じてしまうのは困るので.Quit はコメントアウトして、画面をよく見た後から手動で閉じるようにしようかと思うのですが、この部分を、次の検索作業にうつるとき、つまりワークシートのSelectionChangeイベントが作動したときに前回の検索画面が閉じるようにはできないものでしょうか? ためしに、.Navigate~ の一行前に.Quit を入れてみましたが、オートメーションエラーになってしまいました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Navigate "?http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 .Document.forms(0).submit '送信ボタンクリック ' .Quit '←ここで閉じられては困ります。 End With Set objIE = Nothing End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAでセル範囲のデータをクリップボードに

    セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。 http://okwave.jp/qa/q5650002.html#16327676 の回答ANo2を見て Sub test01() Dim myData As DataObject Dim myCb As Variant Dim x x = "TESTデータです。" Set myData = New DataObject myData.SetText x myCb = myData.GetText myData.PutInClipboard End Sub は出来ました。 そこで、セル範囲A1:B3をクリップボードに貼ろうといろいろやってみました。 一応、下記でできましたが、実際にはもっと広い範囲を取り込みたいので、もっと簡単な方法はないでしょうか? Sub Clip() Dim myStr As String Dim myData As DataObject Dim myCb As Variant Set myData = New DataObject With Sheets(1) myStr = .Range("A1").Value & ":" & .Range("B1").Value & _ vbNewLine & .Range("A2").Value & ":" & .Range("B2").Value & _ vbNewLine & .Range("A3").Value & ":" & .Range("B3").Value End With myData.SetText myStr ', 1 myCb = myData.GetText If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub End If myData.PutInClipboard End Sub

  • アクセスvbaでクリップボードにコピーの動作を実行

    アクセスvbaでクリップボードにコピーの動作を実行したいです。 エクセルなら、 Sub test() Dim buf As String Dim CB As New DataObject buf = "test" With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する .GetFromClipboard ''クリップボードからDataObjectにデータを取得する Debug.Print .GetText ''DataObjectのデータを変数に取得する End With End Sub これが実行できるのですが、 どうやらアクセスだと Dim CB As New DataObject これがエラーになるようです。 Dim CB As Objectにすると .SetText buf で実行時エラー91になります。 (「オブジェクト変数またはWithブロック変数が設定されていません」) http://officetanaka.net/excel/vba/tips/tips20.htm によると、 「DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。」 なので、アクセスvbaの参照設定で「Microsoft Forms 2.0 Object Library」を探したのですが、 ありませんでした。 当方バージョンは2010です。 アクセスでは不可能と言うことでしょうか? ご教授よろしくお願いします。

  • Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーする

    Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーするマクロとして以下をメニューから呼び出せるようにしています。 が、呼び出すたびにエラーが出て、手動で「Microsoft Forms 2.0 Object Library」を参照設定しています。マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定ONにするようにはできないでしょうか。 --- Sub SumCopy() Dim MyData As DataObject Set MyData = New DataObject MyData.SetText Application.WorksheetFunction.Sum(Selection), 1 MyData.PutInClipboard End Sub ご存知の方がいらっしゃればご教授よろしくお願い致します。

  • エクセル2003 自作ツールバー(コマンドバー)の選択戻り値取得方法

    ツールバーのショートカットを自作して 入力を楽にしようと考えております。 ツールバーには、直接入力するリストを表示させ そのリストの中から選んで、セルに記入させると 言うマクロを作ろうとしているのですが、 選択された、リストの戻り値を取れないため、 苦戦しております。 戻り値の取得方法とかあるのでしょうか? 宜しくお願いいたします。 コードを以下に記します。 Option Explicit Option Base 1 Dim myCB As CommandBar Dim myCBCtrl As CommandBarButton Dim myData() As String Dim n As Integer, i As Integer ---------------------------------------------------------------- Sub AddCmdBarBtn() Call 配列 On Error Resume Next CommandBars("MyMacro2").Delete Set myCB = Application.CommandBars.Add(Name:="MyMacro2", _ Position:=msoBarPopup, Temporary:=True) For i = 1 To 5 Set myCBCtrl = myCB.Controls.Add(Type:=msoControlButton) With myCBCtrl .Caption = myData(i) .OnAction = "ツールバーマクロ" End With Next i myCB.ShowPopup End Sub ---------------------------------------------------------------- Private Sub ツールバーマクロ() ActiveCell.Value = myCB.Controls.Item.Caption<<<此処を上手く処理できません(泣) End Sub ---------------------------------------------------------------- Private Sub 配列() ReDim myData(5) For n = 1 To 5 myData(n) = "名前" & n Next n End Sub ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

  • EXCEL VBA 他のワークシートのデータを見るには?

    EXCEL VBAでsheet1のセルに何かデータが入力された時に、sheet2のどこかのセルに同じ文字列がないかを探したいと思います。 データの入力と同時に検索をかけるため、sheet1の部分にイベントプロシージャを定義し、 データが入力された時にそのルーチンの中からsheet2のデータを見に行きたいのですが、エラーが出てしまいます。 こういうことはできないのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim LineNo As Integer Dim tmp_str As String tmp_str = Target.Value LineNo = Sheets("sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row MsgBox (LineNo) End Sub

  • エクセルVBAでコンパイルエラー

    すみません、どうしても腑に落ちないので質問させてください。 わたしが書いて配布したBOOKのコマンドバーを非表示にするコードなのですが、エクセル2000で、myCB のところでコンパイルエラーになるという連絡がありました。 その方は数台PCをお持ちですべての端末でそうなるとのことです。 しかし、下記コードはこれまで2000でも2003でも2007でも何度も試しており、これまでそのようなことはありませんでした。 Private Sub ALLBARS_Hide()   Dim myCB As CommandBar   For Each myCB In Application.CommandBars     myCB.Enabled = False   Next myCB End Sub どういった原因が考えられるでしょうか? なお、上記コードはAuto_OpenからCallされます。

  • VBAのファインドメソッドで検索すると対象外のデータが選択されることがある

    CDのリスト表(12列で、現在2269行 範囲名"収録表")Sheets("データ")から,キーワードで該当ディスクを検索し、 結果をSheets("検索")に転記する、プログラムを作りましたが、 仮に、該当データが10件、転記されたとして そのデータを見ると、中に1件、対象外のデータがはいっている事が たまにあります、いろんな原因を考えてみましたがわかりません。 もともと、VBAのファインドメソッドが、こんなエラーを起こしやすいのか、、、(そんな事、ないよね) どなたか、教えてください。 下が、プログラムです Sub 新規検索() Application.ScreenUpdating = False Dim myData, myRng As Range Dim myWord As String myWord = InputBox("キーワードを入力してください") データ処理中F.Show vbModeless データ処理中F.Repaint Set myData = Range("収録表") Set myRng = myData.Find(What:=myWord, LookIn:=xlValues, _ Lookat:=xlPart, MatchCase:=False, MatchByte:=False) If myWord = "" Then MsgBox ("キーワードを入力してください") Exit Sub End If If Not myRng Is Nothing Then Application.Goto Cells(myRng.Row, 1), True Else: Unload データ処理中F MsgBox ("該当データはありません") Exit Sub End If Sheets("検索").Range("K1") = myRng.Row '一番最初の検索値のRow Call コピー1 Do Until Range("K1") = Range("L1")   Call 次を検索 Loop Call 検索終了 Unload データ処理中F Application.ScreenUpdating = True End Sub Sub 次を検索() Dim myData, myRng As Range Sheets("データ").Select Set myData = Range("収録表") Set myRng = Cells.FindNext(after:=ActiveCell.Offset(1)) If myRng <> "" Then Application.Goto Cells(myRng.Row, 1), True End If Sheets("検索").Range("L1") = myRng.Row '2番目以降の検索値のRow   Call コピー2 End Sub Sub コピー1() Sheets("検索").Range("A3:L5000,L1").ClearContents Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData, ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub コピー2() Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData,   ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub 検索終了() Dim r As Long r = Range("A65536").End(xlUp).Row Range("A" & r).Select ActiveCell.FormulaR1C1 = "=COUNTA(R3C:R[-1]C)" MsgBox "全部で" & Range("A" & r).Value & "件ありました" Range("A65535").End(xlUp).EntireRow.ClearContents Call 行頭表示 End Sub

  • 【Excel VBA】カンマ毎にデータを区切る

    はじめて質問をさせて頂きます。 Excel VBAは初心者です。 仕事で必要なため、本を読みながら考えておりましたが、 手も足も出ない状態です。 【質問内容】 Excel VBAにて、ExcelファイルのA列のみに格納されているデータを カンマ「,」の位置毎に区切ります。 ※格納されているデータ例:A,B,C,D,E Excelの区切り位置にて、カンマで区切る処理と同じです。 A1から処理を開始し、A列のデータがなくなるまで 上記の処理を行います。 下記のプログラムを実行すると、1行目は正常にカンマ毎に 区切られますが、2行目以降はカンマ毎に区切られず、 そのままの状態です。 どこに問題があり、どのように修正すれば良いのでしょうか、 ご教示頂けると助かります。宜しくお願いします。 【プログラム】 Sub カンマ毎に区切る() Dim mydata As String Dim myArray() As String Dim i, j As Integer j = 0 Do While Cells(j + 1, "A").Value <> "" mydata = Cells(j + 1, 1) myArray() = Split(mydata, ",") For i = 0 To UBound(myArray) Cells(1, i + 1).Value = myArray(i) Next j = j + 1 Loop End Sub

  • Web画面をプリントする方法(エクセルVBA)

    エクセル2000です。 VBAでNavigateを使いWeb画面(イントラネット)を開き、 .Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、 .Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。 次に、その開いた画面をプリントしたいのです。 どのようなコードになるのでしょうか? ご教示いただければ幸いです。 (o。_。)oペコッ 現在のコードは以下のとおりです。 Dim objIE As Object Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。 Dim tmp As String On Error Resume Next tmp = objIE.Name If Err.Number <> 0 Then 'エラーならIEが起動していないので、起動する Set objIE = CreateObject("InternetExplorer.Application") End If On Error GoTo 0 With objIE .Navigate "​http://******.co.jp/******/**/***/Details/DetailsScr/init"​ .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 'オートコンプリートなどの機能が働く場合があるので、念のため待機 Do While .Busy = True DoEvents Loop .Document.forms(0).submit '送信ボタンクリック End With End Sub

  • エクセル VBA データ入力

    こんにちは、はじめまして。 エクセル・VBA初心者です。 会社に入って3ヶ月になります。 同じファイル内で、入力用シートから 違うシートに表としてデータを転送するため、 本や今まで作ったものを参考にして下のようなVBAを作成したのですがうまくいきません。 Sub 転記() Dim ws0 As Worksheet, ws1 As Worksheet, chikuseki As Range Dim nyuryoku() Set ws0 = Worksheets("Worksheet1") Set ws1 = Worksheets("Worksheet2") nyuryoku = Array("b3", "d3", "f3", "h3") '転記したいセルの位置 Set chikuseki = ws1.Range("f", "g", "k", "q" & Rows.Count).End(xlUp).Offset(1) 'データ蓄積セル For i = 0 To UBound(nyuryoku) chikuseki.Offset(0, i).Value = ws0.Range(nyuryoku(i)).Value ws0.Range(nyuryoku(i)).MergeArea.ClearContents Next masgbox "入力完了" End Sub 十何個あるデータを転送する場合、フォームから入力した方が簡単なのでしょうか? また、表にデータを転記し、そのなかのデータのいくつかを別の表に転記することは、一度の操作で可能ですか? 今週中に仕上げろと言われたので急いでいます、 どうかよろしくお願いします。 質問がまとまっていなくてわかりにくければ申し訳ないです。

専門家に質問してみよう