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


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

Excel VBA 質問スレ Part80



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/

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起動して続きからマクロを回すことにします
ありがとうございました

368 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 14:05:15.65 ID:veMnryOA.net]
32bit→64bitでどのくらい支障がでるんだろうか
顧客とのやり取りとかで支障がでるのが嫌で移行できないでいる
逆に64bitで32bitでの作成物を扱うのには特に支障はないのかな?

369 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 14:05:21.54 ID:v88G6T5y.net]
Sheet対象を辞めてRange対象にしてみたらどうか
いきなりout.pdfに出力するのを辞めて新規ブックに追加していって、最後にそのブックをpdfでは
メモリ不足から逃げる手立てを一考



370 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 16:41:42.38 ID:PnyKt9oE.net]
>>365
なるほど‥
新規ブックを開いて、pdf化したいシートを順々にコピーしていき、最後に一回だけpdf化するということですね
デメリットとしてはpdfが一つにまとまってしまいますが、運用に支障はないのかもしれません
ありがとうございます
関係者に聞いてみて、それでも問題ないならその方向で行こうと思います

371 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 19:24:41.20 ID:veMnryOA.net]
出来上がったpdfを分割までやればいいだけでは?
コマンドラインで動く外部ツール使えばできるような

372 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 20:34:27.31 ID:PnyKt9oE.net]
>>367
後出しで申し訳ないのですが、実は出来上がったpdfをメールで送って、相手方で印刷するのが今回の運用だったのです
なので「pdfを全て開いて印刷するのは結構面倒だよなぁ」とは思っていました
しかし一つのpdfにできるのであれば、その問題も解決できるので、一つの方が今回は都合が良かったりします
pdfを分割して置かなければならない別の機会があれば、そのようなことも検討したいと思います
ありがとうございました

373 名前:デフォルトの名無しさん [2024/01/13(土) 21:55:24.12 ID:2NbpGDvt.net]
頭の悪い人は解決方法自体を間違えている
いつもの

374 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 22:36:38.78 ID:v88G6T5y.net]
そういうことを平気で衆人環視の環境で書き込める人は 間違い無く病んでる

適しているかどうかは実際にやってみないといけないでしょ?
最後の大きく成ったブックをPDF化するときにエラー吐いて完走しなかったら
元も子も無いんだし 単なる思い付きで書いただけなので検証を
相手が居るならすり合わせも大事だし ダメ出しされたら再検討だし

ところで、初手のout.pdf(このネーミングも如何なものか、とちょっと思った
Outputの意味なのか、Out of Orderとかの意味なのか、いずれにしろ経営陣から
したら眉を顰めてしまう単語 ま、それは置いといて)には、どう蓄積されるのか
興味があった これ走らせたらC:\out.pdfにページが追加されてく?
C:\out.pdfが(2)(3)(4)・・とか増えてく?  誰か教えて

375 名前:デフォルトの名無しさん mailto:sage [2024/01/14(日) 01:10:58.98 ID:oEubWJyC.net]
>>370
すみません、out.pdfというのはネットから適当に拾ったコードなので、自分のコードではチキンとした名前をつけています
これを走らせるとout.pdfが上書きされ、一番最後のpdfしか残りません

また、さっそく一番最後だけpdf化を試してみたのですが、ダメでした
50個回分をシートに蓄積してpdf化を繰り返したところ3回目まではうまく行ったのですが、4回目(160ループ目)くらいからpdfが文字化けしてしまいました
どうもpdf化の回数は関係なく、どれくらいのデータ量をpdf化したかによって上限が来て、それ以降は文字化けするような仕組みみたいです
.ExportAsFixedFormatを使用せずにworksheet.printoutメゾットでpdfに印刷するようにしたら、画質は劣るものの、全てpdf化できました
長々とありがとうございました

376 名前:デフォルトの名無しさん mailto:sage [2024/01/14(日) 07:32:56.45 ID:TX+95vKD.net]
次は添付ファイルのサイズ制限に引っかかって、結局分割することになると見た
そしてVBAからメールを連続送信する方法を聞きに来て、最後にPDFがいくつあっても簡単に一括印刷できることを知るまでがセット

377 名前:デフォルトの名無しさん mailto:sage [2024/01/14(日) 08:46:41.57 ID:kWzMOUYI.net]
>>370はコマンドラインツール使ったことなさそう

378 名前:デフォルトの名無しさん mailto:sage [2024/01/14(日) 11:11:31.44 ID:Oiv3IqyF.net]
>>362
それくらいならChatGptが良いコードを書いてくれるはずだよ

379 名前:デフォルトの名無しさん mailto:sage [2024/01/16(火) 19:30:09.09 ID:1/22QV7P.net]
それならそのコードを貼ってあげなよ



380 名前:ぐううさ [2024/01/16(火) 21:08:30.59 ID:r9xAueHW.net]
業務でvba上手くいかないので質問させてもらってもよろしいでしょうか?

381 名前:ぐううさ [2024/01/16(火) 21:08:36.00 ID:r9xAueHW.net]
業務でvba上手くいかないので質問させてもらってもよろしいでしょうか?






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

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

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