Excel VBA 質問スレ Part73

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 4668-xJJl)
垢版 |
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/09/13(月) 08:13:09.52ID:tEaVHPxwM
>>1
3デフォルトの名無しさん (ワッチョイ a58e-tqgi)
垢版 |
2021/09/13(月) 19:11:08.29ID:Pa7+I2w50
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください
2021/09/13(月) 21:24:22.31ID:dfMVUW3H0
それでも来たらスルーでいいんじゃね
2021/09/14(火) 16:24:06.98ID:QWQM37es0
A列の全行のセルの値を配列に突っ込む時、オートフィルターが複数列でかかっていると、
表示されてるやつだけ配列に入ってしまうの、なんとかならない?

配列をA列に縦方向に貼り付ける時も、オートフィルターが既にかかってると、適切に元の行に貼り付け戻せない。
仕様なのかな
2021/09/14(火) 16:26:32.34ID:QWQM37es0
2万行あるから、なるべく最初にa列の内容を全部配列に入れてから、それぞれを操作して、
それからまた修正済みの配列の中身をa列に上書き貼り付けしたい。
でも、オートフィルターがかかっているとまずい。
複数列でオートフィルターがかかっているととても難しい
2021/09/14(火) 16:40:04.06ID:dOl/0XMua
フィルタ全解除する処理を前に置けばいいじゃない
2021/09/14(火) 17:37:49.57ID:QWQM37es0
全解除して処理を行う、というのはできたけど、ユーザーのためにフィルタした状態ってのはそのままに戻したい。
フィルタしてる列が単体ならなんとかそれはできた。
だけど、複数列でフィルタした状態を、いったん全解除して、そんであとでまた元のフィルタ選択状態に戻すのが出来なさそうなのよね。
2021/09/14(火) 19:45:59.21ID:dPBji9ks0
テーブルの見出しはvalueじゃ取り出せないんだな
勉強になったわ
10デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/14(火) 20:24:42.51ID:Tksl7xa90
フィルタは全解除するのが一番手っ取り早い
横に伸ばすのは異常に難易度高い
11デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/14(火) 20:25:17.71ID:Tksl7xa90
列の増加が多いなら最初から大量にフィルタ列を用意シておいたほうが良い
2021/09/14(火) 21:12:31.57ID:u7isybhPa
>>8
フィルタの条件って色々指定できる(色とか日付とか特定の文字列を含むとか)から、全部に対応しようとするとすごくめんどくさい
https://excel-ubara.com/vba_class/VBA_CLASS_08.html

割り切りとして「このマクロを使ったらフィルタは解除されますが情報は最新化されます」くらいにしとくのが無難かと
2021/09/14(火) 21:57:16.30ID:zgsbOTDxH
作業シートにコピペしてから処理すれば?
2021/09/14(火) 23:44:27.27ID:UJ1BwW9y0
コマンドボタンを押してユーザーフォームを開くときに、
TopとLeftの位置をセルC5のTopとLeftの位置に合わせるべく、
以下のようにコードを記述したのですがうまく合ってくれません。
※セルC5のLeftやTop位置より大分左や上に表示されてしまう。

何か記述的におかしいのでしょうか?

Sub UserFormOpenSet()
Dim varTop, varLeft
With Sheets("説明シート").Range("C5")
varTop = .Top
varLeft = .Left
End With
With UserForm
.Show
.Top = varTop
.Left = varLeft
.Label1.Caption = "コメント内容"
    ・


End With
End Sub
2021/09/14(火) 23:56:12.55ID:OBquwEh60
>>14
UserForm top left でググッたらこんなページがhttps://www.officepro.jp/excelvbaform/form_form/index4.html
検証してないけど試してみたらどうですかね
16デフォルトの名無しさん (ワッチョイ 2a05-0MLo)
垢版 |
2021/09/15(水) 00:23:15.17ID:8Tg1g6H40
>>15
UserForm top left セルの位置 でググったら
完璧なTipsがありました!
検索のヒントをありがとうございました!
2021/09/15(水) 00:48:53.61ID:YsJqQLCb0
どーでも良い質問なんだが、VBAからエクセルのセルに値を入れるときの表現について
意見が割れてるので、みんながどー表現してるか知りたい

例えばVBAで A1セルに 123 という値を入れるとき、
A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?

