Excel VBA 質問スレ Part68 at TECH
[2ch|▼Menu]
[前50を表示]
400:デフォルトの名無しさん
20/09/27 15:27:50.06 o5RjmHqkd.net
>>397
アセンブラやりたいってこと?
というのと同じ話。
InternetExplorer.Applicationじゃ無くてもみんなgetElementBy使う。
こういう便利なものを放棄するならhtmlのソースを自前テキスト処理で頑張るしかないと思うが。
普通はmsxml2.xmlhttpとかでソース取得して、それをDocumentに入れてgetElemetsByだな。

401:デフォルトの名無しさん
20/09/27 17:34:22.53 V5qiYsAI0.net
>>397
その辺は自作ライブラリでビブラートに包めばOK

402:デフォルトの名無しさん
20/09/27 18:37:04.65 ZqjiPey8M.net
>>401
> >>397
> その辺は自作ライブラリでビブラートに包めばOK
震わせてどうすんのさ。オブラートだろって釣られた

403:デフォルトの名無しさん
20/09/27 18:40:59.82 6iq7bspN0.net
>>400
マジか!
xmlがどうとか、APIがないとダメなんだと思ってたわ。

404:デフォルトの名無しさん
20/09/27 18:44:20.59 6iq7bspN0.net
ん?
それだと、逆に何のためにGUI操作(IE制御)の方法があるの?
初心者用?

405:デフォルトの名無しさん
20/09/28 07:43:08.08 VRZutR0gd.net
>>403
勘違いしてる。
別のAPI使ってるということだ。
で、別のAPIにもgetElemetByが出てくると言ってる。

406:デフォルトの名無しさん
20/09/28 13:09:33.23 LAwWa5+y0.net
RPA的制御がなにかよくわからんが
getElementしたくなかったら、API利用してxml取得しろみたいな話を言われたんじゃないか
それでAPI使えないけどgetElementしない方法ないの?と
取得できるものがhtmlなら、すなおにgetElementしとけ 以上
ちなみにxmlだろうとhtmlだろうとcsvだろうと、それは多くの場合httpで取得してるだろうがな

407:デフォルトの名無しさん
20/09/28 15:51:42.57 m7hqrCGdM.net
>>402
オブラートに包んでもおかしくないか
普通ラップするとかカプセル化するとか言うんじゃ・・・
>>404
どれもhttp通信でデータを取得できる共通点があるだけで、目的はそれぞれ違う
IEクラスはブラウザを操作する為のコンポーネントの一部
mshttpクラスはIEがスクリプトでhttp通信をするためのコンポーネントの一部
WinHttpRequestクラスはWindowsがhttp通信をするためのコンポーネントの一部
(コンポーネントっていうのはプログラムの部品として使うのが想定されている小さいプログラムのこと)
それぞれ色んなシステムで使えるようにCOMインターフェースっていう取説のようなものが実装されていて、VBAはそのおかげで間借り出来てるだけ
どれもVBAの為だけに作ったプログラムではない
ちなみにIEクラスの利点として、ブラウザ上でjsが実行されているページにアクセスすることができる点がある

408:デフォルトの名無しさん
20/09/28 16:26:17.24 gMLgNw+wd.net
それをVBAでやる意味は何?
もっと他に簡単に出来る言語でやれは?

409:デフォルトの名無しさん
20/09/28 16:37:22.01 oE/worxcM.net
結果をexcelで扱うならVBAが最適では?

410:デフォルトの名無しさん
20/09/28 18:37:13.13 jqaTJ4CpM.net
CSVで吐いてExcelで開くだけだろう

411:デフォルトの名無しさん
20/09/28 19:21:37.82 JyFvX52s0.net
あーい
あーい
ああああーい

412:デフォルトの名無しさん
20/09/28 21:25:16.14 d76PIxro0.net
質問させていただきます
ユーザーフォームのテキストボックスにフォーカスがあたってる(入力状態)でwindowsのデスクトップがアクティブもしくは他アプリケーションがアクティブを検知することはできますでしょうか?
タッチパネルなどでユーザーフォーム外をタッチしてしまった時を検出したいです。
できるのであればご教授願いたい…

