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


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

Excel VBA 質問スレ Part76



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

2 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 10:10:19.02 ID:Pk0oKD+E0.net]
2げろ

3 名前:デフォルトの名無しさん [2022/05/01(日) 14:46:30.73 ID:q0kLnjNbd.net]
Excel使い方すらわからない人はお断りです
Excel VBAが何かもわからない人もお断りです

4 名前:デフォルトの名無しさん (ブーイモ MMcb-LnX+) [2022/05/01(日) 16:08:24 ID:CXxh8/QkM.net]
我々の承認欲求を満たしてくれる質問お待ちしてます

5 名前:デフォルトの名無しさん (ワッチョイ df4f-bbcD) [2022/05/01(日) 17:04:11 ID:PgWgEC/y0.net]
向こうのスレ消化してから書き込めカス共

6 名前:デフォルトの名無しさん (ワッチョイ 7fda-Nh0L) mailto:sage [2022/05/01(日) 19:54:56 ID:Om3L9uk+0.net]
前スレ終わってないのに立てる >>1 が悪い

7 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 21:27:37.77 ID:geOevaoi0.net]
>>6
終わってから立てたらスレの連続性が途絶えるだろ
考えて物言え知恵足らずが

8 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 21:39:32.49 ID:Rd1MW2220.net]
レス古事記の相手すんなよ...

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
他に条件や例外がないなら自分で書いてる通り「そんなに難しくない」が、どこで詰まってるの?








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

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

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