Excel VBA 質問スレ Part63

■ このスレッドは過去ログ倉庫に格納されています
2019/09/16(月) 19:34:59.04ID:emfTAhXr0
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part62
https://mevius.5ch.net/test/read.cgi/tech/1561303297/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/09/19(木) 00:47:56.32ID:ARAzw0xg0
>>24
アドオン入れるなり作るなりするとマシになる
2617 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 01:19:41.82ID:vxcA2ILs0
>>18
コードをヒントにして、成功しました!
ありがとうございました。

めっちゃお優しいですね!!
2019/09/19(木) 05:46:15.64ID:0eG7NBUp0
あいうえお
2019/09/19(木) 07:26:47.06ID:F8eVIa9Rp
>>23
初めてなので許してください
そして教えてください
2019/09/19(木) 08:12:52.96ID:wmMzcbeOd
>>25
オススメ教えて
2019/09/19(木) 08:47:06.93ID:0eG7NBUp0
かきくけこ
31デフォルトの名無しさん (ブーイモ MMf6-zDIv)
垢版 |
2019/09/19(木) 12:51:43.71ID:sRgRNGS8M
なにぬねの
2019/09/19(木) 14:11:18.92ID:I3ATuKNad
>>22
ブックAのシートでループ
33デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/19(木) 14:27:24.46ID:nfvzk0j90
>>28
死ね、馬鹿
2019/09/19(木) 14:54:49.69ID:F8eVIa9Rp
>>33
うるせえウンコマンクソして寝ろ
35デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/19(木) 15:37:32.90ID:nfvzk0j90
馬鹿の本性なんてこんなもん
2019/09/19(木) 19:53:05.48ID:ARAzw0xg0
>>28
ならマルチポスト放置してないで一つに絞ろう
2019/09/19(木) 21:51:25.54ID:0eG7NBUp0
らったったっらたた
38デフォルトの名無しさん (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 22:19:21.08ID:vxcA2ILs0
すみません。
考えてもわからないので教えてください。

Dim Wb2 As Workbook
Set Wb2 = Workbooks(Range("B7").Value)

エラーメッセージ:インデックスが有効範囲にありません。

B7セルには<テストファイル.xlsx>が入っているとします。

Workbookにワークブック名を入れようとしているのですが、
なぜエラーなのでしょうか・・・?
3938 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 22:33:23.12ID:vxcA2ILs0
SetするWorkbooksは、ファイルが開いていないといけなかったんですね。
自己解決しました。
失礼しました。
2019/09/19(木) 22:48:56.33ID:NLchELHJr
>>39
dドライブ直下にあるとして
Set Wb2 = Workbooks.open ("d:¥" & Range("B7").Value)
なら自動的にファイルを開いてオブジェクト扱いになる
4138 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 23:03:19.82ID:vxcA2ILs0
>>40
そんな書き方もあるんですね!
勉強になります。
(私のコードは無駄が多そう・・・。)
2019/09/20(金) 00:09:35.56ID:SAxa71i50
変に答えると幼稚な馬鹿がつけあがる
2019/09/20(金) 01:19:15.21ID:L4svxBEcM
と、幼稚な馬鹿が申してます
2019/09/20(金) 18:45:01.71ID:nQBbqzQu0
あかさたな
2019/09/20(金) 20:42:04.97ID:L83O/vz70
VBAからIEを操作してhtmlで書かれたデータを取りに行くコードを書いています

ターゲットのサイトでは、一度に20件のデータしか表示されず
一番下までスクロールするたびに20件ずつ追加されます(データは全200件です)

htmlでは、20件のデータの下に「::after」と書かれており、スクロールが一番下に近づくと
新たな20件がロードされ、その下に「::after」が現れます

質問ですが、一度に200件全てのデータを取るためにはIEでスクロールさせる必要があるように思いますが
その場合、SendKeysを使って、SendKeys "{PGDN}" のようにするしかないのでしょうか?

それとも他に、何か良い方法があるようでしたらアドバイスをいただきたくお願い申し上げます
2019/09/20(金) 21:06:34.17ID:oAI6ZRfWH
querytables.addでCSVファイルをエクセルシートに貼り付けたとき、グループ化で非表示にされている部分に正しく貼り付けられるのはいいのですが、グループ化非表示から表示状態にされてしまいます。
非表示部分に貼り付けつつ、非表示のままにするにはどうしたらいいでしょうか?
貼り付け先シートの元々の表示・非表示状態はそのままにしたいんですがよい方法はありますか?
2019/09/21(土) 05:45:28.43ID:8VV0xXKBa
sendkeysはなるべく使わない
2019/09/21(土) 08:35:41.78ID:/Gx75Cw00
abcdefg
2019/09/21(土) 12:12:30.41ID:8qwe/SJE0
>>45
ページの作りによる。
例えばあなたは20件ずつなどと言っているけど、URLの入力など次第で200件全部表示できるかもしれない。
スクロールが必要かも分からないがSendkeysなんて使うのは子供と考えて良い。
2019/09/21(土) 13:08:32.19ID:XrHXKxEM0
>>47>>49
レスありがとうございます。
私もSendKeysは使いたくなかったので質問した次第です

> ページの作りによる。
ターゲットサイトは、dアニメのランキングのページです。
https://anime.dmkt-sp.jp/animestore/CR/CR00000013_001

ここからランキングのデータを抜き出して来ようと思ってますが、20件ずつしか表示されず…
何かいい方法はないでしょうかねぇ
2019/09/21(土) 13:10:12.33ID:/Gx75Cw00
あーざーやーかーにー
いーろづいたっ
52デフォルトの名無しさん (ワッチョイ a9ad-7RCD)
垢版 |
2019/09/21(土) 15:10:34.25ID:AFF+Wq/L0
うちの会社に、元SEでVBAバリバリ書ける、という人が
入ってきたんですが、色々Excel作業の自動化をお願いするために
現行の作業手順をお見せしたら、「ここの、Excel関数を使っているところは
意味が分からないので、関数の使い方から説明してください。」といわれ、
VLOOKUPとは、からお話ししないといけないそうで、もう自分でVBA
書こうかと思ってしまいます。
はじめはこういうもので、すぐ慣れてくれるんでしょうか?
「SEの資格」を持っている、という触れ込みの、部長の知り合いなので扱いは
要注意なのです。はぁ。
2019/09/21(土) 15:31:27.17ID:idUljkgM0
経歴詐称があった場合、解雇はできるのか

結論から言うと、解雇できる場合もあればできない場合もあります。
一口に経歴詐称といっても、軽微なものから重大なものまであり、全てのケースで解雇が可能とすることは合理的ではないからです。
解雇ができるケースは、「重要な経歴」を詐称されたときに限られます(重要な経歴とは何を指すのかは下記で説明します)。

職歴に関する経歴詐称

職歴を詐称していた場合は、採用後の仕事の内容、賃金に直接影響を及ぼすもののため、重要な経歴を詐称していると判断される可能性が高いと言えます。
判例では、グラバス事件(東京地判平成16年12月17日 労判889号52頁)があり、プログラミング能力がなかったにも関わらず、あたかもスキルがあるかのように経歴書に記載。
採用面接でもそのように説明して、ソフトウェア会社に採用されたが、経歴詐称を理由とする懲戒解雇が認められたという事例があります。
2019/09/21(土) 15:53:55.16ID:xM/61paW0
そもそも触れ込みから嘘だったのかまで疑ったらキリがないから、そこんとこは何とも言えないけど、
元SEが本当なら、少なくともVB(VBAじゃなく)は書けるけど、普通のオフィスワークはあんましてこなかった、とかじゃないの?
そんな感じのSEさんと一緒に仕事したことはある。ちょっと教えてあげたらあっという間に習得したけど。
でもやっぱ利用頻度の低い関数(LOOKUP系)や若干特殊な使い方(SUMPRODUCTを複数条件の判定や抽出に使うとか)には苦慮してた。
2019/09/21(土) 16:00:48.34ID:y4wrqwmo0
>>52
バリバリ書けるSEならExcelの基本的な関数ぐらい自分で調べられるものだがそれすらできないのはバリバリ具合すら怪しい予感
2019/09/21(土) 17:02:09.02ID:GoVsp8loa
>>52
バリバリのエンジニアがVBA使う仕事に応募なんてしません
2019/09/21(土) 17:12:54.75ID:3YukOVDp0
>>52
そもそも謎の「SEの資格」とか言ってるお前も似たようなもんだろ…
2019/09/21(土) 17:23:57.08ID:DHk9cejb0
知らないことを知らないと言えるやつはまだ大丈夫だわ
ホントにやばいやつってのはな・・・
2019/09/21(土) 21:02:04.95ID:p4RfJbo+0
もちろんできますよ大丈夫です(やべっ何もわからん どうしよー)
2019/09/21(土) 21:13:01.51ID:656pPxFFd
>>50
スクロールしないで取得したかったんだが解析面倒で断念。
スクロールはSendkeysではなく、HTMLWindow2のscrollToなどを使う。

https://pastebin.com/V7S3XW71
2019/09/21(土) 21:14:21.75ID:+OkoEiEq0
VBAって必要になったら都度気合いで調べながら書いて、しばらく書かない間に忘れてまた必要になったらまた調べて覚え直すってことを繰り返してる気がする
2019/09/21(土) 21:59:24.26ID:656pPxFFd
>>52
VBA使いでExcel関数を使わない人もいるからな。
俺はどっちも使うけど両方同時に使うのは避けることが多い。
2019/09/21(土) 22:06:05.25ID:656pPxFFd
>>59
簡単にそんなこと言うと、その時点でバレるぞ。
普通は分かってたら詳細や、かつてその技術でハマッた体験談を語るもんだ。
2019/09/21(土) 23:00:31.94ID:/Gx75Cw00
あいうえお
2019/09/21(土) 23:30:08.68ID:XrHXKxEM0
>>60
> スクロールしないで取得したかったんだが解析面倒で断念。
> https://pastebin.com/V7S3XW71

おお、わざわざここまで!
大変お手数をおかけすることとなってしまい、申し訳ないやら嬉しいやら…ありがとうございます!!

> スクロールはSendkeysではなく、HTMLWindow2のscrollToなどを使う。
最近、ネットのブログなどを参考に
見よう見まねでExcelのVBAとIE操作を両方一緒に始めたのですが…

ループで200項目取り出すまでの条件の書き方、スクロールの書き方、すごく参考になります!
ランキングデータの取り出し方…、ここまでシンプルに書けるものなんですね!!

恥ずかしながら、まだオブジェクトとかコレクションとかアイテムとかがごっちゃになってて頭で整理できておらず
文法エラー(?)の嵐に悩まされつつコードを書いてる段階で…"ChildNodes"とかもまだ使ったことないです…

本当に感謝です。
66デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/21(土) 23:32:05.21ID:JIxctC3M0
また幼稚なゆとり世代馬鹿か
2019/09/22(日) 05:33:04.20ID:8C/KzzE0a
他人の批判しても成果はあがらない
2019/09/22(日) 17:46:57.02ID:aib8uIrzr
凄く基本的な質問だと思うのですが、
Range("A1".Offset(0,12)).Activate
はだめで、
Range("A1").Offset(0,12).Activate
が正しいのはなんでなのでしょうか?
2019/09/22(日) 17:53:07.62ID:7ea+dVk1a
>>68
VBAでそのへんを正しく理解するのはまず不可能だしその必要もないから、定型句だと思って暗記しなさい
ちゃんと理解したかったらJavaのようなきちんとしたオブジェクト指向言語を学ぶことをお勧めする
2019/09/22(日) 18:49:17.99ID:hRt1URHX0
>>68
引数が間違ってるから
2019/09/22(日) 19:59:23.95ID:hXw+7SRax
>>68
一番目の式の方は、"A1".Offset(0, 12)という表現がVBAの構文上無効で何も値を返さない式になっている
なので、参照先のセル範囲の名前をバリアント型の引数として要求しているRangeプロパティ式の評価に失敗してしまい、Rangeオブジェクトの取得にも失敗する

文字列や数値のリテラルに.(任意の値)と続けて何らかのオブジェクトにアクセスしようとしても、そもそもそのようなアクセスルールが定義されていないので当然失敗する

反対にRange("A1").Offset(0,12)の方は構文上無効な表現がなく、RangeオブジェクトのメンバのOffsetプロパティ式を正しく用いているので、Offsetプロパティを介してA1セルから12列分座標移動したセルを取得することができる
2019/09/23(月) 08:06:29.00ID:1/X0hGb20
なにぬねの
2019/09/23(月) 08:16:13.52ID:DBTsObIXM
VBAのリテラルはメンバを持たないから
他言語だと型変換とかあるんだけど
2019/09/23(月) 14:19:12.95ID:6dsrIE/rx
リテラルがそのままstring型オブジェクトとして使える言語だとメンバアクセスできて楽だよね
2019/09/23(月) 21:03:41.25ID:1/X0hGb20
たちつてやと
2019/09/24(火) 00:09:46.67ID:Knbo6pxK0
VBEはインテリセンスがクソ
2019/09/24(火) 00:31:17.33ID:dEEBEAN9x
VBEは静的に型判定できるリテラルくらいハイライト表示対応してくれと思う
2019/09/24(火) 01:28:17.40ID:GahaPn620
そもそもExcelのおまけ機能だし
2019/09/24(火) 12:36:08.37ID:b0EiNdg20
はひふへほ
2019/09/24(火) 12:41:06.36ID:jDE40bGiM
イミディエイトとローカルのウインドウ、上下にドッキングしてしまったのだけど、左右にドッキングするようにはどうすればいいのだろう…
2019/09/24(火) 12:46:55.24ID:PfH2ve03d
>>80
ドラックすれば良いんじゃない?
位置調整は難しい場合があるけどウィンドウ枠の表示が変わった時に離すとドッキングするから試行錯誤してみれば良い。
2019/09/24(火) 12:57:05.92ID:b0EiNdg20
やいゆえよ
2019/09/24(火) 16:39:46.34ID:Zg6Hxb/Wa
いきしちにひみいりい
2019/09/24(火) 19:07:39.27ID:GahaPn620
>>80
移動させる時に判定のシビアなガイド枠みたいなのが出るから置きたい位置にハマるまで頑張る
2019/09/25(水) 00:27:11.58ID:P1Zkaqvu0
VBAの代わりにPython実行環境を取り込む動きがあるらしいね
もしそうなったらVBA界隈の閉塞感も変わるかな
86デフォルトの名無しさん (アウアウウー Sa85-9q2I)
垢版 |
2019/09/25(水) 06:45:55.03ID:pkvL+Jrla
まじ?
エクセルやってる一般社員様がpython始めたらどうなるんだろ
2019/09/25(水) 08:47:00.45ID:eyE9qOIMd
おっぱいでexcelを自動化する
2019/09/25(水) 09:19:56.07ID:XMGhQQhjx
Pythonエンジン搭載は色んな理由で見送られたはず
89デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/25(水) 13:51:45.80ID:uf0+2woN0
>>85
未だにこういう馬鹿がいるのか
2019/09/25(水) 17:46:53.71ID:sp9MNwgvH
Python搭載は見送られて代わりにJavaScriptが搭載されるという記事をどこかで見かけましたが。

どなたか>>46わかるかたお願いします。
2019/09/25(水) 19:10:29.50ID:lvyCMB6U0
>>90

>>89
>>未だにこういう馬鹿がいるのか
2019/09/26(木) 00:31:10.28ID:ZFJdpCv/0
jsだったらgasと同じような感じになるのかな
gasはそもそもスプレッドシート自体の機能が物足りないからイマイチだったんだけど
2019/09/26(木) 00:57:48.08ID:89bcSR2Xx
これからJSエンジンが実装されるならTypeScriptベースで型付け強制になるだろうな
2019/09/26(木) 20:07:07.87ID:+ztuXuzlM
.ClearContents と .Value="" では実行後のセルの状態は異なりますか?
95デフォルトの名無しさん (ワッチョイ e77c-3Qav)
垢版 |
2019/09/26(木) 20:28:04.65ID:aKtMMU310
何も載らないよ
Excel自体クラウド上で使うようになってきてるから
マクロみたい使うならJavaScriptなのかもね
2019/09/27(金) 06:06:27.72ID:sVncIXEy0
きーよしー
こーのよーるー
97デフォルトの名無しさん (ブーイモ MM7f-a2LJ)
垢版 |
2019/09/27(金) 07:55:16.60ID:ccoeIvApM
ハーゲーはー ひーかーり
2019/09/27(金) 08:22:15.68ID:RTCGxTj8x
最近はExcel操作のためにVBAを使うのはもうなんか最後の手段って感じがする
PowerQuery(M言語)、PowerPivot(DAX)、JavaScript、Python、PowerShellのどれかで書く方が楽だしメンテも簡単
2019/09/27(金) 08:43:34.46ID:Lnp0vM2Id
趣味が大がかりになってきて使う材料の管理が煩雑になってきたのでExcelを使って管理しようかなと考えています

工程が1,2,3…とあって、それぞれの工程で使う部材は今のところ重複はなく(今後どうなるかわからない)部材毎に色違いやグレード違い等の派生品があり、
用途としては工程毎に使う部材を別シートにリストアップしたり、規定量を割ったものをピックアップ
部材の管理番号を振るとき
番号は工程や派生に関わらず一列で一意の連番
3列で工程ー工程内の部材を連番ー派生を枝番
工程に関わらず部材毎に連番ー派生品を枝番
マクロを組むときこれらのうちどうするのがよい構造になるでしょうか?
2019/09/27(金) 09:04:03.76ID:ikgA/i06d
まず3行にまとめます。
2019/09/27(金) 12:08:52.99ID:yAOzGr2R0
RDBSを使って合成テーブルを作ります
2019/09/27(金) 21:25:04.26ID:yKrr7IDu0
>>98
Excelデータ操作するのにか!?
2019/09/27(金) 21:29:52.64ID:W7KJhMQF0
確かにvlookup関数もCで作ったほうが処理速度速いですし
2019/09/28(土) 01:10:35.83ID:vqFcrTxsx
>>102
情報取得とかテーブル加工とかならVBAよりQueryTable)PowerPivotの方がよっぽど速いし型安全にデータ処理できる
数万行以上のデータのリレーション構築とテーブル加工をVBAやWorkshhet関数で実現するとか正気の沙汰じゃないぞ
2019/09/28(土) 07:02:49.99ID:kCxp0LgMM
なんか齢50近くになると新しい言語?を知らない…power query?power pivot?
…後で調べてみないと…
2019/09/28(土) 07:36:24.34ID:HGKDuO1d0
M言語ってどうやって勉強するのさ
英語の本け?
2019/09/28(土) 08:34:58.34ID:oUtMZ4Zg0
>>106
マイクロソフトが仕様書公開してる
2019/09/28(土) 09:58:25.05ID:OFq3+Dp/x
>>106
MSが仕様公開して言語レファレンスまで作ってる
開発&実行環境はExcelのPowerQueryに付いてるので特に余分なものは要らない
2019/09/28(土) 14:02:31.05ID:OFq3+Dp/x
>>99
一番目の方法でまず一意のIDを持つ部材のマスタを作った方が良い
その上で、派生関係や使用工程は列を分けて部材マスタの属性値として管理する
そうすれば各使用工程で使う部材を抽出するビューが漏れなく簡単に作れるし、部材データの追加も容易

