Excel VBA 質問スレ Part48 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8e-Fc1g)
垢版 |
2017/05/16(火) 08:24:45.78ID:iIGA/64l0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※前スレ
Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489557874/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
414デフォルトの名無しさん (ワッチョイ 3bc7-x63M)
垢版 |
2017/05/31(水) 20:49:37.96ID:ac0fXejp0
>>410
だいたいエクセルも知らんやつがなんでいきなりエクセルマクロやろうとしてんだよw

「エクセルvbaでプログラミングを学ぼう」みたいな風潮が諸悪の根源なんだよな
そういう意味では>>407の言うことにも一理あるわw
2017/05/31(水) 20:57:43.48ID:EYxbNvW1a
初心者向きやりたいならVB.netでもやりゃいいのよ

プログラム言語としては不親切極まりないのは間違いないだろ、VBAは
機能拡張も期待できないし
敷居は低いが不親切
2017/05/31(水) 21:14:12.59ID:Nua5RAmq0
プログラミングなんて、変に凝らなきゃそこそこの処理ロジックは誰でも作れるよ。

でも入出力が楽にできるGUIが欲しいとか、プログラムに食わせる制御データの管理を手軽にしたいとか、
日常使いのアプリとして便利にってなるとExcelになっちゃうんだよね。
2017/05/31(水) 21:20:34.89ID:lGWBXgBz0
>>411
一般事務のデファクトスタンダードなのにあまりに酷いとは思う
さすがにバージョンアップしてほしい。エクセルは進化してるけど、vbaはvb6.0以下だろう

>>414
エクセルもそもそも自由度が高すぎる。テーブルで大分機能的には落ち着いたけど、肝心のテーブルが使われていない
とりあえずセルの結合だけでも廃止してほしい
2017/05/31(水) 21:42:12.36ID:YZgbxTyGM
>>417
それはエクセルが優れてるからというより、ワードが糞過ぎるからワードの守備範囲までエクセルでカバーせざるを得ないだけだろう
2017/05/31(水) 22:00:18.50ID:lGWBXgBz0
ワードなぁ・・・ワードはずっと扱ってないよ。いくつかの会社の人に聞いたけど、やっぱりワードは糞

しかし唯一、日本を代表する金融企業の人と飲んだ時、その人が喜々として語っていた
その企業はエクセルもアクセスも使わず、資料は全てシステム部門に頼む体質
宴会や支店向けの広報をワードで一生懸命作る会社だったらしい

いいか悪いかはともかく、まぁ、日本の上層部は社会主義だ。
2017/05/31(水) 22:01:17.27ID:ZGVFQMFtH
>>417
自分もセル結合嫌派だけど、これまでセル結合で表現していた部分はどうするの?
個人的には、(選択範囲で中央)が水平方向だけでなく、垂直方向にもきけば満足だけど、、
現場の意向でどうしても使わないといけないことが多々ある。
2017/05/31(水) 22:12:44.56ID:lGWBXgBz0
>>420
・セル結合は機能自体なくす
・「選択範囲で中央揃え」的なものをもっと増やす
要するにとにかくセルと情報は1:1にする
その上で
・書式設定無し
機能があれば、
編集側、閲覧側に取っても幸せになるだろう

