1 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 02:23:41.78 ID:2t63WK/jM.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part75 https://mevius.5ch.net/test/read.cgi/tech/1644384272/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
9 名前:デフォルトの名無しさん (ワッチョイ 27da-l/ZD) mailto:sage [2022/05/02(月) 19:28:34 ID:MoQSVCv50.net] 過去にもしばらくスレ立て放置プレイされた事あったぜ
10 名前:デフォルトの名無しさん mailto:sage [2022/05/02(月) 23:18:57.97 ID:X95f3WhM0.net] よろしくお願いします。以下の日本語で書いた部分に相当するような 繰り返し文ってありますでしょうか。 イメージしているのはwhile read line do done < test.txt みたいなものです。 テキストファイルの変わりに「とある列の値が尽きるまで(空欄が見つかるまで)」、 繰り返し文内の処理を繰り返すような文です。 Range("B1").Select 繰り返し A列の値 = 空欄のセルが見つかるまで ActiveCell.Offset(0, -1).Range("A1").Select Selection.Copy ActiveCell.Offset(0, 1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(1, 0).Range("A1").Select 繰り返し完了
11 名前:デフォルトの名無しさん mailto:sage [2022/05/02(月) 23:38:34.90 ID:hdDLukhc0.net] >>10 すげーざっくりだけどやりたいことはこんな感じ? やりたいことがあってるならもう少しちゃんとしたコードにはするけど SelectとかCopy、Pasteは基本VBAで使わないので Dim WS As WorkSheet Set WS=ActiveSheet Dim RngA1 As Range Set RngA1=WS.Cells(1,1) Dim i As Long For i = 1 to 16384 If WS.Cells(i,1).Value="" Then Exit For Else WS.Cells(i, 1).Value=WS.Cells(i, 2).Value End If Next
12 名前:デフォルトの名無しさん [2022/05/03(火) 10:09:18.61 ID:F3b8ltuB0.net] 先生方教えて! エクセルを1枚1枚開いてvbaによって加工したい場合、 マクロの表示からそのvbaを選ぶのが一般的なんでしょうか。 FileDialogをつかって複数エクセルを一気に加工するほうが 自分は楽なんですが契約社員にはわかりづらいそうで。。
13 名前:デフォルトの名無しさん [2022/05/03(火) 10:15:31.86 ID:MA4dMZuw0.net] 一般的かどうかは分からんけど ファイルダイアログを開いて 設定したパスをどこかのセルに設定しておいて 実行ボタンでそのセルを読みに行くほうが 複数のブックを読みに行く場合には親切
14 名前:デフォルトの名無しさん [2022/05/03(火) 13:25:25.46 ID:xaGln49G0.net] 理解が十分でない契約社員には直感的にわかりやすい上記の方法 そのうち慣れて面倒になってきたら下記の方法(バッチ) 2つのアプローチを用意するのがいいかもしれませんね コンピュータになれていなかったり入れ替わりが多い契約社員というところがポイントですね 私もVBAを他人に提供することが多いから参考になるわー
15 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 13:57:26.99 ID:nOtJseDM0.net] Nextじゃなくて、Next iって書かなきゃあかんと言われたよ
16 名前:デフォルトの名無しさん [2022/05/03(火) 14:12:22.20 ID:utR4VoxQa.net] iが足りなかったからか
17 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 14:54:21.99 ID:Bmz10qTz0.net] 前スレ987で質問した者です。 アドバイスありがとうございます。 2019に変わる際にPCがwin7からwin10に変わり性能もアップしたのでVBA処理も早くなるかと思っていたのですがそのようなバグが出るようになりました。 自分1人で使ってる範囲では良いのですが複数が利用しているため質問させて頂きました。 PC性能があがりEXCELがついてこれてない可能性もありますね。
18 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 16:13:00.23 ID:waxP/JpN0.net] Excel板なら人間の性能を上げろって揶揄されるからな
19 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 19:42:48.21 ID:3VW2nuLk0.net] win7がwin10になったのとPCの性能は別だからな 古いPCのOSだけ変えたのかもしれんし
20 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 20:57:36.39 ID:Bmz10qTz0.net] 説明不足で申し訳ないです。 win7からwin10でPC変わってます。 個人的に所有しているPCではないので具体的なスペックはわかりません。
21 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 21:05:48.55 ID:hxvZ+FeqM.net] >>20 所有権の問題ではなく馬鹿だからわからないだけでは?
22 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 21:14:48.05 ID:Bmz10qTz0.net] 申し訳ありません、具体的なスペックが提示できないようではアドバイスも難しいですもんね。 これまで頂いたアドバイスでもう少し試行錯誤してみたいと思います。ありがとうございました。
23 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 22:17:07.14 ID:hNQ/TBre0.net] 数秒待たせればエラーに成らないなら、原因判明するまでは待たせる方式で 或いは 最終的に鳥瞰図が欲しいなら、数値データをDXFとして出力してjw-cadとかで描画とか https://www.hakko.co.jp/javascript/soft011.htm 作者に問い合わせしながら検討とかも https://www.apptec.co.jp/technical_report/pdf/vol24/treport_vol_24-06.pdf https://movies.woxikon.co.nz/excel-%E3%81%A7-cad-%E5%9B%B3%E9%9D%A2-%E4%BD%9C%E6%88%90 https://www.tipsfound.com/excel/05038 https://www.nichibun-g.co.jp/data/education/ict-education/archive/31/02.php この辺は既にご承知かも ぜんぶちゃんと目を通した訳では無いから抜粋ということで グラフ機能を応用して鳥瞰図(風)にしてるってことかな
24 名前:デフォルトの名無しさん (ワッチョイ 2701-XZ6m) mailto:sage [2022/05/04(水) 23:12:41 ID:Bmz10qTz0.net] >>23 ありがとうございます。勉強になります。 今のところはエラーが出た際バッファーの時間を調整して対応しています。 とりあえずは動いているので良いのですが書き方としてどうなのだろうと思いまして… もっとスマートに解決方法があればと思い質問させて頂きました。 アドバイス頂きありがとうございます。アドバイスを元に検討してみたいと思います。
25 名前:デフォルトの名無しさん [2022/05/04(水) 23:54:17.61 ID:4EN2kx2R0.net] >>24 むかしファイルメーカーから画像を取り出してExcelに貼り付けるマクロ書いたことあるわ。 クリップボードからExcelに貼るときにちょいちょいエラーが出て苦労した。 最終的にはエラーが出たところからリランできるようにして人力で最後まで走り切った。 継続的に長い期間使うマクロではなかったんでね。 クリップボードって入れ終わるタイミングが掴めないから処理が難しいね。 オレが調べた限りでは完全に技術的に解決する方法は見つけられなかった。 完全自動化は一旦棚に上げておいて、人間の補助も込みで運用を考えた方が現実的かも。
26 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 00:43:02.91 ID:vV+xUHQR0.net] IEとセッション共有するにはどうすればいい?
27 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 08:37:44.29 ID:GOdKeYkud.net] >>12 VBSでExcelファイルをドラッグドロップお薦め Visible = False でExcel画面すら見ずに処理が終わる
28 名前:デフォルトの名無しさん [2022/05/05(木) 09:37:07.07 ID:yaYLZP+d0.net] >>26 まずIEはセッションなど持っていない。 そして今IE は使えないだろう? 強制的にEdgeにされるはずだ。 そしてそのEdge も当然セッションなど持っていない。 EdgeもIEもクライアントサイドのものだからだ。 セッションはサーバーサイドの概念だからな。 そしてサーバーサイドをEXCELのVBA で制御するとか意味分からん。 大人しくAsp.NetでもやっておくかせめてVBS で制御しとけ。
29 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 11:18:53.52 ID:vV+xUHQR0.net] わざとだろうけど、EdgeでもCookieでもいいよ。
30 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 11:27:47.75 ID:BSjK1PJD0.net] >>11 ありがとうございます。
31 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 16:06:00.40 ID:FeY8iOM40.net] 【ひろゆき】テレビ見る奴はバカ!?正論論破! 「テレビ見てる奴バカすぎだろ!!マジでバカしかいない!!」聞けば納得の正論!! 【ひろゆき】みなさん要注意です…テレビ見ると頭悪くなります ⇒テレビが馬鹿向けに作られてる衝撃の理由がヤバ過ぎる… 【ひろゆき】マジで「ざまあみろ」って思いましたね。 ●●する奴にテレビ業界は破壊されました…ひろゆきがテレビがオワコン化した理由を話す 【ひろゆき】芸能界の闇!松本人志とか東野幸治はエクセルすら使えないんだよ? ワイドナショーで言ってたw【教えて!ひろゆき先生/切り抜き】 【ひろゆき】なぜテレビは面白くなくなったのか? その理由をひろゆきとひげおやじが分析する【切り抜き/論破/TV】
32 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 10:41:14.26 ID:NJT6jW780.net] Sub test() Dim high As Long Dim str As String Dim num As Integer 'a str = "転" str = Asc(str) str = Hex(str) a = str 'b str = "転" str = Hex(Asc(str)) b = str 'c str = "転" num = Asc(str) str = Hex(num) c = str End Sub a=FFFFFFFFFFFF935D b =935D c=935D aとbで結果が異なる理由が分かりません。 cはぼんやりと型の違いなのかと思いテストしたところ、bと同じ結果になりました。 しかし、aもbもstring型のstrに納めているので、「どうして結果が違うのか」とより 謎を強めてしまいました。なぜ、aとbで結果が異なるのか教えてください。
33 名前:デフォルトの名無しさん [2022/05/07(土) 11:01:22.01 ID:QtF4T6fHa.net] ascの結果をstringに変換しないで入れたからかな 出先なので試せないが
34 名前:デフォルトの名無しさん (アウアウウー Sa1f-cwrN) mailto:sage [2022/05/07(土) 11:52:42 ID:/qcwjpRWa.net] 'a str = "転" str = Asc(str) Debug.Print str str = Hex(str) Debug.Print str a = str ってやってみて自分の思った通りになってるか確認してみそ
35 名前:デフォルトの名無しさん (ワッチョイ b7ce-PvPk) mailto:sage [2022/05/07(土) 11:59:35 ID:WpJq4eDb0.net] >>32 Asc関数は戻り値が数値型なので、bとcはほぼ同等になる aだけが途中経過が明らかに違う
36 名前:デフォルトの名無しさん (ワッチョイ b7ce-PvPk) mailto:sage [2022/05/07(土) 12:05:46 ID:WpJq4eDb0.net] 公式ドキュメントには、Hex関数の返り値は8桁以下の文字列と書いてあるのに16桁返ってくるな どういうことだ? https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/hex-function
37 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 12:10:46.75 ID:WpJq4eDb0.net] 暗黙の型変換は必要最小限の型に変換されるってルールだったはずで、そのロジックに何か問題がある気がする 文字コード(-27811)はIntegerになるはずがLongLongに変換されてしまっていて、さらにHex関数がなぜかエラーを返さない
38 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 13:00:38.34 ID:WpJq4eDb0.net] うーん、これはちょっと想定外の結果、かなあ 知らないでいるとハマりそうだわ Sub test2() s = "&H8" For i = 1 To 15 s = s & "0" Debug.Print Hex(s) Next End Sub
39 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 15:18:31.97 ID:QipuKWLV0.net] >>32 strは文字列型だからaの場合str = Asc("転")でやっていることは実質的にstr = cstr(Asc("転")). だからa,b,cはそれぞれ,hex(cstr(Asc("転"))),hex(Asc("転")),hex(Asc"転"))となりaだけ途中で数字ではなくて文字列にかわっているので 対応するhexの値が異なるのは当然.
40 名前:デフォルトの名無しさん [2022/05/07(土) 15:39:23.00 ID:Be/sY8NCd.net] 型を意識しないで作るVBAerによくある勘違いというだけ
41 名前:デフォルトの名無しさん [2022/05/07(土) 16:06:22.67 ID:7L5Eu3N/a.net] >>38 型宣言しないタイプ?
42 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 17:29:10.04 ID:stouWQDp0.net] VBAってマトモな会社は使用禁止でしょ
43 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 19:21:47.63 ID:WpJq4eDb0.net] >>41 >>38 のケースは宣言してもしなくても結果同じでは
44 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 19:23:32.20 ID:WpJq4eDb0.net] >>39-40 公式ドキュメントに8文字以下と書いてあるのに、たまに16文字返ってくるのは単なる勘違いで済む問題じゃないと思うぞ
45 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 20:33:59.56 ID:gH0nu0qIa.net] >>44 64bit 版のドキュメントが間に合ってないだけだろ
46 名前:デフォルトの名無しさん (ワッチョイ 17da-oDvp) mailto:sage [2022/05/07(土) 21:40:19 ID:QipuKWLV0.net] >>44 実際の結果と説明が食い違ってたら説明の方が間違っている(修正が遅れている)だけだと思うが
47 名前:デフォルトの名無しさん (ワッチョイ b7ce-PvPk) mailto:sage [2022/05/07(土) 21:55:14 ID:WpJq4eDb0.net] Officeが完全64bit対応になったのは2010から 12年遅れか……
48 名前:デフォルトの名無しさん (アウアウウー Sa1f-cwrN) mailto:sage [2022/05/07(土) 22:11:45 ID:9QKKUGlra.net] >>46 まあ単なるバグの可能性は "0" ではないけど
49 名前:デフォルトの名無しさん (ワッチョイ 8f68-e+q+) mailto:sage [2022/05/07(土) 22:14:36 ID:T2FkQFbN0.net] >>38 これはバグでは
50 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 22:18:37.86 ID:cppQitqZ0.net] >>47 64bitが標準になったのは2019からだけど
51 名前:32 (ワッチョイ 9f02-PvPk) mailto:sage [2022/05/08(日) 08:41:56 ID:mrWBx7yB0.net] Sub test() Dim high As Long Dim str As String Dim num As Integer 'a str = "転" str = Asc(str) str = Hex(str) a = str 'a´ str = "転" str = Asc(str) str = Hex(CInt(str)) ad = str 'b str = "転" str = Hex(Asc(str)) str = str b = str 'c str = "転" num = Asc(str) str = Hex(num) c = str ありがとうございます。一旦は納得できました。
52 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 19:44:09.25 ID:J4Oeet0G0.net] kou 'a str = "転" long_ = Asc(str)
53 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 22:42:32.67 ID:CUGu1qGH0.net] high は何のため
54 名前:デフォルトの名無しさん (ワッチョイ 2f2f-vjB4) mailto:sage [2022/05/09(月) 03:05:49 ID:1tzp5qwq0.net] >>37 >暗黙の型変換は必要最小限の型に変換されるってルール そんなルール聞いたことないが、どこ情報なんだ?
55 名前:デフォルトの名無しさん mailto:sage [2022/05/09(月) 14:49:08.99 ID:Ww9cdHsy0.net] 脳内思い込み 一番タチ悪い
56 名前:デフォルトの名無しさん (ワッチョイ 3ebb-HNGk) mailto:sage [2022/05/09(月) 18:18:14 ID:7ATo4dDz0.net] コピー元のブックのシート上のチェックボックス
57 名前:(ON/OFF)を、 コピー先のブックのシート上のチェックボックス(すべてOFF)に 「チェックボックスのON/OFFの状態を」コピーしたいのですが そういう命令はありますでしょうか? [コピー元].Worksheets("シート名").Range("G3:AB5").Copy [コピー先].Worksheets("シート名").Range("G3:AB5").PasteSpecial xlPasteAll ではチェックボックスは空白のままなのですが、 「マウスでコピー元のG3:AB5を選ぶ→Ctrl+C→コピー先にCtrl+V」と手動で操作すると G3:AB5内のチェックボックスのON/OFFもコピーされるので なにか方法があるのではと思うのですが すべてをペースト(PasteSpecial xlPasteAll)ではダメなのでしょうか [] [ここ壊れてます]
58 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 10:07:55.18 ID:4FhYKkQU0.net] ユーザーフォームのコントロールの位置調整について質問です。 テキストボックスA,B,Cが A B C と既に左右の間隔が均等に整列された状態になっており、 一番左にテキストボックスDを追加するとします。 D A B C この時、A-B間(B-C間も同じ) と D-A間の間隔を同じにしたい場合、 手動計算する(それぞれのLeftプロパティを参照して、差分を手入力する)のではなく、お手軽に設定できる操作はありますか? マウスのドラッグで D A B C を範囲選択して[書式]-[左右の間隔]-[間隔を均等にする]を選ぶと、 両端(DとC)の位置が固定された上で、その内側(D-A間、A-B間、B-C間)が均等になるだけで、 今回求めている結果にはなりませんでした。
59 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 10:19:04.03 ID:ODIjuWluM.net] 一生に一度しか使用しない機能は実装されません
60 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 10:49:36.48 ID:G5I31YZG0.net] D A B C を左右均等に並べたいんじゃ無いのか? D-A-B-C とか、スペースを-で表さないと、コッチからすれば説明文の上下は一緒に読めるんだが? D---A-B-C とかか?
61 名前:57 mailto:sage [2022/05/10(火) 11:44:31.14 ID:4FhYKkQU0.net] >>59 スペースをハイフンで示します。 最初の状態 A----B----C Aの左側にDを追加するとします。 D-A----B----C マウスのドラッグで DABC を範囲選択して[書式]-[左右の間隔]-[間隔を均等にする]を選んだ場合は、 両端(DとC)の位置が固定された上で、その内側(D-A間、A-B間、B-C間)が均等になるだけ。 この場合は、最初の状態でのA-B間(B-C間)の間隔(スペース4個分)が保持されていません。 D---A---B---C 今回求めている結果 D----A----B----C
62 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 11:55:55.13 ID:G5I31YZG0.net] Cを必要なだけ右に寄せてからその操作すれば? ぴったり位置合わせしたいとかなら https://www.moug.net/tech/exvba/0120023.html 辺り参考に
63 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 11:58:47.56 ID:Q/OuvBXU0.net] >>56 どのチェックボックス?フォーム?activeX?
64 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 13:26:52.13 ID:EvytVRjpd.net] >>57 Controls.Addでマクロにパーツを作らせて位置を指定するか自動計算させれば簡単 自分でイベント作る必要はあるかも
65 名前:57 mailto:sage [2022/05/10(火) 21:53:08.05 ID:4FhYKkQU0.net] >>63 ありがとうございます。調べてやってみます!
66 名前:デフォルトの名無しさん mailto:sage [2022/05/10(火) 21:54:52.33 ID:4FhYKkQU0.net] >>61 ありがとうございます。参考にします。
67 名前:56 mailto:sage [2022/05/11(水) 07:58:45.59 ID:VwZpfkps0.net] >>62 「チェックボックス」だけの情報だと二つあるんですね すみません。 調べたところフォームのほうのチェックボックスでした。
68 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 01:22:53.69 ID:UrRQ3K070.net] 'これ実行するとどうなりますか? 'Q1 「 3.2to4.1(14)ng:4>=4 」と ' 「 3.2to4.1(25)ng:4>=4 」になりますか? 'Q2 「 3.7to4(9)ng:4>=4.9 a:3.9 」と ' 「 3.8to4(9)ng:4>=5 a:4 」になりますか? Sub test() For i = 1 To 4 Step 1 Select Case i Case 1 a_from = 3.2: a_to = 4.1: a_max = 4# 'if[4 >= 4]でFalseになる Case 2 a_from = 4.2: a_to = 5.1: a_max = 5# 'if[5 >= 5]でFalseになるか確認用 Case 3 a_from = 3.7: a_to = 4#: a_max = 4# 'aが3.9までしかいかない Case 4 a_from = 3.8: a_to = 4#: a_max = 4# 'aが4までいく End Select c = 0 Debug.Print "***** from " & a_from & " to " & a_to & " max " & a_max, String(60, "*") For a = a_from To a_to Step 0.1 For b = 0# To 0.2 Step 0.1 c = c + 1 ab = a / (1 - b) okng = "ng" If a_max >= ab Then okng = "OK" Debug.Print a_from & "to" & a_to & "(" & c & ")" & okng & ":" & a_max & ">=" & Round(ab, 1) _ , "a:" & a, "b:" & b, "max:" & a_max, okng, "ab:" & ab ' Debug.Assert a_max >= a '[4 >= 4]でFalseになる Next Next Next End Sub
69 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 02:12:42.08 ID:y5qWaFnT0.net] >>67 常識 https://blog.apar.jp/program/8900/
70 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 15:49:14.84 ID:m1gysKVC0.net] Dim a a = Range("A1:B2") これだけでaが2×2の配列になるとたった今知ったのですが このことを手放しに使って良いのでしょうか、それとも邪道だから Dim a(2, 2)なり要素数まで指定した方が良いのでしょうか。
71 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 15:56:46.69 ID:Bn5ry0500.net] >>69 問題ない VBA使えるやつならみんな知ってる
72 名前:デフォルトの名無しさん [2022/05/13(金) 16:05:23.39 ID:zF4dJdoD0.net] それ便利だけど誤読しやすいので静的メソッドにしてる ArrayExt.FromRange(Me.Range("A1:B2")) みたいな
73 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 19:41:50.80 ID:q/KvZ9/90.net] officescript調べてみたけど意外と分かりやすかった これならVBAがなくなっても大丈夫そう
74 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 19:50:05.37 ID:q/KvZ9/90.net] >>69 型使わないとバリアント型だから二次元配列になるわけか
75 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 19:53:17.10 ID:q/KvZ9/90.net] ちなみに参考にしてる人はこう書いてた Dim a As Variant a = Range("A1:B2").Value
76 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 22:54:29.72 ID:BcFt2CuGD.net] aは要するにポインタだからな
77 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 22:58:14.08 ID:JesbR9jP0.net] c以上ならポインた
78 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 23:28:52.57 ID:94QyLQ1Xa.net] >>69 誰も書いていないので驚いたが、 その方法でもいい、のではなくて、 その方法しかない。 あとは Variant を明示するかしないかの違いだけ。
79 名前:デフォルトの名無しさん (ワッチョイ ffbb-bUW4) mailto:sage [2022/05/14(土) 01:49:07 ID:5NJ35cqH0.net] セルの値を取得して書き換えて…ってやるより二次元配列で処理する方が体感3倍くらい速いから、高速化したいなら配列使えばいいよね ただ他の人もわかるようにとかメンテナンス性考えると避けた方が無難だったり、ケースバイケース
80 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 04:08:54.94 ID:wh2tsa6Q0.net] 他人の使い勝手なんか微塵も考えていないヤツが大半だろ現場じゃあ
81 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 04:13:11.38 ID:JIfRBOPe0.net] Variantはポインタじゃなくて共用体 そもそもVariantオブジェクトはVBA固有の機能じゃなくてWindowsに組み込まれてて、別の言語からも自由に使える どういう場面で役に立つのかわからんけど
82 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 04:32:51.17 ID:bV9+cuz+M.net] ポインタ的な使い方するならVariant型ではなくてObject型 Dim a As Object (総称オブジェクト型) Rangeオブジェクトに特定するなら Dim a As Range (固有オブジェクト型)
83 名前:デフォルトの名無しさん [2022/05/14(土) 08:18:11.37 ID:ddohEedh0.net] Variantってよく分からん型だよな Objectもそうでないものも仕舞えるし .Netで封印されたのも頷ける
84 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 10:07:30.24 ID:BHEGSPOf0.net] >>78 配列の方が断然早いよね。 富○通がVBで作ったEXCEL名簿出力アプリが5時間以上かかってるのが、俺がEXCELVBAで組んだのは30分で終わる。 しかも富○通のはデータ1行ごとにコピペしてるので 動かしてる間コピーのバッファが奪われて他の作業が一切できない。
85 名前:デフォルトの名無しさん [2022/05/14(土) 10:48:24.07 ID:0kHlnQQT0.net] オレオレ自慢
86 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 10:57:42.22 ID:jjfnS8MSd.net] VBのコードみてVBAにする際に少し手直しした程度なんだと思うが どの程度のデータか不明だけど30分もかかるような処理も自分としてはNGだわ まあどっちも夜流して朝みればいいなら5時間でも一緒程度
87 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:08:32.24 ID:XMrr4JDhr.net] 何分とかかかる時点でRDBとか外出ししてやれないかとか考えちゃう Excelには荷が重いんじゃないかとね
88 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:27:37.36 ID:x+cFGSU+a.net] どんだけ長い処理でも耐えられて2分までだわ 30分かかるとか論外
89 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:39:20.09 ID:tj4PNqc2d.net] そんなに処理に時間がかかるってことは多分生データが数Gクラスだろうからaccessやexcelでは非効率だろう ここに>83の間抜けさがよく現れてる
90 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:43:13.01 ID:5E8BmIH10.net] そんな大規模なデータを扱ったことないからわからないけど 30分もかかったら途中で無限ループに入ってんだろなと思って止めてしまうわ
91 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:59:12.73 ID:VTp6T5x/0.net] vbaを30分も動かすってどんな処理だよ あとあまり長い時間動かしっぱなしにすると大体フリーズしてるぞ
92 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 12:14:29.94 ID:jjfnS8MSd.net] どんな処理でも構わないけどExcelのプロセスが起動してるときに新規のExcel起動>ファイルを開くで開けばいいけど 無意識のうちにダブルクリックなんかで開こうとしたらVBA実行中のプロセスで開かないとも限らないから 30分の拘束ってのは日中ならなし
93 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 12:55:50.88 ID:JIfRBOPe0.net] そんなに速くしたら、フリーズしてないか監視する仕事の人がクビになっちゃうだろ ああいうのは、わざと1日かかるように作ってあるんだよ
94 名前:デフォルトの名無しさん (ワッチョイ 7dda-o6RS) mailto:sage [2022/05/14(土) 13:31:33 ID:wh2tsa6Q0.net] なんでExcelエキスパート集団の富○通がそんなクソ遅いマクロ書くのか不思議だ。
95 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 15:15:38.33 ID:VTp6T5x/0.net] >Excelエキスパート集団 それはない
96 名前:デフォルトの名無しさん [2022/05/14(土) 16:41:13.43 ID:9uXA4NxPd.net] 富士通が直接作っているのでないだろうし、たった一つの例で全部がわかったつもりになる幼稚なアホ
97 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 18:27:44.98 ID:msymY1pp0.net] あんまり処理に時間かかるようなやつならプログレスバーやらひとまず動いてることがわかるようなものを入れとくわ
98 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 18:32:44.86 ID:qaSd7ep40.net] 1.xlsx、2.xlsx、3.xlsx、・・・、1000.xlsxという連番のブックがあって そのすべてにssssというシートがあって そのすべてのD2(R2C4)セルにデータがあるとして あるブックのA1~A1000に1~1000が入力してあって、 それぞれの隣(B1~B1000)に対応するブック(B500には500.xlsx)の シートssssのD2セルの中身を持ってくるのってどうすればいいですか? ExecuteExcel4Macroとか使ってそんなに難しくなくやれるかと思いきやまるでうまくいかない…
99 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 18:58:29.62 ID:lDPvxjtFD.net] >>94 方眼紙はじめとした使い方への皮肉だろ
100 名前:デフォルトの名無しさん [2022/05/14(土) 19:14:09.21 ID:yHnyJFGQ0.net] >>97 他に条件や例外がないなら自分で書いてる通り「そんなに難しくない」が、どこで詰まってるの?
101 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 19:20:25.44 ID:VTp6T5x/0.net] >>97 ExecuteExcel4Macroはデフォで無効にされた なんか知らんが俺も動かせなかったからもうベタ書きで https://forest.watch.impress.co.jp/docs/serial/yajiuma/1357642.html Sub Sample1() Set t = ThisWorkbook For i = 1 To 3 Set databook = Workbooks.Open(Filename:="C:\Users\81909\Downloads\" & i & ".xlsx") t.Sheets("ssss").Cells(i, 2) = databook.Sheets("ssss").Cells(2, 4) databook.Close Next End Sub >>98 それならok
102 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 19:26:19.82 ID:msymY1pp0.net] 内容あまり理解出来てないのかもしれないけど B500の行取得してワークブックオープンで引数ファイルパス500で開いてデータ抜きたいところ抜けば良いのではないでしょうか。 4使うあたり処理を重くしたくないのでワークブックを開きたくないようにも見えますが
103 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 19:51:35.87 ID:jjfnS8MSd.net] こんな感じになる文字列を作ればいけないか?(フォルダ名とファイル名を変更していく) MsgBox ExecuteExcel4Macro("'フォルダ名\[1000.xlsx]ssss'!R2C4")
104 名前:デフォルトの名無しさん (ワッチョイ 91da-Hs+l) mailto:sage [2022/05/15(日) 01:22:22 ID:xmtudDvv0.net] MSHTML.HTMLDocumentのbody.outerHtmlに何か代入しようとすると、 あるPCでは問題なく出来るのに、 別のPCではアプリケーション定義のエラーがでる 何故? ソースは同じなのに
105 名前:デフォルトの名無しさん mailto:sage [2022/05/15(日) 08:18:10.46 ID:Jt2O43PNd.net] 参照設定は?
106 名前:デフォルトの名無しさん mailto:sage [2022/05/15(日) 13:24:19.34 ID:K6VbLnva0.net] >>68 即レスいただいてたのに遅くなりました。ありがとうございます。 常識なんですね。とてもためになりました。 少数が原因だろうと思いつつもローカルウィンドウの値は整数だし Fixしても発生するので困ってました。ありがとうございます。
107 名前:デフォルトの名無しさん mailto:sage [2022/05/15(日) 15:21:30.27 ID:xmtudDvv0.net] >>104 してある してないと違うエラーメッセージだったような
108 名前:デフォルトの名無しさん mailto:sage [2022/05/15(日) 17:45:40.00 ID:SLK6Xy6bp.net] >>106 参照不可はない?
109 名前:デフォルトの名無しさん mailto:sage [2022/05/15(日) 17:49:03.93 ID:i2BwfRJap.net] >>83 依頼元の情報提供不足。対象件数とか。