何故他のやり方が良くないかというと、使用工程や派生関係を管理番号で構造的に表そうとしても、一対一の親子関係から外れる複合的な派生関係の表現が難しいし、複数の工程にまたがって使用する部材が登場した場合の付番がとても困難だから
110デフォルトの名無しさん (ワッチョイ 878e-95m8)
垢版 |
2019/09/28(土) 16:34:58.82ID:w31BDneZ0
↑仕様もわからないのに勝手に決めつける馬鹿
2019/09/28(土) 17:19:26.34ID:OFq3+Dp/x
>>110
データ活用のシナリオの説明もある程度書いてくれてるし、3パターンの中からオススメを選んで教えてくれと言われてるんだから根拠を示しながら回答するのはOKだろ
2019/09/29(日) 08:21:00.73ID:9ZqWtSe+0
馬鹿と言いたいだけの馬鹿は相手にしなくていいよ
2019/09/29(日) 09:41:07.61ID:xMtED3CuM
> 馬鹿と言いたいだけの馬鹿
>>112の悪口はやめなよ
2019/09/29(日) 10:19:36.85ID:whL1Vznb0
今、困っていることがあり教えてください。

Excelをオープンした時に、入力規則のリストが設定されているセルに
VBAでリストにある文字列を張り付けるとリストが解除されてしまい困っています。
ただ、Excelを既にオープンしている状態であれば、VBAで文字列を張り付けてもリストは解除されません。
Excelをオープンした際の文字列貼り付けでもリストを解除しない方法、何かないでしょうか。
2019/09/29(日) 11:49:35.55ID:mZHqVu1Bx
>>114
試してないから自信はないけど配列に文字列の値を格納してからコピー先セルに一括代入してみたらどうかね
2019/09/29(日) 12:33:57.48ID:QiINVIOGM
計算方法の自動手動を切り替えるとか
doeventsを挟むとか
入力規則を消去して再度設定してみるとか
2019/09/29(日) 13:40:07.40ID:whL1Vznb0
>>115
適当な配列を用意して、1要素に代入したい文字列を格納した後、該当セルにコピーしたが駄目でした。
もしかして、一括代入の意味の捉え方誤っていますでしょうか?