とにかく、作業中のデータとプリントアウト等の見せるデータ、これを抜本的に乖離しないと話にならない
とにかくセル結合が最初だ。
2017/05/31(水) 22:24:29.36ID:Nua5RAmq0
>>421
見せるためのデータをまた入力にするなんてバカなことをしなければ別にいいだろ
セル結合したって
2017/05/31(水) 22:28:56.46ID:lGWBXgBz0
>>422
>見せるためのデータをまた入力にするなんてバカなこと
中小企業では普通にある。
もうええ、これに関しては突っ込むな時間の無駄だ
2017/05/31(水) 22:55:16.15ID:xZexTgw80
>>391
>>390
諦めてCopy Destinationします。
ありがとうございました。
2017/05/31(水) 22:55:23.97ID:Nua5RAmq0
そんな感じ
426デフォルトの名無しさん (スプッッ Sdbf-uKyG)
垢版 |
2017/05/31(水) 23:56:16.90ID:N23t2UmQd
画面に表示されてるとおり印刷してくれ
俺の要望はそれだけだ
2017/06/01(木) 00:07:36.27ID:xwlKrZPp0
プリントスクリーンボタン
428デフォルトの名無しさん (ワッチョイ ddba-+vtu)
垢版 |
2017/06/01(木) 00:30:28.19ID:3kmI9vZh0
その手があったか!
2017/06/01(木) 00:37:46.47ID:7jSAnpp50
>>402
お前毎回人の話聞かないクズなのな
2017/06/01(木) 00:38:42.21ID:7jSAnpp50
>>405
セパレータの問題だって
2017/06/01(木) 00:39:34.14ID:xwlKrZPp0
_人人人人人人人人_
> 突然の亀レス <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
2017/06/01(木) 00:47:31.72ID:7jSAnpp50
>>431
4b19=ef8eだった
2017/06/01(木) 00:47:35.28ID:xEezSy0Q0
突然セパレータの話を持ち出しておいて「だって」とはwww
2017/06/01(木) 00:50:32.04ID:7jSAnpp50
>>433
mac版で:じゃなくて\で動くの?w
ソースは?w
2017/06/01(木) 00:57:03.34ID:7jSAnpp50
>>431
>>433
ワッチョイの仕様変わったの?
ID:lGWBXgBz0この人UA部分がころころ変わってるんだけど
デフォルトの名無しさん (ワッチョイ ef8e-9J/J)
デフォルトの名無しさん (ワッチョイ ef8e-kjbA)
デフォルトの名無しさん (ワッチョイ ef8e-c3sC)
デフォルトの名無しさん (ワッチョイ ef8e-h4wC)
2017/06/01(木) 03:36:38.16ID:DLazu0lV0
>>410
RangeをSelectする必要なんて普通無いだろう。
Selectする場合はSheetをActiveにするのも自然だろ。

