X



Excel VBA 質問スレ Part49©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ bb2e-8SzA)
垢版 |
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

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

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

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
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/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0207デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
垢版 |
2017/07/10(月) 18:40:40.88ID:9dSXLq4x0
デフォルト値は定数式で、って言われるな

デフォルト値を文字列にして"thisworkbook"、evalで…とか考えたけど2013持ってないから試せない
そこまでしても読みにくくなるだけなので、素直に>>206みたいに条件分岐させたほうが良いと思う
0208デフォルトの名無しさん (ブーイモ MMdb-MhHl)
垢版 |
2017/07/10(月) 19:04:18.69ID:fjsjDBbbM
質問です。
ユーザーフォームをShowModal=Falseで表示しており、フォームを表示したまま、フォーカスをフォームからセルに移動することは可能でしょうか?
cells(1,1).select や application.goto cells(1,1) ではフォーカスがフォームから動きませんでした。
0210208 (ブーイモ MMdb-MhHl)
垢版 |
2017/07/10(月) 19:26:18.02ID:fjsjDBbbM
>>209
回答ありがとうございます。
後出しで申し訳ないですがバージョンは2007です。
試せるのが明日になりますが、appactivate試してみます。
0212デフォルトの名無しさん (ワッチョイ 9791-9DAm)
垢版 |
2017/07/10(月) 21:00:26.90ID:N/fNiVFC0
>>211
コンパイル時点で決まってないからかな〜
0213208 (ブーイモ MMdb-MhHl)
垢版 |
2017/07/11(火) 12:39:40.24ID:fzHCV1ljM
>>209
AppActivateもApplication.Visible=Trueでもいけました!
ちなみに以下のも試しましたが全部ダメでした。
ActiveWindow.Activate
ActiveWorkBook.Activate
ActivateSheet.Activate

2010以降だとWIN32APIとかでシートのマウスクリックを挟まないとダメかもですね。
0216デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
垢版 |
2017/07/12(水) 19:41:14.38ID:qkF1IqO80
↑誤送信すまん。

Sh As Object
Sh As Worksheet

どちらでも動くのは分かる。
Objectにするのって、
どんな値が入るかわからないから、
Variantでいいやって考えるのと同じ?
0218デフォルトの名無しさん (ワッチョイ 778b-utq/)
垢版 |
2017/07/12(水) 19:50:58.17ID:vG3FHDEt0
つっこむならせめて値と型の違いぐらい分かっていて欲しかったなあ
0221デフォルトの名無しさん (ワッチョイ bf23-KuRC)
垢版 |
2017/07/12(水) 20:10:18.44ID:agdmn3RR0
NewSheetイベントの引数の場合、Shには
「Worksheet オブジェクトまたは Chart オブジェクトが渡されます」
と書いてあるので
どっちが渡されてもいいようにObjectなのでしょう
0231デフォルトの名無しさん (ワッチョイ 778b-utq/)
垢版 |
2017/07/12(水) 21:55:54.59ID:vG3FHDEt0
She As Object
Set She = New LoveDoll
She.DressUp(MaidCostume)
She.Attach(SilliconVagina)
I.Fuck(She)
I.FinishAlone()
She.Detach(SilliconVagina)
I.Wash(SilliconVagina)
0234デフォルトの名無しさん (アークセー Sx39-y19a)
垢版 |
2017/07/13(木) 06:37:01.82ID:zrnYEEn3x
NewSheetイベントの引数ShがObject型なのは、WorkSheetクラスとChartObjectクラスの両方でNewSheetイベントの呼び出しが定義されていて、実行時にしかShの型が決まらないからだと思うが
Workbook.Sheets(Index)の戻り値がObject型なのと一緒
0236デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
垢版 |
2017/07/13(木) 13:12:36.23ID:9SrccZi40
指定日(A)から現時点(B)までの経過時間をミリ秒で取得したい場合、
どのようにしたら上手く取れるでしょうか?
VB.NETの時はGetTimeMillisecondsがあったので、(B-A).GetTimeMillisecondsで取得出来たんですが。
0238デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
垢版 |
2017/07/13(木) 13:36:43.69ID:9SrccZi40
>>237
ありがとうございます。
GetTickCountも試してはみたんですが、システム稼働してからの時間だからか
自分では上手く取得できませんでした。
「指定日」(今回やりたいのは1970/1/1)からの経過時間をミリ秒取得するには
どのようにしたら良いでしょうか?
0242デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/13(木) 20:31:54.44ID:kGwztgTZ0
>>236
timediff()関数だかdifftime()があったはず
0243デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/13(木) 20:34:22.33ID:kGwztgTZ0
datediff()だった
ただ秒単位が最小だった
0246デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/13(木) 21:37:03.54ID:kGwztgTZ0
指定日から当日までをdatediffの秒単位で取得して
当日からその時刻までをmsで取得して
足し合わせればいいんじゃね
0252デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
垢版 |
2017/07/14(金) 22:15:23.51ID:ont4yiQP0
!!!?

その手があったか!!
今まで、真面目に名前を付けることしか考えなかったわ。

Dim Sh As Worksheet
Set Sh = Thisworkbook.Worksheets("(´・ω・`)b")

こんなのもありだな。
0253デフォルトの名無しさん (ワッチョイ c491-BaGs)
垢版 |
2017/07/14(金) 22:29:36.70ID:Ry5eHGcV0
そういやみなさん
その場限りの適当マクロじゃなくて
ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?