仕様書で人によって同じことしてるのに出力となってたり入力となってたりで色々バラバラすぎる
2021/09/15(水) 01:03:00.63ID:gZeM1+Z6d
>>17
VBAで計算や処理した結果をワークシートに保存するだけ、セルに値を入れて終わりの場合は出力
シートに値をセットしたあと、さらにその値を使って数式やグラフなどで別の処理や加工をする場合は入力
19デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/15(水) 07:18:17.38ID:zmLKkAKu0
>>17
それは一律で入力じゃないのか
代入って言うぐらいだし

「出力」はエクセルがrangeのvalueを出力してるだけでは?
20デフォルトの名無しさん (ワッチョイ 39e6-oWuh)
垢版 |
2021/09/15(水) 07:51:35.00ID:qRxK7g6Y0
VBAの関数、メソッドとしてそのデータが入力値なのか出力値なのかは明白なのでは?
2021/09/15(水) 10:54:35.14ID:LR7HEnPp0
>>17
VBAがセルに出力
ユーザーがセルに入力
2021/09/15(水) 12:02:19.64ID:K+waubxMM
お知恵をお貸し下さい

String型の変数に文章を代入しています
その変数が「は」を助詞として使用しているかを検出し、その「は」が何文字目に記載されているかを抽出したいです
判定式はどの様に組むのが良いでしょうか
2021/09/15(水) 12:16:58.05ID:ggl3y/Wm0
>>22
これが使えるんじゃないかな。
https://qiita.com/mima_ita/items/bc2aeb060ee12d280d7b
2021/09/15(水) 12:26:39.15ID:ggl3y/Wm0
こちらの下の方に具体的に品詞の判定方法がある。
http://www.excel.studio-kazu.jp/kw/20201108202429.html
2021/09/15(水) 14:02:58.42ID:XT7xZlnV0
是非とも
「はははははは、ははのはははははははと笑う」で
挙動確認を行なって欲しい案件だな
2021/09/15(水) 16:06:38.48ID:5d7y3fL1M
>>17
> A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?
俺なら「A1セルに 123 を書き込む」かな
シートはストレージみたいなものなのと思ってるので出力とか入力って言うのはなんか違和感ある
2021/09/15(水) 16:59:13.14ID:3TKYe9Fz0
VBA側を主体に書いているなら(シートに)出力
シート側を主体にかいてるなら(VBAから)入力
だな

VBAの仕様書でVBA側を主体にしないのはどうかと思うが
(マクロ付き)エクセルの仕様書だと考えればまあ入力でもいいのかも
28デフォルトの名無しさん (ワッチョイ a6ba-WYzC)
垢版 |
2021/09/15(水) 23:30:54.86ID:IO2bkDAL0
985なのですが、
ttps://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251
から
b. [ネットワーク名] YAHOO-NET
をVBAで抽出するいい方法はあるでしょうか?
2021/09/16(木) 00:13:25.85ID:/erdykE4H
>>28
Sub ネットワーク名取得()
  With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "https://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251";, False
    .Send
    For Each s In Split(.responseText, vbLf)
      If InStr(s, "ネットワーク名") Then Debug.Print s
    Next
  End With
End Sub
2021/09/16(木) 00:59:42.68ID:5Hx4RpZ/0
一生使うことのなさそうなCreateObjectだな
2021/09/16(木) 01:49:26.07ID:tvb8xhvB0
>>28
shift-jis の古いサーバーっぽい。
Ruby で作った

require 'open-uri'
require 'nokogiri'

url = "ここへURL"
doc = Nokogiri::HTML( open( url ) )

elements = doc.css( "pre" )
text = elements.first.content # 1つ目のpreの内容

result = "エラー! 該当なし"
text.each_line( chomp: true ) do | line | # 改行を除去して、各行を処理する
if line.start_with? "b. [ネットワーク名]" # 行頭が何々で始まっていれば
result = line
break
end
end

puts result

