Excel VBA 質問スレ Part64

■ このスレッドは過去ログ倉庫に格納されています
2019/12/02(月) 23:43:54.18ID:ngrqyTy20
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part63
https://mevius.5ch.net/test/read.cgi/tech/1568630099/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/01/09(木) 10:23:13.99ID:0t9GlNIo0
これWeb版の機能だろ。
そもそもExcel95の時代からマクロの記録機能は有るだろ。
2020/01/09(木) 20:22:30.66ID:QTlbFy+y0
↓のマクロを実行するとエラー438になって動きません。原因を教えてくださいm(__)m

・DE3とDS3の値のいずれかの高い数値が1であれば、11行目〜12行目を削除
・DE3とDS3の値のいずれか高い数値が2であれば何もしない
・DE3とDS3の値のいずれか高い数値が3以上であれば、11行目〜12行目をコピーして
 DE3とDS3のいずれか高い数値−2回を、13行目以降に2行づつ貼り付ける

*DE3とDS3はいずれも1以上の整数です

Dim i As Integer
Dim cnt As Integer, a As Range

With ActiveSheet
i = .Max(Range("DE3", "DS3"))
Select Case i
Case Is = 1
.Rows("11:12").Delete
Case Is = 2
' なにもしない
Case Is >= 3
.Rows("11:12").Copy
Set a = .Range("A13") ' 貼り付け開始位置
For cnt = 3 To i '3以上のときはその値回数分貼り付けを繰り返す
a.PasteSpecial xlPasteAllMergingConditionalFormats '貼り付ける種類はお好みで
Set a = a.Offset(2, 0) ' 貼り付け先を2行下へ
Next cnt
End Select
End With
End Sub
2020/01/09(木) 20:37:39.44ID:R5Jo4gYe0
>>272
i = WorksheetFunction.Max(.Range("DE3", "DS3"))
2020/01/09(木) 21:08:00.17ID:QTlbFy+y0
>>273
ありがとうございます
2020/01/09(木) 21:37:55.27ID:o7IUVb3B0
あなたのハゲにサクセスしたい
2020/01/09(木) 23:19:52.51ID:CBGZn1t+p
やっぱり少し騒ぎになってたか
お前らこれから少しは
Javascript勉強しといた方がいいぞ
2020/01/09(木) 23:35:37.48ID:SuIB+b6T0
>>276
JSは癖があるけど、あれはwebの話
既にあるオブジェクトに対してどうこうするならVBAと特に変わらんぞ

adobeのJSは本当にクソだった
※オブジェクトに名前がついてないので、「topプロパティが一番大きいオブジェクトにはxx」などと名付けをしなければならなかった
2020/01/09(木) 23:36:34.25ID:SuIB+b6T0
VBAで無名関数とか即時関数は別にやらんやろ
webのJS使ってる人が参入しやすいようにしてるだけやで
2020/01/10(金) 00:22:51.50ID:D5emfq5uM
Googleスプレッドシートの
マクロ(GAS≒Javascript拡張)を移植するだけだぞ
2020/01/10(金) 00:52:55.45ID:1ovLJy7s0
TypeScriptベースってあるけど
本家と比べてどこまで厳格なのか分からんが
2020/01/10(金) 07:05:02.06ID:uF+RY5wD0
よほどテクニカルな記述しなければ普通に動くじゃろ
2020/01/10(金) 07:14:14.47ID:jjRPWpspx
Typescriptはアクセス修飾子をサポートしてるから即時関数でのスコープ管理はしなくていいだろ
無名関数は使いどころあるかもしれないが
283デフォルトの名無しさん (スップ Sd1f-3KZm)
垢版 |
2020/01/10(金) 09:48:49.20ID:IluxULEbd
大慌てしてて草
2020/01/10(金) 22:41:08.84ID:19Jhwmx5M
wshのjscript使うのとはまったく違うのかな?
285デフォルトの名無しさん (ワッチョイ 7f12-3KZm)
垢版 |
2020/01/11(土) 03:59:52.86ID:VgPP357Y0
TSでも時代遅れなんだけどね
2020/01/11(土) 04:13:01.78ID:o+klbI+l0
お前らってプログラミング言語の話題になると、何ですぐ時代遅れ論争始めるの?
2020/01/11(土) 06:14:53.73ID:G5+XY0gL0
結局仕事の効率を上げれるかどうかが肝だけど新しい言語を使ってる俺すごいで思考停止しちゃうんだろうなー
2020/01/11(土) 06:26:51.15ID:Uc6AtsCZM
TSが時代遅れはともかくVBAはさすがにもう仕事の効率とかそういう次元の話じゃない
クレジットカードの有効期限が迫ってるようなもんだ
289デフォルトの名無しさん (アウアウウー Saa3-rY/a)
垢版 |
2020/01/11(土) 12:18:46.28ID:4Kbsl1epa
Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub TableControl()
Dim ie As InternetExplorer
Dim targetURL As String: targetURL = "http://www.ikachi.org/sample/sample10.html";
Set ie = GetIEObject(targetURL)