自分はまずセルに名前をつけて
Const hoge = "セルにつけた名前"
Range(hoge).value = "うんこ"

みたいなことやってます
ちなみに、シート名でもこれやってるんですが‥

シート名やセル名が変わる可能性を前提にしたら
こういうアプローチになるとは思うんですけど
結局凄く無駄なことをやってる気がして…(結局変えることあんまないし)

特にセルの名前に関しては、どうせその文字列をConstのところにハードコードするなら
名前つけずに
Const hoge ="A1:B5"
でもええやんけとか思ってるんですが
行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
0255デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/14(金) 23:03:04.97ID:QoWI5XEA0
>>253
セルに文字列で意味をつけて
その文字列を検索して特定する
そのセルからのオフセットを固定しておく

例えば列名とか行名とか
0256デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
垢版 |
2017/07/14(金) 23:10:22.98ID:P3iXCzVv0
>>253
よくある表の列の増減対応する場合は
列挙体で列名を定義しておいて
Cellsで列名を参照させてる。
途中にぶっこんでも列挙体のほうをちょろっと書き換えればいい。

行にも対応させると、面倒かも。
0257デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
垢版 |
2017/07/14(金) 23:41:07.46ID:ont4yiQP0
>列の増減

会社のやつ、一切弄れないようにしたわwwwww
セルを保護するとかじゃなくて、
データの更新時に、全消しして再描画するのwwwwwwwwww
列挿入とかしても無駄ですよってwwwwwww
0258デフォルトの名無しさん (ワッチョイ e66d-qA4N)
垢版 |
2017/07/15(土) 00:03:43.14ID:fdp++JjU0
そういうの、このスレだと基本だと思う
・正規化したデータを引っ張ってくる
・ボタン押したらvbaで構築。シートすら削除して再作成
こんなんばっかだろ。誰もさわれなくて非難轟々だけど、どうかんがえてもこっちのほうが安全なんだよな
0262デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 04:37:45.96ID:7LAckzVN0
>>256
コードをいじらないといけないじゃないか
0263デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 04:53:42.10ID:7LAckzVN0
>>258
データの更新自分しか出来ないんじゃね

参照しか出来ないならwebシステムにすればいいんじゃね
0265デフォルトの名無しさん (ワッチョイ aa11-OTuW)
垢版 |
2017/07/15(土) 09:43:36.21ID:jhhap/jh0
>>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"

> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる
0266デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 09:44:21.75ID:7LAckzVN0
>>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?

なんの権限か不明だが
0267デフォルトの名無しさん (ワッチョイ f191-+gV6)
垢版 |
2017/07/15(土) 10:08:30.41ID:7LAckzVN0
>>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと

競争相手がいたら使われなくなる商品
0269デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
垢版 |
2017/07/15(土) 11:48:46.46ID:CRqbHh/Cp
>>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな

じゃ売ってみればいいんじゃね?
0270デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
垢版 |
2017/07/15(土) 11:50:44.37ID:CRqbHh/Cp
>>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから

社内とかの代替品がなければ嫌々でもそれを使うしかない
0273デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
垢版 |
2017/07/15(土) 17:34:03.53ID:0urlci1o0
VBAのマクロって

・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない

なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ
0274デフォルトの名無しさん (ワッチョイ c491-BaGs)
垢版 |
2017/07/15(土) 17:40:17.34ID:Id32lc0P0
>>255
なるほど
例えば
○年○月 の○のセルを指定する際に
「年」のセルを探してOffset(0,-1)する、みたいな感じですかね
自分はこれも名前つけて管理してましたが
セルが1つの場合はそれで良さそうですね
ただ、全く同じ内容のセルが検索範囲にないことが保証された運用にしないとバグりそうなのでちょっと怖いかも


>>256
表に対してレコードセットみたいなアクセスをしたい場合に
つい最近その方法を知って目からウロコでした
とにかくインテリセンスを効かせたい派なので・・
http://thom.hateblo.jp/entry/2015/12/17/000132
こういうことですよね

行方向に関しては、列のように各行に別々の意味を持たせるような使い方はしたことないので
問題ありませんね

>>261
自分は簡単なSQLを作る(ANDとかORで結合するだけ)に特化したStringBuilderみたいなのだけ使ってますね

>>265
やっぱ可変範囲のこと考えると名前つけるのは意味ありますよね
0275デフォルトの名無しさん (ワッチョイ c491-BaGs)
垢版 |
2017/07/15(土) 17:47:17.89ID:Id32lc0P0
>>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…

以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました
0276デフォルトの名無しさん (ワッチョイ 926f-MRQN)
垢版 |
2017/07/15(土) 20:37:21.43ID:VxLYhzBT0
所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ
0277デフォルトの名無しさん (アウアウウー Sa08-6eVw)
垢版 |
2017/07/15(土) 20:57:08.80ID:4AnbxIb9a
Excel VBA一本で家族養って食っていけてる人いる?
0289デフォルトの名無しさん (ドコグロ MM02-KaH7)
垢版 |
2017/07/16(日) 19:14:48.07ID:zK8m4MiwM
>>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。

vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。

初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。
0293デフォルトの名無しさん (オッペケ Srd7-OYLW)
垢版 |
2017/07/17(月) 18:01:49.57ID:eqSf35i7r
はぁ?
0301デフォルトの名無しさん (オッペケ Srd7-Ucbr)
垢版 |
2017/07/17(月) 20:12:26.22ID:7pjXcMGRr
馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。
■ このスレッドは過去ログ倉庫に格納されています

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