Excel VBA 質問スレ Part69

■ このスレッドは過去ログ倉庫に格納されています
2020/12/13(日) 00:22:23.67ID:Fd224klc0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part68
https://mevius.5ch.net/test/read.cgi/tech/1598756127/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/02/22(月) 13:18:52.42ID:kOquHQc20
そうっすか
2021/02/22(月) 17:32:51.40ID:/Yenw0XZd
>>752
正にそれ結構大変だった。
2021/02/24(水) 00:40:47.03ID:HDXsWzJB0
VB長けてる人ってExcelの機能関数に疎い人多いね
田中に聞けば?
2021/02/24(水) 01:26:36.59ID:QrJrBlgW0
Worksheetfunction使うのでそれはない。
2021/02/24(水) 02:17:27.39ID:CQQJwOCp0
2019欲しいけど
いまクソ高いんだよな
昔は10000ぐらいで買えたよな?
2021/02/24(水) 02:42:57.68ID:+tup+0KC0
今でも1000円で…
2021/02/24(水) 02:59:15.91ID:CQQJwOCp0
割れは怖くて使えんわ
760デフォルトの名無しさん (ワッチョイ 33fd-Nz9x)
垢版 |
2021/02/24(水) 14:09:58.51ID:HLiwO+Yd0
64bitで未定プログレスバー使うにはどうすればいいの?
2021/02/24(水) 19:44:17.34ID:CpCHMr0L0
オレの2019はアマゾンで900円くらいだ
762デフォルトの名無しさん (アウアウウー Sae7-hpcv)
垢版 |
2021/02/25(木) 21:11:18.01ID:u/u+FiSza
原本となるシートでマクロが動いて欲しくないからマクロを搭載した別ブックのシートにコピーしようとしてるのだけど、activeXコントロールのコピーで詰んでいる。
selectAllすると位置がずれる、ネットで見かけるfor each x in sheets.Shapes方式だと「rangeクラスのTopプロパティを設定できません」とか出る(原因分からないうえ、同じものが複数コピーされてたりする)
Clickメソッド使ってるからシート自体に記述しなくちゃならない状態(原本にマクロを搭載できない理由でもある)

原本をコピーした新しいシートにマクロを転写する方法か、activeXコントロールをうまくコピーする方法などをどなたか分かれば教えてください。
よろしくお願いします
2021/02/25(木) 21:28:47.82ID:mAZPOqOP0
俺はファイルコピーで解決しようとするから知らんわ
2021/02/25(木) 22:14:57.96ID:zfgrXATG0
シートコピーしたら
2021/02/25(木) 23:11:51.37ID:h5Yd8P0i0
デザインモードじゃないから梃子でも動かないって意味か?
2021/02/26(金) 03:13:02.34ID:RTjFElvVH
>>762
ブックを別名で保存してからそっちを開いたら?
コントロールの状態や中身まで含めた完全なコピーが簡単にできるよ
2021/02/26(金) 14:42:35.05ID:uwtwTRSf0
>>760
わいはコントロールやめてユーザーフォームで自作した
2021/02/26(金) 18:00:57.54ID:3R2zb4XV0
>>762
原本はそのままで動くように作っといて、原本をコピーするマクロは原本とは別ファイルにするのが良いんじゃね
2021/02/27(土) 04:24:42.64ID:RGn50kCua
>>764
新しくシートをコピーしたらシートにプログラムが何も書かれてない状態になります(原本に記述されていないから)
シートにシートをコピーしたらコントロールが消えてしまいます(コントロールのコピーに躓いている)
>>766>>768
フールプルーフの観点で原本にプログラムを直接書きづらいんですよね。このツールを使うのも原本を更新するのも私じゃないので…
>>767
フォームなら別のブックにコピーできるし使いたいんですが要件的に使えないんですよね
最初はフォームで動作するものを作ったんですが、いちいちウィンドウが開くのめんどくさいと一蹴されました