If (ie.LocationURL = "") Then
MsgBox "Plz Open the Web page"
Exit Sub
End If
End Sub

Public Function GetIEObject(ByVal targetURL As String) As InternetExplorer
Set GetIEObject = Nothing

Dim sh As Object
Set sh = CreateObject("Shell.Application")

Dim w As Object
For Each w In sh.Windows
If (TypeOf w Is InternetExplorer) And (w.LocationURL = targetURL) Then
Set GetIEObject = w
Exit For
End If
Next
End Function
でie.LocationURL = ""でエラーが出るのですが、booleanだがらでしょうか?
290デフォルトの名無しさん (ワッチョイ 7f02-elwi)
垢版 |
2020/01/11(土) 12:56:17.13ID:0zjnxXo90
>>289
参照設定してないんちゃう
2020/01/11(土) 12:58:17.36ID:vlDYQNOj0
何にも分かってないバカが多い。
汎用言語は正に競合だらけだからこそ、VBAの優位性が理解出来ない。

VBAの対象となってるのは他言語じゃゴミしか出来ない。
今後、TSで同じようなことが出来るならTSに移って行くだけのこと。
2020/01/11(土) 13:10:09.62ID:CiEu/gQJM
>>289
> ie.LocationURL = ""でエラーが出るのですが
なぜかエラーの内容は極秘なんだよね…
2020/01/11(土) 13:31:11.90ID:vlDYQNOj0
>>289
そもそも、これVBAのコードなの?
なんか、初心者がコピペしたんじゃないの?

個人的に間違っちゃいないけど気になるのは、InternetExplorerで宣言してるのにCreateObject使ってる所。

間違ってると思うのはTypeOf。
VBAでこんな単語使ってるの初めて見た。
構文的にこの部分でエラーにならないのにびっくりした。

どちらにしろGetIEObjectでieが空っぽで帰ってる。
2020/01/11(土) 13:37:40.62ID:vlDYQNOj0
一応言っておくがTypeOf自体が間違いじゃない。
こういう単語を使ったコードもあり得る。
でも自分は見たこと無いし、今回のコードもここが間違ってる。
2020/01/11(土) 14:02:25.84ID:6iu6Iqm10
>>293-294
いや、コード的には間違ってない
>GetIEObjectでieが空っぽで帰ってる
のは間違いないけど、このコードが正しく動く前提として
IEで指定されたURLが開いてる必要があるだけ

まあ指定URLが開いていたら、下のIFがスルーされるから
示された部分だけでは何がしたいコードがよくわからんが
2020/01/11(土) 14:13:44.58ID:6iu6Iqm10
一応Win10の365で動くか試したみた結果ね

つか気になってちょっと調べてみたけど
TypeOf って日本語ドキュメントに記載ないっぽいな
VBAのバージョンとかで使えないかもしれん

なんにせよShellでIE取得して操作とかお勧めしかねるけどな
297デフォルトの名無しさん (アウアウウー Saa3-rY/a)
垢版 |
2020/01/11(土) 16:02:20.96ID:35/vo8rZa
289です。
>> 292
すみません、エラー内容は「オブジェクト変数または With ブロック変数が設定されていません」です。

>> 293
Excel VBAでクローリング&スクレイピング(五十嵐貴之著)のP137に書かれているコードなのですが。
余りよくないのでしょうか。
2020/01/11(土) 16:36:52.33ID:AmOO0hUd0
>>297
> すみません、エラー内容は「オブジェクト変数または With ブロック変数が設定されていません」です。
原因は>>295が書いてる通りだと思うのでとりあえずIEでサイト開いてから実行してみて

