Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
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/
※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured >>648
オフィスが許可されてるならvbaも許可されてるんじゃないの?
未許可プログラム禁止の理由はライセンスとかセキュリティとかが主な理由だと思うけど
ほかに何かある? 俺の知ってる会社でネット完全遮断のとこあるよ
とあるジャンルで世界トップのメーカーだからセキュリティがめっちゃ厳しい
建物に入る前に所持品チェックがあるしスマホやケータイは持ち込み禁止
ネット上のデータや情報が欲しい時は専門の部署に内容やURLを連絡して結果を知らせてもらうシステム
すごく効率が悪いと思うけど、それぐらいしないと機密が守れないそうだ >>649
VBAはオフィス製品を拡張するのが本来の役割だから、その範囲なら認可されていると言える。
表計算ソフトで(標準的に備わっていない)データベース処理させたり、データベースソフトで波形分析させたりといった、
そういう用途は厳密にはアウトなはずなんだけどVBA使う人間のほとんどがそういう本来用途から逸脱した使い方をするので、
この辺りの線引きが他のプログラムと曖昧になるから混乱するのではないだろうか。 >>651
VBAを使う人の殆どがって
何か調査結果とかあるの? >>652
本来用途的な使い方をする場合はVBA利用する必要が無いくらいには機能が揃ってるっていうのと、
このスレで他のプログラムが使えない事に対する明確な回答が出ない辺りからの推測だけど。
だいたいこのスレでも「お前が詳しいのはVBAであってエクセルではない」という戒めの言葉がたまに出るくらいだし。 このスレでもIE操作とか何故にVBA?ってのがあるしね 本来用途?
随分おかしなこというんだな。
何をやろうがそれが本来用途だろ。
アウトかどうかなんて結局は責任の問題だ。
セル操作でさえ会社に損害を与えることができるし、嫌だったらVBAを使うの辞めろ。
フリーソフトが問題なのは責任を問えないからだ。
VBAで問題が起きた時に、作った奴や部署が責任を取ることになるのはどんなVBAでも同じこと。
だから良く知りもせずに結果だけをコピペする奴は迷惑なんだ。
仕組みを理解すれば何をやっててもセルの操作と同じだ。
部署として作った奴を信用するかしないかの問題。
或いは部署として危険なコードか安全なコードかと判断できるかどうか。 >>654
おれもVBAでIE操作してクロールとかやってるけど、
趣味程度にプログラムをやってるだけなのでプログラム環境がVBAだけなんだよね
あと、取ってきたデータをそのままExcelに入れ、フィルタやソートを使ってデータ編集できる点も便利だよ >>655
そうだよそうだよその通りだよ
フリーソフトやオプソは利用者責任として割り切る(/割り切らせる)しかない ExelVBAで、テキストファイルの書き出しをスレッドで行いたいですが、どうにかすれば
可能なものでしょうか?
Yes/Noだけでもいいので教えてください。 >>654
ブラウザ操作だとどの言語が適してるんかね ブラウザからデータを取ってきた後の処理がエクセルだと簡単だからVBA使うんじゃね
またはその逆 ブラウザからデータ抜き出すには何が一番適してるん? >>667
適してるってどんな基準で比較するのかによるんじゃね
どれもDOM操作するとかだろうから大して変わらない
自分の得意な言語でやればいいと思う >>665
ネット上に落ちてるデータの集計とか?
テーブルで組んであるようなのならエクセルに落とすのも楽だし >>665
htnmという概念を知らないのかもしれない >>667
インターネットエクスプローラーってやつ >>661
スレッドを扱うことはできる。
不安定ですぐ落ちるだけ。
セルを触った途端に落ちると記憶している。
気をつければそこそこ安定してできることもあると思ってる。
Msgboxのボタンを押すようなことなら落ちないと思うけどプロセスでも同じことはできるからメリットを感じない。
>>667
InternetExplorer.Applicationは遅いと思う。
MSXML2.XMLhttpとかhtmlfileの方が速い。
ただし情報取得以外にクリックするとか操作するならInternetExplorer.Applicationを使うことになるかな。
Seleniumとか外部のオブジェクトは使わないんだよね。 >>672
selenium使うならvbaは選択しないと思う
データ処理し易いからエクセル→VBA
クリックしたり操作しながら動的データを取るからブラウザ操作
python sqliteとか使う手もあるけど
実現したい事はどの手段でも実現できる ちょっと教えてください。ワークブックに含まれているマクロを起動時に実行する時
ThisWorkbookのWorkbook_Open()
あるいは標準モジュールでもauto_open
のどちらでも出来るような気がするんですけど、全く同じと考えていい?それとも何か違いがあるの? >>675
なるほど〜。Workbook_Openに統一しておきます。
リンク先教えてくれてthxです ユーザーフォームに線を書く場合ってラベルを弄くる他にないですか?折れ線を書きたいのですが。 図の挿入は?
グラフなら以下の方法もあるみたい
http://www.max.hi-ho.ne.jp/happy/YNxv9d92.html
APIとかで頑張れば折れ線ぐらいなら掛けるけど、めんどくさそう 測量系のサイトで測量した数値をExcelで図化するような
ものがあるはず そんなキーワードでググってみ
ものすんごいことしてるから CADかよ みたいな >>678
デバイスコンテキスト弄る経験有るならめんどくさいけど色々できる。
LineToとか。
Win32APIに慣れてない人にはお勧めはしない。 書く線はこの程度のようなもので、表示して数値変更出来て、数値の合計算出するだけなんだけど
https://i.imgur.com/NxhLNnG.jpg >>684
同意、フォームは使わない方が良いと思う
「この程度」と言ってるけどかなりめんどくさい作業 >>686
固定なら画像はって上にラベルでええやん APIでフォームに線を書くまで行けました。
フォームに形状入力してFINDで検索して該当した行を右に空になるまで線を書き続けるコードにしました。
最初の一桁の数字は方向。4が左、6
が右という風に指示してます。
開始原点指定して、
線をLINETOで書いてて書いたらその近くにテキストボックスをADDで追加したいんですが、LINETOで指定した原点位置とテキストボックスのトップ、レフトで指定した位置がちょっとズレるのはなんかあるんですか?
https://i.imgur.com/FVhURv8.jpg 秒単位で記録されてる1日分で数万件の動作ログから、時系列かつ動作種類別の棒グラフ的な物を作りたいんだけど、、、
仮に横棒にするとして一時間単位に別ても3600セルも必要になるわけだけど、こういうのってどうするのが良いの? 横棒グラフ的 じゃなくて横棒グラフそのものを作りゃいい
何故セルをグラフとして使うのかの理由が判らんと何ともいえないが
毎秒すべてのデータが必ず必要とも思えんが、間隔変えれば概略にできるし
特異点を知りたい とかなら数値を基準に求めるものだろうし、その部分の
前後をピックアップして表示するようにして なるべく判りやすいものに
するのがグラフ化の目的なんでは データ吐き出して普通にグラフ作ればいいんじゃないの
何に悩んでるのかよくわからん >>688
試して無いから何とも言えんが、クライアント領域関連か、座標系の違いかな。
GetClientRectとかTwipsPerPixelでググってみる。違ったらごめん。
>>689
説明が分かりにくい。
3600のセルにデータが取れてるならそれを指定すれば良いということになる。
多分、3600セルという多量のデータだから適当な所で折り返してて1時間の00:00秒から59:59秒の流れを持ったまとまりとして認識させることが出来ないとかかな。
良く分からんが各秒の値でプロットする訳じゃ無いわけだし、平均とか取るもんじゃないの? ビットコインの公開APIから値段を取る方法ってありませんかね
パワークエリ使ってたんですがプロトコル障害で使えなくなってしまい.... フォルダ内にあるファイルのすべてを対象に、
ファイル名の最後を「_ou.mp4」に変更するマクロを作ってください。お願いします。
例)〇〇.mp4 → 〇〇_ou.mp4 【追加】
ただし、すでに「_ou.mp4」に変更されたファイルは、何もしないこと。
悪い例) 〇〇_ou.mp4 → 〇〇_ou_ou.mp4 こうならないように。 >>697
公開APIのプロトコル障害なら公開APIでは取れないって事じゃないの? ls | Where-Object { $_ -like "*.mp4" -and $_ -notlike "*_ou.mp4" } | Rename-Item -WhatIf -NewName { $_ -replace '\.mp4$','_ou.mp4' }
PowerShell で書いたので、そのフォルダへ移動してから実行して。
-WhatIf が付いているので、本当には実行せずに、結果だけを見れる。
本当に実行する際は、-WhatIf を削除して実行して
-like は一致するもので、-notlike は一致しないもの。
正規表現の \.mp4$ で、. に \ を付けているのは、
. の特殊な意味をなくして、普通の文字として扱うため(エスケープ)
x.mp4 → x_ou.mp4
ただし、x.mp4, x_ou.mp4 が、同じフォルダ内にある場合は、
変換できずにエラーになるかも >>704
正規表現使えるんだからWhere-Objectいらんでしょ >>705
他の言語でもっと短く書けるぜ
ってか? >>699
filesystemobjectのインスタンス取得
フォルダ取得
フォルダ内のファイルを精査
mp4のみ抽出
拡張子取得
拡張子を除いて指定の文字列を追加した文字列を取得
ファイル名変更
これでわかれ dir関数とNameステートメントでループが一番簡単じゃね?
サブフォルダ考えなくて良いんだしさ。 explorerのアドレス欄にcmd入れて
ren *.mp4 *_ou.mp4
とかじゃなかったっけ 制約があったか じゃ3行で
ren *_ou.mp4 *._oump4
ren *.mp4 *_ou.mp4
ren *._oump4 *_ou.mp4 質問失礼します
あるフォルダ内に数千件のファイルが格納されていて、そのフォルダに新規ファイルが入ってきたときにそのファイルを抽出(ファイル名を取得)したいのですが一番高速に処理を行うにはどうしたらいいでしょうか >>712
「新規ファイルが入ってきた時」という条件がハッキリしないけど、
いずれにせよ最終的に全て取得して比較する方法しかないと思う。 >>712
高速がどうとかよりまず新規にファイルが入ってきたことをどう検知するつもりなんだ >>716
えっ、あるの?
IntersectやUnion使って自作してたわ >>712
基準となる時点のファイル名一覧をシートに記録しておく
比較時点のファイル名一覧を別のシートに記録する
vlookupとかで同じファイル名があるか調べる >>712
業務で行き詰ったらまず上司に相談したら? >>712
フォルダをモニタリングするツールが色々とあるからそれ使うといいよ
たいていファイルシステムイベントで処理してるから
自分で比較するのに比べれば数桁高速だと思う >>720
それよく分からないから教えて。
例えば
Set minuend = Union(Range("C3", "D5"), Range("D4", "E6"))
Set subtrahend = Range("A2", "A4").EntireRow
Set expected = Union(Range("C5", "D5"), Range("D5", "E6"))
の場合に
minuend - subtrahend = expected になるようにしたいんだけど >>726
またまたソフトのインストールが制限されて〜なんて言い出す悪寒 勝手にインストールできないなら許可貰えば済む話なのにな
業務上必要なら許可降りるだろ 「前の担当者は手作業でこなしていました。あなたにもできるでしょ?電卓は許可します」 それ作って給料もらっているんだったら自力でやれば? それ作って給料もらってる人がこの板にいるわけない。
せいぜいマ板がいいところ。 >>712
ロバストコピーでフォルダのコピー
その際に何を新たにコピーしたのかをログに書き出すオプションを設定しておく
そのログを読みこんで後はお好きに処理
勝手に上書きされたり、勝手に消されてもバックアップ取れてて一石二鳥 >>733
要件次第だけどrobocopyでも十分かもね
フォルダ監視オプション使えば細かいタイミングもコントロールできるし vbaでやるよりはタスク組んでバッチ的に処理する案件の予感 日記
今まで動いてたマクロがエラーで止まった
テキストファイルの内容を調べてリネームするだけの簡単な物なのに、調べたらファイル名にユニコードが入ってた
10年ぐらい前に作った物なので、今さら対応するのめんどくさいなあ。これも時代か
どうせ台風でヒマだからちょっとやってみるか フォルダに複数のシートが入っていて、それぞれ○○.xls(○は名字)のファイルがあって、それの○○(○は名字)のシートのみを繰り返し検索、抽出を繰り返すにはどうしたらいいですか?
指定シートのみ繰り返し検索の仕方をご教授お願いします。
file = Dir(path & "*.xls")
Do While file <> ""
Set book = Workbooks.Open(path & file)
For Each sheet In book.Worksheets
Set f = sheet.Cells.Find(kwd,LookIn:=xlValues, lookat:=xlWhole)
If Not f Is Nothing Then
firstAddress = f.Address
rowtar=f.row
列の転記開始。 自分で勝手に名前を定義すんのやめれ。
それはシートじゃなくブックだろ
file = Dir(path & "○○(○*.xls")
で○○(○が先頭にあるファイル(この場合はブック)が取り出せるだろ?
ワイルドカードの意味判ってる? 確かにブックのことをシートと呼ぶ人は結構いるイメージ >>741
シート名が判っているなら
for each で探さなくても
set ws = Thisworkbook.worksheets(シート名)
でいい >>712
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200602/06020015.txt
他にもReadDirectoryChangesWを使った外人のサンプルは動いた。
けど、スレッド作ってるから危険なコードだね。
分かってる人が使う分には良いのかも知れないけどスレッド作らない方法を模索した方が良いんじゃないかなあ。 >>712
dirの結果をリダイレクトしてファイルに書き出し
またdirして前回の結果とfcする
繰り返し そのフォルダを、watch・見張る事は、できないのか?
そのフォルダに変化が起きたら、知らせる機能 >>747
個人のPCならフリーソフトでも探した方が早いと思う ■ このスレッドは過去ログ倉庫に格納されています