あくまでシートにマクロをコピーする方法か、activeXコントロールの綺麗なコピーの方法を探しています。
2021/02/27(土) 04:28:43.21ID:qDfn4Zqt0
>>769
みつかるといいね
2021/02/27(土) 08:38:37.65ID:+dnfLZll0
>>769
出来るけど、セキュリティ的に大問題アリ。
マクロウイルスのやりたいことと一緒だからな。
2021/02/27(土) 10:42:13.72ID:MpvSTRAea
ウイルスの作り方探してるのかな
2021/02/27(土) 16:48:22.46ID:9QiTc1mX0
質問です。
VBAでウィンドウの幅によってレイアウトが変化するページを取り込む方法で詰まっています。

例えば、下記のURLのテーブル「5」をExcelに取り込みたいとします。
しかし、このページはウィンドウの幅を狭くすると「自動レイアウト」になります。
https://www.nankankeiba.com/uma_info/2014104006.do

https://i.imgur.com/EE2hZfE.png

本当はPC固定レイアウトで取り込みたいのですが、下のVBAだと自動レイアウトの方で取り込まれてしまうのですが
どうしたらよろしいでしょうか。
VBA
https://i.imgur.com/tQsJ8fB.png

PC固定のレイアウトで取り込みたいけど、取り込むとこうなる
https://i.imgur.com/106irI4.png
2021/02/27(土) 16:50:21.04ID:9QiTc1mX0
>>773
列や行の関係でPC固定で取り込めるようにしたいのですが、クエリで何か設定などあるのでしょうか
2021/02/27(土) 19:51:14.14ID:qDfn4Zqt0
>>774
よくわからんが内容は正しく取得できているんだから、表示用のシート作って
そっちに2行を1行にまとめて表示させるマクロ書けばいいんじゃね
2021/02/27(土) 20:13:53.31ID:9QiTc1mX0
>>775
実は最近サイトがスマホ用に「自動レイアウト」に対応してリニューアルしたので
もともと作ってあった表示用シートが連れてしまうために「PC固定レイアウト」にしたいのです…
2021/02/27(土) 20:25:57.30ID:Ydjbk0QN0
URLの後ろに何か引数入れればいいんだろうけど、javascript読めんからわからん。
Web系のスレで聞くか、ここでやるんだったらDOM解析してgetElementsByTagNameとかで取得するしかない。
2021/02/27(土) 20:28:08.24ID:9QiTc1mX0
>>777
やっぱりweb系のプログラミング知識がないと無理っぽいですかね
自分はさっぱりなので、そっち系でも聞いてみます。
2021/02/27(土) 20:46:04.22ID:Ydjbk0QN0
ってそれExcel2013?
2019だとどちらも見えていて、
Table4が自動でTable5が固定になっている。

もし2019が使えるなら、QueryTables.Addじゃなくて、
Queries.Addでやってみるといい。
2021/02/27(土) 21:38:16.92ID:9QiTc1mX0
>>779
わあああ!できました!!!
自分のだと、テーブル5だと自動で、テーブル6が固定でした!!
固定と自動でテーブルずらすだけで良かったんですね。
本当に助かりました;;感謝!
2021/02/27(土) 21:44:40.46ID:9QiTc1mX0
なるほどー
URLの違いじゃなくてテーブル数が増えていてテーブルの変更でレイアウトを別々で読み取っていたんですね
今後も参考になる知識でめっちゃタメになりました!
いやーID:Ydjbk0QN0さんの着眼点のおかげで助かりました。感動です
2021/02/27(土) 23:59:01.77ID:W4zZ+WShM
いいってことよ(≧∇≦)b
2021/02/28(日) 00:38:35.67ID:1YMxSz2W0
XMLを取得したあと、要素を取得するためにgetElementByIdを使用する方法は無いでしょうか?
XMLでは仕様上IDの規定が無いのでこのメソッドは無いようですが、
対象にしているデータはIDが重複していない(タグ名は重複)ことが分かっています
2021/02/28(日) 08:33:47.20ID:0O+t6o860
やったことないけどXMLをブラウザーで開いて取得とか
2021/02/28(日) 13:49:51.41ID:0oELj/fSM
>>783
単なる属性値だからxpathで属性検索すればいいんじゃね?
2021/02/28(日) 17:16:05.41ID:1YMxSz2W0
>>785
ごめんなさいこれで出来ました
コーディングミスしてただけだったようで…
2021/02/28(日) 23:20:44.51ID:Kw7HIYRo0
テーブルを使った列転記について質問です。
オートフィルターを使って、
特定条件に合致する列のみを別シートに転記するvbaを作成しています。
検索条件が1件でもヒットすれば、うまく動くのですが、
検索条件の結果が0件の場合、なぜかテーブル内にある全ての列がコピーされてしまいます。
解決方法をご教示いただけたら幸いです。

With Range("A3").ListObject
   .Range.AutoFilter 1, "佐藤"
.Range.AutoFilter 2,"2020"
.Range.AutoFilter 3, "土地"

.ListColumns(4).DataBodyRange.Copy Sheets(2).Range("B12")
.ListColumns(5).DataBodyRange.Copy Sheets(2).Range("D12")
.ListColumns(6).DataBodyRange.Copy Sheets(2).Range("C12")
End With
2021/02/28(日) 23:38:01.73ID:aFXd9lq10
0の時コピペしない
2021/03/01(月) 03:56:15.13ID:eH/icf8Z0
Countifsで、1件以上の時 と
条件分岐させるのが読み返してわかりやすくなるんでね
2021/03/01(月) 16:05:10.88ID:SmQDGBhxa
前回の表示が残っているならメッセージボックスとか出すといいかも
791デフォルトの名無しさん (シャチーク 0C76-CIDx)
垢版 |
2021/03/02(火) 13:09:41.26ID:hWjLfumtC
(1)A1〜A100セルにそれぞれ0001.txt〜0100.txtという文字列が格納されている
(2)ファイルサーバ上(\\share\txt)に(1)の名前と対応する実際のテキストファイルが格納されている

→この場合、B1〜B100セルの中に(1)と対応する(2)のテキストファイルの中身を自動で入力させたいのですが、どのようにすれば可能でしょうか。。
792デフォルトの名無しさん (ワッチョイ 0b8e-v+iG)
垢版 |
2021/03/02(火) 13:28:23.53ID:xn7W4wyt0
丸投げか?
まずは自分で作ってみろよ
2021/03/02(火) 13:38:46.86ID:Myd7KGhQ0
先生が添削してくれるみたいです
2021/03/02(火) 15:10:40.09ID:S4zyTxBwM
A1セルに書かれたファイル名を読み取る
そのファイル名を開く
B1セルから書き込む

を繰り返せばいいと思います
2021/03/02(火) 17:47:07.08ID:stzBjdlCH
いつもの人
2021/03/02(火) 19:42:52.19ID:h1fr2K930
>>791
どうでもいいがB1〜B7へは入力じゃなくて出力って言った方がいい
2021/03/02(火) 23:19:45.83ID:yDNF8xvg0
>>791
マクロの自動記録
2021/03/03(水) 02:30:35.83ID:hWQCqBl50
>>720ですが、解決というか悪化したので一から作り直すことにしました。

原因と思われていたフォームモジュールを解放しても常時コンパイルエラーが発生するようになりました。
思い切って順に全て解放しながらコンパイルしてみたところシートを含めた全てのモジュールを
削除して新規シート一枚の状態でも発生する始末です。

>>733
試してみたところ、使用できない文字を使った時と同じ「不正なオブジェクト名」だと怒られます。
(もし重複なら「既に〜使われています」)
コンパイルエラーの原因にある「ユーザー定義型」というのはフォームのモジュール名の事だったのかも・・・
ちなみに原因らしいフォームのモジュール名を変えても同様のコンパイルエラーは発生し、
その新しいモジュール名でも同じ症状が出るようになります。

>>732
>>何をもってライブラリと言ってるのかは分からん

すみません。参照設定にあるCOMコンポーネントの事です。
APIはSleepしか読み込んでおらず、
コントロールもリストボックスとコマンドボタンとオプションボタンのみです。