> 余りよくないのでしょうか。
残念ながらあんまり良くはない
例えば
> If (TypeOf w Is InternetExplorer) And (w.LocationURL = targetURL) Then
とかVBAが短絡評価しない事を知らないみたいだし
2020/01/11(土) 16:57:09.64ID:Wvm4dwrk0
北海道のグラサンスーパーハゲザーはここにはこないのー?
2020/01/11(土) 18:06:59.10ID:mnvMO3uc0
キタ━━━━。゚+.ヽ(´∀`*)ノ ゚+.゚━━━━!
2020/01/12(日) 10:23:37.27ID:GxqlSy4l0
>>298
そもそもShellWindowsオブジェクトはイテレータでIEオブジェクトを渡してるから型判定自体不要

修正版

Sub TableControl()
Const targetURL$ = "http://www.ikachi.org/sample/sample10.html";
Dim ie As InternetExplorer: Set ie = GetIEObject(targetURL)
If ie Is Nothing Then MsgBox "Plz Open the Web page": Exit Sub
'残りのコード
End Sub

Public Function GetIEObject(ByVal targetURL As String) As InternetExplorer
For Each GetIEObject In CreateObject("Shell.Application").Windows
If GetIEObject.LocationURL Like targetURL Then Exit Function
Next
Set GetIEObject = Nothing
End Function

久々に書いたから変な部分あるかもしれないが、これで一応MsgBoxは開く
個人的には、こんなややこしい事せずに普通にVBAで開いた方が確実だと思う
2020/01/13(月) 12:47:26.86ID:Jh+AJgi90
AndAlsoってないんだっけ?
2020/01/13(月) 12:51:11.64ID:nlvLw0Pz0
AndAlsoやOrElseはVB.NET
もうVB.NETでもいいからExcelに載せろよとは思う
2020/01/13(月) 15:28:45.56ID:/UClz5Bsa
はいネトウヨ論破wwww
現実という劇薬を投与されて憤死したなwwwww
2020/01/13(月) 15:29:12.31ID:/UClz5Bsa
誤爆したわ
2020/01/13(月) 15:35:18.58ID:v1ymyhJf0
イラン「誤爆した」
307デフォルトの名無しさん (アウアウウー Saa3-alJZ)
垢版 |
2020/01/13(月) 18:49:02.06ID:QiYXelOBa
>>301
ありがとうございます。
メッセージがちゃんと出ました。
2020/01/14(火) 03:53:35.18ID:D4OVEYsz0
>>303
短絡評価ぇ…
309デフォルトの名無しさん (ワッチョイ a9f8-otum)
垢版 |
2020/01/15(水) 09:32:44.41ID:8JJ3bs+B0
基本的な事ですいません。
ActiveWorkbook.SaveAs Filename:=Cells(2, 36) & yyyy & "年" & mm & "月" & dd & "日" & ".xlsm"

セル内の文章 と日付でセーブする機能を盛り込んでいます。
実行時ファイル名が変わってエラー無く、VBAが動き続けているのですが、

saveするフォルダ内に該当のエクセルファイルそのものが見当たりません。
見かけ上の問題だけか?と思い、停止してフォルダを検索しましたがエクセルファイルはありませんでした。

ActiveWorkbook.SaveAs Filenameというのは、新しく名前を付けて保存なので、中身はともかく実行されたらエクセルファイルは生成されますよね?
2020/01/15(水) 09:49:48.07ID:8JJ3bs+B0
すいません。自己解決しました。

指定フォルダにsaveする記述がズレていただけでした。
2020/01/15(水) 19:10:48.65ID:WqIuLPSu0
あなたのハゲにサクセスしたい
2020/01/15(水) 21:59:00.70ID:h+QybiOr0
キタ━━━━。゚+.ヽ(´∀`*)ノ ゚+.゚━━━━!
313デフォルトの名無しさん (ワッチョイ a9cc-0hUg)
垢版 |
2020/01/16(木) 21:35:54.79ID:1+aO/gYN0
Excel2019で、
.ActiveWorkbook.SaveAs FileName:=FilePass, FileFormat:=51

ってやると、

'Book1' の変更内容を保存しますか?
ってダイアログが出て保存できないね。
どうしたらいいだろう?お手上げです。
2020/01/16(木) 21:46:08.50ID:0+Ijnx150
「はい」押したらいいんでないの
315デフォルトの名無しさん (ワッチョイ a9cc-0hUg)
垢版 |
2020/01/16(木) 21:51:01.14ID:1+aO/gYN0
>>314
はいを押しても
'Book1' の変更内容を保存しますか?
って同じダイアログが出続けて保存できません。
2020/01/16(木) 21:56:43.44ID:0+Ijnx150
じゃあいいえ押せば
2020/01/16(木) 22:25:40.00ID:LhzC5ZEG0
>>315
Application.DisplayAlerts = False
318デフォルトの名無しさん (ワッチョイ c58a-KiTk)
垢版 |
2020/01/16(木) 23:46:15.85ID:zIX3nnAn0
そんなの出たっけ?
CSVだとしつこく聞いてきたような記憶があるが。
2020/01/16(木) 23:49:24.36ID:0+Ijnx150
保存せず閉じる時に出るメッセージかな
2020/01/17(金) 12:59:57.34ID:Os8PeLdnM
>>313

