X



Excel VBA 質問スレ Part69
■ このスレッドは過去ログ倉庫に格納されています
0227デフォルトの名無しさん (ワッチョイ dfda-AFO5)
垢版 |
2021/01/10(日) 20:17:18.14ID:4Xu9louP0
>>226
サーバーの空き容量調べたいだけなんだけどね
方法は他にもあるけど、いちいちドライブ文字設定しなきゃいけないとか、
何かアドインみたいなの入れなきゃいけないとかあるし
Dirコマンドが一番シンプルだし、
batでテキスト出力するのは問題なくできるから、
それを直接変数に入れられないかなと思ったんだけど
0231デフォルトの名無しさん (ワッチョイ 7fb5-tn8J)
垢版 |
2021/01/11(月) 22:06:06.53ID:pqPOJoG50
このスレでお世話になりまくった者だけど
金欲しさに工場部門の夜勤に今年から異動したからVBA触ることももうない
数年後間接部門に戻れるかわからんけど
いや戻れないだろうけど
スレの全員に感謝だわ
本当に色々教えてもらったし構文そのまま頂けた
本当にありがとう
0235210 (ワッチョイ dfda-AFO5)
垢版 |
2021/01/13(水) 19:37:02.44ID:lspxZscb0
Dirコマンドの件で回答くれた皆さん

パスにUTF-8で文字化けする文字を含んでいたのが原因だったわ
しょうもないオチでごめんなさい&ありがとう
0236デフォルトの名無しさん (JP 0H03-Cwx9)
垢版 |
2021/01/13(水) 20:54:16.63ID:aeNWg8u3H
UTF-8からシフトJISに正しく変換できない文字かあ
葛飾区とか草薙とか色々あるよな
記号も〜とか¥とか半角スペースとかマイナスとか、よく使うのに化けるのがたくさんある
0237デフォルトの名無しさん (スッップ Sd9f-ZaM3)
垢版 |
2021/01/14(木) 02:22:27.50ID:JNzdWMyDd
>>235
それを解決できない馬鹿が中途半端に書き込むなよ
0241デフォルトの名無しさん (JP 0H03-Cwx9)
垢版 |
2021/01/14(木) 12:56:03.99ID:YzBTA1U5H
>>240で解決してたけど、一応正攻法みたいな物

