1 名前:デフォルトの名無しさん mailto:sage [2023/05/31(水) 08:23:38.97 ID:4RV1IxmB.net] ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 関連スレ Excel VBA 質問スレ Part79(ワッチョイあり) https://mevius.5ch.net/test/read.cgi/tech/1674875532/ ※前スレ Excel VBA 質問スレ Part79 https://mevius.5ch.net/test/read.cgi/tech/1674874007/
267 名前:デフォルトの名無しさん mailto:sage [2023/12/12(火) 21:52:49.64 ID:FzkyMEiq.net] まあ将来はマクロVBAは廃止されると予想されるからデカイ顔できるのも今のうちだぞ
268 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 09:34:17.90 ID:0IbkX0L9.net] VBベースじゃないほうがこれからは良いだろうしなあ
269 名前:デフォルトの名無しさん [2023/12/13(水) 10:08:54.21 ID:fb2rzu10.net] 仮にマクロ無くなってもでかい顔するやつはする
270 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 10:20:57.24 ID:ZzGWLSGP.net] >>261 開いてるファイルからVBAを使って他のファイルのユーザーフォームを操作したい みたいな要望に読めるけど、こういうことかな? https://www.chishikinosoukonoseiri.com/entry/2019/06/02/excelvba-designer-another-book-userform-operation この人も苦労したみたいだけど、結果が正しいのか正統派の記述方式なのかもよくわからん Designer なんて今まで食べたこと無いし しかもバージョンが若干古い? IE絡みのオブジェクトっぽいし、IE亡き今、通用するのか どうかも不明 ま、サイトは今年の春に更新されてるから使えなくなったなら泣き言も 書かれていそうだがそれは無いからだいじょぶか? 行き詰ってるなら試してみる価値はありそう
271 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 10:52:16.86 ID:+QBADPFJ.net] VBA廃止でpowerqueryの時代が来る?
272 名前:デフォルトの名無しさん [2023/12/13(水) 11:21:09.91 ID:bFxo3E2h.net] >>267 レスありがとうございます 質問の意図はもっと単純で、複数ブックが開いているとき、Book1のマクロでcells(1.1).value=1みたいなコードを実行したとして、 実はBook2がアクティブだとBook1じゃなくてBook2の方が書き換わっちゃう けど、操作したいセルをワークブック、ワークシートの順で書いとけば特定できる ならば、複数ブックが開いていて、各ブックに同名のUserForm1があるとどうなるの? どのブックかの明示は必要?書き方は? ということでした (これを書いた方が良かったですね) んで、カキコした後、試しにBook1、Book2にそれぞれ同名のUserForm1を作ってブックが2つ開かれてる状態にしても特に何も起きない Book2をセル選択状態にして、Book1でUserForm1.ShowとやるとBook1側のユーザーフォームが開く じゃあ、どのブックかの明示は不要?ほかの問題は起きないの?というのが現在の疑問です マイクロソフトのリファレンスくらいは見ているのですけど理解できていません・・ 以前、オブジェクト階層樹形図のようなものがあった気がするけど、それも見つけられず・・ https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/userform-object
273 名前:デフォルトの名無しさん [2023/12/13(水) 11:21:15.74 ID:hoISaMFl.net] >>268 このハゲ!
274 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 11:26:50.73 ID:bFxo3E2h.net] >>269 一般のネットブラウザだと字がちいさいと思います、すみません スレチですが時々発生するのも疑問です
275 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 13:47:39.13 ID:b26gKOXL.net] >>269 ブックじゃなくてプロジェクトのメンバー 例えばプロジェクト名がVBAProject1で、UserForm1っていうフォームモジュールがあるとして dim a as VBAProject1.UserForm1 set a = new VBAProject1.UserForm1 で指定できる プロジェクト名はメニューのツール→(プロジェクト名)のプロパティとかから設定可能
276 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 13:51:08.21 ID:b26gKOXL.net] こういうのはオブジェクトブラウザから見ると簡単に確認できるよ 今回なら適当なモジュール内で dim a as UserForm1 と書いてUserForm1を右クリック→オブジェクトブラウザを選択すると 「Private Class UserForm1 VBAProject1 のメンバー」 と下部の説明欄に表示される
277 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 14:05:40.64 ID:ZzGWLSGP.net] >>269 じゃあ、みんな大好きオフィスTANAKAさんのこれで officetanaka.net/excel/vba/tips/tips103.htm 変数に入れとけば他のファイルには影響出ないんじゃないかな、と >Book2をセル選択状態にして、Book1でUserForm1.ShowとやるとBook1側のユーザー フォームが開く これは、Book1で・・の時点で選択状態が移行しちゃってるんじゃないのか? あと、このページの中ほどで説明してるけど https://www.kurumico.com/excel-vba-userform-show-2/4065/ >・実は、事前にメモリにロードされていないまま Showメソッドで UserForm を >表示する場合、自動的にメモリにロードされているんです。 ここがミソか いくつもファイルを開いて作業することが多いケースなら、Show では無く Load を使えと 最後にちゃんとUnLoadするのも忘れずに
278 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 15:19:48.92 ID:bFxo3E2h.net] 皆さんありがとうございます >>274 >選択状態が移行しちゃってるんじゃないの それはないと判断してます、というのは Book1に下記コードをかいておき、Book2のセルB2とかを選択した状態で、VBエディタの三角ボタンで実行すると、同名のユーザーフォームのうちBook1側が表示されるが、セル(1,1)はBook2側が操作されるからです Sub 試験用() UserForm1.Show Cells(1,1).Value=1 End Sub >>272 VBAProjectの下にあることは分かりました オブジェクトブラウザも見ましたし、VBAProject1. と打ち込んで、入力サジェストにUserFormが出てくることも確認しました で、2つのブックのプロジェクトも同名のVBAProject1にして、先ほどのコードのshowの行を下記に変えて実行しても結果は同じでした VBAProject1.UserForm1.Show つまり、指定が無いとシートやセルはその時アクティブなものを操作するけど、ユーザーフォームは(サブプロシージャとかも?)プロジェクト内から選択されるので、別ブックが開いていて、偶然同名のものがあっても問題ない、ということですかね
279 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 15:24:52.44 ID:bFxo3E2h.net] >>274 xボタンで閉じても「メモリ上から削除」されるんですよね、もう一度落ち着いて読み返して見ますけど
280 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 22:46:03.48 ID:b26gKOXL.net] >>275 >>プロジェクト内から選択されるので、別ブックが開いていて、偶然同名のものがあっても問題ない その通りです。 参照設定やApplication.Runなどで明示的に他プロジェクトのメンバーを呼び出さない限り、 そのプロジェクト内では自らのプロジェクトのメンバーしか呼ばれません。 ちなみに UserForm1 が変数名ではなくクラス名の場合、自動的にインスタンス化されたフォームを参照します。 プロジェクトのメンバーはあくまでクラス(≒型レベル)であり、インスタンス(≒値レベル)ではないという事は注意してください。 また、「指定が無いとシートやセルはその時アクティブなものを操作する」は厳密には、省略されたと判断されたら親オブジェクトを補完しようとすると考えた方がいいです。 例えばそのスコープ内でCellsという名前を定義した場合、 Cells(1,1).Value と書いても省略されたと判断されずにその定義したオブジェクトが参照されます。 定義されていない場合は省略されたと判断され Application.ActiveSheet. が頭に追加されます。
281 名前:デフォルトの名無しさん mailto:sage [2023/12/14(木) 09:05:18.07 ID:3Jt9wkWi.net] >>277 詳しくありがとうございます 疑問だった同名ユーザーフォームの件はまずは解決です 後半の「スコープ内でCellsという名前を定義・・」の部分を練習問題と思って、 Book2選択状態でもBook1でCells(1,1).Value=1を実行してBook1側セルが操作されるコードを考えてみます ご説明頂きながらこちらの理解が足らない状態です,もし、そーじゃねーよ、ということなら恐縮ですがご指摘頂ければ幸いです
282 名前:デフォルトの名無しさん [2023/12/21(木) 07:46:49.25 ID:VfXlm8CZ.net] 会社の先輩が 「サーバーがコケた」と言って魔した。 これはどういう意味なんですか?擬人法だとは思うけど。
283 名前:デフォルトの名無しさん [2023/12/21(木) 07:46:58.32 ID:VfXlm8CZ.net] ま
284 名前:デフォルトの名無しさん mailto:sage [2023/12/21(木) 08:07:57.44 ID:5xKtyKw4.net] >>279 板違い
285 名前:デフォルトの名無しさん [2023/12/21(木) 08:44:41.65 ID:VfXlm8CZ.net] Excelの先輩が 「サーバーがコケた」と言ってました。 これはどういう意味なんですか?擬人法だとは思うけど。
286 名前:デフォルトの名無しさん [2023/12/21(木) 08:45:07.84 ID:VfXlm8CZ.net] >>281 このハゲ!
287 名前:デフォルトの名無しさん [2023/12/21(木) 10:36:38.99 ID:xlAPeSS0.net] >>279 ウォーターサーバーかな?
288 名前:デフォルトの名無しさん [2023/12/21(木) 11:39:20.36 ID:VfXlm8CZ.net] >>284 そうみたいです。 「コケちゃいました。だから金メダル取れませんでした。」という意味だって。
289 名前:デフォルトの名無しさん [2023/12/21(木) 15:11:32.27 ID:UFnvFSs2.net] 現在計算が自動なのか手動なのかを判断する変数は見つけたのですが、これをリアルタイムで画面に出力する方法ってありますでしょうか? イメージとしては条件付き書式で現在の計算が自動なら青、手動なら赤を表示するみたいなのを実装したいです
290 名前:デフォルトの名無しさん mailto:sage [2023/12/21(木) 19:59:01.09 ID:3GSHThlW.net] その変数の値をセルに表示するサブルーチンを作って1秒毎に実行する
291 名前:デフォルトの名無しさん mailto:sage [2023/12/21(木) 20:55:44.88 ID:Zzwx7STl.net] 毎回必ず自動計算にしてしまうのはだめなの?
292 名前:デフォルトの名無しさん mailto:sage [2023/12/22(金) 08:39:48.76 ID:FajFP1p6.net] >>286 Excelでリアルタイムに更新する意味がない 自分で変更するなら変更時にセルにも値出すように組めばいい
293 名前:デフォルトの名無しさん mailto:sage [2023/12/22(金) 17:31:18.37 ID:ldIFfRbs.net] VBAは使わないが、 Webやローカルのデータを 外部参照するクエリーを 秒単位で更新させる機能はある。 あまり頻度を上げるとサーバに負荷をかけてしまうので、 確認しながら慎重に使っているが。
294 名前:デフォルトの名無しさん mailto:sage [2023/12/23(土) 15:28:27.09 ID:TfHA7K1j.net] >>286 よく使うシートでってなら、適当なオプションボタンなんかにその関数紐付けておけばいいんでは? 更にはそれで切替もできるような 全Workbookでってなら、フォームで作って呼出ボタンをクイックアクセスツールバーにでも置くくらい?
295 名前:デフォルトの名無しさん mailto:sage [2023/12/24(日) 01:28:27.22 ID:l/0x93fn.net] A1:C1*D2:D5の計算結果を二次元配列にするみたいなときってループなしでできたりするんでしょうか? ワークシート関数ならスピルで一発だと思うんですが、VBAだとどうなんでしょう?
296 名前:デフォルトの名無しさん mailto:sage [2023/12/24(日) 06:18:33.95 ID:I70/tr7G.net] ワークシート関数でできるならそれでやれば良いんじゃね
297 名前:デフォルトの名無しさん [2023/12/29(金) 20:50:51.68 ID:1fvRXsft.net] >>247 ちゃんと体系的に学んで知っていることは重要 ちょっとしたことを知らないせいで、変なやり方をする技術者は多い
298 名前:デフォルトの名無しさん [2023/12/29(金) 20:53:15.92 ID:1fvRXsft.net] >>286 Excelを使わずに自分でデスクトップアプリを作った方がいいよ
299 名前:デフォルトの名無しさん mailto:sage [2023/12/30(土) 01:00:29.23 ID:lZZlE2RF.net] >>294 これな。ネットの野良マクロをコピー職人が多い事多い事
300 名前:デフォルトの名無しさん mailto:sage [2023/12/31(日) 00:00:13.72 ID:gZgGGHZV.net] 綺麗すぎるコードはかえって怪しいかもな
301 名前:デフォルトの名無しさん mailto:sage [2023/12/31(日) 01:35:35.84 ID:vraHwHL1.net] 学校のテストじゃないんだから、評価されるのは仕事で結果を出したやつだけ 自作かコピペか、自分で考えたか人に聞きまくったかAIにやらせたか、手段が問われることなんてないから
302 名前:デフォルトの名無しさん [2023/12/31(日) 17:53:00.32 ID:3wmF+Ciz.net] Dim Match As Object Dim Matches As Collection Dim Re As Object Set Re = CreateObject("VBScript.RegExp") Re.Pattern = "\d+" Re.Global = True Set Matches = Re.Execute("123qwe456rty789oikj") For Each Match In Matches Debug.Print Match.Value Next Match 上記を実行するとMathesの型が違うとエラーが出ます。 Matchesが返すのはコレクションだと聞いていたのですが、Objectなのですか? as Collectionで宣言するのは何故間違いなのでしょうか?
303 名前:デフォルトの名無しさん mailto:sage [2023/12/31(日) 18:00:03.29 ID:fNILhI+9.net] CollectionてVBA内部世界のオブジェクト管理に限るんじゃないの? CreateObjectで作ったVBA外部のオブジェクトを扱えるとは思えないけど
304 名前:デフォルトの名無しさん mailto:sage [2023/12/31(日) 18:55:45.23 ID:1wnOvxvM.net] >>299 クラスモジュールに書いてる?
305 名前:デフォルトの名無しさん mailto:sage [2024/01/01(月) 00:07:34.93 ID:MaH6J7uc.net] 開けましておめ
306 名前:デフォルトの名無しさん [2024/01/01(月) 01:30:53.10 ID:/rCM9JK/.net] >>298 仕事だからこそ、どう作られているかが重要。
307 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 08:54:33.87 ID:nzmFeBBB.net] >>286 やりたい目的言えば別の代替案出てきそう臭がする。
308 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 14:58:32.95 ID:NJgc4isg.net] Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyControl Then MsgBox "ok" End If End Sub UserForm1にリストボックスを設置してKeyDownイベントを置いただけです Ctrl Alt Shift を押してもキーダウン イベント自体発生しないのですが何かヒントありますか? もう少し詳細に書きます If の行にブレイクポイントを作っても上の3つのキーを押したときは、無反応です 他のキーを押した場合はVBEが反応してブレイクポイントで処理が止まったことを示す強調色が表示されます。この結果から、上の3つのキーを押した場合のみKeyDownイベント自体が発生していないと判断しました 実は、自宅のデスクトップパソコン(Excel2019)でこのコードを実行すると、上の3つのキーでもちゃんと反応してくれます 会社のノートパソコン(おそらくExcel2016)だと上の3つのキーを押したときだけ無反応です。他のキー、例えば数字やアルファベットキーを押した場合はイベント発生します。 コードはコピペしてるので完全に同じです よろしくお願いします
309 名前:デフォルトの名無しさん [2024/01/02(火) 17:08:18.59 ID:CQp0gfLy.net] >>305 ノートPCのメーカーと型番を書いた方がいいかも。 もしかしたら他のキーと同時に押した時にしかキーコードを送らないとかやってるかもしれない
310 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 17:48:42.59 ID:HPsEIlot.net] >>305 フォームのKeyPreviewプロパティがTrueじゃないんだろ
311 名前:デフォルトの名無しさん [2024/01/02(火) 20:19:27.92 ID:G9bvfkvl.net] >>305 そういうOSに関することをやると挙動が変わるからやめた方がいい。 Excel VBAは古いものと新しいものが同居しているから、あまり書かれないことを書くとはまる。
312 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 21:37:51.33 ID:HPsEIlot.net] >>308 が無能なだけでVBAのせいじゃなくね?
313 名前:デフォルトの名無しさん [2024/01/02(火) 21:47:33.55 ID:yI/hz6th.net] >>309 >>308 が無毛なだけでハゲのせいで頭がおかしなことを言っている
314 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 23:13:53.34 ID:MZzCTdib.net] >>305 その3つは複数のキーを同時に押すことで特殊な動作をさせるために使っている [] [ここ壊れてます]
316 名前:デフォルトの名無しさん mailto:sage [2024/01/02(火) 23:57:34.67 ID:NJgc4isg.net] ありがとうございます >>306 >>311 最終目標がctrl+down/upによりリストボックス内の項目を入れ替える事です ctrl+down/upが機能しないため、原因を探っている所なんです もちろん自宅のパソコンでは思った通りの動きが実現できています 型番は会社に行かないとわからないので今はわかりません >>307 KeyPreviewプロパティが見当たらないので調べたところ、 VBではKeyPreviewプロパティがあるが、VBAでは存在しないとのことです 正しいでしょうか
317 名前:デフォルトの名無しさん mailto:sage [2024/01/03(水) 00:16:06.66 ID:PY0bko23.net] 他のキーと同時に押さないとキーコードを送らない可能性は自分も考えていたのですが、もう少し掘り下げて調べてみます
318 名前:デフォルトの名無しさん [2024/01/03(水) 00:56:53.29 ID:+zfFyPC5.net] 馬鹿ってWindows標準でないキーアサインするよな
319 名前:デフォルトの名無しさん mailto:sage [2024/01/03(水) 08:50:41.30 ID:Aw29e2Gk.net] Emacs
320 名前:デフォルトの名無しさん mailto:sage [2024/01/03(水) 11:46:15.43 ID:PY0bko23.net] >>305 ですが、いくつか実験したところ解決しました 環境によって受け取れるキーコードが違うようです イベントハンドラの第一引数KeyCodeにコントロールキーが入るケースと入らないケースがあるようで、会社の環境だと入らないようです KeyCodeにコントロールキーが入る環境だと、コントロールキーを単独で打っても認識できるようなのですが、入らない環境だと他のキーとセットで打った場合のみ第二引数のShiftにコントロールキーがはいるようです
321 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 09:51:48.22 ID:8ldacu+2.net] ノートPCに外付けのキーボード接続すれば、自宅PCと同じ動作するかもね 確かにノートPCのキー・アサインはメーカーに依っても製造時期に依っても様々
322 名前:デフォルトの名無しさん [2024/01/04(木) 15:37:18.98 ID:e9Yi6W7+.net] 素直にWindowsアプリを作ればいいのにな
323 名前:デフォルトの名無しさん [2024/01/04(木) 16:26:45.35 ID:t9OXoE69.net] >>318 わたしが素直でないと申すか? 糞!
324 名前:デフォルトの名無しさん [2024/01/04(木) 17:31:34.88 ID:e9Yi6W7+.net] ハードウェアの割り込み、OSのメッセージをExcel経由で得るというのは素直じゃない。
325 名前:デフォルトの名無しさん [2024/01/04(木) 17:35:33.92 ID:t9OXoE69.net] >>320 糞!糞!糞!
326 名前:デフォルトの名無しさん [2024/01/04(木) 19:08:52.50 ID:e9Yi6W7+.net] Pythonについてはどう思ってんのかな?
327 名前:デフォルトの名無しさん [2024/01/04(木) 19:31:16.02 ID:t9OXoE69.net] >>322 もう糞(ふん)をして寝るわ
328 名前:デフォルトの名無しさん [2024/01/04(木) 19:44:33.23 ID:zwj60hXG.net] 5×5のセル内をソートして、左上が最大値でそこから昇順に右下が最小値にして数値を入れ替えるマクロって作れますか?
329 名前:デフォルトの名無しさん [2024/01/04(木) 20:28:44.78 ID:e9Yi6W7+.net] >>324 そんな課題を出す学校があるのか なぜできないと思うのかな?
330 名前:デフォルトの名無しさん [2024/01/04(木) 20:48:12.58 ID:epENqCjo.net] Excelのバージョンわからないけど、そういうのは今はマクロでなくてシート関数で出来るレベル。
331 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 21:30:12.87 ID:TL+QpeJQ.net] 最大値から昇順は全データが同一の時のみ可能なので、初期状態で必ず昇順になっている マクロも関数もまったく必要ない
332 名前:デフォルトの名無しさん [2024/01/04(木) 21:44:11.20 ID:reskTtOH.net] >>324 馬鹿は帰れ
333 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 21:58:19.60 ID:vv8992PB.net] >>324 昇順だと最大値より大きな値はないんじゃね
334 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 22:52:57.73 ID:8ldacu+2.net] A1:E5まですでに埋まっていると それを一旦作業列にでもコピーして昇順に並べ替えると 並び終わった順に5つずつA1:E1、B1:E2、・・という行ごとに埋めてくカタチなのか A1、B1、A2、C1、B2、A3、・・と、ハスに埋めてくカタチなのか A1:A5、B1:B5、C1:C5、・・と、列ごとに埋めてくカタチなのか いや、いずれにしろA1:E5を入れ替えるなら関数は無理だろ マクロやVBAでしかできない
335 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 23:18:36.18 ID:44UH0tDv.net] >>278 たいぶ亀だけど、最初に言った通り参照設定やApplication.Runを使用します。 まずBook2で選択状態のセルを取得するメソッド(関数)やプロパティを標準モジュールで作成して、 Book1のモジュール内で宣言したCellsに上記の方法で呼び出したその戻り値を割り当てます。 ただし、そもそも他のブックを見ているときに選択状態というのを認識してくれるのか検証してないです。
336 名前:デフォルトの名無しさん [2024/01/05(金) 11:28:46.79 ID:OkMjEs1t.net] >>330 ありがとございます! 一度べつのセルに並べてから昇順にして元のセルに入れなおせばいいんですね!
337 名前:デフォルトの名無しさん mailto:sage [2024/01/07(日) 14:25:39.45 ID:Zu5udfiU.net] シートコピーとシート名変更について質問なのですが アクティブシートの7個左にあるシートをコピーして アクティブシートの右側にシート名を明日の日付(例:24年1月8日)にして貼り付け という動きをさせたいんですがどうすればいいでしょうか?
338 名前:デフォルトの名無しさん mailto:sage [2024/01/07(日) 14:34:54.50 ID:BWXKnEg4.net] 「マクロの記録」でやりたい操作をコードにしてみ
339 名前:デフォルトの名無しさん mailto:sage [2024/01/07(日) 15:33:58.57 ID:9MKsxzn1.net] >>334 おお…なるほど 君がやりたい操作はこういう事でしょ?と 操作してみて表示させればいいのか ありがとうございますその発想はありませんでした
340 名前:デフォルトの名無しさん [2024/01/09(火) 20:19:55.53 ID:/NZC7p4w.net] ファイル移動をするのにNameで変数を使ってやりたいけどうまくできません
341 名前:デフォルトの名無しさん [2024/01/09(火) 20:23:46.49 ID:/NZC7p4w.net] >>336 の続き Sub rename() Name "C:\A\1.txt" As "C:\B\1.txt" End Sub だと移動できるけど Sub rename() Name Cells(1, 1) As Cells(2, 1) End Sub だとうまくいきません(A1 ←"C:\A\1.txt"、A2 ←"C:\B\1.txt") 書き方の問題ですか?それともNameで変数は使えませんか?
342 名前:デフォルトの名無しさん mailto:sage [2024/01/09(火) 22:02:52.13 ID:yOyd7K8a.net] >>337 うちの環境では動いたのでなんか見落としているのではないかな
343 名前:デフォルトの名無しさん [2024/01/09(火) 22:31:05.76 ID:g/zTW0/0.net] セル内の文字の頭にシングルクォーテーションがついてるとか。
344 名前:デフォルトの名無しさん [2024/01/10(水) 00:45:29.03 ID:QjRR+OtK.net] うまくいかないと主張するだけで絶対にエラーを書かないタイプ
345 名前:デフォルトの名無しさん [2024/01/10(水) 11:25:08.02 ID:sAzyr022.net] 罫線についての質問です。 連続した任意の選択されたセル範囲 (例えばA1,A2,A3,B3,C3,D3のようなL字型) に外枠の罫線を描きたいのですが、 どのようにすればよいでしょうか
346 名前:デフォルトの名無しさん [2024/01/10(水) 11:32:15.87 ID:Wf3Eae89.net] > 彼らはよく、社会に貢献したいと口にする。 > なんでも社会悪のネトウヨを自殺に追い込むことが、社会に貢献することなんだそうで。 > イジメや嫌がらせで社会に貢献できる教師や警官になるために、あえて帰化したんであって、祖国同胞を裏切ったわけではなく、心は●●人なんだそうだ。 > > 昔は帰化すると裏切り者と呼ばれたりしたが、祖国に国籍を残したまま帰化する方法が確立された現在では、社会に貢献するためにむしろ帰化することが推奨されている。 > 拳銃所持で前科のある生粋の反日家ですら、今では普通に帰化している。 > > ●●学会などはネトウヨ認定した日本人を盗撮して、痴漢の写真だと言ってばらまいている。 > それらの写真は、集団ストーカーに使用される。 > 彼らは集団ストーカーを、[地域で子供を守る安心安全パトロール]と称している。
347 名前:デフォルトの名無しさん [2024/01/10(水) 13:52:33.52 ID:QjRR+OtK.net] >>341 それはVBAに関係があるのか?
348 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 14:42:52.94 ID:54SkLlBn.net] 必要なセルをCtrlキーを押しながら選択し、L字型を形成 右クリック − セルの書式設定 − 罫線タブ − スタイルで線種を選んでから[外枠]ボタンを押す 想定していない余計な位置にも罫線が引かれるので、同様に不要なセルを選択し罫線タブから[なし]を使って消す 2024年の方針 : おっちょこちょいに要注意(要らぬ低評価に繋がり兼ねない)
349 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 15:34:00.16 ID:6PPGwb7s.net] >>343 VBAで実現する方法を聞いてるんだろ
350 名前:338 mailto:sage [2024/01/10(水) 16:34:51.12 ID:sAzyr022.net] >>341 です。 >>344 さんありがとうございます。 >>345 さんご指摘の通りVBAでの実装方法を探しています。 いまのところ Application.Union("Add_ >>344 さんありがとうございます。 >>345 さんご指摘の通りVBAでの実装方法を探しています。 いまのところ Application.Union("Additional_Address", Selection).Select を繰り返して複数のセルを同時に選択するところまではできています。 一方で、例えばA1,A2,A3,B3,C3,D3の順にAdditional_Addressを指定すると 選択範囲がA1〜A3の縦3連とB3〜D3の横3連に分割されて選択されるため、 xlEdgeLeft等の処理が縦3連と横3連それぞれで実行されてしまう状況です。 こうなるのを ┌┐ ││ │├──┐ └┴──┘ こうしたい ┌┐ ││ │└──┐ └───┘ セルごとに隣接判定をして罫線を描く/描かないの処理を するしかないのでしょうか
351 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 16:39:20.24 ID:xiFTPfWu.net] >>346 そう、それしかない
352 名前:338 mailto:sage [2024/01/10(水) 18:00:56.27 ID:sAzyr022.net] >>347 さん やはり愚直に処理するしかないのですね。 ありがとうございます。
353 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 18:06:26.38 ID:54SkLlBn.net] A1:D3選択で範囲の外枠を描画 B1:D2選択で範囲の左端・下端に枠線を引き 範囲の上端・右端の枠線を消す の二段構えなら可能 描きたい枠線が上記だけじゃ無いだろうしL字だけとも限らないだろうけど創意工夫で
354 名前:338 mailto:sage [2024/01/10(水) 18:49:21.47 ID:sAzyr022.net] >>349 さん ありがとうございます。 L字だけだったらこれもありですね。 今回は範囲が動的なので愚直にやろうと思います…
355 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 21:34:25.26 ID:54SkLlBn.net] A1:A3外枠描いてからB3:D3の外枠左辺抜きのが楽だった その他、右辺抜き、上辺・下辺それぞれ抜きのを、全枠と合わせて五つのマクロだけで L字の左右反転でも上下反転でも、E字F字H字T字それぞれ上下左右反転だろうと対応できたわ 全周 Sub all4() Selection.BorderAround True End Sub 上辺抜き Sub nontop() Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous Selection.Borders(xlEdgeRight).LineStyle = xlContinuous End Sub 下辺抜き Sub nonbottom() Selection.Borders(xlEdgeTop).LineStyle = xlContinuous Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous Selection.Borders(xlEdgeRight).LineStyle = xlContinuous End Sub あと、左右は上下の真似してそれぞれxlNone するだけの、都合五つのマクロで自由自在 罫線の色とか種類を変えたいなら、それぞれに加工加えて
356 名前:338 mailto:sage [2024/01/11(木) 10:04:37.01 ID:q0ONoHEN.net] >>351 さん ありがとうございます。 参考にします。
357 名前:デフォルトの名無しさん mailto:sage [2024/01/11(木) 21:32:22.23 ID:jLVdVVn1.net] >>351 そんなことするなら素直に >セルごとに隣接判定をして罫線を描く/描かないの処理 を実装すればいいんじゃねえかと Sub test() Dim r As Range Dim r2 As Range Set r2 = Selection For Each r In Selection If Not isSelect(r, xlEdgeTop) Then r.Borders(xlEdgeTop).LineStyle = xlContinuous If Not isSelect(r, xlEdgeBottom) Then r.Borders(xlEdgeBottom).LineStyle = xlContinuous If Not isSelect(r, xlEdgeLeft) Then r.Borders(xlEdgeLeft).LineStyle = xlContinuous If Not isSelect(r, xlEdgeRight) Then r.Borders(xlEdgeRight).LineStyle = xlContinuous Next End Sub Function isSelect(testRange As Range, index As XlBordersIndex) As Boolean On Error Resume Next Dim r As Range For Each r In Selection Select Case index Case xlEdgeTop If r.Address = testRange.Offset(-1, 0).Address Then isSelect = True Case xlEdgeBottom If r.Address = testRange.Offset(1, 0).Address Then isSelect = True Case xlEdgeLeft If r.Address = testRange.Offset(0, -1).Address Then isSelect = True Case xlEdgeRight If r.Address = testRange.Offset(0, 1).Address Then isSelect = True End Select Next End Function こんな感じか。行数制限あるからやってるけど、1行If は推奨しないぞ
358 名前:デフォルトの名無しさん mailto:sage [2024/01/11(木) 21:35:04.35 ID:jLVdVVn1.net] ああ Dim r2 As Range Set r2 = Selection の2行はいらん
359 名前:デフォルトの名無しさん mailto:sage [2024/01/12(金) 11:23:51.46 ID:Dgb3NVJl.net] >>353 さすがです
360 名前:デフォルトの名無しさん mailto:sage [2024/01/12(金) 16:52:25.20 ID:LICC/lNk.net] さすがだ。良い書き方してる
361 名前:デフォルトの名無しさん mailto:sage [2024/01/12(金) 18:08:01.72 ID:m3q3lwQ5.net] For i =1 to 500 Sheets("A").Cells(1,1)=i Sheets(Array("A", "B", "C", "D", "E")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\out.pdf" next というふうに、シートAのA1セルにiを入れたあと、複数シートを一つのpdfにすることを500回繰り返したいのですが、150回くらい行うと「この操作を完了するにはメモリが不足しています。扱うデータ量を減らすか、他のアプリケーションを終了してください。使用できる目盛りを増やすには、以下を検討してください。・64ビット版のMicrosoft Excelを使う。」というエラーが出ます これを解消することはできないでしょうか? ネットで検索してもSetしたものをNothingすればいいと書いてあるのですが、そもそもSetしてるものがないので‥
362 名前:デフォルトの名無しさん mailto:sage [2024/01/12(金) 20:43:53.34 ID:LR75xgwt.net] >>357 試してないけどPDFを作成するたびにビューアが起動するから? OpenAfterPublish:=False 'ビューアー起動の有無設定 を追加してみたらどうかね
363 名前:デフォルトの名無しさん mailto:sage [2024/01/12(金) 21:09:33.72 ID:m3q3lwQ5.net] >>358 レスありがとうございます すみません、記載省略してしまったのですが、ビューワーの起動はしないようにしています
364 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 01:36:13.45 ID:PnyKt9oE.net] チャットgptに聞いたところ、ActiveSheet.ExportAsFixedFormatはメモリを使用するので、複数回やればエラーになる可能性があるとのことでした。しかし新しいブックを作成し、そこに貼り付けてpdf化、新しいブックを閉じることによって、メモリの使用を抑えることができるとことでした それで試してみたのですが、結果は変わらず‥ 新しいブックを開いてそこで作業して閉じたとしてもメモリの使用量は変わらないのでしょうかね?
365 名前:デフォルトの名無しさん [2024/01/13(土) 08:06:25.09 ID:ublfaSAv.net] >>357 Win10,Excel365,64ビット版でそのサンプルコードを動かしたけどエラーが出なかった。 64ビット版にすれば? あとは実際のワークシートの内容、コードの内容にもよると思うけど、 ・シートA〜Eは毎回選択する必要はないかと。Forの前に持っていったらどうなる? ・PDFを出力するコードの下に「DoEvents」を追加してみる
366 名前:デフォルトの名無しさん [2024/01/13(土) 10:46:37.60 ID:14sT36Xv.net] どなたかコードを作成いただけませんでしょうか。マクロ初心者で恐縮です。 やりたい作業としては ・範囲指定してある部分の印刷 ・.pdfで印刷→デスクトップに保存 ・保存ファイル名がセル(I8)の値を入れたい よろしくお願いします。
367 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 10:50:05.61 ID:PnyKt9oE.net] >>361 職場のパソコンなので環境を変更するのは難しいです doeventsを入れたところ、エラーは出ないのですが、やはり150回ほどループしたタイミングで強制再起動となってしまいました タスクマネージャーで見ていたところ、メモリがどんどん増えていきます 色々調べたのですが環境によるものみたいです 素直に、100回ループさせたら一度EXCELを終了させ、メモリを解放してから再度EXCEL起動して続きからマクロを回すことにします ありがとうございました