1 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:40:59.22 ID:jnlr9GaR0.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part73 https://mevius.5ch.net/test/read.cgi/tech/1631485799/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
415 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 00:51:21.02 ID:rwDbh7Xz0.net] >>405 やっと理解したわ 入力用Wsと一時入力用Wsでインテリセンスを分けなくてもいいなら簡単にできる コンストラクタでワークシートをセットするだけでいい
416 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 01:16:49.54 ID:9svQYmXf0.net] >>406 詳しい説明ありがとうございました。 一つわからないことがあります。 > 今回の問題は、Windows日本語版のANSIでは半角ポンド記号は定義されていないってこと とのことですが、そうしますと377さんの serchChar = "£" testfunc01 = InStr(StrConv(word, 10), StrConv(serchChar, 10)) のStrConv(serchChar, 10)によって全角のポンドの通貨記号は何に変換されるのですか?
417 名前:デフォルトの名無しさん [2022/01/16(日) 01:18:43.61 ID:JxOh46GE0.net] VBA・・・コンストラクタ・・・
418 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 06:52:16.37 ID:rwDbh7Xz0.net] >>414 あるの知らんの?
419 名前:デフォルトの名無しさん [2022/01/16(日) 09:31:02.87 ID:JxOh46GE0.net] >>415 間違えてた、すまん コンストラクタ自体はあるのね、無いと勘違いしてた 確かにこのケースなら使える
420 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 13:56:03.36 ID:UA4PX5Jc0.net] OSのVer. やExcelのVer. 更には文字コードの変遷に依っては近い将来ですら読み取れなくなって「?」でしか 表されなくなるかも知れないものを、将来の資料として保存するためにExcelで残そう という企てが不可解 例えhtmlで保存するとしても文字コードの軛からは逃れられない 保存時にPDFにするのかも知らんけど テキストデータとして〇£〇シリング〇ペンス(ペニー) の資料が豊富にあって、それぞれから数値だけ抜き出したい という要望だと信じていたが、そんなデータが遺されているのだろうか? シリング時代はPCすら無い時代 紙の資料がごまんと出てきた それをデジタル化してる とかなのだろうか 時代による金の含有量の変遷を遺したい とか書いていたが、ニッチな知的好奇心を満たそうとする人は 細かい事にも拘り続けるんだな、と 文末脚注に Lはポンドの意味 のひと言で済むのに シリングだって記号s ペンスは記号pだろうに 例えば沈没船の積み荷の目録が出てきた そこには〇£〇シリング〇ペンスの記載がずらずら これ引き揚げて通貨を溶解して金にしたらインゴット〇〇本分の量だぞ! 金の総重量をExcelで集計しろ! とかいう要望ならまだ判るんだが
421 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:34:44.43 ID:9svQYmXf0.net] >>417 > テキストデータとして〇£〇シリング〇ペンス(ペニー) の資料が豊富にあって、それぞれから数値だけ抜き出したい > という要望だと信じていたが、そんなデータが遺されているのだろうか? シリング時代はPCすら無い時代 > 紙の資料がごまんと出てきた それをデジタル化してる とかなのだろうか 「ポンド・スターリング―イギリス貨幣史 (1984年)」を読んでいる。計数上の特性を正確に理解しないと内容を追えないから。 > 文末脚注に Lはポンドの意味 のひと言で済むのに シリングだって記号s ペンスは記号pだろうに ペンスの記号はdね。pでなくてdなのは歴史的な経緯がある。 正しく記述しておけば後から苦労しない。 それにコードとして本来期待した動きをしない時に疑問を持つのは当然。 その結果、文字コードが原因ということ、および解決法も判明した。 今後の欲に立つ。 原因不明のまま安直にLで凌ぐのは、一時対応を除いて、よくない。
422 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:54:09.16 ID:EoUder1l0.net] >>405 です。 >>410 >>412 ありがとうございます。クラス全然理解できていなくてすみません。 メンバ変数 Public ws1 As Worksheet Public ws2 As Worksheet にして、コンストラクタで Private Sub Class_Initialize() Set ws1 = Sheet1 Set ws2 = Sheet2 End Sub を読み込ませる、という認識であってますか? 以下のように、ゲッターで各wsのプロパティを作っていくのはやめたほうがいいでしょうか。 Property Get ws1() As Worksheet Set ws1 = Sheet1 End Property Property Get ws2() As Worksheet Set ws2 = Sheet2 End Property
423 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 15:26:39.86 ID:0L8LiCPu0.net] Windows 10, Excel 2019 hyperlink関数を使ったリンクからブラウザを起動する時に 特定のURLのみ応答が60秒ほど遅い クリック後すぐにEscを押すと60秒ほどの待ち時間が無くなりすんなり接続できます 遅い = hyperlink("https://www.yodobashi.com/", "yodo") 遅くない = hyperlink("https://www.アマゾン.co.jp/", "ama") ちなみにExcelを介さずアクセスするとすんなり表示されます 他に60秒ほどの待ち時間を無くす方法があれば教えて下さい
424 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 15:44:15.55 ID:y1CvsdF30.net] >>413 それぐらい自分で試せよ U+FFE1の半角ポンド記号になるっぽい 普通に正しい動作だな
425 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:10:07.63 ID:9svQYmXf0.net] >>421 そういう意味の質問じゃなくって、「Windows日本語版のANSIでは半角ポンド記号は定義されていない」と書いていたので、StrConv(serchChar, 10)では半角ポンド記号に変換できないのじゃないかと思ったわけです。でも正しく処理しているんで、VBA 上では表示はできないけど計算処理はできるということですかね。
426 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:12:28.73 ID:y1CvsdF30.net] >>419 クラスもモジュールの一つなんだが まず処理の内容とモジュールの役割分担を考え直せ インテリセンスに出したいからとか、本末転倒だ インテリセンスに出したいだけなら、>>405 の例ならクラス三つつくって ClassWsクラスに Public Property Get 入力用Ws() As 入力用Ws Public Property Get 一時計算用Ws() As 一時計算用Ws 入力用Wsクラスに Public Property Get Ws1_入力用() As Worksheet Public Property Get Ws2_入力用() As Worksheet 一時計算用Wsクラスに Public Property Get Ws1_一時計算用() As Worksheet Public Property Get Ws2_一時計算用() As Worksheet をそれぞれ定義すればできる 中身は自分で考えろ
427 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:19:51.33 ID:y1CvsdF30.net] >>422 VBAの内部文字コードはユニコード ユニコード表示できないのはVBEと言われている、VBAのエディター なのでVBAでユニコードの処理はできる。VBEで文字を直接入力できない(ものがある)だけ だから>>378 でCHRW使えって書いてる
428 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 16:33:04.70 ID:9svQYmXf0.net] >>424 よくわかりました。ありがとうございました。
429 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 19:01:50.46 ID:EoUder1l0.net] >>423 ありがとうございます。 もう一度、役割分担を考えてみます。
430 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 19:41:57.72 ID:rwDbh7Xz0.net] まあたしかにインテリセンス出したいだけならオブジェクト名を変更するだけでもいいかもしれんな
431 名前:デフォルトの名無しさん [2022/01/16(日) 20:05:03.64 ID:xYtP7RFCa.net] 次の担当になる人がかわいそうだな
432 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:18:31.11 ID:RSDKT1580.net] >>362 コードは他のシートと同じだったので省きます。 画像は消しても変わりませんでした。コードを消してもセルをクリックしたときにたまに読み込みが入るので何かが動いてそうなのですがどこ見ればいいでしょうか…。
433 名前:デフォルトの名無しさん [2022/01/16(日) 20:31:17.59 ID:JxOh46GE0.net] >>426
434 名前:デフォルトの名無しさん [2022/01/16(日) 20:31:53.39 ID:JxOh46GE0.net] >>426 色々聞いてみるといいかもね 恐らくインテリセンスも、みんな使わない
435 名前:デフォルトの名無しさん [2022/01/16(日) 20:35:43.37 ID:JxOh46GE0.net] >>429 >>363 の通り、どこで時間が書かているかを突き止める必要がある
436 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:53:15.31 ID:RSDKT1580.net] >>432 初心者なのでDebug式をどこに代入すればいいかわからないので教えてください。 https://i.imgur.com/dzwx5GC.jpg (コード書くと改行多すぎで弾かれます)
437 名前:デフォルトの名無しさん [2022/01/16(日) 21:09:10.46 ID:KEj0DMHt0.net] >>433 >>2 を読め
438 名前:デフォルトの名無しさん [2022/01/16(日) 21:13:53.65 ID:JxOh46GE0.net] >>433 >>434 は頭おかしい ちょっと待て
439 名前:デフォルトの名無しさん [2022/01/16(日) 21:14:52.42 ID:JxOh46GE0.net] っって思ったけどせめてデータで出せ メモ帳にコピペしてdotupとかそのへん
440 名前:デフォルトの名無しさん [2022/01/16(日) 21:22:18.03 ID:lhZQvquHM.net] 馬鹿を相手にすんな
441 名前:デフォルトの名無しさん [2022/01/16(日) 21:26:17.91 ID:JxOh46GE0.net] >>437 専門板にいると、自分が万能な気になる そうじゃないんだよ みんな、一長一短なんだ
442 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:33:39.20 ID:uTGjF8kU0.net] >中身は自分で考えろ おー!!カッコいいねー!! 熱血トレーナーみたいだね〜
443 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:35:56.49 ID:YgWToIcEd.net] VBAで更新したパワークエリーが更新完了まで待機するコードありますか?
444 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:13:05.80 ID:RSDKT1580.net] Private Sub Worksheet Before DoubleClick(ByVal Target As Range, Cancel As Boolean) Const Hani = "N4 N1000 Const Iro. As Variant 15 Dim Rng As Range Set Rng = Intersect(Range(Hani), Target) If Intersect(Target, Range("N4 N1000')) Is Nothing Then Exit Sub With Target Select Case Value Case Value = "2000" Case "2000 Value ="" End Select End With If Not Rng Is Nothing Then Cancel = True If Rnginterior Colorindex = xINbre Then Eng Interior Colorindex = Iro Else Prg Interior Colorindex = xiNbre End IfEnd If Set Rng = Nothing End Sub
445 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:18:31.80 ID:ranDxh1Nr.net] Googleレンズで読み込んだやつなので正確ではないけど流れは一緒です。 ネットにあった色つけコードに数字も入力するようにしています。 ↑で言っていたように使用しているAシートとBシートに違いはほぼないです。というか新規シートにBをコピーしても読み込み遅くなるので全く理由がわからないです。フォントは一緒、セルの使用数は読み込み遅いシートのほうが少なく、画像も関係ないので何がなんだか…
446 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:50:40.30 ID:ranDxh1Nr.net] ごめんなさい https://hoimins.com/uncategorized/excel-page-break-preview-slow/ 多分これです。印刷範囲を設定したら読み込みがなくなりました。
447 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 12:48:25.06 ID:RtDdCZiGM.net] ほれ、タイプミスだけ直しといてやったぞ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const Hani = "N4:N1000" Const Iro As Variant = 15 Dim Rng As Range Set Rng = Intersect(Range(Hani), Target) If Intersect(Target, Range("N4:N1000")) Is Nothing Then Exit Sub With Target Select Case .Value Case "" .Value = "2000" Case "2000" .Value = "" End Select End With If Not Rng Is Nothing Then Cancel = True If Rng.Interior.ColorIndex = xlNone Then Rng.Interior.ColorIndex = Iro Else Rng.Interior.ColorIndex = xlNone End If End If Set Rng = Nothing End Sub
448 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 15:16:34.47 ID:TQ7V1ae50.net] 前スレの298,303なのだが、 msgboxでウィンドウを表示させるとExcelがクラッシュしないことがわかった。 だから 'マクロがクラッシュしないための措置 i = MessageBoxTimeoutA(0&, "マクロを開始します", "通知", vbMsgBoxSetForeground, 0&, 100) 自動的に閉じるmsgboxを表示させることで回避策としたわ。 msgboxがある/なしでクラッシュするなんて言うバグてきいたことあります?
449 名前:デフォルトの名無しさん [2022/01/18(火) 15:40:58.30 ID:CJu6lFHP0.net] >>445 聞いたことはないけど、合ってもおかしくないと思う OSや別アプリと並行処理させ、並行処理が終わってないままvbaだけ処理すすめる・・・ことで落ちていると思う DoEventsで解決するはずなんだけど、DoEvents自体も挙動がどこかおかしい。 多分だけど、 applicaion.calcurate=false とか高速化入れてない?あれを設定しなければ落ちなくなる可能性があると思う
450 名前:デフォルトの名無しさん [2022/01/18(火) 18:06:02.41 ID:2NZPk0PK0.net] フォーカスがなくなって裏で動いているのに気づかなかったってだけじゃね
451 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 02:44:48.77 ID:J6vWAZC60.net] >>94 自己レスだけど検証してる動画があった https://youtu.be/FSS94HnW3Dk
452 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 08:14:43.10 ID:SKsqr1XrM.net] >>448 見たけど画面描画してるからその分遅くなってることを考慮してない、やり直し、と言いたい。 まあそれでも結論は変わらんと思うが。 というか、たぶん結論有りきで動いてるよなこの人。
453 名前:94 mailto:sage [2022/01/19(水) 12:40:48.58 ID:U3XJgxPOM.net] >>449 画面更新止めるコマンドもあるので別に気にはしてないですが、エクセルの関数が実数になるまでそれなりに、時間かかりますよね まぁ、でもAの方法(外部リンク参照)で作り変えて行こうかと思います。
454 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 16:06:12.24 ID:wLv0/dLh0.net] 取得したデータをどう使いたいのかにもよるけど 参照するExcelブックの数が増減する場合はVBA使って特定のフォルダにぶち込まれたExcelブックを全部取得するようにすると楽 個人で使う分にはこれでいいが、仕事などで自分以外の社員が触る機会がある場合は、周りのスキルを考えてVBAを使わず数式で参照させて済ますのも良いと思う だが、環境にもよるが、外部参照を含む数式を書いたExcelブックを開いたまま参照先のExcelブックを開くと参照エラー(#REF!)になる場合があるので注意
455 名前:デフォルトの名無しさん [2022/01/19(水) 16:34:49.01 ID:x+9vZ6k00.net] MSGBOXが表示された時、必ず最前面にする方法ってありますか? alt+tabでタスクを切り替えないとMSGBOXが表示されない事があります 処理が止まっているのか進んでるのか分からなくて、困ってしまう
456 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 17:15:49.65 ID:O8ktC4tSM.net] >>452 VBAのMsgBoxでは不可能 Win32APIのMessageBoxAをTopMost=Trueに設定して呼び出すしかない VBAからMessageBoxAを呼び出す方法はぐぐればすぐ出てくる
457 名前:デフォルトの名無しさん [2022/01/19(水) 17:21:36.62 ID:ZRK6Alb6M.net] そんなフラグ効果あんのか?
458 名前:デフォルトの名無しさん [2022/01/19(水) 17:56:37.68 ID:x+9vZ6k00.net] >>453 ありがとうございます、そういう方法があったのですね。 処理完了のメッセージボックス、そちらにしていきます。助かりました。
459 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:35:22.31 ID:DmIv8IzU0.net] いちおうMsgBoxでシステムモーダルの指定があるにはあるんだけどな 期待通りに動かんことが多い いちアプリケーションがシステム全体にかかわる動作をするなって風潮だからな
460 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:45:15.60 ID:F2K8Y8lc0.net] >>451 他ブックへの参照はgotoより使いたくないかも
461 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 19:04:03.23 ID:DmIv8IzU0.net] >>457 複数のブックで構成されてるような資料だとまあなくはないかと しかしリンクとコピーが比較対象になるのが理解できん 速度とかで選択するようなものじゃないだろ
462 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 19:59:02.99 ID:wLv0/dLh0.net] >>457 わかるけど、それはプログラミングの知識がある人が職場に当たり前にいるという前提の話 まったくVBAを知らない社員に一から教え込むよりまし ていうか個人的には、Excelブックを100個も参照させるようなのが仕事上の事情なら、まずはその運用を見直した方がいいと思うけど
463 名前:94 mailto:sage [2022/01/19(水) 20:45:45.55 ID:U3XJgxPOM.net] 他ブックの参照がなぜ駄目なのかさっぱりわからないです。。教えて下さい。 参照後の処理の内容になにか前提条件があるのですか? 自分の前提は、Excelブックを参照、みんな同じExcelバージョン、同じフォーマットを使うです
464 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 20:58:42.62 ID:B4PAoBE9M.net] リンク切れで機能しないゴミとなったブックをお目にかかったことがないなら幸せなことだな
465 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:01:47.23 ID:K9C4LDWb0.net] エクセルは詳しくないけど、「存在しない可能性すらある グローバル変数」ってこと? ちょっと学んで、「どこからでもセルの書き換え効くの? グローバル変数地獄じゃない?」と思ったけど、もっと 大規模に起こり得るってこと?
466 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:31:45.36 ID:wLv0/dLh0.net] >>460 フォルダ名(参照・被参照のExcelブックが別々のフォルダにある場合)、ファイル名、シート名、(使用しているなら)テーブル名、あとセルの配置 どれか一つでも変えるとリンク切れになるので、できればあまり使いたくない ただ、先にも書いたけど状況次第ではやむを得ないこともあるし、もしそのあたりのリスクを払拭できるなら選択肢としてはあるかなと思って書いたけど、 もし、そういうことをそれほど把握する必要がない程度に重要性が高くなく、かつパフォーマンス(速度)重視の話なのであれば、あまり気にしなくていい でも、これが仕事で何度も使用するような類のものの話だとすれば、パフォーマンスを考える前に運用をよく考えた方がいい 例えば、ファイル数(100個)や参照セル数(ブック1つにつき60セル)が固定で、シートやブックなんかはパス付で保護かけて構造を弄れないようにして、できたらファイル名なんかもアクセス権を設定して変更できないようにするか、ファイルを扱う人に絶対変えないようにしっかり申し送りするとか もしくは構造を弄られたとしてもすぐ元どおりにできるぐらいのシンプルな作り、あるいは壊されてもすぐ復元できるようにしておくとか どんな状況なのかは分からないけど、何を優先すべきなのかをよく整理した方がいい、という話になると思う
467 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:43:22.55 ID:zGHKrub60.net] >>460 親からひ孫世代まで参照が繋がってるファイル群なんてものが存在した
468 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 22:52:36.39 ID:TxiQul+S0.net] >>464 参照繫ぐくらいなら、ファイルパスもセルに記入して上書きさせるように実装するわ。それくらいリンクは嫌だわ。
469 名前:94 mailto:sage [2022/01/19(水) 23:01:56.42 ID:J6vWAZC60.net] なるほど。理解出来ました。 ありがとうございます。 運用的には VBAでファイル名算出する シート名が違っていたり、フォーマットズレしていたら検出したいチェックツールにしたいので問題なさそうです。 参照エラーがでたら壊した人のところに殴り込みに行くシステムですね。
470 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 00:15:58.14 ID:gV+Fwxtn0.net] まあ、まともに作ったファイルサーバなら shadow copy くらいは残ってるだろうがね。
471 名前:デフォルトの名無しさん [2022/01/20(木) 06:56:43.44 ID:AmtKyR6La.net] 無理して変な機能追加するから 後で見返した時にワケわからなくなる
472 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 08:28:58.94 ID:mCK9tQrM0.net] >>468 それはみんなそう なので少しでもわかりやすいように書いておくことが必要 慣れてないうちはコメント付けまくるのもありだと思う これは何の変数かとか、大きく何をしているか、この行は何をしているか書いとけばリファクタリングするのにも楽になる
473 名前:デフォルトの名無しさん [2022/01/20(木) 08:52:11.33 ID:aoz8cIff0.net] >>466 毎日カチコミになるのが目に見えているゾ
474 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:39:15.12 ID:+AoyW20h0.net] どうしても100個のファイルに分けなければならないのか 一つのブックに100シート突っ込むことはできないのか とか考えたりはするかも
475 名前:デフォルトの名無しさん [2022/01/20(木) 12:41:49.38 ID:NS2MNDvFr.net] ファイルコピーか、シートのコピーで バックアップ取っておくとかは考えるかも。
476 名前:デフォルトの名無しさん [2022/01/20(木) 12:47:52.34 ID:aoz8cIff0.net] 取引先一件につき、ファイル一つ それをマクロで集計 最初30個ぐらいだったファイルが、 会社が成長して、100ファイルになったことはあったな フォーマットやファイルは全て自分で管理してたから問題なかったけど、 今も大丈夫かなぁ あれ手で計算するのは大変すぎ
477 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:46:34.45 ID:BPf7HX0l0.net] 1ファイル45個のクエリーを含む同様のファイルが 13地点×6ヶ年分=78個あって、 これをシーケンシャルに1つずつ、For Nextで更新するよう組んだ。 最初の2ヶ月目くらいまでは7時間くらいで更新出来てたが、 3ヶ月目以降は毎回どこかの、 Set tblQ = ThisWorkbook.Worksheets(ws).ListObjects(q) と、ワークシート名とクエリー名を変数に代入するところでコケる・・・ その都度、コードを削除していったん保存、 再度貼り付けてデバッグし続行させる 沼にはまった。
478 名前:デフォルトの名無しさん [2022/01/20(木) 13:49:08.24 ID:aoz8cIff0.net] >>474 そういう時は、ファイル保存を挟むと良い エクセルは立ち上げっぱなしだと、どんどんテンポラリファイルが巨大化する 保存すると、それが一旦整理される
479 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:57:12.27 ID:BPf7HX0l0.net] >>475 アドバイス、ありがとう。 一応、開く78個のファイルは1個ずつ保存して閉じているけど、 大元のVBAを持つbookをその都度保存せよ ということかしら? そういや、プロジェクトエクスプローラーに 既に処理が終わって閉じたbookのファイル名が残って どんどん増えて行ったような・・・ こっちは1ファイル処理後ごとに上書き保存とかの処理は入れてなかった。
480 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:57:52.65 ID:HwD0Q83s0.net] なんで全部Excelでやろうとするかね ボリューム見て将来鑑みて、どっかの時点で「これはパンクする」 ってぇ判断をしなかったツケだろ 経費抑制? むしろ無駄な経費が膨大に掛かってるのには目を瞑るんだ へー
481 名前:デフォルトの名無しさん [2022/01/20(木) 14:17:24.56 ID:gV+Fwxtn0.net] >>474 変数は毎処理ごとに開放してる?
482 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:28:11.68 ID:mCK9tQrM0.net] >>477 本人はやれる中で頑張ってるんだと思う、きっと でも確かにそれはAccessのほうがってことはあるよね VBAできる人なら覚えるのも簡単だと思うし
483 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:32:45.01 ID:bfB7zVPYM.net] kintoneとかでいいでしょ
484 名前:デフォルトの名無しさん [2022/01/20(木) 14:40:11.29 ID:aoz8cIff0.net] >>476 >一応、開く78個のファイルは1個ずつ保存して閉じているけど、 もし、 set foo = workbook.open~~~) みたいにしてたら、最後に set foo = nothing を挟まないと、ずっとメモリ残り続けることになると思う。>478さんの指摘がこれ >大元のVBAを持つbookをその都度保存せよ これはかなりオススメ。 コードの内容がわかって無くても、エクセルファイルを保存すると大体うまくいく ※保存時に色々とうまくやってくれてるっぽい >>477 それ言い出すと全企業が大企業並の設備を整える必要がある ある程度拡張性を備えた上で、「5年後は別システムに移行しているだろう」のような判断ができればいいね 基本、要素(営業や取引先)がドカドカ増えないなあ、システムは特に移行しなくていいと思う。 多少使いにくくても、ノウハウが切り捨てられる方が惜しい
485 名前:デフォルトの名無しさん [2022/01/20(木) 14:41:43.21 ID:aoz8cIff0.net] >>480 使ってから言えよ あれ柔軟性が全くない 柔軟性の必要がない、タピオカ屋さん、ワッフル屋さんなんかにはドンピシャだろうね
486 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:41:48.98 ID:BPf7HX0l0.net] >>478 してなくて、ぼんやり「まずはこのあたりをやらなきゃアカンのかなぁ・・・」とは思って
487 名前:た。 次に更新する月初めまでにやりまする。 大元のbookで、 "For i To k" より後の、 "Next i" までに使った変数全てについて Set 変数名 = Nothing を "Next i" の直前に入れる感じで? [] [ここ壊れてます]
488 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:48:42.80 ID:bfB7zVPYM.net] >>482 本当にその柔軟性必要?勝手にそう思い込んでるだけじゃない? 方眼紙に自由自在にレイアウトできなくても情報は伝わるんだぞ
489 名前:デフォルトの名無しさん [2022/01/20(木) 14:49:07.12 ID:gV+Fwxtn0.net] 一つのプロシージャで全処理するより Class とか、Function 使う方が良いかもね。
490 名前:デフォルトの名無しさん [2022/01/20(木) 15:07:43.50 ID:aoz8cIff0.net] >>484 必要 もちろん100社で100通りじゃない。100社で10通りぐらい。今後も増えるだろう この柔軟性は、エクセルだとかなり受け入れやすい >>485 正直、なるだけ1プロシージャは維持したほうが良いと思う エクセルVBAは他の言語と違って、あまりにファイルへの依存性が強すぎる
491 名前:デフォルトの名無しさん [2022/01/20(木) 15:16:04.35 ID:gV+Fwxtn0.net] ふーん。 オレなら処理毎にFunction プロシージャに引数で渡してあげて ループ処理終わったら、変数開放するけどな。 変に長ったらしいのより、そっちの方が解読性がよくなる。
492 名前:デフォルトの名無しさん [2022/01/20(木) 15:19:27.67 ID:n5KSDES60.net] >>481 お前みたいな奴がメンテできないシステムを作り出すのだぞ
493 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:20:13.56 ID:gV+Fwxtn0.net] まあ、オレはAccess VBA専門なので Excel VBA は遠い記憶ですが… シンプル・イズ・ベスト。
494 名前:デフォルトの名無しさん [2022/01/20(木) 15:20:30.61 ID:/dOetE+CM.net] バカがやると引数地獄かグローバル地獄になんだよ
495 名前:デフォルトの名無しさん [2022/01/20(木) 15:21:57.99 ID:aoz8cIff0.net] >>488 言いたい事は分かるんだけど、エクセルはOSの依存が妙に強くて OSの機能借りないとキツイ部分が多々ある 未だにMSGBOXがどうしようもなかった
496 名前:デフォルトの名無しさん [2022/01/20(木) 15:22:53.50 ID:aoz8cIff0.net] >>490 なるほどw
497 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:24:46.85 ID:gV+Fwxtn0.net] >>490 初心者はね。 最近は設計工程ばかりで、コーディングもしてないから 下流ビギナーの思考はわからんけど。
498 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 15:38:37.39 ID:gV+Fwxtn0.net] 確かにグローバル変数は使わない方が良い。 ホーム・プロシージャからFunction へ飛ばして 処理させてあげて 戻り値を次のFunctionへ… って感じで作ると、テスト工程の時に楽になる。 デッカいシステムを組むとそっちの方が絶対楽だし 改修の時も、解読に困らないからね。
499 名前:デフォルトの名無しさん [2022/01/20(木) 15:56:22.20 ID:n5KSDES60.net] >>491 いや、お前の能力が足りないだけだぞ
500 名前:デフォルトの名無しさん [2022/01/20(木) 16:21:54.83 ID:aoz8cIff0.net] エクセルの場合は、エクセルという超グローバルオブジェクトがある それをメインに据えれば良いと思うけどな
501 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:01:00.66 ID:ovHTHlPT0.net] ホント、マクロは組む人によってその人のカラーや癖が出るとは言ったもんだね。
502 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:03:05.54 ID:GNfzU0ds0.net] 変数を日本語というか漢字とか使うのって邪道? 行とか列とかそのまま漢字文字で使ってるんだけど
503 名前:デフォルトの名無しさん [2022/01/20(木) 17:03:18.69 ID:aoz8cIff0.net] >>497 んなもんプログラムならどれも一緒 エクセルは一段回上のファイルがあって、目に付きやすいだけ
504 名前:デフォルトの名無しさん [2022/01/20(木) 17:06:10.63 ID:aoz8cIff0.net] >>498 2buyte文字ね 全然良い、というかむしろそっちの方が読みやすい 気をつけるのは、海外の漢字や絵文字 上でも出てたけど、半角ポンドなどエラーが起こりやすい文字がある
505 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:34:30.16 ID:BPf7HX0l0.net] >>498 漢字をマクロ内で使って、 この5〜6年くらいの間で知ってるだけで少なくとも2回、 MSのupdateで動かなくなってた記憶があるので それに対処出来ればOKかと。 Rangeで引っ張る定義名とかsheet名は 特殊な記号は避けて漢字使っちゃってる。
506 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:50:55.00 ID:HwD0Q83s0.net] 日本語(漢字)でもいいんだ へー っていうレベルのが真似して安易に使い出したらカオス 他人事だから後は野となれ山となれ っていう発想としか思えない 日本語OSが出来てからやれよ とは思う 米語OS使わざるを得ないなら粛々と従ってろや と ま、だからってローマ字に換えて30文字ぐらいのモジュールが40ヶぐらい並んでるのを見た時には一時間ぐらい気絶したけど getsumatsukoushinn() nenjikoushintokuisakibetuhinmokubetsu() あのさ、、、 これにOK出したの誰よ?
507 名前:デフォルトの名無しさん [2022/01/20(木) 17:51:21.68 ID:aoz8cIff0.net] そういや何年か前、accessVBAだっけ?2byte文字あると全部エラーになるみたいなのあったな
508 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:02:49.63 ID:mCK9tQrM0.net] >>502 ワロス
509 名前:デフォルトの名無しさん [2022/01/20(木) 18:26:03.22 ID:aoz8cIff0.net] >>502 こういうの見るとoption explicit必須何やなって思わされる
510 名前:デフォルトの名無しさん [2022/01/20(木) 18:30:19.80 ID:NS2MNDvFr.net] 開発現場のローカルルールは 2バイト文字禁止が普通だけどね。 色んな環境で使うことを想定したら 日本語とかありえん。 コーディングの時は日本語だけど、 最終的に全置換で英語表記に変える。
511 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:06:44.42 ID:KxaVQnjRM.net] > 色んな環境で使うことを想定したら Excel VBA でそんなことを気にしないといけない状況って相当珍しいだろw
512 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:09:21.62 ID:WDmMC3D+M.net] 俺が前に行ってた派遣先ではC#で漢字の変数名や関数名とか自由に使ってたわ 業界ではそれなりに知られた老舗のソフトメーカーなんだけど まあ、そういう職場もあるってことで
513 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 20:34:21.90 ID:NL1fx3HA0.net] 日本語以外での展開を考えてるならまあ2バイト文字禁止で良いんじゃね 日本語環境で開発してる段階で漢字禁止とかあんまり見ないけどな ただ、メソッド名に日本語は過去にえらいことになった例があるからなぁ...
514 名前:デフォルトの名無しさん [2022/01/20(木) 23:42:09.41 ID:n5KSDES60.net] ID:aoz8cIff0 いつもの馬鹿でしたとさ
515 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 02:47:14.61 ID:XETJK2Tn0.net] 派遣てなになに? VBA技術者の派遣とかあるんだ?