[過去ログ]
VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
VBAなんでも質問スレ Part2 [転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1432173164/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
262: デフォルトの名無しさん [sage] 2017/02/15(水) 13:14:12.73 ID:zgJtAmDR >>256 スマホからだから試してないけどこんな感じかな Application.Presentations.Open(ひとつ目のファイル) Application.Presentations.Open(ふたつ目のファイル) ... Application.Presentations.Open(いつつ目のファイル) Set P = Application.Presentations.Add For I = 1 To 50 For J = 1 To 5 Application.Presentations.Item(J).Slides(I).Copy P.Slides.Paste Next Next P.SaveAs(新規のファイル) http://mevius.5ch.net/test/read.cgi/tech/1432173164/26
2
263: デフォルトの名無しさん [sage] 2017/02/23(木) 13:32:21.69 ID:xPy6pfR0 選択されているセル範囲内の文字、図形を削除する手順を作ってみましたが、処理がえらく重いです。 もっと処理を早くする方法はないでしょうか? Sub sakujo() Application.ScreenUpdating = False '画面更新を停止 Dim shp As Shape Dim rng As Range If TypeName(Selection) <> "Range" Then Exit Sub For Each shp In ActiveSheet.Shapes Selection.ClearContents Set rng = Range(shp.TopLeftCell, shp.BottomRightCell) '図形の配置されてい
るセル範囲をオブジェクト変数にセット If Not (Intersect(rng, Selection) Is Nothing) Then '図形の配置されている範囲と選択されているセル範囲が重なっているときに図形を削除 shp.Delete End If Next Application.ScreenUpdating = True '画面更新を再開 End Sub http://mevius.5ch.net/test/read.cgi/tech/1432173164/263
264: デフォルトの名無しさん [sage] 2017/02/23(木) 14:40:32.47 ID:bekNjoMq >>263 再計算とイベントも停止してみた? あと、コレクションに対するループの中で自分自身のコレクションが変化するのは、なんとなくまずい気がする 根拠はないけど、それって遅くなる要因と違う? http://mevius.5ch.net/test/read.cgi/tech/1432173164/264
265: デフォルトの名無しさん [sage] 2017/02/23(木) 15:02:34.32 ID:Q2T7iSLN 処理の基本をよく考えるべき。 1.Shape毎にSelection.ClearContentsする意味は? 2.shp.Delete後もループする意味は? 3.そもそもSelectionって何?つまり何が選択されている時に削除したいの? For Each shp In ActiveSheet.Shapes If shp Is Selection Then shp.Delete Exit For End If Next じゃ駄目? http://mevius.5ch.net/test/read.cgi/tech/1432173164/265
266: デフォルトの名無しさん [sage] 2017/02/23(木) 15:08:21.72 ID:Q2T7iSLN 選択されているセル範囲については最初のIf文でExit Subしてるから削除されないんじゃ? 処理がよく分からん。 選択されているShapeの下のRangeの内容を削除したいならshp=Selectionの場合に Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents で良いんじゃ? http://mevius.5ch.net/test/read.cgi/tech/1432173164/266
267: デフォルトの名無しさん [sage] 2017/02/23(木) 15:10:34.31 ID:Q2T7iSLN shp=Selectionの場合じゃなくてshp Is Selectionの場合だな。 shp.Deleteの前ね。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/267
268: デフォルトの名無しさん [sage] 2017/02/23(木) 15:24:01.29 ID:5OVH7aZj >>265 質問者じゃないけど変わって説明するよ ・シート上に文字と図形が複数箇所に設定されている ・消す範囲を選択して、その範囲内の文字と図形を消すコードを書いた ・でもなぜか遅い 質問者に言えるのは、 ・Selection.ClearContentsはfor eachの外でいい ・試しに100個のshapeを貼り付けて50個くらいが入る範囲を選択して消してみたら一瞬で終了(もちろんコードでだよ) ・遅いって具体的にどれくらいなの? http://mevius.5ch.net/test/read.cgi/tech/143
2173164/268
269: デフォルトの名無しさん [sage] 2017/02/23(木) 16:00:14.32 ID:Q2T7iSLN >>268 コード見りゃわかる。 でもコードがやってることは無駄な部分が多いから聞いてる。 最初のIf文を見ればRangeを選択した場合はExit Subしたいみたいだがら範囲選択した場合は処理して欲しく無いんだよな。 →じゃ、どんな時に処理して欲しいの? For Each shp In ActiveSheet.Shapes If shp Is Selection Then Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents shp.Delete Exit For End If Next じゃ駄目なの? http://mevius.5ch.net/test/read.
cgi/tech/1432173164/269
270: デフォルトの名無しさん [sage] 2017/02/23(木) 16:07:14.86 ID:xPy6pfR0 今までは長い時で1〜1.5秒程止まっていました >>268さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います たくさんご意見頂きありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1432173164/270
271: デフォルトの名無しさん [sage] 2017/02/23(木) 16:14:41.52 ID:5OVH7aZj >>269 > If TypeName(Selection) <> "Range" Then Exit Sub だよ http://mevius.5ch.net/test/read.cgi/tech/1432173164/271
272: デフォルトの名無しさん [sage] 2017/02/26(日) 14:44:16.79 ID:nMuhJunv エクセルのマクロでも質問大丈夫でしょうか? 名前と同じファイル名の画像を名前セルの隣に貼り付けるプログラムなんですが Sub ボタン1_Click() Const n As Long = 2 Dim i As Long Dim x As Double Dim s As String Dim t As FileDialog Dim m As VbMsgBoxResult With ActiveSheet For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6 Set r = .Cells(i, 3).MergeArea s = "D:\画像\1\" & .Cells(i, 2).Value & ".jpg" Dir Applica
tion.Path With .Pictures.Insert(s).ShapeRange .LockAspectRatio = msoTrue x = Application.Min(r.Width / .Width, (r.Height - n) / .Height) .Width = .Width * x .Left = r.Left + (r.Width - .Width) / 2 .Top = r.Top + (r.Height - .Height) / 2 End With Next End With End Sub この"D:\画像\1\"の部分をフォルダ選択できるようにしたいので Dim s As String Dim t As FileDialog Set t = Application.FileDialog(msoFileDialogFolderPicker) s = "t" & .Cells(i, 2).Value & ".jpg" としたら「1
004 PicturesクラスのInsertプロパティを取得できません。」と実行できません どうしたら"D:\画像\1\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/272
273: デフォルトの名無しさん [sage] 2017/02/26(日) 16:00:22.84 ID:nt1S72uw >>272 Dim s As String Dim t As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub t = .SelectedItems(1) & "\" End With '途中省略 s = t & .Cells(i, 2).Value & ".jpg" じゃないかな? あと 元コードもそうだけど フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ 同じエラーになるぞ それとも絶対 あるのが 確定してる? http://mevius.5c
h.net/test/read.cgi/tech/1432173164/273
274: デフォルトの名無しさん [sage] 2017/02/26(日) 16:45:49.33 ID:nMuhJunv >>273 大変ありがとうございます! ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか? ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます よろしくお願いします http://mevius.5ch.net/test/read.cgi/tech/1432173164/274
275: デフォルトの名無しさん [sage] 2017/02/26(日) 16:51:45.39 ID:nt1S72uw >>274 ん? そこは分ってるとおもたよ フォルダ選択部分は Forループの外だよ ↓ここねw With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub t = .SelectedItems(1) & "\" End With http://mevius.5ch.net/test/read.cgi/tech/1432173164/275
276: デフォルトの名無しさん [sage] 2017/02/26(日) 16:57:59.74 ID:nMuhJunv >>275 あっ!できました!ありがとうございます!助かりました! http://mevius.5ch.net/test/read.cgi/tech/1432173164/276
277: デフォルトの名無しさん [] 2017/03/06(月) 23:29:36.96 ID:QCgyLcj6 こんにちは。 パワーポイント2013のVBAについて分かる方教えて下さい。 やりたいことは、グラデーションの塗りつぶしがあるシェイプのGradientStopsのそれぞれの色を変化させるアニメーションの方法です。 2013ではできないけど2016ではできる等の情報もあればお願い致します。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/277
278: デフォルトの名無しさん [sage] 2017/03/08(水) 21:50:45.20 ID:DO0ivfK5 vbaだけでhttpサーバーって出来る? http://mevius.5ch.net/test/read.cgi/tech/1432173164/278
279: デフォルトの名無しさん [sage] 2017/03/08(水) 23:04:04.36 ID:Tpob7EG8 俺が手を下すまでもないな 答えてやれよ >>280 http://mevius.5ch.net/test/read.cgi/tech/1432173164/279
280: デフォルトの名無しさん [sage] 2017/03/09(木) 01:39:01.40 ID:UFk6xx1O VBAだけってのが 外部コントロール使用禁止 API呼び出し禁止 なら不可能です http://mevius.5ch.net/test/read.cgi/tech/1432173164/280
281: デフォルトの名無しさん [sage] 2017/04/09(日) 15:56:17.26 ID:9WwYB+FH VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、 セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/281
282: デフォルトの名無しさん [sage] 2017/04/09(日) 16:02:56.39 ID:9WwYB+FH ちりも積もればの話ですが 足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと 同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/282
283: デフォルトの名無しさん [sage] 2017/04/09(日) 16:09:57.30 ID:Lq/WJuQk >>281 セルでいいんじゃないの? ただそのIOは配列アクセスを使うべき ループで1セルづつ読み込むとかがナンセンス http://mevius.5ch.net/test/read.cgi/tech/1432173164/283
284: デフォルトの名無しさん [sage] 2017/04/09(日) 16:14:42.36 ID:K8MFArI9 >>281 説明がいまいち分かりにくい。 次回ってのは何時のことを言ってる? グローバルな変数じゃダメなの? 次にそのブックを開くまで保持したいならセルってのも分かるんだが。 で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/284
285: デフォルトの名無しさん [sage] 2017/04/09(日) 16:27:32.06 ID:9WwYB+FH >>283 ありがとうございます。 >配列アクセス 勉強してみます。 >>284 Bookを閉じずに他からデーターを取り込み再度VBA実行を繰り返します。 >グローバル変数 >CustomDocumetProperties 勉強してみます。 グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/285
286: デフォルトの名無しさん [sage] 2017/04/09(日) 16:44:07.10 ID:9WwYB+FH >>284 プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね! 今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/286
287: デフォルトの名無しさん [sage] 2017/04/09(日) 19:39:59.08 ID:9WwYB+FH Public変数もしくは通常の変数の指定数の限界はあるのでしょうか? 問題なく動くレベルは何個ぐらいでしょうか? 50個 100個 1000個 10000個でも平気だっり? 実は 100000個以上でも問題ないとか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/287
288: デフォルトの名無しさん [sage] 2017/04/09(日) 19:51:50.86 ID:0T9WQSVM >>287 使えるメモリは決まってる 変数の個数じゃなくてそれぞれのバイト数の合計 http://mevius.5ch.net/test/read.cgi/tech/1432173164/288
289: デフォルトの名無しさん [sage] 2017/04/09(日) 23:55:43.90 ID:K8MFArI9 >>287 グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。 PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/289
290: デフォルトの名無しさん [sage] 2017/04/10(月) 02:47:06.39 ID:AhmZ51rM 日曜の午後からずっとVBAを書いてるけどまだおわらね〜 てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w http://mevius.5ch.net/test/read.cgi/tech/1432173164/290
291: デフォルトの名無しさん [sage] 2017/04/10(月) 04:05:13.85 ID:sRLMXvmn >>287 しかもEndやErrorで抜けたら破棄されるという罠 http://mevius.5ch.net/test/read.cgi/tech/1432173164/291
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 711 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s