何かおかしなこと言ってない?
2017/06/01(木) 05:02:21.03ID:AjLNIuL80
>>436
おもた
“見せる”時以外使わない
2017/06/01(木) 07:00:00.45ID:YbQp1MN1M
>>436
select しないといろんな操作ができないって思ってるのかも
マクロの自動記録で覚えた奴にありがち
2017/06/01(木) 07:39:25.88ID:xwlKrZPp0
>>436
あんまり無いだろうね。これは俺の好み
Workbook_BeforeSaveで全sheetのcells(1,1)か、最終行に選択セルを持って行くことがよくあるんだ
2017/06/01(木) 07:58:39.77ID:J+CWW2790
取り敢えずのapplication.goto
2017/06/01(木) 08:15:30.82ID:Vftk4o9ex
わざわざシートのActivate/Selectメソッド使わなくても、シート.Range(Index).Selectで終わる話だろ
そんなにGlobal.Range使いたいんか?
Global.Rangeなんてほぼ使わないぞ俺は、コードの可読性下がるから
2017/06/01(木) 08:55:51.01ID:mJLzyhAZx
ごとーーー!
2017/06/01(木) 08:58:27.48ID:VCI0My45d
シートがアクティブになってないとセルのselectできない話でしょ
2017/06/01(木) 10:28:17.60ID:d3jolD7CM
>>434
修正したけど出来ないってレスしてんじゃん
ちゃんと読んでからレスしなよwww
2017/06/01(木) 18:30:37.54ID:N6tgl860x
>>443
>>410は「シートをselectするかactivateしないと、rangeがselectできない」って書いてるよな
シートがアクティブになってないとRange.Selectが使えないっていう話をしてるわけじゃなくて、
シート.Selectメソッドかシート.Activateメソッドを使ってシートをActiveにしないとRange.Selectが使えないっていう嘘を言ってるんだぞ
2017/06/01(木) 20:31:16.93ID:J+CWW2790
>>445
念のために聞いておくが、何が嘘で、正解は何なのか教えてくれないか
447デフォルトの名無しさん (ワッチョイ 09c7-xxAH)
垢版 |
2017/06/01(木) 20:53:27.07ID:gEanndL50
どっちにしろSelectするかActivateすれば使えるんだろ?
たいした問題じゃねえよそんなの
2017/06/01(木) 22:54:42.48ID:DaNoSOMR0
文法的に納得いかないけど上手くいく不思議
Set Newbook = Worksheets.Add
2017/06/01(木) 23:25:19.57ID:4Mx8xPkv0
むしろ参照を返さないAddの方が少数派では
2017/06/01(木) 23:30:05.12ID:0CdKwKMK0
>>441
そうですよね
http://i.imgur.com/c7ccxuI.png
2017/06/01(木) 23:30:45.71ID:xwlKrZPp0
>>448
どう納得行かないのか分からん
2017/06/01(木) 23:32:46.29ID:DaNoSOMR0
>>451
代入してんのか?実行してんのか?っていう。
2017/06/01(木) 23:33:10.29ID:DaNoSOMR0
Setだから代入ではないか。
2017/06/01(木) 23:34:35.43ID:xwlKrZPp0
>>452
戻り値を代入してる。特に違和感がないんだが
2017/06/01(木) 23:37:20.08ID:JcXv0anO0
むしろ NewBook と言う変数名の方に違和感があるんだが...
2017/06/01(木) 23:47:19.51ID:L+dplH4ca
個人的にはworksheet.copyが値返してくれないほうが納得行かない
2017/06/02(金) 00:18:14.15ID:WCh1iO0Y0
>>456
その気持ちはよくわかる
その行を実行した直後はどの変数にも入っていないシートだからなんか不安になる

どうしても不安なときは先に新規ブック作っといてそこをコピー先にしてるけどね
それはそれで無駄なことしてんなあという気になる
2017/06/02(金) 06:38:31.89ID:tmNEumAvx
>>448
機能とは関係ない話だけど変数名はNewBookじゃなくてNewSheetにした方がニュアンス的に正しくない?
2017/06/02(金) 06:52:23.32ID:MGPR/erb0
>>456
機能的に代替出来る操作がある場合は値返さないものが多い気がする。
たぶんユーザー操作をマクロ化する為だけのメソッドは返さないんだと思う。
2017/06/02(金) 11:33:41.01ID:8fOMtk3c0
>>444
おい間抜け、↓この事だろ?こいつは嘘だ
>>399
>アドバイスいただいたものも全てダメしたけどダメ。

コード書いたり詳細に説明したレスに対してですら
個別にレスを返さない奴は、大体が釣り・試してない・見逃しのパターン

ソース?根拠?理由はこれだ、結果が書かれていない
>>387

余談だけど、foo野郎との質問野郎はなぜかセットで来る
2017/06/02(金) 11:39:22.60ID:EMy/L9NX0
>>460
義務じゃないんだから、嫌ならもう来なくていよ
2017/06/02(金) 12:18:35.67ID:8fOMtk3c0
>>461
またそうやって話逸らして逃げるんだから
2017/06/02(金) 12:26:31.41ID:I1EQuNZXM
ある数値に対して指数表記の有理数と指数を楽に拾いたいときって、format関数を使うのがいいですかね?
他に楽な方法ありますか?
2017/06/02(金) 14:32:15.95ID:zUUtTsys0
どんな方法があるにせよ、お前はそれで納得できずもっと他にないの?って
聞き続けるんだろ? >>463
2017/06/02(金) 17:47:56.11ID:I1EQuNZXM
書いてたら泥沼化してたんだけど、結構すっきり書けました。