出力
b. [ネットワーク名] YAHOO-NET
2021/09/16(木) 01:51:47.59ID:YFUf0QLVM
なぜRuby
2021/09/16(木) 02:01:13.02ID:FMosLWBbd
スレタイも質問も読めないRubyバカ
34デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/16(木) 06:38:12.58ID:COWrCKXD0
利用者数激減の言語
それがruby
2021/09/16(木) 08:25:21.24ID:J7QCCEb9M
>>32-34
相手すんなよ…
2021/09/16(木) 08:25:49.50ID:3isIfw030
>>17
なるほど仕様書の問題か
ならば現場内で紛らわしくないような記載のルールを作ればいいかな。
例えばユーザーが手打ちで設定する場合は「入力」
VBAで書き込む場合は「出力」または「設定」

コード上では「取得」と「設定」とかに分かれるからあまり問題ないだろうけど、仕様書の記載はまた別のセンスが必要になるからね。
一見して分かりやすく曲解のない仕様書を作るときって日本語の難しさを痛感することあるよね。

そういう時は大まかな流れ図みたいなもの書いて添付して紛らわしさを回避するのも一つの手だよ。
2021/09/16(木) 11:33:48.95ID:0wHWe9CF0
質問への回答ありがとう
>>17の質問者です

個人的には「人が入力」、「VBAから出力」というとらえ方がしっくりきました

紛らわしくない書き方のルールを作るというのは本当にその通りで、
これは実践したい

日本語は改めて考えると主体が曖昧で難しい…
2021/09/16(木) 12:13:09.55ID:/erdykE4H
>>37
日本語の文章ってのは、主語が存在しなくても成立する性質があるんだよ
おかげでどっち視点かわからなくなる現象が起きやすい

逆に英文法では主語がほぼ省略できない
だから単語を置き換えただけの翻訳は不自然な文章になる
2021/09/16(木) 13:11:41.46ID:3+DQoJa1a
グッジョブ!俺
40デフォルトの名無しさん (ワッチョイ 668e-ZlXV)
垢版 |
2021/09/16(木) 14:54:30.21ID:QuckXkbq0
>>38
馬鹿の典型例
41デフォルトの名無しさん (ワッチョイ b501-lR9W)
垢版 |
2021/09/16(木) 17:31:50.83ID:Z23LNYuB0
質問させてください。

ウェブサイトから特定の場所の情報を抽出するのはこちらのVBAを使用するということで間違いないでしょうか?

またこれはExcelを購入することによって使用できるもので、WindowsでもMacでも使用できるのでしょうか?

現在Macを使用しておりまして、具体的に申し上げるとyahooファイナンスなどの個別銘柄ページから配当利回りなどの情報をまとめて抽出したいと考えております。

スレ違いでしたら申し訳ございませんが、検索してもよく分からなかったので、書き込み数が多いこちらで質問させていただきました。

よろしくお願い申し上げます。
2021/09/16(木) 17:42:26.31ID:3abSZdzaM
俺が馬鹿なだけかもしれねぇけど何をしたいのかがさっぱり分からない
2021/09/16(木) 18:02:43.18ID:nCqRUFyPM
スクレイピングしたいんだろ
そのデータをどう扱うかによるわな
2021/09/16(木) 18:31:48.90ID:sOgFGA/J0
というかMAC版のEXCELってVBA使えるの?
あとスクレイピング用のコンポーネントも
45デフォルトの名無しさん (ラクッペペ MM3e-oWuh)
垢版 |
2021/09/16(木) 18:41:42.01ID:EvK5hxPzM
他のツールでデータを集めて
結果をExcelにするのが良いよ
csvでもいいんじゃね?
2021/09/16(木) 19:07:04.50ID:Az+Wn1Ze0
>>41
htmlから簡単なスクレイピングならPower Queryがとっつきやすいかと。
URLのリンク先がcsvやExcelファイル、pdfファイル、
GitHubにあるJSONなんかもこれで結構いける。

CSS構造や、
画面上で検索指定やボタンを押させるような対話型を必要とする
複雑なhtmlなら、Pythonとか。

その先の処理でVBAを組み合わせることはある。
クエリーエラーを避けるため、一つずつシーケンシャルに更新させたいとか、
同時にファイルをDLして保存したいとか。
47デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/16(木) 19:33:58.44ID:COWrCKXD0
>>41
chrome 拡張機能 スクレイピング
で検索すると良い
ちなみにyahooなんかはスクレイピング対策として、短時間で大量にアクセスすると一発で垢一時停止になるぞ