413:デフォルトの名無しさん
20/09/29 00:06:40.59 bEee4vhd0.net
Windowオブジェクトにどんなプロパティがあるんだっけ

414:デフォルトの名無しさん
20/09/29 00:29:27.68 zU8eGPuC0.net
フォームのdeactivateイベント拾ってテキストボックスのフォーカス状態見て処理するとかどうかな

415:デフォルトの名無しさん
20/09/29 00:32:40.28 zjqvAHva0.net
deactivateは用途が違う

416:デフォルトの名無しさん
20/09/29 00:49:54.82 Iz7+ZlTk0.net
HTML, XML, CSV などのスクレイピングなら、
Ruby で、Nokogiri, Selenium Webdriver などが簡単
curl, wget でも、ファイルをダウンロードできるし
Rubyで、nokogiri, curl を使った例
require 'nokogiri'
html = `curl URLリンク(www.example.com)
doc = Nokogiri::HTML( html )
elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain

417:デフォルトの名無しさん
20/09/29 06:58:50.11 iE38wEdU0.net
外部プロセスの起動、待機、出力の取り込みまで実装してくださいよ

418:デフォルトの名無しさん
20/09/29 09:56:21.75 UZS7qkIf0.net
Rubyの自動運転は使いやすかったけど
早々にサポート切られたから印象悪い

419:デフォルトの名無しさん
20/09/29 11:55:53.23 NIgnBYPca.net
>>413
調べて見ましたがそれっぽいものは発見できませんでした…
>>414
>>415さんのおっしゃる通りブックやユーザーフォームのDeactivateイベントでは機能しませんでした。

420:デフォルトの名無しさん
20/09/29 23:34:39.45 Rcn+G4xKd.net
VBAでやる意味?
VBA以外だとアホな操作が必要だぞ。
1.Excelを閉じる。
2.他言語で実行。
3.csvをExcelで開く。
全くアホらしい。
運用についての考え方がまるで違う。
他言語でやる場合ってのはバッチ処理なのか?
それしか無いのか?
そういうブツ切りでデータ加工していくというなら寧ろExcelなんぞ使わん。

421:デフォルトの名無しさん
20/09/30 00:00:14.29 BPaZHsLq0.net
>>407
jsしたかったらIEするしかないのね。
今時のHPほぼ全滅じゃん。

422:デフォルトの名無しさん
20/09/30 00:36:25.50 5bnpK3a00.net
>>419
WINAPIでポーリング
URLリンク(i.imgur.com)

423:デフォルトの名無しさん
20/09/30 06:50:20.08 RkFeWfqX0.net
イルカのカイル

424:デフォルトの名無しさん
20/09/30 16:18:36.41 7F4wikGt0.net
>>419
そのマルチタスク、マルチウィンドウを否定したい理由は何なの?

425:デフォルトの名無しさん
20/09/30 16:57:41.88 QOxpj5qw0.net
>>424
フォームのテキストボックスに機器の計測値が入るようになっており
テキストボックスにフォーカスがあたってない状態で計測値が送られてくると値が取れないのでおじーちゃんたちにも気づくようにフォーカスが離れた時に警告ユーザーフォームを出したいのです。他アプリケーションなどを立ち上げる事も想定されます。
>>422
情報ありがとうございます
画像の通りやってみましたがイルカさんは働いてくれませんでした…

426:デフォルトの名無しさん
20/09/30 20:43:21.94 2p9V72Q+M.net
>>425
アホとしか言えんわ
そもそも設計が間違えてる

427:デフォルトの名無しさん
20/09/30 21:46:10.98 d9KXZKY60.net
>>425
値を入れる部分を直せよ

428:デフォルトの名無しさん
20/09/30 22:51:09.04 wQcBlxXT0.net
RPAとか使ったらこんなおぞましいものができたりするのかな?
でも普通はExcelぐらいサポートしてるよな。。。

429:デフォルトの名無しさん
20/09/30 23:05:33.83 FnwBo45S0.net
むしろRPA向きの案件だと思う

430:デフォルトの名無しさん
20/10/01 01:07:42.33 lGabW6tFM.net
>>425
> フォームのテキストボックスに機器の計測値が入るようになっており
wの前にデータ取得しとるわなw
>テキストボックスにフォーカスがあたってない状態で計測値が送られてくると値が取れない
wそんな業務データを取りこぼすとか意味不明w
>のでおじーちゃんたちにも気づくように
wなんだ?老害か?w

431:デフォルトの名無しさん
20/10/01 01:18:01.34 eVzeZjSn0.net
意味がわからないなら黙ってればいいじゃない

432:デフォルトの名無しさん
20/10/01 07:38:17.90 v/kjpRq5M.net
業務用ツール作るのってホント大変よな……
使いたい人向けに配信するんじゃなくて、使わされる人に使ってもらうツールだからどんなに優しいUIにしても平気で想像を上回るイレギュラーな操作して動かなくなった!ポンコツめ!みたいなクレーム出してくる人もいるし
単純に新しい物を使いたくないからってワザとメチャクチャな操作したりもしてるんだろうけど
ツールを要求してくる上の人達は現状の環境で対応出来るようにしたいからExcelのマクロでどうにかしてよ!とか言ってくるし、VBAはなんでも出来る魔法のツールだと思ってるし
長々と愚痴ってスマンな
スレチだよな

433:デフォルトの名無しさん
20/10/01 07:49:06.10 H0TKMoBwd.net
Windowsの標準のユーザーインターフェイスを意識しないと、使いやすいと思ったものが結局つかいにくくなる。
フォーカスがあたってなくても計測値が取れるように作るという発想が無いのが厳しい。
そんなこと出来ないなら根本から違うユーザーインターフェイスを採用すべき。
こういう処理でユーザーに何かさせる必要は無い筈。

434:デフォルトの名無しさん
20/10/01 10:04:49.32 +ML6JMtp0.net
初心者がツール作るように言われたら大変なんだろうな、俺は大変だと思ったことないが

435:デフォルトの名無しさん
20/10/01 10:34:23.83 6DJ6J+GDM.net
タブレットでバーコードリーダーのキーボード入力モードでも使ってるんだろうなと想像
COMで操作できるライブラぐらい付いているだろうからそれ使えば解決

436:デフォルトの名無しさん
20/10/01 16:54:34.45 Ld5Ou2iR0.net
>>435
まさにおっしゃる通りで作業進捗をバーコードで管理するものを作りました。
次は工程内のチェックシートと計測値などのトレーサビリティです禿げそう
とりあえず計測器具も試用で借りてる段階なのでメーカーにライブラリの事聞いてみます…

437:デフォルトの名無しさん
20/10/01 17:12:49.41 W6bAQtLIM.net
>>431
知ってた

438:デフォルトの名無しさん
20/10/01 18:58:16.32 9Yax9dsIa.net
>>434
かっけぇ

439:デフォルトの名無しさん
20/10/01 21:36:53.69 dM4yb7Ap0.net
罫線で囲われてたり、色塗りされたりするセルをマウスでドラッグ移動した時移動した場所は何もなくるなるのを罫線のみを残す方法ってありませんか?
簡単に言うと罫線で作った表の形式を保持したい。

440:デフォルトの名無しさん
20/10/01 21:50:29.37 5ESnmk3DM.net
>>439
テンプレートを隠しシートに保存しておいて、
ボタン押下で書式をコピペしてくるってどう?

441:デフォルトの名無しさん
20/10/01 22:00:05.10 gLHdGUpR0.net
>>439
切り貼りじゃなくてコピーアンドペーストした後に元のところの数式と値をクリア(右クリック+N)すればよいのでは

442:デフォルトの名無しさん
20/10/01 23:26:28.37 ywfP0KwV0.net
changeイベントで常に罫線引くことしか思いつかん

443:デフォルトの名無しさん
20/10/01 23:48:07.63 2OGRwJxy0.net
移動できないようにする

444:デフォルトの名無しさん
20/10/02 01:42:30.77 MWdBgx4Q0.net
セルをマウスでドラッグって何だよ?
エクセルで将棋でもやるの?

445:デフォルトの名無しさん
20/10/02 01:43:49.39 ChxT/cO/0.net
>>425
それExcel VBAでやるものではない。
自分のやりたいようにやりたければ、Windows SDKでの開発をしてください。

446:デフォルトの名無しさん
20/10/02 01:49:29.59 ChxT/cO/0.net
>>439
そもそも手順というものを考えた方がいい。
移動する前の情報を移動先には持ってくるが、移動元にはその情報を適用しないのはなぜ?

447:デフォルトの名無しさん
20/10/02 10:09:18.16 A7BNHAQE0.net
指定したフォルダ内の全てのCVSファイルを配列に追記していき対のですが、コードを教えてください
配列の0列目(1次元目)にはそれぞれのCSVファイルのファイル名をいれたいです。
Sub Sptyou()
Dim FolderPath As String, buf As String, TargetDate As String
'■フォルダを指定する
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then
MsgBox "キャンセルされました。"
Exit Sub
End If
FolderPath = .SelectedItems(1)
End With
'■指定されたフォルダ内の全てのCSVファイルを開いて、そのファイルA列からGH列を配列に入れていく
ReDim BiforeArraybar(1, 190) As Variant

448:447
20/10/02 10:09:56.74 A7BNHAQE0.net
つづき
buf = Dir(FolderPath & "*.csv")
Do While buf <> ""
Open buf For Input As #1 'インプットモードでファイルを開く
Line Input #1, TargetDate
Do Until EOF(1) 'ファイルの終点まで
Line Input #1, Tardt '開いたファイルを上から順に読み込んでいき、変数TargetDateに代入していく
If Split(TargetDate, ",")(1) = "" Then Exit Do
'配列に追記する
ReDim Preserve BiforeArray(Ubound(BiforeArray) + 1 To ??, 1 To 190) = Sprit(TargetDate,",")
Loop
Close #1
buf = Dir()
Loop
End Sub

449:デフォルトの名無しさん
20/10/02 10:42:45.10 cHoSzh9XM.net
ReDim Preserveで操作可能なのは最右端の次元だけだから2次元配列で1次元目に使いたいなら一旦反転させた状態で操作して出力時にWorksheetfunction.transpose使って吐き出す必要があるぞ
いまいち最終目的が分からなかったから取り合えず読んでて気になった所だけ

450:デフォルトの名無しさん
20/10/02 10:56:02.65 ooD45Zz30.net
Linux のcat なら、複数のファイルを連結できるけど

451:デフォルトの名無しさん
20/10/02 12:25:22.61 XdHW2/g2M.net
win dosならcopyで連結できるけど

452:デフォルトの名無しさん
20/10/02 12:29:54.55 a296oIK60.net
>>448
内側のLoop内で Tardt ってのが気になった

453:447
20/10/02 13:32:21.66 A7BNHAQE0.net
>>449
右端にファイル名を入れるにはどうしたらいいですか?
それと、配列のUpperをどう設定したらいいですか?

454:デフォルトの名無しさん
20/10/02 15:56:01.43 7/1+1goB0.net
また馬鹿な質問者か。それともいつもの厚かましい馬鹿か?

455:デフォルトの名無しさん
20/10/02 16:13:26.37 XdHW2/g2M.net
右端の次元と右端の列では話の次元が違うけどわざとやってんのかなー?
excelなんだからとりあえずシートに格納すればいいと思うんだけどなー
配列に1行づつ追加するよりはやいんじゃね?
VBは動的配列無いんだからパフォーマンス出すには頭を使わにゃいかんよ
行数をキーにしたDictionaryもいいかもね


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1326日前に更新/123 KB
担当:undef