Excel VBA 質問スレ Part41©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2016/04/27(水) 04:11:46.79ID:Nk+oP5xRコード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part40
http://echo.2ch.net/test/read.cgi/tech/1455817784/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 122
http://echo.2ch.net/test/read.cgi/bsoft/1461287268/
0022デフォルトの名無しさん
2016/04/29(金) 11:13:45.24ID:hLQru2tB0023デフォルトの名無しさん
2016/04/29(金) 12:31:42.69ID:pnlNs8XQ自分でやれよと思ってしまう
みんなでクラス構成考えたりコードレビューとかしながら成長できる環境なら別にvbaでも構わんよ
0024デフォルトの名無しさん
2016/04/29(金) 12:46:25.08ID:5uxjIDtfツール: 電卓と一緒。大抵のことは自分でやれ。引き継ぎ対象にしない。
ライブラリ: 担当者がメンテする。ちゃんと引き継ぐ。
0025デフォルトの名無しさん
2016/04/29(金) 12:49:00.15ID:Iep7JOlc0026デフォルトの名無しさん
2016/04/29(金) 13:13:33.73ID:onpOySfzこう言うツールを作れば作業時間が○○ぐらい減るので
△△円/月程度の費用削減が可能です
って説明すればいいかと
0027デフォルトの名無しさん
2016/04/29(金) 13:34:23.20ID:oVc0CQsa残業は今でもほぼ無いし、早く終わったからってすぐにやるべき仕事もない
0028デフォルトの名無しさん
2016/04/29(金) 13:42:07.75ID:22q9RBL3やれ会議だ、やれ相談だと呼ばれて中断せざるを得ない場合の方が比重が高そう
だいたい作業時間短縮ってツールよりもライブラリの充実の方が問題になるし・・・
けど考えてみれば俺以外分からないんだから、ツールくれれば効率上がりまっせって言うのはありか
0029デフォルトの名無しさん
2016/04/29(金) 13:43:50.31ID:UCIGz4cp右から列方向で連番を振る方法ありますか?
オプションで逆方向xlPreviousをつけても、
一番右下に1が振られるだけで、後の順序は
左から列方向したのと同じなのですが。
0030デフォルトの名無しさん
2016/04/29(金) 13:55:01.28ID:22q9RBL3Sub test(検査範囲 As Range, 検査値 As String)
k = 0 '連番開始値
xr = 検査範囲
Top = LBound(xr, xlRows)
Bottom = UBound(xr, xlRows)
Left = LBound(xr, xlColumns)
Right = UBound(xr, xlColumns)
For i = Right To Left '右から左
For j = Top To Bottom '上から下
If xr(j, i) = 検査値 Then
検査範囲.Range(j, i) = k
k = k + 1
End If
Next
Next
End Sub
こういう事?
0031デフォルトの名無しさん
2016/04/29(金) 14:06:46.66ID:zF/UNtdRexpressでいいんでしょ?
0032デフォルトの名無しさん
2016/04/29(金) 14:19:18.90ID:Fcw6JTQb他の人の業務も早く正確にミスなく出来る
リードタイムも減って機会損失が少なくなるとか
0033デフォルトの名無しさん
2016/04/29(金) 14:33:09.04ID:UCIGz4cpFINDの引数でどうにかならないかと思っていましたが、
やっぱりforとifで判定していくしかないんですね。
ありがとうございます。参考になりました。
0034デフォルトの名無しさん
2016/04/29(金) 16:56:22.77ID:VQFWKbyJ通常のFINDとは逆順で検索したいんだよね?
右下から左に検索 & 下から上
1回目のみ FIND(・・・ ,SearchDirection:=xlPrevious,SearchOrder:=xlByRows)
2回目以降 FindPrevious()
でよくね?
やりたい事の意味を間違って受け取ってるかな?
0035デフォルトの名無しさん
2016/04/29(金) 19:35:10.13ID:UCIGz4cp言葉足らずですみません。
6 3
5 2
4 1
ではなくて、
4 1
5 2
6 3
という意図でした。
123
456
や、
1 4
2 5
3 6
はFINDの引数だけでできたので、右から列方向もさくっとできないかと思ったのでした。
0036デフォルトの名無しさん
2016/04/29(金) 21:15:23.39ID:sUt0Q0jr時々、シートに配置したボタンが、どこかに飛んでいくようになった。
ブック名やシート名を指定してるのに、
全然関係ないセルに値を書き込みにいったり。
俺がバグってるだけ?
0037デフォルトの名無しさん
2016/04/30(土) 01:05:44.58ID:bnyf9CY9それとは逆に、シートのセル例えば Range("A1")の値が変化することをイベントとすることで、
例えば、フォームのTextBox1の値を変化させることはできるかな?
超上級レベルのPGさん(C#, VB,net, Java経験者)、その方法を教えて。
0038デフォルトの名無しさん
2016/04/30(土) 01:23:26.23ID:bQzkVaJ6=foo(A1)
と入れときゃいいんじゃないの?
その関数 foo の中でTextBox1の値を変化させる
003937
2016/04/30(土) 01:27:16.13ID:bnyf9CY9外部アプリ、例えば、UWSCで書き込むものとします。
004037
2016/04/30(土) 01:59:49.62ID:bnyf9CY9004137
2016/04/30(土) 02:03:47.30ID:bnyf9CY9vbaでもvb.net のような、自作イベントなんてできるの?
RaiseEventのような。
0042デフォルトの名無しさん
2016/04/30(土) 04:06:29.80ID:3b/0XXdCVB6と一緒で一応ある。
以下のMSDNに載っている使用例のサンプルは、
VB6のコードのようでVBAで使うにはコントロール名など若干修正は必要だが
RaiseEvent ステートメント
https://msdn.microsoft.com/ja-jp/library/office/gg264327.aspx
0043デフォルトの名無しさん
2016/04/30(土) 05:52:32.49ID:nOun1cZCたぶん、様々なイベントもあるのだろう
0044デフォルトの名無しさん
2016/04/30(土) 08:01:04.45ID:YWn/7cOtあるものとないものがある。
ま、モノが違うから当然だけど。
例えば一定時間でイベントが発生するようなものは確かVB.Netでは3種類くらいあったと思ったけど、
VBAでは無いのでAPIを使ってコールバックさせるような感じで組まなければいけなかったりとか
0045デフォルトの名無しさん
2016/04/30(土) 12:10:14.21ID:uVz81x78みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
0046デフォルトの名無しさん
2016/04/30(土) 12:37:56.63ID:3TsFkhxLいっぱいページ開いてタブを複数使ってるとき
各タブがbusyでまだ表示が終わってないかを判定するにはどうしたらいいですか?
調べた限りIEでのプロパティは取得できても各タブでのプロパティは取得できない。
0047デフォルトの名無しさん
2016/04/30(土) 19:56:35.13ID:/rgv18x0また、使い終わった変数をもう使わないと明示する処理はありますか?
0048デフォルトの名無しさん
2016/04/30(土) 21:09:42.54ID:XEqomZlq0049デフォルトの名無しさん
2016/04/30(土) 21:10:40.96ID:XEqomZlq0050デフォルトの名無しさん
2016/04/30(土) 21:11:57.74ID:XEqomZlqset sxxx = nothing
とか
0051デフォルトの名無しさん
2016/04/30(土) 21:23:19.94ID:O7pF7Dyv途中でも宣言できるよ
0053デフォルトの名無しさん
2016/04/30(土) 21:51:28.33ID:22Ts1M1X知らないなら黙ってろよ...
0054デフォルトの名無しさん
2016/04/30(土) 22:00:44.42ID:v/yWAGpr0055デフォルトの名無しさん
2016/04/30(土) 22:40:18.96ID:bQzkVaJ60056デフォルトの名無しさん
2016/05/01(日) 06:11:15.76ID:N+mY7DPn.NetみたいにIf文の中やFor文の中で宣言したところでその中でのみスコープが効くって訳でなくて
あくまでモジュールか関数単位でのスコープだから
やっぱりその単位で纏めて書いておいた方がいいだろな
0057デフォルトの名無しさん
2016/05/01(日) 06:38:17.62ID:e/Hse44Lバカ発見
0058デフォルトの名無しさん
2016/05/01(日) 06:48:30.10ID:FGPo8aL5前スレに貼ってあったブログの記事見たときも思ったけど、
今は自分が触ってるツールがなんなのかすらよく分かってないのがプログラマ名乗る時代になっちゃったな。
0059デフォルトの名無しさん
2016/05/01(日) 06:55:17.20ID:4tDBI2/Zなにか悔しいことでもあったのか?
0060デフォルトの名無しさん
2016/05/01(日) 08:55:20.52ID:e/Hse44Lバカ発見
0061デフォルトの名無しさん
2016/05/01(日) 10:01:02.93ID:EKtQwo7ZExcelとなんの関係があるの?
0062デフォルトの名無しさん
2016/05/01(日) 10:38:14.78ID:pgSGezQj0063デフォルトの名無しさん
2016/05/01(日) 11:22:51.97ID:etCluhyUその考え方だと、ソースコードをインデントする事に意味はない、ってことになる
実行コストの問題じゃないからな
こだわる理由は薄いけど、お作法だと思っておけば良いんじゃない
0064デフォルトの名無しさん
2016/05/01(日) 12:36:30.20ID:26Cdb2A4最初にまとめて宣言するとどこで宣言されてるのかわかりやすい反面、どこで使われているのかがわかりにくくなる
0065デフォルトの名無しさん
2016/05/01(日) 13:28:31.99ID:Jk9067FT局所スコープなんて邪道w
0066デフォルトの名無しさん
2016/05/01(日) 13:37:50.19ID:X/eAHaZZ0067デフォルトの名無しさん
2016/05/01(日) 13:55:38.98ID:hsr/yOpl普通に、ハンガリアン記法を使うよな?
0068デフォルトの名無しさん
2016/05/01(日) 13:59:54.67ID:cTEU13RB0069デフォルトの名無しさん
2016/05/01(日) 14:16:23.37ID:ejxts/3yDim 変数As ○○
で安定
0070デフォルトの名無しさん
2016/05/01(日) 14:30:45.34ID:X/eAHaZZそれもまあ、、、いいか
0071デフォルトの名無しさん
2016/05/01(日) 14:35:03.78ID:4tDBI2/Zまあどっちにせよポリシーを決めておけばいいと思う
俺も使う直前で定義する派
0072デフォルトの名無しさん
2016/05/01(日) 14:38:28.86ID:26Cdb2A4いつの時代だよおっさん
0073デフォルトの名無しさん
2016/05/01(日) 15:03:34.65ID:FGPo8aL5それ以前に同関数内で異なる型の変数(引数除く)を使うのはあまりよろしくない。機能が分かれてない。
0074デフォルトの名無しさん
2016/05/01(日) 15:15:10.83ID:X/eAHaZZ前半と後半が食い違ってる
0075デフォルトの名無しさん
2016/05/01(日) 15:19:30.78ID:26Cdb2A40076デフォルトの名無しさん
2016/05/01(日) 15:34:29.56ID:X/eAHaZZ0077デフォルトの名無しさん
2016/05/01(日) 16:38:53.50ID:FGPo8aL50078デフォルトの名無しさん
2016/05/01(日) 17:01:16.67ID:4tDBI2/Z> 型宣言しちゃうと出来ない事
なんのこっちゃ
0079デフォルトの名無しさん
2016/05/01(日) 17:06:37.92ID:FGPo8aL5たとえばVariant型で受けて関数内部で型によって処理を変える事で多態性を確保するとか、
返却用の引数に渡された型に合わせて返値を変えるとか、
同じ名前のプロパティを持つ別のクラスを入れて異なる処理が同一関数で行われる様にするとか。
でも考えたらVariant型も型宣言するから「Variant型以外では出来ない事」って言わないと語弊があったな。
0080デフォルトの名無しさん
2016/05/01(日) 17:14:32.74ID:X/eAHaZZ最後の一行で終わっとるじゃん。
あとEmptyやNullを受け取ったり返したり。
ライブラリ的な関数はVariantになりがちだ。
0081デフォルトの名無しさん
2016/05/01(日) 17:35:31.90ID:sRpB4XMFVariantが楽なんだよな。
0082デフォルトの名無しさん
2016/05/01(日) 18:29:04.37ID:FGPo8aL5だ、だって宣言しないで使える変数はVariant型だけだし(震え声
0083デフォルトの名無しさん
2016/05/01(日) 18:36:29.17ID:pOSQMib2まぁね。本当はクラス作ってインターフェースで多態性持たせたりする方が安全なんだけど、
VBAは1クラス1モジュールという制限があってぽこぽこ作ると分かり辛くなるから
結局程度の問題で、「Variantは実行時にしか型の違いによるエラーを確認出来ないことがある」という認識さえあれば
VBAで使うのは止むなしといったところがあると思う。
シートやレンジオブジェクトとの親和性も高いしね。
0084デフォルトの名無しさん
2016/05/01(日) 20:02:25.44ID:FGPo8aL5Variant型はハグの元だっていうのは、単に理解が浅いだけだからな。
本当にバグの元ならJavaScriptなんて使えたもんじゃねぇだろうと。
0085デフォルトの名無しさん
2016/05/01(日) 20:24:15.84ID:4tDBI2/Zいや、君の言ってる
> 下手に宣言するクセつけない方がいいけどな。
が意味不明なんだけど
0086デフォルトの名無しさん
2016/05/01(日) 20:36:58.58ID:pgSGezQjローカル変数は、ない
これがオレの理想
0087デフォルトの名無しさん
2016/05/01(日) 20:37:38.51ID:pgSGezQjスタンダードくらいか
0088デフォルトの名無しさん
2016/05/01(日) 20:41:05.62ID:ycnEliipID:FGPo8aL5
バカ発見
0089デフォルトの名無しさん
2016/05/02(月) 07:24:52.98ID:l4EfLYgvえっどういうこと?
まさかスタティックおじさん?
0090デフォルトの名無しさん
2016/05/02(月) 07:32:53.88ID:IhhEj+7hスタティックと>>86とどう繋がる?
0091デフォルトの名無しさん
2016/05/02(月) 10:17:18.36ID:3YV7E0Ftでググってこい
0092デフォルトの名無しさん
2016/05/02(月) 14:44:30.79ID:qnyBKwLuログインボタンを押すマクロですが、一定時間(10〜20時間?)経過後、同じマクロを実行しても
ログインボタンが押せなくなっており、ログインできず処理が中断してかなり困っています。
一度手動でログイン後、再度マクロを実行すると問題なくログインボタンが押せるのようになるのですが、
何が問題なのでしょうか?
Sub ログイン()
Set objie = CreateObject("internetexplorer.application")
objie.Visible = True
objie.Navigate "https://s10.kabu.co.jp/_mem_bin/light/login.asp?/Light/"
Do While objie.Busy = True Or objie.ReadyState <> 4
DoEvents
Loop
objie.Document.All.SsLogonUser.Value = "自分のID"
objie.Document.All.SsLogonPassword.Value = "パスワード"
Dim waitTime As Variant
waitTime = Now + TimeValue("0:00:1")
Application.Wait waitTime
Dim obj As Object 'objie.Document.forms(0).submitでも代替可
For Each obj In objie.Document.getElementsByTagName("input")
If obj.Value = "ログイン" Then
obj.Click
Exit For
End If
Next
End Sub
0093デフォルトの名無しさん
2016/05/02(月) 15:56:15.53ID:WvgoLY0A0094デフォルトの名無しさん
2016/05/02(月) 18:35:24.79ID:tBJRQx2nドキュメントの中を操作するときは、
objie.Busy = True Or objie.ReadyState <> 4
のループの後に、
objIE.document.ReadyState が "complete"になるまで待った方がいい。
0095デフォルトの名無しさん
2016/05/02(月) 18:46:14.55ID:8Cx+VcMTExcelのバージョンの問題ですね
0096デフォルトの名無しさん
2016/05/02(月) 18:58:03.00ID:rgztSLD4>>>83
>Variant型はハグの元
今後可愛い女性に対してなら必ず使わせてもらおう
男が使ったら顔の形が分からなくなるくらいまでぶん殴るかも知れない
0097デフォルトの名無しさん
2016/05/02(月) 20:02:50.58ID:xcJ43A0Jこれかな
試しにループ除いて、2,3秒待ってからクリックするようしてみたらできないか?
0098デフォルトの名無しさん
2016/05/02(月) 20:53:03.32ID:Xt0DxDQ3Visual Basic
Visual C#
の2つを平行で勉強はじめたけどそっくりすぎやしないか?
これどっちか1つにしぼるとしたらどっちがいい?
0099デフォルトの名無しさん
2016/05/02(月) 20:57:35.14ID:xZrjNArl0100デフォルトの名無しさん
2016/05/02(月) 21:08:12.40ID:3bYl7aeDそんなのVBAに決まってるだろ
010192
2016/05/02(月) 21:08:53.84ID:qnyBKwLuレスありがとうございました。ちなみにExcelのバージョンは2016です。
調べてみたら、確かに94氏の言う通り、objIE.document.ReadyState = "Complete"
のループを追加しないとエラーの原因になるんですね。一定時間が経過してから
上記を追加して検証してみます。ありがとうございました。
0102デフォルトの名無しさん
2016/05/02(月) 21:22:28.55ID:4tcpikla勉強したらオレにLINQを教えてくれ
0103デフォルトの名無しさん
2016/05/02(月) 21:55:58.22ID:l4EfLYgvCかC++をやれよ高度だぞ
0104デフォルトの名無しさん
2016/05/02(月) 22:00:15.92ID:4tcpikla0105デフォルトの名無しさん
2016/05/02(月) 22:06:27.11ID:RcDnq76T0106デフォルトの名無しさん
2016/05/02(月) 22:48:52.56ID:RnthQ0WY0107デフォルトの名無しさん
2016/05/02(月) 23:57:45.81ID:xuf7icL/俺はプログラマだっての。
0108デフォルトの名無しさん
2016/05/02(月) 23:58:44.90ID:4tcpiklaそういう苦労が山ほどあったわけよー、分かる? それを今は .Net連携だとかで済ますっていうのがさー、心がこもってないっていうかさー
0109デフォルトの名無しさん
2016/05/03(火) 00:04:12.47ID:VOABePutプログラム言語とみなされてなかった。死にたい。
0110デフォルトの名無しさん
2016/05/03(火) 04:29:40.49ID:K2cMa6s90111デフォルトの名無しさん
2016/05/03(火) 06:21:01.33ID:m0WSkRh/確かに
仕方なく vbs でやってたけど最近 PowerShell の方が楽だと気づいた
0112デフォルトの名無しさん
2016/05/03(火) 08:57:22.05ID:+0pS9A2f多分VBから入ってObject指向の考え方を押さえてからC#の文法を押さえるといいかも
VBAやってる人がいきなり考え方も文法も違うのをやるとかえってキツいかもよ
0113デフォルトの名無しさん
2016/05/03(火) 09:43:53.02ID:yyfQ64gm0114デフォルトの名無しさん
2016/05/03(火) 11:50:04.12ID:WpiLU58G大きさや色を変えることはできないですか?
0115デフォルトの名無しさん
2016/05/03(火) 12:23:18.09ID:F7Orkgnrいやそれやったらvbsのが楽や言っとんのやでw
0116デフォルトの名無しさん
2016/05/03(火) 12:37:00.12ID:TF5VRcqZCOBOLはあるのになw
0117デフォルトの名無しさん
2016/05/03(火) 12:49:05.33ID:IJoN7jmcO vbsの方が
O vbsが
日本語は正確にね。
0118デフォルトの名無しさん
2016/05/03(火) 13:09:39.65ID:TF5VRcqZ関西弁であること自体はスルーなのか?
0119デフォルトの名無しさん
2016/05/03(火) 19:29:08.93ID:G9XEXQGeBitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
3
0120デフォルトの名無しさん
2016/05/03(火) 19:46:05.17ID:TF5VRcqZ0121デフォルトの名無しさん
2016/05/03(火) 21:52:26.24ID:yyfQ64gm■ このスレッドは過去ログ倉庫に格納されています