「保存されたこと」にしてしまえば?

オブジェクト.Saved = True
2020/01/17(金) 19:34:06.53ID:1AQmX/Lf0
間に何かのイベントが反応して、何も変更してないのに、変更したと見なされちゃってるとか?
2020/01/17(金) 19:48:23.52ID:hML99gYW0
揮発性関数を使ってるとファイルをオープンしただけで変更したと見なされる
323313 (ワッチョイ a9cc-0hUg)
垢版 |
2020/01/17(金) 23:26:14.60ID:v8gb16450
CreateObject("Excel.Application") で C#からExcelを操作してます。
Excel2016までは正常にできてたけど、Excel2019になってこの症状が出ています。

>>316
いいえでも無限ループ

>>317
効果ありませんでした。

>>318
Excel2019で出るようになりました。
2020/01/18(土) 00:21:02.59ID:6wqE9Oqx0
C#ってウソだろ?
VBAの構文しか見えないが。
今はそんなことになってるのか。
325デフォルトの名無しさん (ワッチョイ bd5f-0x+Z)
垢版 |
2020/01/18(土) 00:37:29.12ID:vFXF5Tw00
どうせC#のコード内でExcelを呼び出してるんだろうね。
2020/01/18(土) 01:13:27.38ID:kT6CUwPp0
>>323
savedは
2020/01/18(土) 03:37:25.77ID:QBPyK2Ke0
参照設定見直し
2020/01/18(土) 04:11:21.84ID:SGizdn1y0
競馬やる奴、毛根をハーゲットに取り込む方法教えます
329デフォルトの名無しさん (ワッチョイ a9b0-4vOW)
垢版 |
2020/01/18(土) 06:07:28.94ID:Kncf6iS90
自作データベースをエクセルでも管理できるように
簡易CSV形式(つまりカンマで区切っただけ)のテキスト出力できるようにしたんだけど
文字コードがUTF-8だと自作→エクセルなら大丈夫なんだが
エクセル→自作に戻すと文字化けする。
エクセルのCSVってShift_JISでしか出せないの?
2020/01/18(土) 06:15:01.10ID:G5wl/6H20
UTF-8形式のテキストファイルに書き込む
http://officetanaka.net/excel/vba/file/file11.htm
331デフォルトの名無しさん (ワッチョイ a9b0-4vOW)
垢版 |
2020/01/18(土) 06:49:02.70ID:Kncf6iS90
あー最新版ならファイルメニューにあるんだな・・・
おれの2010だわ
ありがとう
332313 (ワッチョイ a9cc-0hUg)
垢版 |
2020/01/18(土) 20:48:30.71ID:GU2jl3IU0
>>326

効果なし。
タスクマネージャーを確認すると、Excel終了できないで残ってるし。
Excel2019ってキングソフト以下の糞になったのかな。
2020/01/18(土) 22:42:14.81ID:kT6CUwPp0
>>332
残ってるのは自分がちゃんと解放してないからですな…
2020/01/18(土) 23:05:19.33ID:6wqE9Oqx0
ADO使う時、VBAだとExcel8.0も12.0もいけるのに、VBSだと8.0しか使えない。
12.0を使おうとすると、プロバイダがないだのISAMがないだの言われる。
多分、VBAだと参照設定でADO2.8とか6.1を選べるけど、
VBSはCreateObjectで、自由に選べないのが原因じゃないかと思うんだけど、
具体的にdll指定する方法とか無い?
え? Accessの何とかコンポーネント入れろって?
会社のPCだから、使う人の分申請するの面倒なんだよ。
え? そもそもVBSスレじゃないだろって?
あっちは何か変なのが住み着いてるじゃん。クリボーみたいなAA貼って。
2020/01/18(土) 23:09:07.17ID:GBX9mo+x0
>>334
CreateObjectにバージョンまで書くだけ
2020/01/18(土) 23:24:48.43ID:jJ2WRqDf0
気持ち悪いよねVBSスレ
死んでくれないかな誰とは言わないけど
2020/01/18(土) 23:29:07.74ID:qFsoK61Ea
>>332
エスケープでキャンセルするは?
338313 (ワッチョイ a9cc-0hUg)
垢版 |
2020/01/18(土) 23:44:31.92ID:GU2jl3IU0
>>333
そんなのちゃんとやってますわ。
Excel2016 までは普通に動いてたんですよ。