一番いいのはyahoo APIなどのAPIを使う事
2021/09/16(木) 20:21:31.16ID:3isIfw030
MacのOfficeソフトとRubyには期待するなって
死んだばあちゃんが言ってた
49デフォルトの名無しさん (ワッチョイ 9e8c-xZL4)
垢版 |
2021/09/16(木) 20:24:24.60ID:MqGeVsp10
Macには無料で今流行りのPythonがついているそうなので
スクレイピンクはそっちの方が遥かに簡単じゃないかな
ExcelVBA経験がないのなら
2021/09/16(木) 20:45:30.18ID:B6OYbZSR0
>>48
ばあちゃんハイカラやな
2021/09/17(金) 03:52:03.83ID:O1PoA15N0
Rubyist は、たいていMac

スクレイピングは、Ruby, Selenium Webdriver, Nokogiri だけど、
無断で、大量のスクレイピングすると、営業妨害で逮捕される

スクレイピングする際、そのサイトのrobots.txt を遵守しないといけない。
取得したデータは、CSV, JSON、データベースなどに保存する

今は、どの本でも、無断でスクレイピングする事は推奨しないと書いてある。
相手のサイトと契約して、API を使わしてもらうべき!

YouTube API とか、Google Maps API とか、
株式相場などもそう
2021/09/17(金) 11:36:45.56ID:D2cYhIKk0
>>41
なんでできもしないことやろうとすんのかね
検索してもわからないんじゃ無理だろ
2021/09/17(金) 12:01:52.56ID:Y3MPn8p/0
できないことをやらないと
いつまでたっても何もできないのだが、、、
54デフォルトの名無しさん (ワッチョイ ffba-fv4A)
垢版 |
2021/09/17(金) 18:44:11.62ID:xtR/7aZz0
>>29, 31
ありがとうございました。
2021/09/17(金) 20:27:29.50ID:ZtM+Yv2y0
見えないものを見ようとして望遠鏡を覗き込んだら捕まった事例
56デフォルトの名無しさん (アウアウウー Sa5b-4fkB)
垢版 |
2021/09/17(金) 20:40:10.73ID:7ovEcO6ia
>>53
おまえが出来ないのは自業自得
2021/09/17(金) 22:49:29.45ID:DaER+3fZ0
前の定義で移動できるセルを登録したいのですが、アプリケーションの定義エラーがでます。
範囲は101カ所登録したいのですが、どうやらstr*を3個くらい抜くと動くのですが、名前の定義に制限があるのでしょうか?
str*はどこを抜いても同じです。