元の環境で実行も出来ませんでしたが、
テストで色んなモジュールの解放してインポート、モジュール名変更して戻すを繰り返していると、
プロジェクトのコンパイルは同じエラーがでるが、(環境問わず)実行は可能という状態になりました。
コンパイルのテストしかしていなかったのでどのタイミングで実行可能になったのかは分かりませんが、
引き続き調べてみます。
2021/03/03(水) 02:46:34.41ID:hWQCqBl50
>>733
レスに追加です
名前の変更では「不正なオブジェクト名」と出ますが、その名前でのインポートは成功します。
インポート出来れば自由にフォーム名を変更したり戻したりできました。

>>735
見てみましたが、特に変わりはないようです。

>>738
フォームモジュール以外を全部移したところコンパイルが通りました。
同じフォームを作って再発すると怖いので、
フォームに有ったコントロールはシート上に再現して、とりあえずこれで運用してみることにしました。
2021/03/03(水) 21:19:07.61ID:CdcHt2GZ0
シートの中身を初期化しようと、範囲選択してClearcontentしたら処理が滅茶苦茶重くて
他のどの処理よりも一番重いまであります
セルの中身をクリアして真っ新にしたいんですが、軽くなる方法とか削除するのに他のいい方法は何かありますか?
2021/03/03(水) 22:01:26.45ID:x1QDDRPj0
画面更新切ってないとか
2021/03/03(水) 22:53:36.00ID:cY/9Er0+0
場合によってはシートごと削除&同じ名前のシート作成orテンプレで用意していたシートをコピー
803デフォルトの名無しさん (スプッッ Sd02-rjlL)
垢版 |
2021/03/03(水) 23:58:49.06ID:zTCiutcbd
>>800
Clearcontentsじゃなくて単に「削除」に時間が掛かってるだけ説。
どうしようもないExcelのバグ、俺もこの前株シミュレーター作ってて直面した。
たかだが3万行×1列消すのに10分掛かる糞仕様。
どういうわけかD列とE列に入っているがD列を消してからだとE列が、E列を消してからだとD列がそうなる。
2007と2013入れてたがどちらでも同じ結果。スプレッドシートでならサクっと消せた。
2021/03/04(木) 00:37:39.40ID:0V1y42950
質問させてください
業務用PCのためDsoFramerのインストールを容易には出来ない環境で、ユーザーフォームにワークシートを表示するシステムを作成するのは厳しいでしょうか
2021/03/04(木) 02:10:45.74ID:EcELbNCH0
レスありがとうございます
画面更新は勿論切ってます
ただ初期化したいだけなのにアホみたいに時間が掛かるので、同じ使用のシートを作る処理にする事も検討します
2021/03/04(木) 06:47:21.46ID:yRtnuXOv0
変数に入れてから消すとか、同じ選択範囲の配列(空白)ぶっこんでみてもだめかな
2021/03/04(木) 10:44:48.81ID:B7/1q6yvH
一気に何万行も消さずに100行ずつとか小分けしたら軽くなったりしないのかな
2021/03/04(木) 10:49:05.92ID:1zCrSMV60
ClearContentsで重かったことなんてないなあ。
めんどくさくてVBAじゃなくマクロで作って選択範囲小分けのまま放置してるからかな?
2021/03/04(木) 11:15:36.75ID:fKYNPqjU0
>>800
ふーん
範囲指定して消したらどう?
後、最近のEXCELはひょっとして
セルの内容が変わったら
再計算しているかも知れないから
一応自動計算も切ってみたら?

セル値が変わった時のイベント拾って
何かやってるとかいうオチだったら
問題外だけど
2021/03/04(木) 11:36:50.11ID:EtHhkpeQ0
スレが見つからなかったのでこちらで失礼します
C8の値が$100にならない理由を教えて下さい
https://i.imgur.com/XLERVNc.png
2021/03/04(木) 11:53:16.96ID:w9aQykj0M
関数変わっちゃうけど代案を出すなら
VLOOKUP(B8,B1:C5,2,FALSE)
とかどう?
2021/03/04(木) 12:01:03.02ID:1zCrSMV60
なんだこりゃ
LookUpって欠陥あるんかね
2021/03/04(木) 12:21:33.50ID:w9aQykj0M
LOOKUPって近似値を検索する関数だから文字列探そうとすると上手くいかない事が多かった気がする
だから面倒臭くなってVLOOKUP,HLOOKUPを使うように癖をつけた記憶がある
2021/03/04(木) 13:49:43.11ID:1PJYOy7Jr
これ思い出したわ