指数=cint(split(format(数値,"0e+0"),"e")(1))
有理数=数値*0.1^指数
2017/06/02(金) 21:26:05.82ID:rlzCeZS80
エクセルの複数のセルの外枠に罫線を引きたいのですが、アプリケーション定義なんたらのエラーが出ます。
workbooks(********.***).worksheets(*****).range(cells(StartRow,StartCol),cells(endrow,endocol).borderaround
でstartrow startcol endrow endcolは変数です

どこがおかしいでしょうか?
2017/06/02(金) 21:45:23.47ID:Zr32bafNM
>>466
cellsがActiveSheetのセルなのでエラーになる。
↓のような感じでどうぞ。

with workbooks(********.***).worksheets(*****)
.range(.cells(StartRow,StartCol), .cells(endrow,endocol).borderaround
end with
2017/06/02(金) 22:52:19.74ID:rlzCeZS80
>>467 ありがとう。 そういうことだったんですね。
2017/06/03(土) 17:22:19.30ID:u7+4M4Ru0
>>468
初心者が一番嵌まる奴だな。
470デフォルトの名無しさん (ワッチョイ 66e2-mhqb)
垢版 |
2017/06/03(土) 21:54:33.85ID:4eBaDiw20
クラスモジュールってクラス定義してインスタンス化できるってこと?マルチスレッド可能なの?
オブジェクト指向?
2017/06/03(土) 22:20:24.58ID:KC92KqWf0
>>470
>クラス定義してインスタンス化できるってこと?
そう
>マルチスレッド可能なの?
無理
2017/06/03(土) 22:30:10.37ID:aDOlFL7Wx
>>470
オブジェクト指向は中途半端なとこまでしかできない
マルチスレッドは無理
2017/06/03(土) 22:32:25.28ID:KC92KqWf0
エクセルvbaの場合エクセル自体がメインのオブジェクトだから、そんなにclassにこだわることもないけどね
エクセルvbaでゲーム作ってる人は知らん
474デフォルトの名無しさん (ワッチョイ 66e2-mhqb)
垢版 |
2017/06/03(土) 22:56:31.41ID:4eBaDiw20
>>471
>>472
プロパティくらいなのか
サンキュ
2017/06/03(土) 23:02:58.42ID:aDOlFL7Wx
>>474
カスタムイベント実装、インターフェース継承くらいなら出来る
ただ引数付きコンストラクタの作成やクラス継承・オーバーロードが出来ない
2017/06/03(土) 23:49:37.74ID:KC92KqWf0
vbaって継承できたのか、知らなかった・・・
2017/06/03(土) 23:53:01.27ID:6M92ecdj0
>>475
C++でそれらを使ってた時は
無くてもいいかなあとか思ってたけど
VBA始めたらありがたさがわかった
478デフォルトの名無しさん (ワッチョイ 09c7-hSUX)
垢版 |
2017/06/04(日) 00:02:03.04ID:SMq8qLM70
>>477
C++でわからなかったんだからわかってないよそれw
2017/06/04(日) 00:14:43.34ID:QJwsDnIt0
>>478
いや、普通に使ってるものに対して
いちいちありがたみなんて感じないだろ?
あるのが当然なんだから
正直lamdaもほしい
480デフォルトの名無しさん (ワッチョイ 09c7-xxAH)
垢版 |
2017/06/04(日) 00:23:32.29ID:SMq8qLM70
>>479
そうか?オレ毎日納豆食うけど食うたびに美味しいぜ?
2017/06/04(日) 00:46:27.14ID:TICwxklg0
無くてもいいかなあ
とわざわざ考えるとは疑問
2017/06/04(日) 00:55:58.63ID:/9No1Vdv0
C++の共用体はこんなもん使うか?と思ったけど、使うべき場面が来たら普通に使う
そういうもんだった
2017/06/04(日) 01:47:41.87ID:ObX9l6mb0
ありとあらゆる機能を使って実装するっていう状況自体少ないだろうしな。
2017/06/04(日) 08:43:15.60ID:/sAoF2vM0
マルチスレッドが無理って、
2つのブックでDoEventsして、
2つ実行したらおかしくなるってこと?
2017/06/04(日) 11:38:52.57ID:ParPgGiC0
>>484
それはマルチスレッドじゃなくね?
2017/06/04(日) 11:40:48.80ID:NZhuuX9z0
なんやかんやクラスは便利
データまとめるのにはよく使うわ
2017/06/04(日) 12:00:24.95ID:I9SwB1IFx
>>486
クラスでデータまとめるって、具体的にはどういう場面で使ってる?
ワークシート使うより便利?
2017/06/04(日) 12:55:28.25ID:NZhuuX9z0
>>487
シートにあるやつを一回配列かコレクションか(俺はやらないけどレコードセットでもいい)にクラスん中でまとめるのよ
メインコードにリストに入れる処理入れるとごちゃごちゃするからさ
2017/06/04(日) 13:22:31.55ID:tlzlLDo0x
>>488
レスありがとう
なるほどね
複数のレコードに対して同じ処理を繰り返す必要がある場合には便利そう
2017/06/04(日) 17:48:58.65ID:1s3T2QVw0
>>484
全然ちがう。
win32API使って別スレッド作る方法はあるし可能だよ。
けどExcelVBAでそれをやると物凄い不安定になる。
自分が試した感触ではRangeとかCellとかのExcelのオブジェクト触った瞬間にExcelごと落ちる感じ。

じゃあ、Excelのオブジェクト触らずに計算する所だけなら良いかというと、動く場合もあるけど複雑なものになると処理が間に合わなくて落ちるらしい。

基本、やめた方が良い。
2017/06/05(月) 01:20:19.17ID:oPyz6kCkd
別処理をWord使って処理させようとしてもOffice全体で連携かかってるみたいでうまくいかなかったことがある
変なとこで作り込まれていてやりたいようにできないんだよな
2017/06/05(月) 08:37:00.53ID:nJSdLO+iM
元々マルチスレッドに対応してないものを無理矢理動かそうとして文句言われてもなぁ...
2017/06/05(月) 08:43:10.54ID:+xVCJOY00
文句じゃなくね
2017/06/05(月) 08:55:26.49ID:btJTHdak0
想定外の使い方ができないぞ!ってのは文句じゃないのか
2017/06/05(月) 09:24:51.60ID:Sx3XxldLd
>>490
ほほ同じ経験がある。
自分の場合は処理が終了したデータをDBにINSERTするところは上手くマルチスレッド化できた。
待ち合わせが必要ないパターンだったし。

COMそのものがマルチスレッドだめなんかね?
2017/06/05(月) 11:01:11.07ID:bwrXOc4qH
>>490
> 自分が試した感触ではRangeとかCellとかのExcelのオブジェクト触った瞬間にExcelごと落ちる感じ。
それGUIアプリの常識。
全然関係ないスレッドからUIスレッド管理下のものに触ってはいけない。
https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
2017/06/05(月) 11:54:25.53ID:Sx3XxldLd
>>496
プライマリスレッドからでもダメなこと多かったよ。
2017/06/05(月) 11:59:36.00ID:bwrXOc4qH
>>497
> プライマリスレッドからでもダメなこと多かったよ。
どの言語で?
2017/06/05(月) 12:54:03.39ID:cR57/ADJM
>>495
> COMそのものがマルチスレッドだめなんかね?
COM 自体はアパートメントモデルをちゃんと設定すればマルチスレッドでも動く
http://eternalwindows.jp/com/apartment/apartment01.html
個々のオブジェクトが正しく動作するかどうかはまた別の話
500デフォルトの名無しさん (ササクッテロラ Sp3d-mjoq)
垢版 |
2017/06/05(月) 23:38:18.98ID:bd1ggU41p
マクロを作成は通常MODULEですが、
Sheet1やThisworkbookに記入するのはどういうときでしょうか。済みません。
2017/06/06(火) 00:15:48.16ID:d6CS0Xy90
なんでVBAでマルチスレッドにするの
2017/06/06(火) 04:12:26.65ID:NdFOOmMr0
>>501
要望として有るのは待ち状態の時に先に進めるためとか。

ダイアログの中には何らかの操作をしてダイアログ自体を閉じさせないと次のステップに行かない物がある。
そういう時に別スレッドで無限ループ中でそのダイアログが見つかったら操作する処理を動かしてからダイアログ表示させるとか。

例えばメッセージボックス表示させるんだけど10秒間ボタンが押されなかったらキャンセルするとか。

こういうのは上手く書くと動く。

他にも複数の関連しない計算に時間がかかっている時に単純に速度アップのために使いたいと思うかもしれない。

でも動いても趣味のプログラム以外じゃ危なっかしくて使えない。
マルチプロセスで代替えできるものも多いから無理する必要もない。
2017/06/06(火) 04:20:46.72ID:LBKXQv4G0
>>500

>Sheet1
そのシートをActiveにした時の処理、DeActivateにする時の処理、あるいは
特定のセルにデータを入れた時の処理 etc

>Thisworkbook

ブックの起動時や終了時にDBとの接続処理や切断処理を入れてる
2017/06/06(火) 07:54:06.29ID:xLIl+dL/0
sheetやbookに書くのはそのオブジェクトのイベント
使い捨ての整形マクロなんかはsheetに書いてもいいけど、標準モジュールに書いたほうベター
2017/06/06(火) 09:05:13.69ID:YhE+Nuz8x
>>500
シートやブックのイベントを使用するためだよ
2017/06/06(火) 20:09:22.46ID:Uy4z/eLw0
vlookup等を使用しているとソルバーが使えないらしいのでVBAで作ろうと思っていますが、定番というか定石というか、参考になるサイトややり方等はありますか?
言ってて抽象的だなとは思ってはいますが、どうすべきなのか判らず…よろしくお願いします。
2017/06/06(火) 21:53:22.27ID:efHThVDq0
>>500
Thisworkbook.Worksheets(Activesheet.Name).Cells(1,1).Value=1
って書くのが面倒くさくて、
Me.Cells(1,1).Value=1
って書きたい時とか。

Me.も要らねえだろって?
何らかの理由でActivesheetが変わっちゃったら嫌じゃないですか?
508デフォルトの名無しさん (ササクッテロラ Sp3d-mjoq)
垢版 |
2017/06/06(火) 21:56:25.64ID:vXDpJbBwp
教えてください。

マクロでハイパーリンクを実行したいのですが、セルにリンクを貼る必要がない、ただマクロから実行するだけというとき、どう書けば良いのでしょうか。
2017/06/06(火) 22:06:15.37ID:XIE7cY+50
>>508
これ?

Sub foo()
ThisWorkbook.FollowHyperlink "http://www.google.co.jp/";
End Sub
2017/06/06(火) 22:14:17.43ID:efHThVDq0
そっち?

ハイパーリンクじゃなきゃダメなのか、
飛べば何でもいいのか。

Dim Ie As InternetExplorer
Set Ie = CreateObject("InternetExplorer.Application")
Ie.Visible = True
Ie.Navigate "http://www.google.co.jp/";
2017/06/06(火) 22:21:53.88ID:efHThVDq0
↑Microsoft Internet Controlsを参照設定しないとだめだわ。
2017/06/06(火) 22:53:35.96ID:xLIl+dL/0
>>510
IEではなく、chromeインスタンスを作ることって出来ますか?
2017/06/06(火) 23:09:15.48ID:NPrNQzK4x
Dim objShell as Object
Set objShell = CreateObject(“WScript.Shell”)
GC.Run (“chrome.exe -url ” & アクセスしたいページのアドレス)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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