Dim stra As String, strb As String, strc As String, strd As String, stre As String, strf As String, strg As String
stra = "=sh1!$H$3:$K$3,sh1!$N$3:$O$3,sh1!$R$3:$S$3," & _
"sh1!$E$6:$N$6,sh1!$O$6:$AC$6,sh1!$AD$6:$BG$6,sh1!$BH$6:$BR$6," & _
"sh1!$BS$6:$CG$6,sh1!$CH$6:$CQ$6,sh1!$CV$6:$DB$6,sh1!$DC$6:DR6," & _
"sh1!$DS$6:$EH$6,sh1!$EI$6:$ER$6,sh1!$ES$6:$FA$6,sh1!$FB$6:$FD$6," & _
"sh1!$FE$6:$FF$6,sh1!$FG$6:$FH$6,"
2021/09/17(金) 22:50:14.26ID:DaER+3fZ0
続き
strb = "sh1!$E$7:$N$7,sh1!$O$7:$AC$7,sh1!$AD$7:$BG$7,sh1!$BH$7:$BR$7," & _
"sh1!$BS$7:$CG$7,sh1!$CH$7:$CQ$7,sh1!$CV$7:$DB$7,sh1!$DC$7:DR7," & _
"sh1!$DS$7:$EH$7,sh1!$EI$7:$ER$7,sh1!$ES$7:$FA$7,sh1!$FB$7:$FD$7," & _
"sh1!$FE$7:$FF$7,sh1!$FG$7:$FH$7,"
strc = "sh1!$E$8:$N$8,sh1!$O$8:$AC$8,sh1!$AD$8:$BG$8,sh1!$BH$8:$BR$8," & _
"sh1!$BS$8:$CG$8,sh1!$CH$8:$CQ$8,sh1!$CV$8:$DB$8,sh1!$DC$8:DR8," & _
"sh1!$DS$8:$EH$8,sh1!$EI$8:$ER$8,sh1!$ES$8:$FA$8,sh1!$FB$8:$FD$8," & _
"sh1!$FE$8:$FF$8,sh1!$FG$8:$FH$8,"
strd = "sh1!$E$9:$N$9,sh1!$O$9:$AC$9,sh1!$AD$9:$BG$9,sh1!$BH$9:$BR$9," & _
"sh1!$BS$9:$CG$9,sh1!$CH$9:$CQ$9,sh1!$CV$9:$DB$9,sh1!$DC$9:DR9," & _
"sh1!$DS$9:$EH$9,sh1!$EI$9:$ER$9,sh1!$ES$9:$FA$9,sh1!$FB$9:$FD$9," & _
"sh1!$FE$9:$FF$9,sh1!$FG$9:$FH$9,"
stre = "sh1!$E$10:$N$10,sh1!$O$10:$AC$10,sh1!$AD$10:$BG$10,sh1!$BH$10:$BR$10," & _
"sh1!$BS$10:$CG$10,sh1!$CH$10:$CQ$10,sh1!$CV$10:$DB$10,sh1!$DC$10:DR10," & _
"sh1!$DS$10:$EH$10,sh1!$EI$10:$ER$10,sh1!$ES$10:$FA$10,sh1!$FB$10:$FD$10," & _
"sh1!$FE$10:$FF$10,sh1!$FG$10:$FH$10,"
59デフォルトの名無しさん (ワッチョイ b7cc-W1il)
垢版 |
2021/09/17(金) 22:50:45.98ID:DaER+3fZ0
続き
strf = "sh1!$E$11:$N$11,sh1!$O$11:$AC$11,sh1!$AD$11:$BG$11,sh1!$BH$11:$BR$11," & _
"sh1!$BS$11:$CG$11,sh1!$CH$11:$CQ$11,sh1!$CV$11:$DB$11,sh1!$DC$11:DR11," & _
"sh1!$DS$11:$EH$11,sh1!$EI$11:$ER$11,sh1!$ES$11:$FA$11,sh1!$FB$11:$FD$11," & _
"sh1!$FE$11:$FF$11,sh1!$FG$11:$FH$11,"
strg = "sh1!$E$12:$N$12,sh1!$O$12:$AC$12,sh1!$AD$12:$BG$12,sh1!$BH$12:$BR$12," & _
"sh1!$BS$12:$CG$12,sh1!$CH$12:$CQ$12,sh1!$CV$12:$DB$12,sh1!$DC$12:DR12," & _
"sh1!$DS$12:$EH$12,sh1!$EI$12:$ER$12,sh1!$ES$12:$FA$12,sh1!$FB$12:$FD$12," & _
"sh1!$FE$12:$FF$12,sh1!$FG$12:$FH$12"
ActiveWorkbook.Names.Add Name:="Nyuryoku2", RefersToLocal:=stra & strb & strc & strd & stre & strf & strg
60デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/17(金) 23:08:43.51ID:VKkEr3i80
255文字
2021/09/17(金) 23:31:47.79ID:4pHWHBC6H
>>57
1274文字まで
質問のために加工したんでなければ、その範囲はもっとシンプルにまとめられるぞ
"=$H$3:$K$3,$N$3:$O$3,$R$3:$S$3,$E$6:$CQ$12,$CV$6:$FH$12"
2021/09/18(土) 09:25:55.38ID:85XqBE5T0
>>61
ありがとうございます。シート名を削除したら動きました
2021/09/18(土) 09:39:13.68ID:iFpkyoTBa
>>62
横から失礼
RangeはUnionにすると実質文字制限がなくなる
2021/09/18(土) 10:16:04.89ID:jMbZYEP4H
>>63
引数はRangeじゃなくてStringなんよ
65デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 12:10:53.45ID:vNZ9H73d0
名前定義ってRangeオブジェクトからでもできるのか 知らなかった
Range("B1:G10").Name = "Nyuuryoku2"
2021/09/18(土) 12:26:09.80ID:FfOi19ZE0
便利だけどExcelの名前の定義ウインドウは使いにくすぎる
2021/09/18(土) 12:26:47.71ID:FfOi19ZE0
つまりたくさん定義すると管理しにくいんだよな
68デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 16:41:01.37ID:vNZ9H73d0
名前の管理を簡単にする便利なアドインって誰か作ってないの?
(とおねだり)
2021/09/18(土) 18:23:53.93ID:B91oASHcM
簡単の意味を定義してくれれば俺が作ってやるよ。
2021/09/18(土) 18:33:26.51ID:y+KnaSW50
表形式ならテーブルでOK
名前の定義使わなくても
2021/09/18(土) 18:45:25.50ID:+/kaLHzEM
>>69
俺が思った通りに名前を定義してくれて、不要な名前は勝手に知らない間に削除してくれるとかかな
当然 >>57-59>>61 程度の変換は自動でやる
2021/09/18(土) 18:49:07.44ID:FfOi19ZE0
ちょっとぐぐったけど
NamesコレクションをForEachで回してユーザーフォームにでも表示させれば作れそうだな
2021/09/19(日) 00:12:03.29ID:zQBxj3q40
>>71
めちゃくちゃ簡単だな。任せとけ。
2021/09/19(日) 05:13:48.14ID:AGA6cOjvM
おう、頼んだぞ
2021/09/19(日) 10:09:24.37ID:IfToBfi40
Internet Explorer_Serverのハンドルから取得したIHTMLDocumentオブジェクトではそのページ内での操作はできましたが
Navigate実行時にメソッドをサポートしていないというエラーになります
別のURLへ移動する方法ありますか?
2021/09/19(日) 12:24:27.96ID:jno0wMDOH
>>75
たぶんメソッドの使い方が間違ってる
デバッグしてやるからコード晒してみ
77デフォルトの名無しさん (アウアウウー Sa5b-hED7)
垢版 |
2021/09/19(日) 12:45:26.42ID:/yxUr6Cya
IEのオプションでcssの設定を変える
2021/09/19(日) 14:05:15.93ID:IfToBfi40
>>76