>>337
なにやってもダメ。タスクマネジャーから強制終了するしかない。


てか今日はなぜか再現しなくなった。
Excelって何かアップデート入った?それともWindows10起因かな?
2020/01/19(日) 00:23:37.04ID:qcodQ+dh0
普通、PowerShell, VBScript などで、
Excel, IE などを起動すると、プロセスが残る

プロセスを終了させるには、名前で調べて、終了させないといけないから、
名前が一致すれば、無関係のプロセスも、終了させられてしまうw
2020/01/19(日) 00:27:32.31ID:qcodQ+dh0
>>334
VBS のスレ主のピッコロ大魔王は、すごい使い手だよ。
VBSで、5ch をスクレイピングしたりもするし

ただ、荒らしに粘着されてる。
コテハンは目立つから、どうしても粘着される
2020/01/19(日) 00:31:47.67ID:/KlymybO0
>VBSで、5ch をスクレイピングしたりもする
スキルとしては下の下なんだが
2020/01/19(日) 01:08:44.67ID:jaXQhxpp0
あなたのハゲにサクセスしたい
2020/01/19(日) 01:12:37.02ID:i5FWYGKN0
でもまともなエディタないのにスクレイピングできるってちょっとすごいと思うわ
2020/01/19(日) 01:28:51.78ID:/KlymybO0
>>343
そう言われてみると確かに凄い!
2020/01/19(日) 14:51:45.20ID:SjdpeY/L0
>>335
CreateObject("ADODB.Connection.6.1")も、
CreateObject("new:{B691E011-1797-432E-907A-4D8C69339129}")もダメだったわ。
ActiveXコンポーネントを作成出来ませんって。
何がダメ?
346デフォルトの名無しさん (スプッッ Sd82-sV0n)
垢版 |
2020/01/19(日) 15:15:57.62ID:aNwanbWxd
もういい加減IE辞めたら?
あんたの会社セキュリティ意識なさ過ぎじゃない
大丈夫なの?表の仕事はしてない会社なのか
2020/01/19(日) 15:59:41.27ID:GJyhHQJKM
VBAを捨てられない組織がIEを捨てられるわけがないだろう
2020/01/19(日) 16:26:59.69ID:Z4m11qD6M
>>345
ADODB.? てのは無いんだっけ…
2020/01/19(日) 18:16:17.91ID:ABvwSa+Qa
上司が無能
2020/01/19(日) 20:13:14.65ID:ex79Jb14d
IE?
何の話?

>>335はADOの話だし、>>340のスクレイピングはIEとは言ってないよな。

それともスクレイピングはIEでしか出来ないレベルの人?
2020/01/19(日) 20:55:51.63ID:SjdpeY/L0
>>348
何それ?
どうしてもダメなら、最悪MSQuery使うつもりだけど、
シート名の指定が変な特殊文字で面倒臭いんだよな。
352デフォルトの名無しさん (スプッッ Sd82-sV0n)
垢版 |
2020/01/19(日) 20:56:52.40ID:aNwanbWxd
ActiveX
2020/01/19(日) 22:36:56.65ID:nXr7UDmZ0
>>106 これと同じ人なのですが、レコード番号が不正と出ます。
セルの指定が上手くいってないのだろうとはわかりますが、どうしたらいいかわかりません
すごい初歩的なとことで躓いている気がするのですがご教授ねがいます

Sub Test_Open()

Dim a As Byte
Dim strFilePath As String
strFilePath = ActiveWorkbook.Path & "\data.bin"

Open strFilePath For Binary As #1

Dim i As Integer
For i = 1 To 6
Put #1, Cells(i, 1), a
Next i

Close #1

End Sub
2020/01/19(日) 23:04:08.22ID:PQm/OLWJ0
>>353
For i = 1 To 6
  a = Cells(i, 1)
  Put #1, , a
Next
2020/01/19(日) 23:34:15.88ID:nXr7UDmZ0
ありがとうございます! やっと一歩進めました