Sub 有効数字2桁()
  Dim A1 As Double
  Dim L As Integer
  Dim S As String
  Dim F As String
  A1 = Range("A1")
  L = 1 - Int(Log(A1) / Log(10#))
  If L > 0 Then
    F = F & "." & String(L, "0")
  Else
    F = "0"
  End If
  S = Format(WorksheetFunction.RoundDown(A1, L), F)
  Debug.Print S
End Sub
0243デフォルトの名無しさん (ワッチョイ df68-Cbw0)
垢版 |
2021/01/14(木) 20:01:26.65ID:SduAKFWs0
質問です。

シートモジュール内で、

Private Sub Worksheet_Change(ByVal Target As Range)
For Each test In Range("他シートにある名前付きセルの名前")
Next test
End Sub

これで実行時エラー”1004” ’Range’メソッドは失敗しました:WorkSheetオブジェクト が出てしまうのですが、原因は何でしょうか。
Publicを取ってみたり、シートを指定しみたりしたんですが、変化ありません。
標準モジュールに記述してF5で実行した場合はエラー発生しません。
宜しくお願い致します。
0247デフォルトの名無しさん (ワッチョイ 7f2f-9hkR)
垢版 |
2021/01/14(木) 20:55:12.26ID:yNTWs1ET0
>>243
In Rangeの範囲がそのシートだから、そこに名前付きセルはない
その範囲のあるシートがわかってるなら、In 他シート.Range("... のように指定するか
同一ブック内ならIn ThisWorkbook.Names("名前付きセルの名前").RefersToRange
とかでいけんじゃね
0252249 (ワッチョイ cd10-9NFy)
垢版 |
2021/01/16(土) 19:03:22.47ID:wM/4uvwh0
>>250>>251
ありがとう。教本読んだら2種類出てきたので、
何か違いはあるのかと思いまして。
同じだったのか…。
0259デフォルトの名無しさん (ワッチョイ 822f-vYIt)
垢版 |
2021/01/16(土) 21:59:42.58ID:BbkPLu/V0
Accessで試したけどどっちも通って同じ結果だな

俺の予想では2はデフォルトプロパティの呼び出しになると思ったんだが
引数省略したら、かっこそのものも除去されて評価されてるのかもしれん

つかその教本ってなんだ?
0260デフォルトの名無しさん (ワッチョイ 822f-vYIt)
垢版 |
2021/01/16(土) 22:14:43.61ID:BbkPLu/V0
>>255
この例は同じ結果になってるけど、その二つはまったく同じではないよ
Accessで違いが出る例
Dim DB
Dim CurrentDb As Database
Set CurrentDb = Application.CurrentDb

Set DB = CurrentDb
MsgBox TypeName(DB)

Set DB = CurrentDb()
MsgBox TypeName(DB)

まあCurrentDbとかいう変数名は少なくともVBAではお勧めできないけどな
0262デフォルトの名無しさん (ワッチョイ 822f-vYIt)
垢版 |
2021/01/16(土) 23:00:55.60ID:BbkPLu/V0
前提を絞らなければ、動作に違いが出るかどうかの話だから別の話じゃない
変数名の良し悪しに関してはまあ別だが

つかその教本とやらを曝せ
俺的にはデータベースのインスタンスを取得する目的で後者の書き方とかなら、そっちのほうが問題だわ
0264デフォルトの名無しさん (スップ Sd22-RONI)
垢版 |
2021/01/17(日) 18:18:57.16ID:6FyugFd+d
初心者です
オートシェイプの名前を検索して置換できるコードを教えてください
調べてもオートシェイプ内のテキスト変換しかありません
お願いします
0267デフォルトの名無しさん (スップ Sd22-RONI)
垢版 |
2021/01/17(日) 21:25:06.25ID:6FyugFd+d
>>265
返信ありがとうございます
下記のオートシェイプに入力されたテキストを検索して置換するコードじゃなくてオートシェイプの名前を検索して置換したいのですがどこを直せばいいのでしょうか
Sub 置換() Dim tbox As Object Dim findStr As String Dim replaceStr As String Dim count As Long Dim i As Long Dim myDocument As Worksheet findStr = InputBox("置換対象文字列") replaceStr = InputBox("置換文字") Set myDocument = Worksheets(1) myDocument.Shapes.SelectAll
For i = 1 To myDocument.Shapes.count If myDocument.Shapes(i).Type = msoGroup Then Selection.ShapeRange.Ungroup.Select For Each tbox In Selection.ShapeRange tbox.TextFrame.Characters.Text = _ Replace(tbox.TextFrame.Characters.Text, findStr, replaceStr)
Next Selection.ShapeRange.Regroup.Select Else
Set tbox = myDocument.Shapes(i).TextFrame tbox.Characters.Text = _ Replace(tbox.Characters.Text, findStr, replaceStr)
End If
Next
End Sub
0270デフォルトの名無しさん (ワッチョイ 6e8e-gw59)
垢版 |
2021/01/17(日) 22:10:02.50ID:vD50J/Wf0
適当にコードをコピペして聞きだそうとする手口
0271◆QZaw55cn4c (ワッチョイ 46e9-ieYb)
垢版 |
2021/01/17(日) 22:23:21.58ID:gYjAP2D00
質問です。よろしくお願いいたします。
VBA でスクレイピングを行っています

対象ページ:https://www.rakuten-sec.co.jp/web/market/data/rub.html ‥@
取得したい要素、 CSS セレクタで記載:document.querySelector("#cFx > table:nth-child(6) > tbody > tr:nth-child(1) > td.cell-02 > em").innerText  ‥‥A

しかし、Aは google chrome では取得できて、しかもコンソールでAを指定した場合も目的の値を取得できていますが、
Aを IE11 ->F12 で表示できるコンソールに食わせても、目的の値を取得できません。

質問1:google chrome におけるページ@のCSSセレクタAは、IE11 ではどのようになるのでしょうか?‥‥B
質問2:IE11 でBを取得する方法はどのようなものでしょうか?

以上よろしくお願いいたします。
0272デフォルトの名無しさん (ドコグロ MMca-gKIs)
垢版 |
2021/01/17(日) 23:48:28.14ID:7Jg8yd50M
>>267
いろいろと修正箇所が多いので
https://qiita.com/Umaremin/items/b7726fa7340c7f175e77
このサイトのコードの
4行目の後に
Dim findStr As String, replaceStr As String
findStr = InputBox("置換対象文字列")
replaceStr = InputBox("置換文字")
'各Shapeに対する処理の2箇所に
shp.Name = Replace(shp.Name, findStr, replaceStr)
を追加すればうまく出来ると思う

ちなみに、理由は知らないけどリボンのページレイアウトの中のオブジェクトと選択と表示のシェイプの名前を変えずにデフォルトのままだとVBAが出す名前が英語表記になるので注意
0273デフォルトの名無しさん (JP 0Hcd-sTIO)
垢版 |
2021/01/18(月) 02:58:44.09ID:pyrT8iNXH
ちょっとソースを整理

Sub 置換()
  Dim tbox As Object
  Dim findStr As String
  Dim replaceStr As String
  Dim count As Long
  Dim i As Long
  Dim myDocument As Worksheet

  findStr = InputBox("置換対象文字列")
  replaceStr = InputBox("置換文字")
  Set myDocument = Worksheets(1)
  myDocument.Shapes.SelectAll

  For i = 1 To myDocument.Shapes.count
    If myDocument.Shapes(i).Type = msoGroup Then
      Selection.ShapeRange.Ungroup.Select
      For Each tbox In Selection.ShapeRange
        tbox.TextFrame.Characters.Text = Replace(tbox.TextFrame.Characters.Text, findStr, replaceStr)
      Next
      Selection.ShapeRange.Regroup.Select
    Else
      Set tbox = myDocument.Shapes(i).TextFrame
      tbox.Characters.Text = Replace(tbox.Characters.Text, findStr, replaceStr)
    End If
  Next
End Sub
0275デフォルトの名無しさん (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/18(月) 12:58:34.46ID:JT9EgKXH0
>>271
漏れが、Ruby, Selenium WebDriver, Chrome でアクセスしたら、空要素が返ってきた

CSS の :nth-child() 擬似クラスは、
兄弟要素のグループの中での位置に基づいて選択します

https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll
Document.querySelectorAll()

elementList = parentNode.querySelectorAll(selectors);
指定された selectors が CSS 擬似要素を含む場合、返されるリストは常に空になります

エラーログ

"jQuery.Deferred exception: Cannot read
property 'msie' of undefined TypeError: Cannot read property 'msie' of undefined

at HTMLDocument.<anonymous> (https://www.rakuten-sec.co.jp/web/shared/js/app/jquery.share-button.js?20160125:5:415)
at l (https://www.rakuten-sec.co.jp/web/shared/js/jquery.js:2:29375)
at c (https://www.rakuten-sec.co.jp/web/shared/js/jquery.js:2:29677) undefined",
source: https://www.rakuten-sec.co.jp/web/shared/js/jquery.js (2)

ひょっとして、そのサイトがバグっているのかも?
それかログインなど、特別な認証が必要なのかも?
0276275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/18(月) 13:03:01.53ID:JT9EgKXH0
それか、

jquery.share-button.js
と書いてあるから、

jQuery で作った画面か何かの、ボタンをクリックするなどの、
人間による操作が必要なのかも?
0278275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/18(月) 13:39:24.37ID:JT9EgKXH0
そのサイト固有の問題かも。
それに、IE 11 はサポート切れで、多くのサイトで、まともに動かない

基本、Chrome しか動かない。
Chrome以外のブラウザは、まともに動かない
0279◆QZaw55cn4c (ワッチョイ 46e9-ieYb)
垢版 |
2021/01/18(月) 23:04:09.16ID:lUOrFzyB0
>>275,276,278
検証いただきありがとうございます
なにぶん、単に株価等をスクレイピングするためだけに年始から web スクレイピングを始めたばかりなので、難しいことはよくわかりません‥‥
やっぱり HTML5/CSS の基礎本からじっくりやるしかないでしょうか

引き続き、なにかコメントがありましたらよろしくお願いいたします‥‥

>>277
VBA で
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
objIE.navigate ur
時間待ちl
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim elementText As String
elementText = htmlDoc.querySelector("#cFx > table:nth-child(6) > tbody > tr:nth-child(1) > td.cell-02 > em").innerText
と書いていますが、それでもやっぱり VBA は関係ないのでしょうか?
0281デフォルトの名無しさん (ドコグロ MMca-2/Tp)
垢版 |
2021/01/19(火) 00:16:19.06ID:9X7jktdiM
今月からpythonを始めてサイトから文字を取ってきてエクセルにぶち込むくらいなら一週間で出来たな
その後のエクセルの処理はもちろんVBAだけどなw
0282デフォルトの名無しさん (JP 0Hcd-sTIO)
垢版 |
2021/01/19(火) 00:26:22.17ID:i//ZhdNzH
最近のホームページはブラウザごとに動作が違うから、本などを参考にするなら同じブラウザを使わないと、
本質と無関係なところではまって時間を無駄にすることになる

あと株価なんかスクレイピングしてもまったく意味ないぞ
どんだけ大量の数字を集めたところで、それで利益が出せると思ったら大間違いだからな
0283◆QZaw55cn4c (ワッチョイ 46e9-ieYb)
垢版 |
2021/01/19(火) 01:15:30.84ID:LIV1Afk50
>>282
>どんだけ大量の数字を集めたところで、それで利益が出せると思ったら大間違いだからな
そのとおりだと私も思います、ただし、さや取り(裁定取引)を米国株に適用するのなら商機あり、とみています
さや取り(裁定取引)とは:https://investars.jp/sayatori.php
0285275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/19(火) 07:21:09.11ID:JrdPscbl0
>>275
を修正

275は、ヘッドレスモードで動かしたので、エラーになったけど、
表示させて動かしたら、エラーにならなかった

でも、要素は取得できなかった

IE11 は、もうサポート切れじゃないの?
使わない方が良い

基本、Chrome を使うべき!
0286275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/19(火) 07:23:53.98ID:JrdPscbl0
勝手に頻繁にスクレイピングしたら、業務妨害で逮捕されるよ

基本、どの会社のサービスでも、
相手と契約して、API を使わないといけない
0287275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/19(火) 07:51:13.37ID:JrdPscbl0
そもそも、そのページ内に、id="cFx" が存在しない

var elems_1 = document.querySelectorAll( '#cFx' );
var elems_2 = document.querySelectorAll( '#cFx > table:nth-child(6) > tbody > tr:nth-child(1) > td.cell-02 > em' );
console.log( elems_1, elems_2 );

Chrome のF12 開発者ツールで実行しても、どちらも取得できない
0288275 (ワッチョイ 6e2c-vYIt)
垢版 |
2021/01/19(火) 08:28:20.74ID:JrdPscbl0
Chrome のF12 開発者ツールのコンソール画面を開くと、幾つかエラーが出てる

ログインしてるとか、営業時間内とか、
何かの条件が揃わないと、

そのページ内に、id="cFx" が現れないのかも
0289◆QZaw55cn4c (ワッチョイ 46e9-ieYb)
垢版 |
2021/01/19(火) 23:14:02.19ID:LIV1Afk50
>>286
IB証券との契約を検討中です
nyse と nasdaq 両市場の全上場株式を取得する必要はありますが、頻度は一社につき一日に一回だけでいいのが裁定取引のいいところだと思っています
0291デフォルトの名無しさん (オッペケ Srd1-VCNG)
垢版 |
2021/01/20(水) 19:14:01.82ID:WKaEu4ler
初心者です。
質問をさせてください。
A列のデータをソートして、境目に改ページを適用するVBAを組みました。
その後にもう1つ動作を組み込みたいのですが、可能でしょうか?
組み込みたい動作は、
改ページの境目の1つ上のC列の内容をF1セルに都度反映させる。
イメージとしては、改ページで分けた内容ごとにタイトル行の一部を変えたい、といった感じです。
例:都道府県別に改ページをし、
東京の場合はタイトル行に東京と入れ込む。
そもそも無理なのかもしれませんが、お伺いしたく。。

長文失礼しました。
ご教示いただけますよう、お願いいたします。
0293◆QZaw55cn4c (ワッチョイ 46e9-ieYb)
垢版 |
2021/01/20(水) 20:58:51.72ID:TIrvz66u0
>>290
面白い動画を紹介いただきありがとうございました。
しかし裁定取引では、売りと買いの両方ができないと実現は困難かと考えています
BTC を売りから入ることは、たしか、まだできなかったのではないかと思います
0297デフォルトの名無しさん (ワッチョイ 5fb5-yTna)
垢版 |
2021/01/22(金) 08:31:07.53ID:2tHgWLf00
上司と折りがあわずに部署異動になったのに
その職場の連中がlineでマクロが使えんくなったとか簡単に直せるかとか聞いてきて本当にうざい
自分も覚えてないの一点張りで返してるけど
Excelの数式すらまともに使えずに開発タブもチェックしてない連中に直せんわ
連絡してくんなよ
0299デフォルトの名無しさん (ワッチョイ 5f7f-rvE3)
垢版 |
2021/01/22(金) 08:41:50.70ID:hJPaHw/b0
すいません、教えてください。
Excel VBAでIEを制御しています。IEからデータをもって来てExcelに書き込んだり、
逆にExcel上のデータをIEに書き込んだり。
で、そろそろIEも駆逐されるみたいなのでEdgeとかChromeに対応させなくてはなりません。
そのままでは無理で、Web Driverとか、Selenium Basicが必要。
ここまであってますか?
で、これでEdgeとかChromeに対応した.xlsmを作ったとして、配布するとしたら、配布された側のPCにも
Web Driverとか、Selenium Basicをいれないといけないですか?
0303299 (ワッチョイ 5f7f-rvE3)
垢版 |
2021/01/22(金) 14:11:09.33ID:hJPaHw/b0
>>301
Excel と IE というどのPCにでも入っているもので使えるので、5年前くらいからやってます・・
今回、PCに何かインストールしないとできなくなるみたいなので、どうしようかと・・
0304デフォルトの名無しさん (ワッチョイ 7f8e-09qk)
垢版 |
2021/01/22(金) 14:15:47.27ID:y6abuyBz0
どうしようもないだろ
はい、次
0307299 (ワッチョイ 5f7f-rvE3)
垢版 |
2021/01/22(金) 16:52:44.80ID:hJPaHw/b0
>>305
ありがとうございます。最新のChromeベースのEdgeでは使えないことが判明しました・・

>>306
rubyというのを使う場合、実際に動かすときはxlsmファイルと別に何かプログラムを記載した
ファイルを準備し、そのファイルを実行するというイメージになるのでしょうか?
0308306 (ワッチョイ 7f2c-UxXy)
垢版 |
2021/01/22(金) 17:48:37.37ID:KA18g7jM0
例えば、ヤフーに自動ログインするなら、
ユーザー名を入力して、ボタンをクリック、
パスワードを入力して、ボタンをクリック

以下のコードを、a.rb に書いて、ruby a.rb みたいに実行する。
パソコン内に、Ruby の実行環境を構築しないといけないけど

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 10 # default timeout

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym";

element = driver.find_element(:id => "username")
element.send_key "ユーザー名"

driver.find_element(:id => "btnNext").click # ボタンをクリック

element = driver.find_element(:id => "passwd")
element.send_key "パスワード"

driver.find_element(:id => "btnSubmit").click # ボタンをクリック
0318デフォルトの名無しさん (スプッッ Sd1f-xA1r)
垢版 |
2021/01/23(土) 11:21:37.02ID:XQqwzCqOd
どの方法だってバージョンアップで使えなくなる可能性はある
CSSやJavaScriptが必要なければXHRオブジェクトが無難

完全にデファクトスタンダードと言えるブラウザが今は存在しないから、VBAでスクレイピングは鬼門になりつつある
今はまだWindowsマシンには必ずIEが入ってるから、しばらくはIEでやってくのがいいんじゃないかなあ
■ このスレッドは過去ログ倉庫に格納されています

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