検証中のためハンドルも直接入力してますし
コードも他のサイトの転用したものだったりかなり端折ってますが
何か解りましたらよろしくお願いします

Private Declare PtrSafe Function CLSIDFromString Lib "ole32" (ByVal pString As LongPtr, ByRef pCLSID As Currency) As Long
Private Declare PtrSafe Function RegisterWindowMessageW Lib "user32" (ByVal lpString As LongPtr) As Long
Private Declare PtrSafe Function SendMessageTimeoutW Lib "user32" (ByVal hWnd As LongPtr, ByVal msg As Long, ByVal wParam As LongPtr, ByRef lParam As LongPtr, ByVal fuFlags As Long, ByVal uTimeout As Long, ByRef lpdwResult As Long) As LongPtr
Private Declare PtrSafe Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Long, ByRef riid As Currency, ByVal wParam As LongPtr, ppvObject As Any) As Long
Private Enum SMTO
NORMAL = 0
BLOCK = 1
ABORTIFHUNG = 2
NOTIMEOUTIFNOTHUNG = 8
End Enum

Sub test()
Dim hWnd As Long
hWnd = 136698
Set objDoc = GetHtmlDocument(hWnd)

'objDoc.Navigate ("https://www.google.co.jp/";)

'Googleの検索窓に入力
objDoc.getElementsByName("q")(0).Value = "test"

End Sub
2021/09/19(日) 14:06:52.91ID:IfToBfi40
続き
Public Function GetHtmlDocument(ByVal hWnd_InternetExplorer_Server As LongPtr, Optional ByVal uTimeout As Long = 1000, Optional ByVal documentVersion As Integer = 1) As Object ' As MSHTML.IHTMLDocument
Set GetHtmlDocument = Nothing

If documentVersion <= 0 Then
documentVersion = 1
ElseIf documentVersion >= 8 Then
documentVersion = 8
End If
Dim IID_IHTMLDocumentX As String
IID_IHTMLDocumentX = Split(",{626FC520-A41E-11cf-A731-00A0C9082637},{332c4425-26cb-11d0-b483-00c04fd90119},{3050f485-98b5-11cf-bb82-00aa00bdce0b},{3050f69a-98b5-11cf-bb82-00aa00bdce0b},{3050f80c-98b5-11cf-bb82-00aa00bdce0b},{30510417-98b5-11cf-bb82-00aa00bdce0b},{305104b8-98b5-11cf-bb82-00aa00bdce0b},{305107d0-98b5-11cf-bb82-00aa00bdce0b}", ",")(documentVersion - 1)
Dim InterfaceId(1) As Currency
Call CLSIDFromString(StrPtr(IID_IHTMLDocumentX), InterfaceId(0))