https://i.imgur.com/x2uWdkO.jpg
https://i.imgur.com/fnrEWzZ.jpg
2021/03/04(木) 13:50:26.95ID:FInty+sk0
新規作成してから試してみたけど$100になったな
2021/03/04(木) 14:14:53.10ID:Kq0/JwOuM
>>810
C8 が "もり " みたいに空白入ってるとかじゃね?
2021/03/04(木) 14:47:21.95ID:skJUg0gJ0
検査範囲の値は昇順にしてください
そうでなければ正しい値はえられません
並んでないときはVLOOKUPやHLOOKUPを使ってください

という旨のことをヘルプに書いてある。
2021/03/04(木) 16:50:41.38ID:b7V1SruDM
LookupにもVLookupやHLookupみたいに検索方法のオプションあればいいのにね
まあMSとしてはExcel最新版にしてXLookup使ってねって言うことなんだろうな
2021/03/04(木) 18:46:57.78ID:EcELbNCH0
初期化で若干重たいのは取り敢えず諦めることにして、外部のCSVをクエリテーブルで読み込んでから
Refleshでシートに書き込んでるのですが、この書き込む前の段階で、クエリテーブル上で不要な列のデータを削除する事って可能でしょうか?
不要なデータが大量に混ざっているので、全部まとめてシートに書き込むとやはり重たいので軽量化したいのですが……
820デフォルトの名無しさん (ワッチョイ 0b8e-v+iG)
垢版 |
2021/03/04(木) 19:49:49.80ID:V/SEJayw0
いつものあいつだな
2021/03/04(木) 20:49:35.42ID:yRtnuXOv0
lookup系よりindexmatch使うことが多いな
2021/03/04(木) 20:55:32.61ID:INwEijJcM
lindexmatch使いアピールしてはじめて自称excel上級者として一人前
2021/03/04(木) 21:28:29.09ID:Cjl2zDCE0
昔はユーザー定義関数作ったけど、今はXLOOKUPがある。
2021/03/04(木) 22:18:19.39ID:1zCrSMV60
IindexMatchなんぞ使わず、
列をボーンとコピー挿入してVLOOKしてこそ一人前
2021/03/05(金) 05:33:04.89ID:eGeMRqFI0
いつものあいつて何?
2021/03/05(金) 09:21:20.59ID:n//DPju00
とうしつの自己紹介
2021/03/05(金) 21:02:22.60ID:s30llsqJ0
臭う質問者の総称
2021/03/06(土) 12:22:29.01ID:yJvSdslEH
実際に使ってないような質問をして答えさせて悦に入る人
2021/03/07(日) 10:26:06.26ID:FD1rrusm0
webページからデータをとってきてセルに格納するマクロを書いています
msxml2.xmlhttpというのを使うとページの内容をgetすることができるのですが、これはどうやらieを利用しているようです
ieはいつなくなるかわからないので他の方法があれば今のうちから変えておきたいのですが、vbaで使える方法で他にどういうのがあるか教えてください
2021/03/07(日) 10:30:32.44ID:ZX3XyXetM
IEはなくなるのにVBAは大丈夫だと思う理由は?
言語もPythonとかにしてBeautifulSoupやSeleniumでも使った方がよい
2021/03/07(日) 10:37:32.50ID:4ExLqYxe0
パワークエリはどうかな
2021/03/07(日) 10:42:14.29ID:TW4NSoKtM
無くなったときのビジネスインパクトはIEよりもVBAの方が遥かに小さいから、MSがどっちか先に切るとしたらVBAだろう
最悪VBAは切られてもExcelのバージョンを塩漬けにして運用できなくはないしな
2021/03/07(日) 11:28:15.07ID:zpOLYdVD0
>>830
まあそのうちpythonに移行するんでしょうけど、今は慣れない言語を一から勉強してる暇はないので
それで、あなたはvbaでやる他の方法を示せないということでよろしいですか?

>>831
どうかな、じゃなくてどうやるのか教えてください
2021/03/07(日) 13:02:06.24ID:JbGOdXToM
704 名無し~3.EXE sage 2021/03/01(月) 20:11:45.17 ID:hZCKpI4x
デスクトップ版のVBAマクロに替えてWeb版はOfficeスクリプトがプレビュー中(現在は法人向け365のオンラインのみ)
https://docs.microsoft.com/ja-jp/office/dev/scripts/resources/vba-differences

705 名無し~3.EXE sage 2021/03/01(月) 20:16:10.79 ID:hZCKpI4x
Excelの新自動化ソリューション「Office Scripts」プレビュー版が登場
https://ascii.jp/elem/000/004/000/4000725/

Excel操作をJavaScriptで記録 〜Microsoft、“Office Scripts”をパブリックプレビュー
https://forest.watch.impress.co.jp/docs/news/1227931.html
2021/03/07(日) 13:04:56.15ID:JbGOdXToM
788 名無し~3.EXE sage 2021/03/03(水) 18:26:40.20 ID:5NVXQTtc
Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定
https://www.itmedia.co.jp/news/articles/2103/03/news080.html

Microsoft、自社製RPAツールを全Windows 10ユーザーに無償提供 マウスクリックやキーボード入力をGUIで自動化
https://www.itmedia.co.jp/news/articles/2103/03/news096.html
836デフォルトの名無しさん (ワッチョイ cb8e-3QAQ)
垢版 |
2021/03/07(日) 13:46:03.75ID:5FBwssoR0
>>833
なんだただの馬鹿か
煽って聞きだそうとしてもこのスレはいつものあいつで耐性ができた人ばかりだから無理
2021/03/07(日) 14:06:40.31ID:4ExLqYxe0
触れないようにしてたけど辛辣で草
2021/03/07(日) 17:25:15.30ID:CYFzWFvV0
>>836
答えられないならレスしなくていいよ
無能に用はないから
839デフォルトの名無しさん (ワッチョイ cb8e-3QAQ)
垢版 |
2021/03/07(日) 17:51:15.16ID:5FBwssoR0
>>838
悔し買ったか?馬鹿
2021/03/07(日) 18:27:16.06ID:REgzkSN70
な、age厨だろ?
2021/03/07(日) 20:22:49.89ID:l5mf+U2f0
反論できなくてアゲサゲ言い出す奴は見苦しい
2021/03/07(日) 21:30:58.30ID:iHuYVCVV0
言われて下げてやんのwww
843デフォルトの名無しさん (ワッチョイ cb8e-3QAQ)
垢版 |
2021/03/07(日) 22:58:33.05ID:5FBwssoR0
馬鹿は自分が相手にしてるのはただ一人だけと思い込む
2021/03/08(月) 05:43:53.99ID:bSh0ioyn0
な、age厨だろ?
2021/03/08(月) 07:03:19.05ID:+AeHqC2j0
自己紹介www
2021/03/08(月) 09:05:36.54ID:+ItxpBbz0
類友
2021/03/08(月) 09:36:00.68ID:gk28PyLU0
もはや論点なにそれ状態
2021/03/08(月) 10:52:47.61ID:TrYviUKj0
保存して閉じる処理をしても、ファイルは閉じてもExcelはとじません

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'処理
Application.DisplayAlerts = False
Application.Quit
ThisWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
End Sub
これでもダメでした
Application.Quit
ThisWorkbook.Close savechanges:=True
2021/03/08(月) 11:07:15.73ID:9xs5g46P0
ActiveWindow.Close
2021/03/08(月) 11:38:58.50ID:TrYviUKj0
>>849

Application.Quit
ThisWorkbook.Close savechanges:=True
ActiveWindow.Close
これもダメでした
2021/03/08(月) 11:53:11.92ID:9xs5g46P0
Application.Quit
Application.DisplayAlerts = False
ThisWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
2021/03/08(月) 11:57:13.64ID:vFSNvomr0
Application.DisplayAlerts = False
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
Application.DisplayAlerts = True
End If

とかどう?
2021/03/08(月) 11:59:04.12ID:ub+dBY/l0
>>848
何でセーブする前にEXCELのアプリケーション閉じようとしてるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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