エクセルVBAで「Web未接続」を取得する方法
- エクセルVBAを使用して、WebAPIを利用して「Web未接続」の状態を取得する方法について教えてください。
- 特定のマクロを実行した場合に、ネットに接続されていない場合に「ネットに未接続です」という警告を表示する方法を知りたいです。
- ネットに接続していないことを判定する方法について詳細を教えてください。
- ベストアンサー
エクセルVBAで「Web未接続」を取得したい。
エクセルVBAで以下のようにWebAPIの助けを借りています。 しかしこれはたぶんネットに接続してなければ使えないのだと思います。 質問は、このマクロを作動させたとき、ネットに接続してなければ「ネットに未接続です」という警告を出したいのです。 しかし、ネットに接続してないことをどう取得すればよいのかわかりません。ご教示ください。 Sub ボタン1_Click() Dim objXMLHttp As Object, zipArr Dim yubinNo As Long Dim line As String Dim splitLine() As String Dim i As Long i = 2 '行番号 Do While Cells(i, 1).Value <> "" '入力値からハイフンの削除 yubinNo = Replace(Worksheets("Sheet1").Cells(i, 1).Value, "-", "") Set objXMLHttp = CreateObject("MSXML2.XMLHTTP") objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False objXMLHttp.Send line = Replace(objXMLHttp.responseText, vbLf, ",") '改行削除 line = Replace(line, """", "") 'クォート削除 line = Replace(line, "none", "") 'noneの文字列削除(情報がない場合、noneのため) splitLine = Split(line, ",") 'CSVを配列へ格納 Worksheets("Sheet1").Cells(i, 2).Value = splitLine(13) & splitLine(14) & splitLine(15) & splitLine(16) Worksheets("Sheet1").Cells(i, 3).Value = splitLine(9) & splitLine(10) & splitLine(11) & splitLine(12) i = i + 1 Loop End Sub
- emaxemax
- お礼率100% (828/828)
- Excel(エクセル)
- 回答数11
- ありがとう数11
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
> 接続できてもサービス一時停止等かどうかを取得する方法はありますか? objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False objXMLHttp.Send を実行してエラーもしくは通常と違う情報が返ってくると停止中と思ったのですが、実際停止してないとテストできないので確信はありません。 ただ、No.1でも記載したようにオンラインで一度成功すると、同じ番号だとそのままオフラインにしてもブックを開き直さないとエラーにならないという理由が分からないのでエラーは別にして、何かしら違う情報が返ってくると考えていいのではないでしょうか。 「サービスは停止中です」とか、検索した番号が返ってきた情報には入ってないとか。 > 存在しない番号の場合の対応はどうすればよいのでしょうか? ちょっと試したところ、番号が存在するかしないかによって.responseTextの情報量(住所情報の有無)に差がありましたので UBound(splitLine) の結果で振分ができると思います。
その他の回答 (10)
- kkkkkm
- ベストアンサー率65% (1617/2456)
No.10の訂正です。 Int((9999900 - 1111112) * Rnd + 1111111) と Int((9999999 - 1111112) * Rnd + 1111111) なんかおかしい。なぜこんなことになったのか(夜明けで寝ぼけてた) Int((9999999 - 1111110) * Rnd + 1111111) にしてください。
お礼
ありがとうございます。
- kkkkkm
- ベストアンサー率65% (1617/2456)
夜が明けたのでテストしてみました。以下でいけるのではないでしょうか。 Sub ボタン1_Click() Dim objXMLHttp As Object, zipArr Dim yubinNo As Long Dim line As String Dim splitLine() As String Dim i As Long Static mDummy As Long Dim Temp As Long Randomize Temp = Int((9999900 - 1111112) * Rnd + 1111111) '万が一の為もし前回と同じ乱数が出た場合再度乱数発生 If mDummy = Temp Then mDummy = Int((9999999 - 1111112) * Rnd + 1111111) Else mDummy = Temp End If Set objXMLHttp = CreateObject("MSXML2.XMLHTTP") On Error GoTo ErrorExit objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & mDummy, False objXMLHttp.Send On Error GoTo 0 '停止してると検索対象の番号がresponseTextに入っていないと思うので If InStr(objXMLHttp.responseText, mDummy) < 1 Then MsgBox "郵便番号検索システムが停止している可能性があります", vbInformation Exit Sub End If i = 2 '行番号 Do While Cells(i, 1).Value <> "" '入力値からハイフンの削除 中略 Loop Set objXMLHttp = Nothing Exit Sub ErrorExit: If Call_CheckPing("www.google.co.jp") = False Then ' 回答No.3のpingを利用 MsgBox "インターネット接続がありません" & vbCrLf & vbCrLf & _ "通知領域(タスクトレイ)のネットワークアイコンで確認してください", vbInformation Else MsgBox "郵便番号検索サーバから応答がありません", vbInformation End If Set objXMLHttp = Nothing End Sub
お礼
何度もありがとうございます。
- kkkkkm
- ベストアンサー率65% (1617/2456)
オンラインで一度成功すると、同じ番号だとそのままオフラインにしてもブックを開き直さないとエラーにならない 毎回7桁の乱数で検索したら、同じ番号での検索にならないので、上記の問題は解決して、No.1の方法でオフラインやサービス停止を認識出来そうです テストは夜が明けてからやってみます
お礼
ありがとうございます。
- kkkkkm
- ベストアンサー率65% (1617/2456)
あと、余計なお世話だと思いますが ループ中にオフラインになったりサーバがおかしくなった場合は、番号が変わるのでエラーになると思います。 On Error GoTo ErrorExit objXMLHttpTest.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False objXMLHttpTest.Send On Error GoTo 0 で中断して(中断する場合は、最初のオンラインかどうかのチェックはいらなくなります) ErrorExit: Dim P1 As Boolean P1 = Call_CheckPing("www.google.co.jp") 'Pingで調査 P1の結果でオフラインになった為かどうかメッセージを出すか On Error Resume Next でエラーを無視して続けるかの処置が必要だと思います。
お礼
ご丁寧にありがとうございました。
- HohoPapa
- ベストアンサー率65% (454/690)
泥臭く、 Yahooと日本銀行の双方のサイトに接続できな場合に インターネットの異常と判断するようにしてしてみました。 また、郵便番号がヒットしない場合の対応を組み込んでみました。 Sub sample() Dim objXMLHttp As Object, zipArr Dim yubinNo As Long Dim line As String Dim splitLine() As String Dim i As Long i = 2 '行番号 If ((isnetready("https://www.yahoo.jp/") = False) And _ (isnetready("https://www.boj.or.jp/") = False)) Then MsgBox "インターネット環境が異常です" Exit Sub ElseIf isnetready("http://zip.cgis.biz/") = False Then MsgBox "郵便番号検索サイトに接続できません" Exit Sub End If Do While Cells(i, 1).Value <> "" '入力値からハイフンの削除 yubinNo = Replace(Worksheets("Sheet1").Cells(i, 1).Value, "-", "") Set objXMLHttp = CreateObject("MSXML2.XMLHTTP") objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False objXMLHttp.send line = Replace(objXMLHttp.responseText, vbLf, ",") '改行削除 line = Replace(line, """", "") 'クォート削除 line = Replace(line, "none", "") 'noneの文字列削除(情報がない場合、noneのため) splitLine = Split(line, ",") 'CSVを配列へ格納 Debug.Print line If UBound(splitLine) > 16 Then Worksheets("Sheet1").Cells(i, 2).Value = splitLine(13) & splitLine(14) & splitLine(15) & splitLine(16) Worksheets("Sheet1").Cells(i, 3).Value = splitLine(9) & splitLine(10) & splitLine(11) & splitLine(12) Else MsgBox "郵便番号がヒットしない:" & yubinNo End If i = i + 1 Loop End Sub Function isnetready(tgHostName As String) As Boolean Dim objXML As New MSHTML.HTMLDocument Dim htmlDoc As New MSHTML.HTMLDocument Dim objITEM As Object Dim starttime As Date Dim CheckText As String Set htmlDoc = objXML.createDocumentFromUrl(tgHostName, vbNullString) starttime = Now() Do Until htmlDoc.readyState = "complete" DoEvents If Now() > DateAdd("S", 10, starttime) Then Exit Do End If Loop DoEvents CheckText = "" For Each objITEM In htmlDoc.getElementsByTagName("title") CheckText = CheckText & objITEM.innerText Next Set objITEM = Nothing Set htmlDoc = Nothing Set objXML = Nothing If CheckText = "" Then isnetready = False Else isnetready = True End If End Function
お礼
ありがとうございます。 すみません、週明けから寝込んでしまいお礼が遅くなりました。とても勉強になりました。
- kkkkkm
- ベストアンサー率65% (1617/2456)
No.1、No.3の補足です。 思うのですが、ネット接続が出来ていて、Pingなどでサーバの稼働が確認できたとしても objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False が成功しなければ意味がないのではないでしょうか。サーバアクセス確認だけではサービス一時停止とか分からないと思います。 また、現状では製作途中なので手を付けていないのだと思いますが、間違った郵便番号を検索すると最後の方でエラーになると思いますので対処が必要な気もします
お礼
>サーバアクセス確認だけではサービス一時停止とか分からないと思います。 確かにその通りですね。ネット接続が出来てないのは先ほどので取得できますが、接続できてもサービス一時停止等かどうかを取得する方法はありますか? また、入力された郵便番号が桁誤りや数値でない場合などは入力時にチェックする予定ですが、存在しない番号の場合の対応はどうすればよいのでしょうか?
- HohoPapa
- ベストアンサー率65% (454/690)
判定タイミングを最初にすべきでしたので、コードを修正します。 なお、 >ネットに接続してなければ これをどう解釈すればいいののかにより、コードが異なってきましょう。 つまり、 "http://zip.cgis.biz/" このサイトが停止している場合とインターネットそのものの接続ができない場合を 区別する必要があるのか? ということです。 先に示したコードは、これを区別せず、 単に、 "http://zip.cgis.biz/" に接続できるか? をチェックしているコードです。 Sub ボタン1_Click() Dim objXMLHttp As Object, zipArr Dim yubinNo As Long Dim line As String Dim splitLine() As String Dim i As Long i = 2 '行番号 If isnetready = False Then MsgBox "ネットに未接続です" Exit Sub End If Do While Cells(i, 1).Value <> "" '入力値からハイフンの削除 yubinNo = Replace(Worksheets("Sheet1").Cells(i, 1).Value, "-", "") ~以下省略~ End Sub
お礼
> このサイトが停止している場合とインターネットそのものの接続ができない場合を区別する必要があるのか? なるほど。考えていませんでしたがたしかに区別できたほうがいいですねえ!
- kkkkkm
- ベストアンサー率65% (1617/2456)
No.1の追加です。 pingで接続確認もあると思います。 サーバーやホストにPingが通るかチェックするサンプルコード https://vba-create.jp/vba-tips-ping-true-or-false/ どちらにしても、サーバーに接続できるかどうかのチェックですので 動作が単純な方法がいいのではないでしょうか。
お礼
ありがとうございます。とていいやりかたを教えていただきました。 助かりました!
- HohoPapa
- ベストアンサー率65% (454/690)
後記のような関数を仕込んで判定させるのはいかがでしょうか なお承知かもしれませんが、Microsoft HTML Object Libraryを参照設定する必要があります。 Sub ボタン1_Click() Dim objXMLHttp As Object, zipArr Dim yubinNo As Long Dim line As String Dim splitLine() As String Dim i As Long i = 2 '行番号 Do While Cells(i, 1).Value <> "" '入力値からハイフンの削除 yubinNo = Replace(Worksheets("Sheet1").Cells(i, 1).Value, "-", "") If isnetready = False Then MsgBox "ネットに未接続です" Exit Sub End If ~以下省略~ End Sub Function isnetready() As Boolean Dim objXML As New MSHTML.HTMLDocument Dim htmlDoc As New MSHTML.HTMLDocument Dim objITEM As Object Dim starttime As Date Dim CheckText As String Set htmlDoc = objXML.createDocumentFromUrl("http://zip.cgis.biz/", vbNullString) ' 以下のようにYahooや国税庁のサイトでもいいかも ' Set htmlDoc = objXML.createDocumentFromUrl("https://www.yahoo.jp/", vbNullString) ' Set htmlDoc = objXML.createDocumentFromUrl("https://www.nta.go.jp/", vbNullString) starttime = Now() Do Until htmlDoc.readyState = "complete" DoEvents If Now() > DateAdd("S", 10, starttime) Then Exit Do End If Loop DoEvents CheckText = "" For Each objITEM In htmlDoc.getElementsByTagName("title") CheckText = CheckText & objITEM.innerText Next Set objITEM = Nothing Set htmlDoc = Nothing Set objXML = Nothing If CheckText = "" Then isnetready = False Else isnetready = True End If End Function
お礼
ありがとうございます。 Microsoft HTML Object Libraryを参照設定してうまくいきました。
- kkkkkm
- ベストアンサー率65% (1617/2456)
一度実際に存在する郵便番号でやってみてエラーになったら未接続と考えるのはいかがでしょう。 ただ、一度成功するとその後切れても同じ郵便番号だと再移動しないとエラーにならない。 略 Dim i As Long i = 2 '行番号 Set objXMLHttp = CreateObject("MSXML2.XMLHTTP") yubinNo = "1638001" '東京都庁 On Error GoTo ErrorExit objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False objXMLHttp.Send On Error GoTo 0 Do While Cells(i, 1).Value <> "" 中略 Loop Set objXMLHttp = Nothing Exit Sub ErrorExit: Set objXMLHttp = Nothing MsgBox "Error" End Sub
お礼
ありがとうございます。でも >一度成功するとその後切れても同じ郵便番号だと ではちと困りますね。
関連するQ&A
- エクセル関数をVBAでやりたい
IFERROR(INDEX(***,MATCH(***)),"")この式を下記マクロに組み込むことは、可能でしょうか? Sub Macro1() ' Dim line3 As Integer Dim line5 As Integer line5 = 2 '初期値を2行目に設定してます Do While Worksheets("Sheet5").Cells(line5, 1).Value > 0 'sheet5の通し番号をsheet3のH列から検索して、その行数をline3に代入する。 line3 = Worksheets("Sheet3").Range("H:H").Find(what:=Worksheets("Sheet5").Cells(line5, 8)).Row 'A,B列内容のコピー Worksheets("Sheet5").Range("A" & line5, "B" & line5).Copy Worksheets("Sheet3").Cells(line3, 1) 'D~G列内容のコピー Worksheets("Sheet5").Range("D" & line5, "G" & line5).Copy Worksheets("Sheet3").Cells(line3, 4) line5 = line5 + 1 '次の行へ Loop ( http://soudan1.biglobe.ne.jp/qa8921867.html )
- ベストアンサー
- Visual Basic
- エクセル2019 VBAについて
エクセル2019でVBAを使いコピーペーストの勉強中です、次の箇所(Dim i As integr)で、ユーザー定義型は定義されていませんと指摘されて止まってしまします、Sheet("データ")には3行のデータは入っています、VBA初心者のため、この後が、なかなか前に進めません、どうかよろしくおねがいします。 ********************************** Sub 練習() Dim s1 As Worksheet: Set s1 = Worksheets("請求書") Dim s2 As Worksheet: Set s2 = Worksheets("データ") Dim r1 As Integer: r1 = 18 Dim r2 As Integer: r2 = 2 { Dim i As integr } For i = 0 To 2 s1.Range(s1.Cells(r1 + i, 1), s1.Cells(r1 + i, 3)).Value = s2.Range(s2.Cells(r2 + i, 2), s2.Cells(r2 + i, 4)).Value s1.Cells(r1 + i, 4).Value = s1.sells(r1 + i, 2).Value * s1.Cells(r1 + i, 3).Value Next End Sub ***************************************
- ベストアンサー
- Excel(エクセル)
- Excel VBA; 複数のループ処理
↓のようなコードがあります。 Dim i As Long, MaxRow1 As Long, MaxRow2 As Long MaxRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row MaxRow2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To MaxRow1 Worksheets("Sheet1").Cells(i, 1).Value = i . Next i For i = 1 To MaxRow2 Worksheets("Sheet2").Cells(i, 1).Value = i . Next i これらを最大行の多いシートに合わせて、パフォーマンスを良くしたいと思います。 同様の処理をシート1、シート2で実施しているので纏めて記述したいです。 シート1、シート2に対する処理をサブルーチンにする方法しかありませんか? どなたかお願いします。 If MaxRow1 >= MaxRow2 Then For i = 1 To MaxRow1 Else For i = 1 To MaxRow2 End If Worksheets("Sheet1").Cells(i, 1).Value = i Worksheets("Sheet2").Cells(i, 1).Value = i . Next i
- ベストアンサー
- Visual Basic
- Excel VBAで検索する
Excel VBAで、Sheet1に貼り付けたテキスト内から Sheet2に記載した(1列ごとの)キーワードを検索し キーワードが含まれている行をSheet3に貼り付ける処理をしているのですが、始めたばかりなので上手くいきません。 下記がソースです。 Dim moji As String Dim word As String Dim result As Integer For i = 3 To 103 For j = 2 To 21 moji = ThisWorkbook.Worksheets("Sheet1").Cells (i, 1).Value word = ThisWorkbook.Worksheets("Sheet2").Cells (j, 2).Value result = InStr(moji, word) If doResult <> 0 Then For k = 1 To 100 ThisWorkbook.Worksheets("Sheet3").Cells (k, 1).Value= moji Next k End If Next j Next i このソースでは上手くいかないのですが、どこがダメなのか分からないので、解決の糸口がつかめません。 アドバイスなどお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- ExcelのVBAの配列に関する質問です。
ExcelのVBAの配列に関する質問です。 sheet1のデータをsheet2に表示するVBAを作成しています。。 sheet1のデータは7行目からスタートし、sheet2のデータは26行目からスタートしています。。 sheet1とsheet2の列は同じ並びではないため、それぞれのシートの列番号をCellsを用いて指定しています。 Sub test1() Dim endrow As Long endrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row Dim i As Long Dim j As Long For i = 7 To endrow j = i + 19 Worksheets("sheet2").Cells(j, 1) = Worksheets("sheet1").Cells(i, 2) Worksheets("sheet2").Cells(j, 8) = Worksheets("sheet1").Cells(i, 28) Worksheets("sheet2").Cells(j, 9) = Worksheets("sheet1").Cells(i, 31) Worksheets("sheet2").Cells(j, 10) = Worksheets("sheet1").Cells(i, 32) ・ ・ ・ ※長いので省略 Next i End Sub 上記のtest1は正常に動くのですが、データ量が多いため、処理に時間がかかってしまいます。 高速化できないかと、以下のように変更しました。 Sub test2() Dim dataRange1 As Variant Dim dataRange2 As Variant dataRange1 = Worksheets("sheet1").Range("A1:GI10006") dataRange2 = Worksheets("sheet2").Range("A1:DZ10018") Dim endrow As Long endrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row Dim i As Long Dim j As Long For i = 7 To endrow j = i + 19 dataRange2(j, 1) = dataRange1(i, 2) dataRange2(j, 8) = dataRange1(i, 28) dataRange2(j, 9) = dataRange1(i, 31) dataRange2(j, 10) = dataRange1(i, 32) ・ ・ ・ ※長いので省略 Next i End Sub test2は、エラーメッセージ等は表示されませんが、sheet2にデータが表示されません。 ちなみに、以下のようにsheet1のみ配列化した場合は、正常に表示されました。 Worksheets("sheet2").Cells(j, 1) = dataRange1(i, 2) Worksheets("sheet2").Cells(j, 8) = dataRange1(i, 28) Worksheets("sheet2").Cells(j, 9) = dataRange1(i, 31) Worksheets("sheet2").Cells(j, 10) = dataRange1(i, 32) test2は、どこが間違っているのでしょうか? ご教示ください。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- ExcelのVBAについて質問です。Excelは2003です。
ExcelのVBAについて質問です。Excelは2003です。 コマンドボタン1で下記のプログラムを実行するようにしています。 Sub Macro1() ' ' Macro1 Macro ' ' Dim iRows As Integer Dim sRows As String Dim i As Integer For i = 1 To 100 Application.Wait Now + TimeValue("00:00:05") ' 最終行の調査: iRows = Worksheets("Sheet1").UsedRange.Rows.Count ' 最終行をシート3にコピー Worksheets("Sheet1").Rows(iRows).Copy Destination:=Worksheets("Sheet4").Range("1:1") ' CH1 の最新データをシート3にコピー Worksheets("Sheet3").Range("B9").Value = Worksheets("Sheet1").Cells(iRows, 3).Value ' CH2 の最新データをシート3にコピー Worksheets("Sheet3").Range("C9").Value = Worksheets("Sheet1").Cells(iRows, 4).Value Next i End Sub これをコマンドボタン2で途中でも強制的に終了するようにしたいのですがコマンドボタン2にはどのようなプログラムを入れればいいでしょうか?
- ベストアンサー
- オフィス系ソフト
- ExcelのVBAについて
こんにちは、VBA初心者です。 C:\pictureの中に以下のファイルがあります。 DSC_0134.JPG~DSC_0154.JPG これらのファイルをExcelのA列1~20行に書かれた文字△○%&◎~▲▽%%★に.JPGをつけて保存したくて以下のコードを書きました。 Dim buf As String Dim msg As String Dim i As Integer Dim A As Variant i = 1 buf = Dir("dsc*.jpg", vbNormal) Do While buf <> "" Do While i < 21 buf = Dir() msg = buf 'msg=元の名前 A = Worksheets("sheet1").Cells(i, 1).Value Worksheets("sheet1").Cells(i, 2).Value = msg Name "C:\picture\msg" As "C:\picture\A.jpg" i = i + 1 Loop Loop Name "C:\picture\msg" As "C:\picture\A.jpg"のところで、「ファイルがありません。」となってしまいます。 あと、Worksheets("sheet1").Cells(i, 2).Value = msgのところで、\pictureの中の最初のファイル(DSC_0134.JPG)を表示しません。 どこを直せばよいのでしょうか?
- ベストアンサー
- Visual Basic
- エクセルVBAについて
前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- VBA 初心者
sheet1から、sheet2データを検索して抽出する練習をしているのですがerror"1104"が表示されます、なぜなのか分からないので投稿しました、よろしくお願いします。 sub test() dim sh1 as worksheets dim sh2 as worksheets dim i as integer set sh1 = thisworkbook.worksheets("sheet1!") set sh2 = thisworkbook.worksheets("sheet2!") b = userform1.textbox1 for i = 1 to 10 sh1 .cells(i,2) = b b = b+1 x = sh1.cells(1,2) sh1.cells(i,3).value = worksheetfunction.vlookup(x,sh2.range("a1:d500"),2,false) next i end sub
- ベストアンサー
- Visual Basic
- VBA エクセル 合計
皆様、こんにちは。 それぞれの値が入っている会計シート(シートの形式は同じ)を一つの合計シートに合計しようとしていますが、うまくいきません。具体的に、数値の合計ができません。 例えば、ある項目に対して、シートAに100が入力され、シートBには230が入力されているとすれば、合計シートに100+230=330を入力したいです。なお、全ての会計シートは"Form"というエクセルシートにあり、その数をユーザが決めますので、検索しなければいけません。そして、合計シートは"Result"にあります。 以下のように書いてみましたが、間違っているようです。 Worksheets("Result").Activate Dim SR As Integer Dim SC As Integer 'SR is start row 'SC is start column SR = 6 SC = 2 Worksheets("Form").Activate Dim i As Integer i = 68 Do While 1 = 1 If Selection.Cells(i, 4).Value = "" Then Exit Do End If i = i + 49 Loop Sum = 0 Sum = Sum + Selection.Cells(i, 4) Worksheets("Result").Activate Cells(SR + 5, SC + 2) = Sum 詳しい方に教えていただければ非常に助かります。 どうぞよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 すみません、週明けから寝込んでしまいお礼が遅くなりました。とても勉強になりました。