[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/04 15:55 / Filesize : 295 KB / Number-of Response : 1008
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part70



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卒業だよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<295KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef