[過去ログ] Excel VBA 質問スレ Part79 (976レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(4): 2023/01/28(土)11:46 ID:mBQ16TA8(1) AAS
↑同じ内容を3行貼り付けること

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

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part77
2chスレ:tech
Excel VBA 質問スレ Part78
2chスレ:tech
省2
957: 2023/05/29(月)16:43 ID:617wK6FV(1) AAS
やっぱりめちゃくちゃ丁寧にコメント残して変数の宣言をめんどくてもしっかりしとくと後で手直しが楽だな…
社内サーバーが変更になって他部署のマクロがあちこちエラーでバタつきまくってるけど俺の作ったvbaちゃん達は少しメンテしただけでオールオッケー
ヘルプが来たけど他人の作ったマクロ全然わかんね
958: 2023/05/29(月)17:02 ID:4Pg0mNi+(1) AAS
ウデを持ってるなら、そんな環境からとっととおサラバするのがいい
サヨナラされてようやく気付く企業も多く成るべき
それでもそこにしがみ付きたいなら、技術だけじゃなくて知恵も蓄えないと
どうやってその邪魔な上役・役職者を失脚させて、徐々にでもじぶんの地位を上げるか とか
学歴・派閥・職歴えtc、ひとは誰しも欠点を持ち合わせてンだし、そこをトコトン突っ突かないと
ブツブツ文句垂れてるだけじゃなにごとも変わらない 諦めたらそこで終わりなのも事実だし
959: 2023/05/29(月)21:13 ID:PjfX8r01(1/3) AAS
一つだけお聞きしたいのですが、VBAを作成したとしても利用者がシート名を変更したり、シートを削除したり、シートを追加したり、並び替えたりしたら自動化や効率化のやりようがないですよね?
オブジェクトが存在しないとか並び替えられていたらインデックスで指定するのが無理とかそう言う事になりますよね?
VBAは決められた手順通りに定められたメゾットを実行する物であって、ブックがめちゃくちゃだと実行しようがないですよね?
960
(1): 2023/05/29(月)21:20 ID:4q9o84pD(1/3) AAS
シートをオブジェクト名で処理すればシート名変更・並び替え・シート追加はどうでも良くなる
シート削除対策は予備シートを他のブックにでも入れておいて本シートの存在判定後に予備シートからコピーすれば良い
961: 2023/05/29(月)21:26 ID:PjfX8r01(2/3) AAS
>>960
なるほど

ちなみに一番新しいシートのオブジェクトを指定する方法はあるでしょうか?
ブックにあるオブジェクトを探して一番大きい数字のオブジェクトを指定できるなら助かるのですが
worksheet.countやworksheet.count - 1の様な事をオブジェクトで行いたいです
962: 2023/05/29(月)21:38 ID:5rIVitSK(1) AAS
もちろんできる
963
(1): 2023/05/29(月)21:43 ID:4q9o84pD(2/3) AAS
普通は新しいシートを作る位置でその手のコントロールをすると思うけどね
964
(1): 2023/05/29(月)21:45 ID:PjfX8r01(3/3) AAS
>>963
並び替えられると動作しなくなるのでどうにか不変もので出来ないのかなと思いました
連番?で数字が増える事だけが頼りです
965
(1): 2023/05/29(月)21:53 ID:4q9o84pD(3/3) AAS
>>964
新しいシートを作るのがコード自身ならコントロールできるでしょ

あと、並び替え程度で動かなくなるとか
シートを作られただけで動かなるコードなんてのは脆弱すぎるので
先ずはその点の改良をしたほうがいい
966: 2023/05/29(月)22:02 ID:nq5ttQ99(1) AAS
そんなんで駄目になるなら初めからガチガチにロックしてこっちが想定した操作以外できなくしてしまったほうが早い気がする
967: 2023/05/30(火)02:48 ID:ztJvp+qD(1) AAS
VBAでどんなコードを書いてもユーザーが勝手に変更したら動かなくなるよ
968: 2023/05/30(火)06:48 ID:D1ASN+X8(1) AAS
>>965
やりたい事は一番新しいシート(最新のシート)とその前に作成されたシート(古いバージョンの様な)を比較して一致しないセル(変更のあったセル)に色を塗ると言う事がしたいです
一番新しいシートはマクロを実行する度に複製されます
私は一番新しいシートに記入してマクロを実行すると直前のシートと比較して色を塗る所まで出来ました
しかし利用者の方が一番新しいシートに記入される方ばかりではないと言う事にも気がつきました。
なのでどこのシートでマクロを実行しようとも一番新しいシートとその直前のシートで比較するマクロを組みたいです。
969: 2023/05/30(火)06:57 ID:T5vzeTOi(1) AAS
どこかにシートの作成履歴を保存しておくしかないのでは?
970: 2023/05/30(火)07:58 ID:IcFRt183(1/5) AAS
ブックを開きその時点での一番新しいシートに記入する
マクロのボタンを押す
シートを複製する
一つ前のバージョンのシートと比較して変更のあったセルに色を塗る

と言う事がしたいです
つまりマクロを実行するシートというのは常に新しく複製されたシートです
理想は常に新しく複製されたシートのオブジェクト名を取得してその前のバージョンのシートと必ず比較できるマクロが組みたいです
971: 2023/05/30(火)08:01 ID:IcFRt183(2/5) AAS
外部リンク:detail.chiebukuro.yahoo.co.jp

ここに書かれているCode nameが最大のシートを探すと言うのが答えになりそうなのですが私には分かりませんでした
972
(1): 2023/05/30(火)08:29 ID:qMHj8iFj(1/2) AAS
そのブックの構成がよくわからないな
その古いシートへユーザーが書き込むってのはミスなの?そのシートに書き込む必要がある状態なの?

因みに、codenameを取得して番号から最新シートを把握というのはちょっと微妙な気がする
何故ならシートのオブジェクト名もシート名も
そのEXCELブックが立ち上がった時の一番若い番号に振られるから
つまり、オブジェクト名に歯抜けの番号があればその歯抜け番号が最新番号になる、、はず

そんなのより各シートにインデックス番号を
シート内の固定場所に
振っていくほうが手っ取り早いんじゃないの?
若しくは管理用シートを別に用意するとか手段はいくらでもある
973: 2023/05/30(火)08:29 ID:IcFRt183(3/5) AAS
なんとなくわかって来ました
初期値のworksheet(シート名?オブジェクト?) < ブックの中のシートのコードネーム
がthenならそのCode nameを変数に入れたらいい
そしてそのCode nameのシート名を取得して変数に入れればいい
と言う事ですね
974
(1): 2023/05/30(火)08:49 ID:IcFRt183(4/5) AAS
>>972
本当にありがとうございます
私はvbaの初心者で必ず最新のシートが選択される様にする
と言うだけでこの通り全く分からない状態です

そんなのより各シートにインデックス番号を
シート内の固定場所に
振っていくほうが手っ取り早いんじゃないの?
若しくは管理用シートを別に用意するとか手段はいくらでもある

私もインデックスを固定して操作する方が確実だとは思うのですがシートの並び替えだけを禁止すると言う理解でよろしいでしょうか?
975
(1): 2023/05/30(火)09:26 ID:qMHj8iFj(2/2) AAS
>>974
いや、ちょっと勘違いしているね
平易に言うと、自分で作った通し番号を各シートの固定場所に記載するってこと。
シートの並び順はもはや関係なくなる

具体的には、一番最初のシートには使ってないセルに「1」を振る
次に新しいシートを作るときは
for each 変数名 in thisworkbook.worksheets
でブック内全シートの番号を降った場所を検索して
一番大きな番号を取得
その取得した番号の次の番号を新しいシートに振る
省1
976: 2023/05/30(火)10:50 ID:IcFRt183(5/5) AAS
>>975
なるほど!
わかりやすい😭
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.170s*