>>116
計算方法を手動にしてもdoevent挟んでも駄目でした。
入力規則の再設定は大丈夫でしたが、再設定しか駄目なんですかね。
2019/09/29(日) 16:27:33.03ID:QiINVIOGM
再設定で目的が果たせるならそれでいいんじゃないの
気に入らないかもしれないけど
2019/09/29(日) 19:28:31.60ID:whL1Vznb0
>>118
目的は達成できるのですが、どうしてそんなことが
起きているのか気持ち悪さが残ってしまって・・・

ひとまずリスト再設定で回避してみようと思います。
皆さん、ありがとうございました。
2019/09/29(日) 20:52:21.32ID:/1W8DtBL0
1ステップずつ何が起こってるか確認してみた?
2019/09/29(日) 21:37:57.26ID:fy6bWXAvx
ウォッチ式で入力規則が無効になった瞬間を捕まえたらどのステップで問題が起きてるか分かるよ
あとApplication.EnableEvents=False の状態で入力規則が無効化する症状が同じように出るかどうかを確かめると良いかも
副作用あるから気を付けた方がいいけどね
2019/09/29(日) 22:03:13.06ID:sGqY7mop0
デバッグは大事
2019/09/29(日) 23:10:51.27ID:JC6PY5Dx0
Worksheetの表示を縮小したときに名前をつけた範囲名が青文字で表示されますが
あれを縮小表示なしに表示するメソッドとかないですかね?
なければ諦めて作ろうと思って、、
2019/09/30(月) 09:40:08.63ID:GRnK7Y6k0
以前の勤務表の作成についての質問をしたものです。

指定範囲に対して条件を参照して自動で勤務を組むにはどのようなコードが使えますか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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