Dim lngMsg As Long
lngMsg = RegisterWindowMessageW(StrPtr("WM_HTML_GETOBJECT"))
If lngMsg <> 0 Then
Dim lpdwResult As Long
If SendMessageTimeoutW(hWnd_InternetExplorer_Server, lngMsg, 0, 0, SMTO.ABORTIFHUNG, uTimeout, lpdwResult) <> 0 Then
Dim hResult As Long
hResult = ObjectFromLresult(lpdwResult, InterfaceId(0), 0, GetHtmlDocument)
If hResult <> 0 Then
Err.Raise hResult
End If
End If
End If
End Function
2021/09/19(日) 14:13:18.62ID:qcTxghfBM
gethtmldocumentにnavigateあるのか?
81デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/19(日) 21:14:40.95ID:+Er1+t3H0
navigateじゃなくてcreateDocumentFromUrlじゃないの?
知らんけど
82デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 00:12:39.27ID:wP8fgZ+m0
A1からA10000にデータが有って検索したい文字列があったとする。
この場合,範囲をdictionaryで調べるのと配列で調べるのは速度は同じぐらい??
2021/09/20(月) 00:16:46.79ID:GQS+gMma0
なぜ自分で試さないのか
2021/09/20(月) 02:45:51.50ID:KDTpyD+cH
>>82
データがセルに入ってるならワークシート関数使った方が速い
85デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:43:06.46ID:wP8fgZ+m0
えっ?そうなの??
86デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:44:41.60ID:wP8fgZ+m0
試しましたが、
コードはdictionaryのほうがすっきりした。
体感速度はあまり変わりませんでした。
2021/09/20(月) 10:54:05.02ID:9E+2eMtE0
かまってちゃんかよ
天気いいから散歩でもしてこいよ
88デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 11:55:16.12ID:djFT0hLf0
コード醸せよ
2021/09/20(月) 12:03:32.94ID:DYg0tonqd
A・オリゼー
90デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 12:27:59.43ID:lHEjG93V0
xxとyyどっちが早い、というのは本当に試した方が早い
バージョンアップで最適化されて、すげー早くなってる事がある
2021/09/20(月) 12:51:40.86ID:3QXihmxB0
>>87
別にかまってちゃんじゃなくて、回答に信頼性がないから自分で試したんだろう。誰かが信頼できそうな回答をくれたんだったら試さないと思うぞ。
2021/09/20(月) 13:12:45.31ID:26+LHXKYM
ちゃんと結果まで書き込んでるんだから
質問だけしていなくなるやつもいる中で、優秀だと思うよ
2021/09/20(月) 15:29:06.41ID:Ijs9yUmJM
>>86
まずはありがとうございました、だろ
うぜー帰れ
2021/09/20(月) 15:32:05.91ID:3QXihmxB0
>>93
お前何代表者みたいな顔して怒ってんだよ、とチャチャを入れてみる(笑)
95デフォルトの名無しさん (アウアウウー Sa5b-ONKb)
垢版 |
2021/09/20(月) 16:38:36.67ID:my+lQwjla
イヤ
マジで>>86はウザいわ
2度と来るな
96デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 16:58:36.07ID:djFT0hLf0
スルー力がない奴もセットて消えろ
2021/09/20(月) 17:03:04.82ID:3QXihmxB0
>>96
お前もスルーしないと
2021/09/20(月) 17:07:29.03ID:FEM4xU2r0
子供か
2021/09/20(月) 17:16:52.36ID:3QXihmxB0
>>98
スルー力、言うのは易し、行うのは難し、を指摘しているだけ。

もう一ついいか?
人の振りして我が振り直せ(笑)
2021/09/20(月) 17:48:58.56ID:9E+2eMtE0
一番スルーしてない人が言うと説得力ある!
2021/09/20(月) 18:05:45.62ID:Mz1RekPdr
モジュールとボタンを別のブックにコピーしたくてできたと思ったんだけど
ボタンに登録されるマクロがコピー元のマクロになっちゃってとうすりゃええのか分からん
.OnAction=Thisbook&”マクロ名”とかじゃ動かないのね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況