Excel VBA 質問スレ Part49©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 一点忘れてた。
このツール、取ってくるページが重いと時間がかかる。
あんまり遅いときはBreakしてくれ。 CreateObject("InternetExplorer.Application")
なんてしたくないからMSXML2.XMLHTTPとか使うんじゃないのか? >>793
DOM情報は一緒に使える。
情報を得るだけならMSXML2.XMLHTTPの方が良い。
俺のツールは10年以上前に作ったから、その頃はMSXML2.XMLHTTPを知らんかった。 >>791
タイプミスが1個あったよ。
181行目:objndode
おそらく、objNodeと思われ... お前の過去とか知らんし、判ってる事なら修正版を出してはくれまいか >>795
おお、確かに。
>>796
必要なら自分で修正しなよ。
使えるから長いこと使ってるけど簡易ツールだし、マウス下のDOM情報を取って来るツールとかを使う場合も多い。
バグだらけだから公開はしないけど。 >>797
ありがとうございます。でもごっそりは重そうなので出来れば自作できればと。
ググるとこれが良さそうですが
Range("A1").Hyperlinks(1).Follow NewWindow:=True
例えばexcelシートにB2〜B101までurlの記載があり選択してctrl+sみたいな感じで自動実行
これを書き換えるにはどうすればいいでしょうか?
Set DataSheer = ActiveSheet
Dim i As Long, cnt As Long
For i = 1 To 100
cnt = cnt + 1
Cells(cnt, 1) = i
適当に拾ってきた物を書いてみましたアドバイスをお願いします
>>793
MSXML2.XMLHTTP の利用について教えて下さい。
1日500URLを寝る前に取得したいので出来れば動作は早い方がいいです。
ieを開かずにデータを取得できるんですよね
>>745
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
を変更でいけますか?
Set objIE = CreateObject("MSXML2.XMLHTTP")
objIE.Visible = False >>798
そうじゃなくて、そのツールでとってこれるのは指定のURLのページがどういう構造になっているかという情報。
それが分かれば自分で組めるでしょという話。
500個のURLのページがみんな同じ構造なら取りあえず1つだけ構造を調べれば他は同じように組めるでしょ。
例えば君は9個のTRの内、1〜4を取りたいけど1だけしか成功して無いんだろ。
なぜ2〜4が取れないかを調べるのに使う。
取りたいデータに名前やクラス名がついてたらそれで取ってきた配列を使うし、無ければタグ名で取って来る。
タグ名ならその右にある番号から何個飛ばしで取れば良いとかを類推する。
MSXML2.XMLHTTPやMSHTML.HTMLDocumentは単純にInternetExplorer.Applicationを置き換えて使えるわけじゃない。
ソースを取ってきてそれをDOMDocumentに当て嵌めれば似たように使えるけど。
ところで、1日に500個のURLから情報取ってきて問題無いんだろうね。
岡崎図書館の例にもある通り、不正アクセスとして捕まるのを避けるために先方には確認してる? ふだんプログラミングはExcelのVBAがほとんどでこれならかなり本格的なこともできるスキルがあります。
ところでJavascriptに興味を持ちメモ帳でJavascriptをはじめました。
これでExcelVBAのようにコード書くときにインテリセンスで入力補助ができるツールってないんですか?
メモ帳だから当然そんなのできません。
Javascriptの入門書はいつくか読んでますがExcelVBAのようなインテリセンスが使える開発環境のことには全くふれていません。 フリーのテキストエディタなんて腐るほど調べりゃ出てくるだろ >>802
いや、ここに居座る。
>>803
VSってVisual Studioですかね?かなり本格的なツールと思いますが
Javascriptでインテリセンスだけできたらいいのですがシンプルなツールはないものでしょうか?
というよりJavascriptやってる人の使用ツールの使用率みたいな円グラフはないでしょうか?
あとExcelVBAでよくやるブレークポイントを使ってF8のコマ送りや実行途中で変数の値を見るのって
Javascriptで使うツールでもできるんですかね? 回答率が低い方で聞くのは時間の無駄では?
NGにするから何でもいいけど >>806
javascriptサポートしてるやつは出てくるんじゃねえの?
使ったことないけど
出ないならvsとか使えばいいじゃん / ̄ ̄ ̄ ̄ ̄\
/ \
/ ヽ
/ ̄\ l \,, ,,/ | そりゃないよ
,┤ ト | (●) (●) | かあちゃん!
| \_/ ヽ \___/ |
| __( ̄ | \/ ノ
ヽ___) ノ >>809
VSは会社で気軽にインストールできないじゃん TR取れないくんはgetElementByTagName("TR")は試したのかよ >>812
そこなんだよ、問題は。
じゃ、テキストエディタは気軽にインスコできるのかっつーと、インテリセンス実現するためには、やれプラグインだなんだって追加する必要が出てくる。
ソフトのインストール申請は1回で済ませたいよね。
となると、なんだかんだでVSが最良の選択肢になる。
配布元がMSなのも安心だし。
HTMLやCSSも入力補完できるからね。
入れておくとめちゃ便利でっせ、旦那。 TeraPadは便利そうだけどvbscriptが標準でサポートされてないのがつらい Notepad++とか軽くていいぞ
申請通りやすいかどうかは分からんが TeraPad は、サロゲートペア(4バイト文字)のような、
ユニコードに新しく採用された漢字は、? に変換されてしまう
中国の「深圳」みたいな漢字 >>819
こんな掲示板のルールは守る必要がない。
そもそも20年くらい前のインターネット創始期にリアル世界からバーチャル世界への人々の続々の初参加で
みんなが気軽に参加さえできればどこでもいい掲示板がたまたまここだっただけで
まるで自分のアイデアで発明して作り上げた掲示板と勘違いした管理人が有名になったことも利用して年収数億円にもなった
そんなずるいアホの作ったルールを守る必要あるか? IDEがダメならVSCにすりゃ良いだろ
デバッグ機能使えるし、エディタ扱いだから軽い >>821
それはあちらのスレでもだれかが言ってたvisual studio codeですか。
評判よさそうなので使ってみます。 あと最重要なことを忘れていた。
Excel VBAのF2で呼び出せるオブジェクトブラウザは上級者ならこの便利さは涙ものだと思うけど
これに相当するものはJavascriptでも使えるんですよね?
たいていのツールならJavascriptでのオブジェクトブラウザは見れる仕様になってるの? visual studio codeはフリーで商用利用も可能だったはず VSCかー、使ってみようかな
今までVSとVBEでしかプログラム書いたことないや >>820
>まるで自分のアイデアで発明して作り上げた掲示板と勘違いした管理人
何かの著書で、自分のオリジナルじゃないと言い切ってたけど。 >>820
ヒュー
スゲー承認します。
が提案は却下でーーす >>820
> こんな掲示板のルールは守る必要がない。
相手してくれる人がいるんならそれでいいんじゃね。
相手したくないやつはスルーするだろうし。 しかもそいつはYoutube動画のすべてのサムネイルで
自分のカバみたいなデカい顔を恥ずかしげもなくデカデカとのせてる。
https://www.youtube.com/channel/UCWlenAgH6lBO36CKiAQR6gQ/videos
これが許させるのはイケメンだけではないか?
勘違いもはなはだしい。 動画の内容も幼稚。
こんな低レベルのことしか考えれないのにしゃべるな!というレベル。
例えばプログラミングついての動画見てよ。
https://www.youtube.com/watch?v=N9Xl2m-GZwc
コピペが最良とか言ってて、こんなんやってたら共同作業でプログラングやってたらめちゃめちゃになる。
このレベルじゃデザインパターンとかリファクタリングのことを全く知らないしろうとだとわかる。
この人さっぱりプログラミングできないのは明らか。
言語の見解としてCOBOLはやる人がいないからチャンスかも、というのもそれは違うだろ。 >>831
まあ、どうでも良いんだがjavascriptは詳しくないからなあ。
有用な回答が得られるかっていうと知らんということでjavascriptのスレよりは難しいんじゃないか?
ところでググることぐらいはしてるんだろうね。
OmniSharpが使えるエディタならなんでもいけるかも。
あと、マイナーかもしれんがScite4がいけるかも。
AutoItで使ってるからjavascriptはどの程度使えるかは分からんが。 >>814
うん、DOMの構造を調べて求めるデータがgetElementsByTagname("TR")の何番目なのかや、実際にはその子どもや孫の可能性もあるからその何番目かっていうのを簡易ツールで調べて欲しいんだがね。
テーブルの場合、連続した番号にならないことも多いから何個飛ばしかが分かれば取ってこれると思うんだけど。 TR取れない君です
>>790に書いてますが取得は出来てます
3サイト程試したので理解は出来ているかと思います
昨日はcellに出力まで出来ました。
Set colTable = htmlDoc.getElementsByName("oppai")
Dim el As IHTMLElement
For Each el In colTable
Set colTH = el.getElementsByTagName("th")
Set colTD = el.getElementsByTagName("td")
i = 2
Cells(i, "B") = colTD(2).innerText
Cells(i, "C") = colTD(3).innerText
Cells(i, "D") = colTD(4).innerText
Next el
後はA列に記載のURLから順に情報を取得して上のcellに格納していくのと
MSXML2.XMLHTTPやMSHTML.HTMLDocument化です
A列に記載のURL(B2からB101)から順に情報を取得して上のcellに格納の
具体的なコードを教えて頂けないでしょうか >>798
1つのドメインにつき、1日1回までにしておかないと、業務妨害で逮捕されるぞ。
同じサイトへ、しつこくアクセスするなよ
普通のサイトは、ツールでのアクセスは認めていないから
robots.txt に、検索エンジンのクローラー(ロボット)に対する、命令が書いてあって、
それに従わないアクセスは、業務妨害で逮捕される >>838
えっ1日に2回サイトにアクセスすると逮捕って日本の法律?
じゃあスクリプト組んで商品買ってるやつみんな逮捕されてんの
コードの書き方書いてるやつやソフト屋も幇助で逮捕されてるんだ
ちなみに取りに行くの海外サイトなんだけど同じなの?
国際指名手配とかになると困るんだけど >>839
大丈夫だよ
>>838はちょっと頭がおかしいだけ >>840
> 岡崎図書館アクセス事件か
wikiを見てみると、1秒に1アクセスは「常識的で礼儀正しい」って世間の認識のようだね
男性の作成したクローラの動作
このクローラは、同時には一回しかリクエストを送らず、受信後に間隔をおいてから次のリクエストを送信していた
(1秒に1アクセス程度に調整)。これはクローラの動作としては「常識的」「礼儀正しい」程度のものであり、
応答を待たずに過大なアクセスを行うことで高負荷にさせる攻撃用のプログラムと異なる動作であった。
男性の業務妨害の強い意図が認められないとして起訴猶予処分となった >>798
1日に500URLの取得が場合によってはサーバーの稼働を妨害していると見られる場合があるので
注意したほうがいいぞ、2回目で通報はないだろうけどな >>841 >>843
OKです
例えばですが同一サイトの目的の個別ページに100アクセスするのと
1アクセスになるのかわからないけど根こそぎリンクたどっていくのとどっちがいいのでしょうか
前者のやり方はググっても同じやり方の参考になるサイトがなくてコードを希望しました
後者なら似た感じのがあったので自分でも作れそうです
欲しい情報のほとんどが各ページ10字程度のTD1ケ所だけです
素人考えで該当のページから必要な部分だけ抜いたほうがいいのかなって思ったんですがどっちがいいのでしょうか サーバーの性能、サイトやデータの構成、取得の目的とか書かないの? 必要な情報は提供せず、こちらが知りたいことだけ教えろ!
これがこのスレの質問者のデフォ >>847
教えても例もしないゴミクズが多すぎるな
特に「具体的なコード教えて」君は人としてのレベルの低さがすけて見えて気持ちが悪いわ 岡崎図書館事件では、逮捕されている。
第三者機関である裁判所から、逮捕状も取れている
裁判所だから、警察などの行政執行機関じゃなくて、司法の判断で、ほぼ有罪になる。
単に、起訴猶予処分にしたというだけ
1秒に1回なら、アクセスしても無罪というのは、
無罪になるために、こういうのが常識ですよって広めただけで、
実際には、逮捕状も取れている
robots.txt に従っていないと、相手のサイトが訴えるのは自由だから、
各社の検索エンジンは、1日1回しかアクセスしない >>849
オンラインゲームでチート反対って言ってる人? >>836
そこまで分かってて何で組めんの?
基本的な問題で躓いてるみたい。
君はどういう方針で組んでるの?
普通はそういうサンプル組めたらURLを変数に置き換えて、指定のURLを引数にして4つのデータを取得するプロシージャ作ると思うんだが。
Function Get4Data(strURL As String) As String()
Dim strData() String
.
.
.
Get4Data=strData
End Function
Sub MainProc()
Dim strData() As String
Dim i As Long
Dim j As Long
For i=2 To 102
strData=Get4Data(Cells(i,1).Value)
For j=0 To 2
Cells(i,j+2).Value=strData(j)
Next j
Next i
End Sub
4つのデータに意味を意識するならユーザー定義型を返すプロシージャにしてメインでは配列の利点を使わない。(jを使わない)
この辺は趣味の問題だと思うけど。
なお、スマホから打ってるからコードには間違いが有るかも。 別に反対とは言わないけど、
相手のサイトが、業務妨害で訴えるのは自由だから、逮捕されるよってだけ
コンビニのアイスクリームのケースに入って、写真を撮っただけで逮捕されてる
被害額は、0円なのにw
気持ち悪くて、客に出せないから、アイスクリームを全部捨てましたって
相手は、何とでもできる。
無傷でも、被害額を請求できる >>853
なぜ脅したがるのか知らんがクローラーでなければ問題ないし
先にrobot.txtの内容を見る処理書けばいいだけだから 岡崎図書館の場合は図書館側に問題があって、プログラムでアクセスした時にそれが顕在化したということだったと思うが。
ただし、プログラムでのアクセスはサーバーをダウンさせることもあり得るわけでそれはアクセスの程度問題であるということ、過度なアクセスはサーバー側にとっては迷惑であるということ、不正アクセス防止法は意図しなくても問えるということは、留意する必要があるだろう。
要は無断でのアクセスは迷惑になるから気をつけてってこと。
そういう意識があって、でもそれほどアクセスが有るわけじゃ無いから連絡はしなくても良いだろうという判断ならそれもありじゃないかとも思う。
これが全く気にもせず、人のことはどうでも良いと考える人ならもう教えないし、プログラム組むのも辞めた方が良いと思う。
そういう人のプログラムって動けばOKの独りよがりプログラムになって周りが迷惑になりがちだから。 仕事でWebから情報取って来るプログラムを作ったときは客にその旨を説明し、先方には実際のプログラムのソースコードと一緒にどういう手順でアクセスするかの説明を提示して貰った。
先方と言っても会社は違うけど客の会社の関連会社で情報取って来るプログラムもその会社関連の仕事の中の一部だったわけだけど。
先方が承諾することは分かってたけど一応報告すべきってことで。
>>839
そういうわけで手順を踏んで許可を取れば問題ないから幇助には当たらない。 全部MDISのせい
Librahack氏はMDISに慰謝料を請求してもいいレベルだと思うね 同じコードで実行してもできる時と反応がない時とあるんだけどなんで? >>861
必要な情報は提供せず、こちらが知りたいことだけ教えろ!
これがこのスレの質問者のデフォ
らしいですよ。 >>849
> 1秒に1回なら、アクセスしても無罪というのは、
> 無罪になるために、こういうのが常識ですよって広めただけで、
> 実際には、逮捕状も取れている
不起訴になってるじゃん
前例ができたから、今後は逮捕されることもないでしょ 岡崎図書館不起訴になったのか
じゃあ問題無しだな。一時間に一回ぐらいのクロールなら余裕だろう >>861
その同じコードをさらせよって意味だよ
日本語わかるよな >>862
逆に言うと
その程度の脳みそだから教えてもらわないとわからないってことなんだろうな
低レベルな質問するやつほど
自分の環境言わなかったりコード提示しないイメージ >>853
> コンビニのアイスクリームのケースに入って、写真を撮っただけで逮捕されてる
> 被害額は、0円なのにw
そういう思考回路の時点で、お前も同じレベルのキチガイだ 被害額0円でも女子トイレに入っただけでも逮捕されることあるけどな >>853
それが被害額ゼロ円だと思ってる時点でお察しだよ 初心者ですいません。教えてほしいです。
シートが2枚あり、1枚目のシートの特定セルに「デリ」と入力後、
2枚目シートの特定セルにデリと入力されるのを作ってるのですが1枚目のC13のは反映されるのですが、C14以降が反映されません
ご教授お願いします
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim name As Variant
Dim linenm As Integer
For i = 13 To 52
If Intersect(Target, Cells(i, 3)) Is Nothing Then
Exit Sub
Else
'デリがもし記載されていれば
If Cells(i, 3).Value = "デリ" Then
'デリが記載の名前をnameに代入
name = Cells(i, 3).Offset(0, 1).Value
'ワークシート(シフト)で、nameに代入されている名前の行数を取得
linenm = Application.Match(name, Worksheets("シフト").Range("A1:A60"), 0)
Worksheets("シフト").Cells(linenm, 2).Value = "デリ"
End If
End If
Next i
End Sub >>873
ここがおかしい
targetがcells(14,3)だとループから即抜けて終わる
For i = 13 To 52
If Intersect(Target, Cells(i, 3)) Is Nothing Then
Exit Sub
Else
以下のように書き換える
…
Dim linenm As Integer
'範囲外だったら終了
If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then
Exit Sub
endif
'メイン処理
For i = 13 To 52
…
こうすれば何をしているかわかりやすいと思う で、更に言うと、スコープの関係でWorksheet_Changeから別シートは触れ無くないか?
以下はエラーになる気がする
Worksheets("シフト").Cells(linenm, 2).Value = "デリ"
以下のようにすると動くと思う
'worksheet1
Private Sub Worksheet_Change(ByVal target As Range)
'無限ループを抑制する
Application.EnableEvents = False
'この時点で選別する
If Intersect(target, Cells(i, 3)) Is Nothing Then
Exit Function
Else
'標準モジュールに投げる
foo (target)
End If
Application.EnableEvents = True
End Sub
'標準モジュールの内容
Function foo(ByVal target As Range)
Dim i As Integer
Dim name As Variant
Dim linenm As Integer
'範囲外だったら終了
If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then
Exit Sub
endif
'メイン処理
For i = 13 To 52
… >>875
874理解しました。
なるほどです。
外出中なので検証できませんが、
changeイベントはシート1の値を対象で
イベントが発生すればifを実行
ifでシート1にデリが記載されていれば
シート2にデリを入力
というのは不可能なんでしょうか、、
帰ったらやってみます。 できるよね
Worksheets("シート2").Cells(linenm,2).Value = "デリ" >>878
今戻って書き直したら正常に動作しました。
ありがとうございます。
別件の質問なんですが、
worksheet_changeは
セルの値を削除した際には対応していないのでしょうか。
うまくいかない・・。 >>879
どう言う手順でセルを削除してるのか知らんが、ブレークポイント置いても止まらんのならそうなんだろ
削除の手順変えるか他のイベントを当たれ >>879
削除ってDELETEキーの事?
それとも行削除?
どっちにしても取得できたけど
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print Target.Row
End Sub >>846
余った金で買ってるですら時間かけれなくて基本放置メインの優待株なのにちまちま転売なんて時間ないですよ
休みは家族サービスしなきゃなんないし
暑いなかヨドバシ並んだり労力に合わないこと無理
>>845
いや初心者なんでほんと申し訳ないが相手のサーバーの性能とか構成とかどうやって調べるの?
知りたいしやり方具体的に教えてほしい
自分で貼ったコードは今は理解出来てるけど
初心者からすると3日前ならポカーン
正直debug→sellsなんて簡単な事すらわからないレベルが初心者ですw
>>852
ありがとうございます
変数の置き換え等がまさに知りたかった事です
改変出来るサイトが見つけられず完全にお手上げでした
お酒入ってるんで明日試してみます
質問ですが456行目の...はなにか入るかのでしょうか?それともこのままでしょうか?
tb3のみの取得の場合でもこれでいけるのでしょうか? >>879
おそらくその削除行為で↓のNothing が成り立って終わっている
>If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then >>880
>>881
>>883
解決しました‼
無事作りたいのできました。ありがとうございます‼ すまぬ。助けてほしい。
シート上にActiveコントロールのボタン配置します。
なぜか、勝手に大きくなったりちいさくなったりして堪らん。
解決策ありますか?
別件でもうひとつ。
シート右クリックメニューにコマンド追加してます。(マクロで追加)
端末によって、改ページシート表示時なら、コマンド表示されるけど、標準表示時は標準されない。
何が原因ですかな。標準表示でだしたいの。 >>886
後者に関しては
Cellって名前のCommandBarを取得して変更してると思うけど
改ページと標準で名前はどちらもCellだけど実体は別々のCommandBarだから
改ページの方だけしかメニュー追加できてないんだろう
ついこないだ自分も全く同じ現象にハマった
そのことも加味して作ってるサンプルググれば出てくるよ
出先だから細かいことは書けん >>886
右クリックしてコントロールの書式設定→プロパティ
セルに合わせて移動するがサイズ変更しないを選択 >>888
ためしてみるよ。
ファイル開くたびにミリ単位に小さくなる。開放されたい。 ■ このスレッドは過去ログ倉庫に格納されています