1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part69 https://mevius.5ch.net/test/read.cgi/tech/1607786543/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
220 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 20:02:02.68 ID:HPbAbv3kH.net] とんかつ とんかち
221 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 22:40:18.25 ID:6cC4Cv/z0.net] マジレスするとExtraやExtendのX
222 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:25:16.60 ID:XNPY+hAHa.net] ガントチャートの欠点は 遅れの検出がおそいだよね 期限が過ぎないと遅れることがわからない これでは手遅れですよ
223 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:40:10.17 ID:5GJi7nDK0.net] >>221 あ、そうなんだ EXCELの数式だったら予定線より実績線が 二日くらい前になったらワーニングで黄色、 予定線以降になったら赤とかにしとけば ワーニングに入った時点でリカバリ案とか 会議で話し合えるのにね。
224 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:54:32.74 ID:mzxN/X4qM.net] 期限過ぎる前に進捗率がヤバくなればリスケで仕切り直し いつまで経っても期限が過ぎることは無い
225 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 13:24:50.99 ID:5GJi7nDK0.net] >>223 本当にありそうで怖いわ!
226 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 17:28:26.59 ID:XNPY+hAHa.net] 開始日でだいたいわかる おおくのばあいはまともにスタート出来てないからw 人がいない、資料がそろってない、仕様がきまってない だも スタートできなきゃゴールするわけがない
227 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:57:49.87 ID:5GJi7nDK0.net] >>225 開発あるあるだなw そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。 他のある程度大きいシステムになると ・客先から上がって来ない要件定義 ・客先だから強く言えないチームのリーダー ・差し迫る納期 ・焦りが出てきてイラつく俺ら。それを宥めるリーダー この辺からが違うところかな ・システム間の連携や他システムとの連携のため伸ばせない納期 ・更に焦る俺ら。宥めきれなくなるリーダー ・上がって来る要件定義、血眼で設計書を作る俺ら ・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書 ・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら ・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間 ・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人 ・何とかSTまで終了。飛ばされるリーダー、バグだらけの成果物、昇天する俺ら 最悪こんな感じかな。
228 名前:デフォルトの名無しさん [2021/04/13(火) 21:11:48.26 ID:QqfAiqTvM.net] >>225 開発あるあるだなw そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。 他のある程度大きいシステムになると ・客先から上がって来ない要件定義 ・客先だから強く言えないチームのリーダー ・差し迫る納期 ・焦りが出てきてイラつく俺ら。それを宥めるリーダー この辺からが違うところかな ・システム間の連携や他システムとの連携のため伸ばせない納期 ・更に焦る俺ら。宥めきれなくなるリーダー ・上がって来る要件定義、血眼で設計書を作る俺ら ・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書 ・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら ・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間 ・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人 ・何とかSTまで終了。飛ばされるリーダー、ハゲだらけの社員、昇天する俺ら 最悪こんな感じかな。
229 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:15:01.18 ID:5GJi7nDK0.net] うーん、何か接続がおかしいのかな 他のスレに誤爆になってこのスレでも2回載ってしまった すまんこ
230 名前:デフォルトの名無しさん [2021/04/13(火) 21:34:03.40 ID:QqfAiqTvM.net] うーん、何か接続がおかしいのかな 他のスレに誤爆になってこのスレでも2回載ってしまった おまんこ
231 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:38:41.78 ID:5GJi7nDK0.net] >>229 おいw
232 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:51:01.50 ID:EILUghab0.net] ウンコマクロ
233 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:17:03.44 ID:hXL/FQf4a.net] まあ。そんなんだ
234 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:29:05.82 ID:jCprHRHj0.net] EXCEL VBAは好きだし凄く肌に合ってると思うけど、案件単価がちょっとなぁ
235 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:47:31.92 ID:kMGrei9fM.net] EXCEL VBAが肌に合う様な奴が案件単価とか生意気。
236 名前:デフォルトの名無しさん [2021/04/14(水) 20:39:37.17 ID:E4KyUeCU0.net] 一般事務が仕事中に覚える→結婚・退職→主婦の傍ら有り余る時間で糞みたいな単価で受注 まぁ、悪い事でもなんでもないんだけどね、うん
237 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:45:27.19 ID:ijCB3EYv0.net] あたまが鉛のようにおもい
238 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:47:48.07 ID:cTgQ8ZPt0.net] 1時間で作れるような案件が高いわけない
239 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:52:06.82 ID:ijCB3EYv0.net] 冷戦時代日本がロケットのことでロシアに教えをこうたとき 一言ジャイロに問題があるといって 100億ぐらいもって去っていったそうな
240 名前:デフォルトの名無しさん [2021/04/14(水) 21:21:01.64 ID:tTtaKpUk0.net] VBA Seleniumdriveで driver.ExecuteScript ("XXXX") でonclickをクリックするとモーダルコンテンツが表示されます。 コンテンツ内のXpathをクリックしてもボタンを押すことが出来ないんですが、 SendKeys "{TAB}", Trueで該当のボタンをクリックする以外に 要素を指定してクリックする方法ってありますか?
241 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:43:58.06 ID:bsTwIiw80.net] 下記「やりたいこと」のようにhtmlから抽出したいのですが、 下記「前提」があって、どうしたらいいのか分かりません。 なにか方法ありますでしょうか? --- やりたいこと --- 下記htmlにおいて、"ヘッダ"のすぐ次に存在しているtableタグ内の項目1,2、要素1,2を取得したい --- 前提 --- @"ヘッダ"は特定できる Atableは特定できない ・tableのidや要素から特定できない ・tableの数から特定できない(取得したいtableが何個目なのか分からない) --- html例 --- ・・・ <h2>ヘッダ</h2> <table> <tr><th>項目1</th><th>項目2</th></tr> <tr><td>要素1</td><td>要素2</td></tr> </table> ・・・ --- プログラム例(Microsoft Internet Controls、Microsoft HTML Object Libraryは参照設定済み) --- Dim objIE As New InternetExplorer objIE.Navigate "***" Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE DoEvents Loop For Each obj In objIE.Document.getElementsByTagName("h2") If InStr(obj.innerText, "ヘッダ") > 0 Then ヘッダは見つけることができるが、この後どうしたらいいのか・・・ End If Next obj
242 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 23:08:27.54 ID:mIFbuL/UH.net] >>240 <HTML>タグか<BODY>タグで全体のソースを取り込んで、あとは文字列として処理
243 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 01:36:52.92 ID:E+h/Uieza.net] VBAでやる意味あんの?
244 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 02:03:12.55 ID:Un6DIa9Z0.net] >>241 >>242 ありがとうです。 もう少し考えます。。
245 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 06:20:29.14 ID:5JoH8OD60.net] >>240 jQuery なら、2重ループで、 <h2 id="id-1">ヘッダ</h2> <table><tbody> <tr><th>項目1</th><th>項目2</th></tr> <tr><td>要素1</td><td>要素2</td></tr> </tbody></table> <table><tbody> <tr><th>項目3</th><th>項目4</th></tr> <tr><td>要素3</td><td>要素4</td></tr> </tbody></table> $( function ( ) { let table = $( '#id-1' ).next( ); //次の兄弟要素 // table > tbody > tr を、1行ずつ処理する $( table ).children( ).children( ).each( function ( index, row ) { // 1列ずつ処理する $( row ).children( ).each( function ( index_2, col ) { console.log( `${ index }行 ${ index_2 }列`, col.textContent ); } ); } ); } ); 出力 0行 0列 項目1 0行 1列 項目2 1行 0列 要素1 1行 1列 要素2
246 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 06:53:10.31 ID:r2UxJQfIM.net] >>244 VBAの構文に変換してくれ
247 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 11:25:51.10 ID:c60l0/FJ0.net] >>244 VBAに対してHTMLの集約やメソッドチェーンが使える言語をぶつけてくるのは卑怯だと思うの
248 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 12:05:58.59 ID:nvZZu+k0a.net] スクリプトぐらいなら良くねの
249 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 12:18:14.12 ID:ivOr0/mk0.net] >>244 結局総当りか まあそうだよね
250 名前:デフォルトの名無しさん [2021/04/15(木) 16:07:09.80 ID:MUSbI6ab0.net] 質問です。 今は下記のようなコードとvlookupを組み合わせて連続で請求書を印刷しています。 一つのジョブにまとめて印刷するにはどのようにしたらよいでしょうか? Sub 連続印刷() Dim i As Integer Dim LastRow As Integer Worksheets("請求書").Select With Worksheets("データ") For i = 3 To 5 Range("d1").Value = .Range("A" & i).Value Range("n1").Value = .Range("A" & i + 1).Value i = i + 1 ActiveSheet.PrintOut Next End With End Sub
251 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:29:43.21 ID:c2wrGnlaM.net] >>249 vlookup部分もVBA化して組入れれば一つのJOBに出来るよ
252 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:46:43.97 ID:BAka9uDVM.net] >>249 3つぐらいなら請求書シートを必要分コピーして各々値を入れて複数シートを一気に印刷するしか思い付かない
253 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:53:55.45 ID:c2wrGnlaM.net] 請求書シートも複数有るなら、それをFor Nextで繰り返すぐらいだろうね
254 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 19:09:26.62 ID:pI0uqt930.net] UI Automationの質問てここでいいの? VBAでゆっくりムービーメーカー4のキャラクター切り替えをやりたいんだけど、 うまくいかず。 キー操作をWindowsに送ることでごまかしている。 ”追加してシーク”ボタンを押すだけならこんな感じでできるんだけど、 Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "追加してシーク") Set elmYukkuri_Button = elmYukkuri_timeline.FindFirst(TreeScope_Subtree, iCnd) Dim InvokePattern As IUIAutomationInvokePattern Set InvokePattern = elmYukkuri_Button.GetCurrentPattern(UIA_InvokePatternId) ボタンじゃなくてコンボボックスでボタン内容が切り替わるときはどうすればいいんだろう?
255 名前:デフォルトの名無しさん [2021/04/15(木) 21:08:32.60 ID:fGNDJEoP0.net] >>249 俺もそれ使ってたわ 100セットとか印刷するとコピー機占領するからすごい迷惑なんだよね。 色々あって、vbaは逆に使わなくなった 方法はは>>251 にかなり近くて、 ・シートを連番で用意しておく ・シート名は「3」〜「5」 ・vlookupのキーはシート名にする Range("d1").Valueには、 .Range("A" & シート名).Value Range("n1").Value には、.Range("A" & シート名+ 1).Value のように、予めシート名を引っ張ってvlokup部分は完結させておく 後はシート「3」〜シート「5」を選択し、印刷するだけ。ジョブは一つになるし、vbaも不要になる シート内容が変更になる時は、vbaを使って連番のシートを再作成すると良い
256 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 22:20:13.95 ID:8+4wzY1VH.net] 直接印刷せずPDFにすればいいじゃん PDFなら大量のファイルを1回のジョブで一気に印刷できるぞ
257 名前:デフォルトの名無しさん [2021/04/15(木) 22:56:26.48 ID:fGNDJEoP0.net] >255 PDFに出力する時はvbaで制御できないんじゃ
258 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 23:42:15.25 ID:rzqCvIH40.net] >>253 ここで良いけど、 UIAutomationとムービーメーカー4両方知ってるレアな人じゃないとわからないと思うぞ。 俺は前者しかわからんからあてずっぽうで言うけど、 FindFirstじゃなくてFindAllして中身を調べれば良いんじゃないの?
259 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 04:48:18.88 ID:aO0hqHGi0.net] >>257 とりあえずごまかしながら作ったのがこんなやつ https://youtu.be/3RApNTTEkIs ソースとかほしい?
260 名前:249 mailto:sage [2021/04/16(金) 19:03:44.09 ID:yYdNvwCc0.net] 様々なご提案ありがとうございます。 シートを増やして行くやり方にしようと思います。
261 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 04:28:55.40 ID:aiLxsK7Md.net] 質問です。変更したセルに色をつけたいと思っており、調べたところ変更履歴の使用や色を変更するマクロ(private sub〜)は出てきました。 それに加えて、その色変更をその日だけ有効にすることは可能ですか? 例えば、 4/17 A1の値 1 1→2に変更すると色も変更 4/18 A1の値 2 白に戻っている 2→3に変更すると色も変更… といった感じなんですが。。。
262 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 04:47:34.80 ID:5JzvmzAs0.net] If Today()="2021/04/17" Then Range("A1").Interior.Color = 256 〜とか条件加えればいいんじゃね
263 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 05:37:32.98 ID:HGZEZM9x0.net] こんなこと出来ますか? https://i.imgur.com/ypZck9P.png A列に予め色の見本が、C列に数値を代入していく。 C列に数値を代入したら、そのセルの背景色をA列の色の見本と同じ色にしたい。 A列め色の見本は20色ぐらいを想定。 条件付き書式を使おうと思ったけど、20色も増えたらルールも20個書かないといけないので、ちょっとなえた。
264 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:27:08.23 ID:fydw5HpOa.net] >>261 これを、ワークブックオープンにいれておけばよいよ
265 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:33:53.75 ID:fydw5HpOa.net] >>262 セルに入力されたらシートチェンジというモジュールがあるはずなので それをさがしてその中でいろいろな処理をすればよいよ
266 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:44:21.86 ID:iZq5P4oj0.net] >>262 出来る出来ないで聞かれたら出来ると答えるよ。 方法は?と聞かれたらワークシートチェンジイベントをシートモジュールに付け足して、引数にはRangeが入ってくるから その範囲にC列が被っていたらそこの数字みてA列の該当する数字の色拾って来て着色する。 イベントの範囲とC列が被っているかどうかは計算でも求められるけど、今回はセル値も見ることになるからFor Each でイベントでとったRangeを ぐーるぐる回してC列かどうかを見ればいいと思うよ。 その際、イベントの引数の範囲もRangeだけど Eachの後に書くCellに該当する変数の型もRangeになることに気をつけて。 実はCellって型はRangeなんだよ。
267 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:03:20.22 ID:jQb3oNGZ0.net] >>265 こういう回答する人って知識ひけらかしたいだけに見える 簡潔答えられないのかね
268 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:05:28.63 ID:gHXBJYD60.net] まあ条件付き書式のほうがスッキリしていいと思うけどな
269 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:19:08.72 ID:iZq5P4oj0.net] >>266 そうなんだ 最近ヒマしててちょっとひけらかしたい部分もあったんだ。 でも作る時のポイントになること押さえてるからいいだろ? 本当は手元に環境があればソース貼りゃいいんだけど。
270 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:26:58.07 ID:fydw5HpOa.net] ふつうはシート・チェンジのモジュールのなかで target.アドレスやtarget.valueで値を取り出すのじゃないのか なにをやってるのかよくわからんぞ、
271 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:28:09.89 ID:5JzvmzAs0.net] >>262 どういうシステムにしたいかがいまいち分からん まずC列の複数のセルに0〜5の整数をまとめていくつも代入して、 その後に数字入れたセルの背景色をまとめて変えたい?
272 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:30:13.57 ID:jQb3oNGZ0.net] 口だけ出すのもなんなので一応作ってみた Sheet1モジュール用 Private Sub Worksheet_Change(ByVal Target As Range) Dim Alea数値 As Range Set Alea数値 = Range("C4:C9") If Intersect(Target, Alea数値) Is Nothing Then Exit Sub Dim AleaColor As Range Set AleaColor = Range("A4:A9") Dim Rng As Range Dim Color As Long For Each Rng In AleaColor If Rng.Value = Target.Value Then Color = Rng.Interior.Color Target.Interior.Color = Color Exit Sub End If Next Rng End Sub
273 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:46:50.44 ID:fydw5HpOa.net] >>262 てさあ、なかなか賢いとうか 赤や黄色のセルを取り出す、⬅これできないだよな どこかのセルと同じ色にするならできるだけど
274 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:47:30.68 ID:IoVEY+h40.net] >>271 素晴らしいです。 やりたいことが出来ました。 コメントくれた人にも感謝します。
275 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:50:15.05 ID:xdZBdiobH.net] >>271 いま見返したらAreaがAleaになってるな
276 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:56:18.27 ID:fydw5HpOa.net] エクセルは1600万色もあるからどれが赤で黄色なのかわからない 262のように色見本があって、これが赤です。と決めてくれないと
277 名前:デフォルトの名無しさん [2021/04/17(土) 09:08:47.12 ID:lNzUtf8u0.net] >275 EXCEL関係ない
278 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 12:35:40.75 .net] >>102 ,103 返信ありがとうございます。 input_str =〜 の()内にB2の文字列を貼付して出来ましたが、 input_str =〜 input_str =〜 と複数行にして試しましたが、複数行は出来ませんでした、どうすれば複数行処理可能になりますでしょうか?
279 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:38:15.19 ID:A+RmKR4F0.net] >>258 いや、ムービーメーカー4がわからないから、貰ってもわからないし。 コンボボックスって未選択の所? UIAutomationじゃなくてもSendMessageで行けそうな気がするけど・・。 ▼が何の文字を指定すればいいのかわからないって意味なら、 やっぱりFindAllで取得して、配列の何番目にそれっぽいのが入ってるか調べればいいと思うな。
280 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:55:43.60 ID:IoVEY+h40.net] >>278 1日がかりでググりまくりの苦労と試行で出来た。 'コンボボックスを開いて折りたたむ Dim ptnExpand As IUIAutomationExpandCollapsePattern Set ptnExpand = elmYukkuri.GetCurrentPattern(UIA_ExpandCollapsePatternId) ptnExpand.Expand ptnExpand.Collapse 'コンボボックスの中身をセルA3に書き出す Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ListBoxItem") Set elmsYukkuri = elmYukkuri.FindAll(TreeScope_Children, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "TextBlock") For i = 0 To elmsYukkuri.Length - 1 Set elmYukkuri = elmsYukkuri.GetElement(i).FindFirst(TreeScope_Children, iCnd) Cells(i + row_セリフ開始, 1).Value = i Cells(i + row_セリフ開始, 2).Value = elmYukkuri.CurrentName Next
281 名前:デフォルトの名無しさん [2021/04/18(日) 09:49:47.16 ID:AhVY6Zxk0.net] し
282 名前:デフォルトの名無しさん [2021/04/18(日) 09:56:40.54 ID:AhVY6Zxk0.net] Private Sub Worksheet_Change(ByVal target As Range) If Intersect(target, Range("A1:A2")) Is Nothing Then Exit Sub End If ClearDates UpdateDates End Sub Sub ClearDates() Range("A4:A999").Clear End Sub Sub UpdateDates() If IsDate(Range("A1").Value) = False Or IsDate(Range("A2").Value) = False Then MsgBox "日付を正しく入力してください" Exit Sub End If Dim d As Date, endDate As Date d = Range("A1").Value endDate = Range("A2").Value Dim y As Long y = 4 Do While d <= Range("A2").Value Cells(y, 1) = d d = d + 1 y = y + 1 Loop End Sub 日付間の日にちが自動で打ちあがるようにしたんですけど めちゃくちゃ重くてパソコンが固まってしまいますご教授ください 素人みたいな質問ですいません。
283 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 10:09:03.12 ID:CdbHG8Q+0.net] >>281 Changeイベントをする時は、 処理の前で Application.EnableEvents=False 処理の後で Application.EnableEvents=True が動くようにしないと延々Changeイベントが動いて重くなる
284 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:19.29 ID:a83COmqy0.net] >>281 むしろそれでプロだったらびびるけど・・・ Worksheet_Change()はワークシートの内容が変わった時に発火する Worksheet_Change()→ClearDates()→Worksheet_Change()→UpdateDates()→Worksheet_Change()→・・・ 多分無限ループになっている こういう時はイベントを無効にしておけば無限ループにならない Private Sub Worksheet_Change(ByVal target As Range) object.EnableEvents = false '内容 object.EnableEvents = true endsub
285 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:41.04 ID:a83COmqy0.net] すまん、Application.EnableEvents = Falseだった上に遅かった
286 名前:デフォルトの名無しさん [2021/04/18(日) 10:53:16.67 ID:AhVY6Zxk0.net] すばやい返答ありがとうございます 少し早くてびっくり VBAははじめて2年ぐらいです 5年後ぐらいにプロになれたらいいな Private Sub Worksheet_Change(ByVal target As Range) object.EnableEvents = false 上記を先頭2行と置き換えて object.EnableEvents = true endsub ↑この2行は最終行に書けばいいのですか? 素人ですいません!
287 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 11:21:49.65 ID:JCpiu5BAH.net] >>285 直す部分だけ書くと、こう Private Sub Worksheet_Change(ByVal target As Range) Application.EnableEvents = False If Intersect(target, Range("A1:A2")) Is Nothing Then Exit Sub End If ClearDates UpdateDates Application.EnableEvents = True End Sub
288 名前:デフォルトの名無しさん [2021/04/18(日) 12:11:13.84 ID:ORj5XeNB0.net] >>285 ごめーん、object.EnableEvents = false は間違いです >>286 さんが正しいです
289 名前:デフォルトの名無しさん [2021/04/18(日) 14:57:21.70 ID:AhVY6Zxk0.net] 先生たちありがとうございます! 新設丁寧頭もいい
290 名前:デフォルトの名無しさん [2021/04/18(日) 14:58:49.68 ID:AhVY6Zxk0.net] 自分の力で解決できるようにがんばります!
291 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:07:16.06 ID:c/Nu40gb0.net] >>281 それコピペして動かしてみたけど全然重くなかったよ 1900年から今日までにしても4秒くらい これで固まるのは別の原因があると思う その場所以外にとても複雑な計算式があって Cells(y, 1) = d の度に計算して重くなってるとか そうであれば計算を手動に変えて最後に自動にするとか セルじゃなくて配列にdを入れて最後に一回だけ出力するとか UpdateDates()を1行ずつ動かせばどの行で固まってるか分かると思うよ
292 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:21:48.14 ID:n1x9QJALa.net] >>290 それはChangeイベントで検証しましたか?
293 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 19:37:56.63 ID:Z7m7Dr1xd.net] >>261 ありがとうございます。試してみます。
294 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 20:47:27.38 ID:c/Nu40gb0.net] >>291 検証しました。 対象セルの書き換えはないから普通は無限ループにならないと思うけど 環境によって何か違うのかな? とにかく一行ずつ動かしてどこで固まるか調べた方がいいと思います。
295 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 23:15:06.97 ID:FAQ+sCCd0.net] https://i.imgur.com/8OFf7Pv.jpg B4:E6を画像として出力したいんだけど、Rangeの範囲指定をどういじっても、B3:E6が出力されてしまう。 B4:C6を指定してもB3:E6が出力されてしまう。 どうすればいいの?
296 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 00:55:03.43 ID:BhG1xyLeH.net] >>294 CurrentRegionを使わない
297 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 01:56:46.57 ID:/e3Iiylf0.net] >>295 thx CurrentRegionとったらあっさり出来たわ。 たまたまググって出てきたサンプルが説明もなくCurrentRegionを使ってて、 それを参考にしたから数時間損したわ。
298 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:20:37.00 ID:gkbaJTWH0.net] Name As でExcel以外のJpegファイル等のファイル名を変えることができると思いますが、そもそもなんでEXCELで他のソフトウェアのファイル名変えられるんでしょ? 便利だからいいんですけど
299 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:27:18.04 ID:BhG1xyLeH.net] >>297 ファイル操作はOSの基本機能の一つだから 逆に制限する方が、作るのも使うのも面倒になってメリットがなさすぎるという設計上の理由
300 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:41:44.29 ID:gkbaJTWH0.net] そっか、OSを操作してるんでしたね EXCELもOSも同じメーカーだからこそできる技なんですな
301 名前:デフォルトの名無しさん [2021/04/19(月) 21:03:08.15 ID:K5RFczke0.net] >>299 馬鹿?
302 名前:デフォルトの名無しさん [2021/04/19(月) 21:19:11.87 ID:80cIHSk1M.net] >>299 知能に問題がある人かな
303 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 21:54:25.72 ID:zOv5i/QS0.net] 昔のExcelは非公開API使ってたとか噂を聞いたことがある
304 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:09:31.11 ID:Qr9ctU7Wa.net] 噂を信じるな
305 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:15:55.48 ID:NSiRzHFAa.net] なつかしいなぁ 90年から2000年ぐらいの頃だな
306 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 00:42:55.05 ID:LQ8i77JG0.net] あるシートをコピーした時、 「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’○○○’が含まれています。この名前を使用しますか?」 が延々と出てくるのがうざいので、 メッセージを出さないようにするマクロって作れますか? 事前に名前の定義から削除するのではなく、シートをコピーしたら、メッセージを出さずに名前の定義を削除したいです。 詳しい方、ご教示をよろしくお願いいたします。
307 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 01:37:22.55 ID:ptbZPsIm0.net] 書式設定をコピーしなくて良いなら配列に値を代入して新しいシートに貼り付けが楽じゃない? 書式もって言うなら出力後に書式だけコピーしてやるとか
308 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:08:37.93 ID:j3U7nYtJ0.net] VBAで隠蔽使ってる人はどんな時に使ってますか? ぶっちゃけPropertyGetだけでいい気がしてきてしまったので、適切な使い所を知りたいです
309 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:20:28.94 ID:LQ8i77JG0.net] >>306 なるほどです! やってみます、ありがとうございます!
310 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:26:26.47 ID:sns0znWgd.net] >>307 二人以上で開発する時、または長期に渡るメンテが必要になりそうな時
311 名前:デフォルトの名無しさん [2021/04/20(火) 07:29:11.43 ID:aQV8TqKv0.net] >>307 基本privateにしておいたほうが色々とトラブルが少ないけど、 特に不満を感じてないならpublicでもどっちでも同じだと思う privateで意味が出てくるのは大規模・多人数開発だ
312 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:11:30.20 ID:fqIzsxE3p.net] >>307 メッセージングを行う際にて不必要と思われるメソッド(関数)や変数、プロパティは隠蔽する。
313 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:18:15.46 ID:fqIzsxE3p.net] いや? そもそも変数はプロパティかメソッド(関数)の引数や戻り値でしか受け渡ししないから変数は隠蔽しないことは無いか
314 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:27:20.11 ID:WjARqIhg0.net] >>307 ぶっちゃけPropertyGetだけでいいです、他のことはやらなくていいです
315 名前:デフォルトの名無しさん [2021/04/20(火) 18:45:51.60 ID:aQV8TqKv0.net] 変数を隠蔽しておけばgetter・setterを必ず通るからそこさえ監視しておけば後を追える 変数丸出しだとどこから触られるかわからないのでデバッグが死ぬほど大変になる
316 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:02:40.74 ID:grfVULwwa.net] みんなが使うのはパブリック 自分だけで使いたいときはプライベート XとかY,Zなんかはプライベートにしましょう
317 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:16:00.04 ID:grfVULwwa.net] たんじゅんに プライベートなら3文字以下 パブリックは5文字以上 そう決めておけばよいよ
318 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 20:06:43.69 ID:f6iXtgoua.net] >>314 デバッグなんかやんないくせに
319 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:17:43.05 ID:teqpRJSw0.net] 人の書いたコードなんて読めない 自分で書いても1ヶ月後には読めない
320 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:32:16.88 ID:N2s7rCY20.net] >>318 人が書いたコードは兎も角 自分の書いたコードが読めないのはちょっとね 上からつらつらと書くんじゃなくて 小さな部品から作って 組み合わせて大きな部品を作って 更に組み合わせて・・・みたいに書くと 分かり易いコードを書けるよ 逆に誰が読んでも分かり易いコードが 書けるようになったらもうすぐVBA卒業だよ