ただ最終的に、ある行の1〜数万行のデータをその数値のままバイナリデータに変換したいので
現在だと 17 なんかは 11 00 のように入力されてしまうことと
セルの Cells(i, 1) 数値の方を変更すると型の不一致と出てくることは何が原因でしょうか
 小さすぎるかと思って As Byte を As Long にしてもダメでした
2020/01/19(日) 23:40:29.46ID:RvM5FchK0
型の範囲よく判ってないならちゃんと調べた方がいいよ
2020/01/19(日) 23:55:33.87ID:jaXQhxpp0
あなたのハゲにサクセスしたい
2020/01/20(月) 00:40:12.58ID:V4ZsTE2o0
型の範囲……調べてもそう難しくなさそうなのに何故か不一致の時は不一致に
ただ、いろいろ試していたら行の指定や範囲の指定はなんとかなったんですが、
やっぱり数値が16進に置き換わってしまいます
Dim a As Byte をStringとかに変えると まあ文字列になってしまうし
2020/01/20(月) 01:56:26.20ID:fAyYAtJL0
>>358
セルに入ってる数字は最大いくつ(何バイト分)なの?
2020/01/20(月) 02:04:25.58ID:fAyYAtJL0
もしかして、やりたいのはこういうことか?

Sub Test_Open()
  Dim a As Integer
  Dim strFilePath As String
  Dim i As Integer
  strFilePath = ActiveWorkbook.Path & "\data.bin"
  Open strFilePath For Binary As #1
  For i = 1 To 6
    a = Val("&H" & Cells(i, 1).Text)
    Put #1, , a
  Next
  Close #1
End Sub
2020/01/20(月) 08:18:58.19ID:V4ZsTE2o0
お手間をかけます

セルの値は00〜FFの範囲で セルの見た目そのままをバイナリに落とし込むことを目的としています

例えば書いていただいた >>360 では
セルの値が 01 だと書き出したほうは 01 00 となるので 
後ろの 00 は省いて書き込みたいと考えています
2020/01/20(月) 11:15:52.64ID:fAyYAtJL0
>>361
それなら最初の宣言を
Dim a As Byte
に戻すだけ
2020/01/20(月) 12:30:47.41ID:V4ZsTE2o0
ああ、出来ました!
i の範囲もLongにしたら数十万も対応できたので思っていたのが完成しました

長々と丁寧にお付き合いいただき、ありがとうございます!
2020/01/21(火) 16:05:59.09ID:v6wThH4Xa
>>363
エクセルの最後までいくとえらーでるんじゃね
2020/01/21(火) 18:50:01.59ID:oJaN0VWt0
実行するとめっちゃ重くなり、一度エラーがありましたが、
その時以外は、成功しています
2020/01/21(火) 18:53:25.76ID:G9onwGKx0
話しは変わりますが、”Microsoft Office Desktop Apps” と表示されてる方がデスクトップ版じゃなくてストアアプリ版だって本当ですか?
367デフォルトの名無しさん (ブーイモ MM6b-FqHH)
垢版 |
2020/01/22(水) 18:27:54.50ID:qTZNd94bM
一つのシート上の複数セルに関数が設定されています。

すべてのセルの関数の処理が一つ一つ処理されていき、最終的にすべてのセルの更新処理が終わったときに、あるマクロを動かしたいのですが、どうやればいいのでしょうか?
2020/01/22(水) 18:51:55.87ID:dkHhF3U80
もはやExcel大喜利だな。
2020/01/22(水) 19:00:23.17ID:BHh+OjnL0
ここには北海道のスーパーハゲザーはこないのー?
2020/01/22(水) 19:20:56.10ID:0xXxIRDp0
>>367
セルの関数を指定のタイミングと順番で処理したいってこと?
関数の入ったシートのEnableCalculationプロパティをFalseにして、
計算したい関数の入ったRangeのCalculateメソッドを順次呼べば一個ずつ処理できる
それで最後の関数の計算が済んだ後にマクロを実行するとか

一応関数の計算終了時に動かすマクロはシートのCalculateイベントに書いても実行できるけど、
シート全体が対象だからCalculateメソッドが走るたびに発火するから使えないと思う
371デフォルトの名無しさん (ワッチョイ a761-FqHH)
垢版 |
2020/01/22(水) 21:36:24.98ID:ASOe66pr0
>>370
ありがとう
試してみます

自分で作った関数を引数変えて500セルくらいが呼び出す状態なんです。
んで、かなり遅くて、全部が終わるまで5分位待つことになるので、それではつかいものにならないので、高速化を図りたいのです。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況