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


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

Excel VBA 質問スレ Part75



1 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:24:32.62 ID:I0u44nFvd.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

369 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 10:46:32.32 ID:GvFVeYD4d.net]
>>361
List(参照したい位置)でいけるんじゃないか
参照したい位置はListIndexでとれるかと
複数選択ならSelected(位置)でTrueになるところかな

370 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 19:57:18.31 ID:hw4UnylL0.net]
シート上で任意に選択した範囲を set myRange = 選択範囲 のように代入した後、
For Each buf In myRange.Value
処理A
Next
という処理をしようとすると、
・選択範囲が複数ある場合:正常に動作する
・選択範囲が1つの場合:「型が一致しません」のエラーになる

「For each ○ IN ●」の●には複数セルが指定されていないといけないということでしょうか?

371 名前:デフォルトの名無しさん [2022/03/18(金) 23:38:51.84 ID:q1DQLrxB0.net]
>>364
そうです 

set buf as range
For Each buf In myRange
debug.print buf.value
Next
こんな感じじゃだめですか?

372 名前:デフォルトの名無しさん [2022/03/18(金) 23:53:01.28 ID:q1DQLrxB0.net]
おっと間違えた
dim buf as range
For Each buf In myRange
debug.print buf.value
Next

373 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 00:50:36.99 ID:OOddD3UI0.net]
myRange.Value の Value がおかしかったのか。
ありがとうございます。

374 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 02:03:56.48 ID:yYNieGSo0.net]
>>364
myRangeの何をbufとしてとりたいの?各セル、連続した複数のセル、myRange全体によつて正しいこーどは異なる

375 名前:364 mailto:sage [2022/03/19(土) 10:45:02.08 ID:OOddD3UI0.net]
>368
任意のドラッグ操作で選択したセルと同じ行のL列(左から12番目)に入っている文字列を結合して表示させようとしました。

Dim cnt As Integer
Dim myRange As Range
Dim buf As Range
Dim target As String

cnt = Selection.Rows.Count
Set myRange = Range(Cells(Selection.Rows(1).Row, 12), Cells(Selection.Rows(1).Row + cnt - 1, 12))

For Each buf In myRange
target = target & buf & vbCrLf
Next

Debug.Print target

376 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:48:26.22 ID:kJy21FG50.net]
>>347で質問させて頂いたものです。
色々調べましたがシートにINDEXを設定するのは実現可能か分からなかったのと、
出来ない場合、代替案を考えたいのですが、
ひとつのシートに20万行、100列の一覧が有ったとして
そのとき、ひとつの項目(項目1とします)はある値とイコール、更に別の項目(項目2とします)は
項目1で抽出したレコードの内の最大値を求めたいです。

どのような方法が一番速く処理出来ると思いますか?

377 名前:364 mailto:sage [2022/03/19(土) 10:48:43.76 ID:OOddD3UI0.net]
>>369は正常に動作したコードです。

最初は下記のようなコードでエラーとなっていました。

Dim buf As Variant ←Variant型にしていた。

For Each buf In myRange.Value ←.Valueを付けていた。
target = target & buf & vbCrLf
Next

Debug.Print target



378 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:51:21.24 ID:CvJNM5+IM.net]
範囲検索するのにfindとworksheetfunction.matchとではどちらが速いですか?

379 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 10:52:04.86 ID:CvJNM5+IM.net]
ちなみに完全一致の場合です

380 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:51:46.09 ID:/t3SgnSXa.net]
自分で試せばいいだろw

381 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:51:57.89 ID:i9OMIEsk0.net]
試したほうが早いよ

382 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:52:21.15 ID:UXt2lmR80.net]
は?試してたらこんな所で聞きませんけど?

383 名前:デフォルトの名無しさん [2022/03/19(土) 12:52:58.71 ID:4DGoWoBi0.net]
>>369
>cnt = Selection.Rows.Count
>Set myRange = Range(Cells(Selection.Rows(1).Row, 12), Cells(Selection.Rows(1).Row + cnt - 1, 12))

Set myRange = Cells(Selection.Row, "L").Resize(Selection.Rows.Count)
もっと簡単に書けそうな気もするがこんなもんかな

384 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 13:47:10.61 ID:zEPprvQva.net]
>>376
試してなくても、こんなところで聞かないでくださいw

385 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 14:44:42.82 ID:qNoriQBK0.net]
>>377
ちゅんちゅんさん推奨の書き方か
resize真似して使ってたんだけど間違えやすかった

386 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 15:12:32.83 ID:OOddD3UI0.net]
>>377
ありがとうございます。.Resizeを使うとスマートに書けるんですね。使ってみます。

387 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 15:57:19.25 ID:rhR/rlzyd.net]
autofilterで表示されたものだけで、列をautofitすることは出来ますか?



388 名前:デフォルトの名無しさん [2022/03/19(土) 16:36:01.13 ID:4DGoWoBi0.net]
SpecialCells(xlCellTypeVisible)でできんじゃねーかな

389 名前:デフォルトの名無しさん [2022/03/19(土) 16:40:58.85 ID:AuBNrAzT0.net]
コードは

390 名前:スマートなのに…って言われろ []
[ここ壊れてます]

391 名前:デフォルトの名無しさん [2022/03/19(土) 18:04:38.19 ID:4DGoWoBi0.net]
Range("テーブル1[項目A]").SpecialCells(xlCellTypeVisible).Columns.AutoFit
出来ないのかと思ったらできるじゃん

392 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:22:46.82 ID:qn2+ggVDa.net]
VBA素人にご教示ください

PowerQueryで整形したテーブルのデータを
別ブックのVBAに引っ張ってきたい場合
・列データをユーザー定義型にまとめる
・ListObjectを使う
どちらがベターでしょうか?

393 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 18:48:13.74 ID:XaCRBAWQM.net]
引っ張ってきたい側でpowerquery使って整形したテーブルをソースに指定する

394 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 19:07:47.91 ID:qn2+ggVDa.net]
すいません、うまく説明できてませんでした
PowerQueryとVBAは別ブックでも同じブックでもいいです

やりたいことは
巨大なテーブルを参照してVBAで検索フォームを作りたい
です
その場合、テーブルデータを
・ユーザー定義型にまとめる
・ListObjectを使う
どちらがいいのか?が質問の意図です
改めてお願いします

395 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 20:45:24.46 ID:ecCVM1RA0.net]
全くの素人で申し訳ないんですけど、やりたい事

❶:B10からスタートしてボタンを押したら次の行に指定された文字を入力していく。

❷:Ifを使って、もしB29行まで埋まった状態でボタンを押したら
 B2からB29までコピーしてB1からB28にペースト
 →B29に指定された文字を入力

色々頑張ったけど自分で❶は出来たけど❷ハードルが高かった・・・

396 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 21:21:42.73 ID:titlKmjCa.net]
2のどの部分ができないのか

397 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 21:33:07.78 ID:qNoriQBK0.net]
If Range("B29")<>"" then Range("B1:B28").value = Range("B2:B29").value
こんな感じか?



398 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:17:04.40 ID:hVJQeY+Td.net]
>>389
IFで範囲内空白があった場合を出そうとしてたんだけどうまくいかなかったんや・・・

399 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:17:58.96 ID:hVJQeY+Td.net]
因みに入れたいのは勝利か負け。2つボタン作れば別々に行けるかな

400 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:56:32.21 ID:hVJQeY+Td.net]
>>389
ありがとう。認識できた。そしてなんとか検索して思うような結果になった!

401 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:13:30.21 ID:ZUsPYd03M.net]
>>382
>>384
ありがとうございます。
明日試してみます。

402 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:49:20.37 ID:CEJcVsO40.net]
>>387
巨大ならlistobjectかadoじゃないの、速度的に。
巨大じゃなきゃ何でもいいや。

403 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 06:37:24.28 ID:Md+DYeh30.net]
>>372
ちゃんとタイマー走らせて確認してるわけではないけど体感的には大して変わらない
でも完全一致で検索をかける場合matchは検索対象が存在しないとエラー停止するのに対してfindはset range変数=対象範囲.find(ryで検索をかけてやればrange変数がnothingか否かで判別可能だから個人的にはfindの方が好きかなぁ

404 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 08:33:55.10 ID:Zh6y5r970.net]
>>370
同じようなことを前考えたけど、恐らくEXCELのシートにインデックスを貼るのは無理っぽい。
ADOどころか拡張機能であるADOXでも無理だったはず。

代替案としてはSQLが使えないので、都度個別で考えるしかないけど、とある項目の最大値や最小値が入っているレコードの内容が欲しいなら基本、MATCH関数での検索となると思う。

405 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 10:22:27.56 ID:HKRI5d8YM.net]
>>370
> どのような方法が一番速く処理出来ると思いますか?
フィルターかけてSUBTOTAL(4, 範囲)

406 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 13:33:44.21 ID:NjSblaend.net]
>>382
>>384
うまくいきました。
ありがとうございます。

407 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 15:42:40.21 ID:IQ9r07oYM.net]
>>369
すまん、368だけどコード見てもやりたいことがまるでわからんので、回答書けない



408 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:07:32.87 ID:fXpRWn260.net]
初心者のため、ご存じでしたらご教授お願い致します。
エクセルから印刷する際、プリンタをカラー、モノクロをそれぞれ
自動印刷できませんでしょうか?
PageSetup.BlackAndWhite = True/Flase
以外で方法がありましたら、ご教授をお願い致します。

409 名前:デフォルトの名無しさん [2022/03/20(日) 19:41:51.49 ID:V5Xg0/PX0.net]
>>401
その方法では成功しないのですか?

410 名前:デフォルトの名無しさん [2022/03/20(日) 19:51:58.85 ID:aHWtYUUu0.net]
素人にご指導願います。

生年月日や所属等を含めた社員のリストを作ってまして、氏名等で検索できるようオートフィルターをvbaで作るところまではできました。

「チェックボックスにチェックを入れたら、指定した日付と同じ生年月日でフィルターをかける」という操作は可能でしょうか。
例えば、セルに1990/3/1を入れてるとして、チェックボックスにチェックを入れたらフィルターがかかって1990/3/1の生年月日だけ出てくる(それ以外は消える)というものです。
チェックボックスにチェックを入れるかどうかで指定した日でフィルターをかけるかどうかを判断したいです。

もし可能でしたら、ご教示いただけると幸いです。
よろしくお願いします。

411 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:56:19.87 ID:fXpRWn260.net]
>>402
PageSetup.BlackAndWhite = Falseで白黒印刷設定したのですが、
塗りつぶしの背景が白で印刷されてしまいます。
また、カラーの図が白黒で印刷できませんでした。
プリンタのプロパティにある印刷設定(両面、集約、カラー等)はVBAでは制御できないでしょうか?

412 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:02:50.72 ID:0CQh90gjM.net]
>>401
> 以外で方法がありましたら
なぜこういう人は以外でないとダメな理由を書かないのか

413 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:15:26.37 ID:KxZjhn5zM.net]
>>404
すまん、リロードしてなかった
っていうか最初から書けよ…

> PageSetup.BlackAndWhite = Falseで白黒印刷設定したのですが
白黒設定は True じゃね?

> プリンタのプロパティにある印刷設定(両面、集約、カラー等)はVBAでは制御できないでしょうか?
無理、
Application.Dialogs(xlDialogPrinterSetup).Show
で、ダイアログを表示させるのが精一杯

414 名前:デフォルトの名無しくん [2022/03/20(日) 20:21:02.46 ID:V5Xg0/PX0.net]
>>404
プリンタドライバをもう一つ入れて、そのドライバの初期設定を白黒にして「白黒印刷専用」とする。
このプリンタ(ドライバ)をVBAで選択して印刷する。

過去にやったことがあるけどちょっとめんどくさかった記憶
他にいい方法あるのかな

415 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:23:50.61 ID:Md+DYeh30.net]
>>403
チェックボックスにマクロを登録してフィルターのキーをその入力があるセルを参照すれば良いだけだと思う
例外処理があるならそれはどういう条件で省くのか分からないから自分で考えて

416 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:36:02.96 ID:fXpRWn260.net]
>>406
ご回答ありがとうございます。
理由も一緒に書けばよかったですね。大変失礼致しました。
以後気を付けます。

やはり無理なんですね。
他のかたがご指摘のように、白黒専用プリンタドライバを増やして
プリンタを切り替えてトライしてみます。

ご指摘の通り、PageSetup.BlackAndWhite = Trueが白黒です。失礼致しました。

417 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 20:41:31.10 ID:fXpRWn260.net]
>>407
ご回答ありがとうございます。
プリンタドライバを増やす方法、ご提案ありがとうございます。
早速トライしてみます。
ドライバーを入れた後、プリンタの基本設定で白黒を初期設定にすれば白黒専用でいけますね。



418 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 21:09:18.42 ID:j6YhEUF6d.net]
>>403
多分VBA要らない
スライサーで十分

419 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 02:46:04.32 ID:HoitaytG0.net]
スライサやタイムライン知らない人多いらしいね
マイナーなのかな?

420 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:08:07.49 ID:8sRo6eoq0.net]
マイナーはマイナーだと思う
MOS受けて初めて知ったわ

421 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:21:11.67 ID:K7MjVs2M0.net]
テーブルからしてまだマイナーだからかしら?

422 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:27:35.78 ID:Od0FfcR ]
[ここ壊れてます]

423 名前:PM.net mailto: ブックの共有するとテーブルが使えない
共有機能とテーブルどちらを選ぶとしたら会社では共有を選ぶ
糞共有機能は早く廃止してほしいな
[]
[ここ壊れてます]

424 名前:デフォルトの名無しさん [2022/03/21(月) 08:06:13.98 ID:S9+WMeZFH.net]
誰か教えてください
各営業所から毎月送られてくる実績ファイルを一つのブックに集計するマクロを作りたい
一つのフォルダに全てのブックを入れてループ処理するマクロ自体はできたんだけど肝心の転記の仕方がわからない
具体的には各ファイルの指定のセルから集計表ファイルの指定のセルに営業所名ごとに転記したい
営業所ファイルには4〜3月まで縦に月毎に実績が並んでいて集計表のファイルは横に月毎になってるって感じ
どうしてもわからなくてどなたか助けてください

425 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:19:15.34 ID:/kHY2rERM.net]
powerqueryだな

426 名前:デフォルトの名無しさん [2022/03/21(月) 08:24:32.18 ID:S9+WMeZFH.net]
>>417
ありがとうございます
パワークエリってやつですかね?
検索かけたら使い方分かりそうでしょうか?

427 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:52:49.57 ID:K7MjVs2M0.net]
>>418
ようつべのライブラリに放り込んでた中から
役に立ちそうなもの見繕ってみた。

PLをフォルダに放り込むだけで科目ごとの数値を比較できる【エクセル パワークエリ PowerQuery】
https://youtu.be/xxc5sCl6U3w

大量のエクセルファイルを1つにまとめる方法【ファイル名活用】
https://youtu.be/XMwbj7x4Q0Y

【マクロ無しで】大量ファイルを1つに統合。簡単にクリック操作で可能(Power Query、取得と変換)
https://youtu.be/RCmoho3jU8Q

PowerQuery 複数のExcelファイルからデータを結合する方法
https://youtu.be/VxKoqBJWgRo



428 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:00:07.15 ID:8sRo6eoq0.net]
>>416
Sub foo()

'開いてset
Set 転記先ブック = ThisWorkbook
Set 営業所ブック = Workbooks.Open( _
"C:\Users\81909\Desktop\eigyosyo.xlsx")

'転記
転記先ブック.Sheets("sheet1").Range("b2:d3").Value = _
営業所ブック.Sheets("sheet1").Range("b2:d3").Value

End Sub

保存ファイルのパスと転記セルの範囲変えたら使えると思う

429 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:06:14.38 ID:Yo31hjL10.net]
>>397
ありがとうございます。
やはりEXCELのシートにINDEXを設定するのは無理なんですね。

>>398
ありがとうございます。
残念ながら20万件100項目という量のせいか、
フィルターを掛けるとそのまま固まってしまい、いつ返ってくるか、そもそも返ってくるのかすら分からない状況になりました。

430 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:14:48.04 ID:8sRo6eoq0.net]
>>421
そもそもフィルター掛ける必要があるのかどうかってのもあるけど・・・
ぱっとおもいつくのは

・forで回して別シートに転記。量が少なければそこまでかからんはず。量が多いとかなり大変
・別シートにfilter関数。かなり軽いけど、その量に対してはやったことないな
・スプレッドシートでquery関数。軽さならこれが最強で、めちゃくちゃ軽い

431 名前:デフォルトの名無しさん [2022/03/21(月) 16:06:54.19 ID:YtFKrPKNa.net]
>>419
ありがとうございます
見て参考にさせていただきます

432 名前:デフォルトの名無しさん [2022/03/21(月) 16:10:10.41 ID:YtFKrPKNa.net]
>>420
ありがとうございますこの構文のでいける感じですか?
ホントど素人で申し訳ないんですけど転機の構文は何をしてる感じでしょうか?

433 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:14:49.98 ID:ombAFbaLM.net]
>>420は要点をコンパクトに上手に説明してる
これが理解できないなら自分で最終回答に辿り着くのは無理だよ

434 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:21:01.88 ID:8sRo6eoq0.net]
>424
転記の部分は値でコピーペーストだよ
試しに動かしてみたほうが早いと思う

435 名前:デフォルトの名無しさん [2022/03/21(月) 16:38:45.50 ID:YtFKrPKNa.net]
>>425
>>426
ありがとうございます
まずは動かしてみます

436 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:43:02.21 ID:HoitaytG0.net]
テーブルってまだ普及していないねかな?

437 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:50:26.11 ID:DBpwCepOM.net]
永遠に普及しないでしょうね
列島猿はセル結合したり自分で色塗ったり線引いたりするのが大好きで、お仕着せのDBにデータだけ放り込むみたいなのは苦手なので



438 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:56:11.28 ID:8sRo6eoq0.net]
全面的に同意
テーブルで表作ったらテーブルを解除しろって言われるレベル

439 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:19:32.38 ID:fDbYf0xJ0.net]
>>424
転記する際に縦横を置換したいんじゃねえの?
420の例にはそれが入ってないかと

440 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:21:13.79 ID:fDbYf0xJ0.net]
テーブルでも椅子でもいいからさっさとやれと言われるわしら下っ端

441 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 17:57:58.00 ID:bPJRBgFUM.net]
>>416
マクロ記録開始してその転記の操作してみればいいかと

442 名前:デフォルトの名無しさん [2022/03/21(月) 19:13:04.04 ID:S9+WMeZFH.net]
>>431
あーそうなんですね
そこ大事なところなもんで…
ありがとうございます

443 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:37:57.87 ID:HoitaytG0.net]
いつも思うのだけど、これだけExcel情報が世の中に溢れているのにセルご法度の結合だの色塗りまくるだの改行だのする人ばかりなのは何故なんだろうね??
パソコン雑誌とか読んで勉強していないのかなと?

444 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:43:19.70 ID:zSyDDKWUH.net]
>>435
www2.odn.ne.jp/~cbl97790/shinsakutenjishitu.htm

445 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 19:53:51.30 ID:8sRo6eoq0.net]
>>435
業務改革を微塵も考えていないから
一日8時間で、最初に与えられたルーチンが回ればそれで良いと考えてる人がほとんど
なんでそうなってるかは、知らん

446 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:06:38.09 ID:7hRN3rZ2M.net]
>>435
別にExcelの達人になるわけじゃないし
そもそも結合するなと言うなら縦方向の「選択範囲内で中央」を実現しやがれ

447 名前:デフォルトの名無しさん [2022/03/21(月) 20:11:42.48 ID:S9+WMeZFH.net]
>>433
それも思ったんですけどそれだと恐らく一つの営業所の実績を一つのセルにコピーする操作になってしまいそうで…



448 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:23:41.52 ID:2j3OjuAE0.net]
>>439
ここまでの説明で理解できてないようなので
とりあえず営業所毎ファイルと集計表ファイルをアップロードしないと話が進まない

449 名前:デフォルトの名無しさん [2022/03/21(月) 20:42:56.54 ID:S9+WMeZFH.net]
>>440
オケ
さすがにそこまでは出来ないので色々試してみます
ありがとうございました

450 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 20:43:57.15 ID:8sRo6eoq0.net]
>>439
転記部分は好きなように変えたり増やしたりスレば良い
b2をd3に、a1をe5に、など、なんとでもなる。

'転記
転記先ブック.Sheets("sheet1").Range("b2").Value = _
営業所ブック.Sheets("sheet1").Range("d3").Value
転記先ブック.Sheets("sheet1").Range("a1").Value = _
営業所ブック.Sheets("sheet1").Range("e5").Value

451 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:18:25.50 ID:8fSFwG7JM.net]
>>439
思うだけで手を動かす気はないのね…
いち抜けた~っと

452 名前:デフォルトの名無しさん [2022/03/21(月) 21:20:10.88 ID:S9+WMeZFH.net]
>>443
ごめんなさい会社のファイルなので今日できんのよ
明日行ったらやってみる

453 名前:デフォルトの名無しさん [2022/03/21(月) 21:21:07.73 ID:S9+WMeZFH.net]
>>442
ありがとうございます!
やってみます!

454 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:49:42.78 ID:HoitaytG0.net]
日本のExcelのレベルが低いからExcel講師やパソコン教室が潤うと。

455 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 22:13:13.78 ID:NuDNOSQMd.net]
ループ文とか条件文とかユーザーフォームとかクラスとか使ってごちゃごちゃやってるけど結局のところファイルの開閉と転記作業しかしてない事に気づいた

転記があれば何でも出来る

456 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 23:00:27.32 ID:Rbd9piL90.net]
転記の子

457 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:36:53.70 ID:000FKf5P0.net]
始めたてのド素人ですがご教示頂けると幸いです。
表の列ごとにランダムに入っている異なるフォントの色で正負を判断して最終行に和と差の合計値を出力したいのですが可能でしょうか?
詳しく言うと赤色が負として、黒色が正としてセルに数値が手打ちされてます。
列の最終行を取得しsum関数を挿入することはできるのですが、フォントの色で正負を判断して合計値が出せるのか教えていただけないでしょうか。



458 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:49:54.42 ID:kEBDDtio0.net]
>>449
もともとエクセルにはマイナスの数字を自動的に赤くする機能がある
その機能で色を変えてるんだと集計の方法も変わってくるから、まずはそこを確認して

459 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 01:08:13.62 ID:TibwPpTv0.net]
書式に辿り着ければ
自ずと答えが見つかろうぞ

460 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 01:19:04.08 ID:KVIRUNm3d.net]
そもそもVBA不要
sumif関数で出来る

461 名前:デフォルトの名無しくん mailto:sage [2022/03/22(火) 02:43:58.13 ID:d3YPRjya0.net]
きっとこれは黒色の負とか青色の正とかあって
あえて色で集計したいんだろうな


と、深読み

462 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 12:14:00.76 ID:000FKf5P0.net]
ご返信ありがとうございます。
表のシートが種類ごとにあって量が千を超えているので自動化したい所存です。
前任が手書きの台帳をエクセルに落してくれたまでは良かったのですが、他の社員が手書きのときと変わらず正の値で色のみ変えて入力するため、毎年年度末になると延々と手作業で何時間も単純作業を強いられるのでなんとかならないかと思案しておりました。

463 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 12:33:30.37 ID:jGZXGfWV0.net]
条件書式でゼロ以上は赤字にするとかでもダメなんか?
逆にVBA使った方が遅かったり不便にかりそうな案件だと思うんだが

464 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:33:25.27 ID:MYdjPEb1M.net]
>>421
> 残念ながら20万件100項目という量のせいか、
> フィルターを掛けるとそのまま固まってしまい、いつ返ってくるか、そもそも返ってくるのかすら分からない状況になりました。
PC買い替えろ
30万行x300列に数値データを埋めてやってみたけどフィルター処理なんてほぼ瞬時に終わるぞ

465 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:38:08.96 ID:mA7AOTDM0.net]
他の社員が入力してるものだからなあ
集計よりも入力用のシートを何とかできたら手っ取り早いんだがそれは無理なんかな

466 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:43:49.21 ID:R4HxgmoiM.net]
色付けるよりマイナス記号打つ方が速いだろうに……
ご苦労さまでした

467 名前:デフォルトの名無しさん [2022/03/22(火) 13:48:33.03 ID:C94PEu1/d.net]
>>454
はっきり言えばこんなこともできないお前は手を出すな



468 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 14:03:10.79 ID:l3SAD7eYM.net]
>>455
元のデータが 1, -2 ってなってるところを 1, 2 (←赤文字) で入力されてるんだろ

>>454

if Cells(行,列).Font.Color = RGB(255,0,0) Then ...
で判断できるよ
データ書き換えていいなら(てか、個人的にはそうすべきと思うが)
For C In ActiveSheet.UsedRange
If C.Font.Color = XlRgbColor.rgbRed And IsNumeric(C.Value) Then
C.Value = -C.Value
C.Font.Color = XlRgbColor.rgbBlack
End If
Next
として、一気に書き換えちゃうのがいいかも

469 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 19:08:50.48 ID:Gjrul4fP0.net]
>>456
流石に仕事場のPCを勝手に買い替えるのは私には出来ませんし、
最終的にフィルター等の処理は使用せずにかなりの高速化をはかることが出来ました。

この方式が最速ではないかも知れませんが、
今までADO接続でSQLを実施して
2〜3分掛かっていた処理が一瞬で終わるようになったので満足しています。

今まで質問に答えて頂いた方、色々参考にさせていたきました。
ありがとうございました。

470 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 20:15:28.30 ID:WUXZwGEtd.net]
>>454
やはりVBAは不要
オートフィルターのフォント色で絞り込み、subtotal関数で十分

471 名前:デフォルトの名無しさん [2022/03/22(火) 23:22:39.90 ID:VOPCLAbN0.net]
本当にド素人なのでお許し下さい
ここに3枚の請求書(Excelデータ形式)があり、それぞれsheet1、sheet2、sheet3にあります
フォーマットはバラバラで文字や配置が異なります
これをsheet4で「支払日」「取引先名」「取引内容」「税込金額」を一覧表にしたいのです
こういうことはVBAでは可能でしょうか?
可能であれば、難易度はどの程度でしょうか?

*実際には請求書は数百枚あります

472 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:26:23.97 ID:b3mXLXMM0.net]
>>463
フォーマットが統一されていれば、vbaでやる意味はある
フォーマットが統一されていない場合、vbaで書く意味がほとんどない。手作業でコピペするのと変わらん

473 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:26:42.94 ID:b3mXLXMM0.net]
かわらん、と言ったけど手作業でコピペする方が早いわ

474 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 23:43:05.71 ID:6kcI/g5C0.net]
>>461
そのフィルターが処理するために、
全データをメモリに載せようとするから、メモリ不足でフリーズする

20万件 * 100項目 = 2千万項目, 20,000,000

仮に、1つの項目が1KB とすると、
20,000,000 KB = 20,000 MB = 20 GB

メモリに載せられないから、フリーズする

ファイルの読み込みと同じ。
20GBのファイルを一度に全部読み込めない

部分的な読み込みにしないと無理

例えば、1MBずつ読み込んで処理して、そのデータを捨てるとか。
これなら、1MBしかメモリを使わない

でも、この方法では、全データをソートしたりできない。
自分で実装できないから、結局、データベースを使うしかない

475 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:15:35.00 ID:HTP/aspP0.net]
>>461
せめてどうやったかぐらい書けよ

つかエクセルからエクセルブックにADOでSQLとか、余計なオーバーヘッドで遅くなるイメージしかないんだがな
それで高速化できるようなケースがあるのか?

476 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:34:00.08 ID:3vbjDh2k0.net]
。。同志達は例の追加された新しい関数の情報つかんでいるよね?
なんだか凄そうな予感

477 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 01:05:25.56 ID:MTKAae3e0.net]
ワークシート関数の追加のニュースなら見たけどVBAにも何か追加されるん?
https://forest.watch.impress.co.jp/docs/news/1395929.html



478 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 05:27:44.59 ID:kSdTSG5d0.net]
>>466
なるほど、一度メモリに全て載せるようにするからフリーズするかのごとく重くなるのですね。
EXCELに割り当てられるメモリがどのくらいなのかは分かりませんが、納得です。
ありがとうございます。

479 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 05:59:20.73 ID:kSdTSG5d0.net]
>>467
最終的にはその重いシートを使用する場合にはADOを使用するのをやめました。
代わりに、>>397の人が教えてくれたような技法を使うようにしました。

正確には本来、プライマリキーが設定されるような最も検索後の件数が少なくなるような項目の列をFindで検索して、
その際に検索された値が入っている行の、別項目で最も値の大きい行を取得し、その行にある情報を取得するようにしました。

ADO接続ではSQLを投げられるのでかなり便利で、作成して扱う部品も統一化し易いのですが、
大量なデータを持つシートを扱う場合、或いは後に大量なデータを持つ可能性があると思われるシートを扱う場合は
都度個別にロジックを作成する必要があるという結論になりました。

480 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 06:08:26.57 ID:+yWQsdmla.net]
>>466
> 仮に、1つの項目が1KB とすると、
どんなデータだよw

481 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 06:19:06.78 ID:kSdTSG5d0.net]
今は完全に個別の処理としてロジックを作成していますが、Findで一番検索後の件数が少なくなる場所を検索する部分は共通部品化出来そうですね。
その内その中で更にどのように抽出するかの部分においては別関数化してリフレクションで呼び出すようにすればその部分だけ個別で行えるような気もするので、
当面の目標はそれになります。

482 名前:466 mailto:sage [2022/03/23(水) 09:27:45.30 ID:znQ4kzdw0.net]
>>466
>仮に、1つの項目が1KB とすると、
>20,000,000 KB = 20,000 MB = 20 GB

1つの項目が100バイトなら、2GB。
これでも、メモリ不足になる

1つのアプリは普通、100MB ぐらいまででしょ?
数百MBも使えるアプリは無いでしょ?

使用メモリの制限を外さないと無理じゃないの?

483 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:46:29.99 ID:KFrQJBSS0.net]
メモリの制限に達するとストレージ、仮想メモリ使うよ・・・何を言ってるんだ・・・

484 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:50:01.23 ID:MR2jKSYA0.net]
>>474は後で恥ずかしい思いするぞ
それとも過去の人か

485 名前:466 mailto:sage [2022/03/23(水) 11:39:32.08 ID:znQ4kzdw0.net]
Java とか、VM のメモリ不足で落ちるとか?
デフォルトのメモリ割り当て設定が少ないからとか、聞いたけど

各アプリには、そういう設定があるのでは?

486 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:43:25.55 ID:KFrQJBSS0.net]
テキトーすぎでは

487 名前:466 mailto:sage [2022/03/23(水) 11:45:19.28 ID:znQ4kzdw0.net]
例えば、2GB のメモリに、Windows 10 をインストールしたら、
1クリックの動作に、1分掛かるので、全く使えない

仮想メモリとか、ほぼ意味ない。
遅すぎる

ドンキの格安PC とかも、そう



488 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:49:59.54 ID:KFrQJBSS0.net]
質問者のPCの中身が分からないのになんでどうでもいい豆知識披露してるんだw

489 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 11:50:45.45 ID:nUwfSeaH0.net]
2Gでも1クリックに1分とかはかからないのでは?
win10とそっくりなwin 2019 serverが
2core メモリ1Gでも、
ああもっさりだけどまぁ普通にマウス操作できるなぁ、
ぐらいには動くし。

490 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 12:06:56.65 ID:jxCik/Tkr.net]
句読点の使い方とかからして関わっちゃいけない人だとわかる

491 名前:466 mailto:sage [2022/03/23(水) 12:22:53.98 ID:znQ4kzdw0.net]
CPU がセロリンだからかも

メモリ2GBぐらいのPC は、CPUも安物だから、1クリック1分ぐらい掛かる

492 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 12:52:02.64 ID:bsuIYc5Za.net]
>>474
よくわからないのでExcelでの検証方法と結果を出してくれないか?

493 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 14:41:23.04 ID:3vbjDh2k0.net]
同志達はケッコー上等なパソコン使っているイメージだがどうなの??

494 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 15:29:25.74 ID:TpwnHNL9M.net]
パフォーマンスが必要ならDB使えばいいのよ

495 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 18:26:48.33 ID:PWl/OlCpM.net]
社用PCってのは基本10万未満に抑えないと固定資産化して面倒だからそこまでスペックが高くないんよ
それこそ自社でPC作ってる会社でも未だにメモリ4GB以下だのCore i3だのが当たり前なぐらい

496 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 18:30:41.97 ID:TpwnHNL9M.net]
i3なんて贅沢な

497 名前:421 mailto:sage [2022/03/23(水) 19:13:52.79 ID:kSdTSG5d0.net]
今更i5の1.6Gでメモリ8Gなんて言えない・・・ー



498 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 19:39:45.28 ID:Jy3nut2I0.net]
そのスペックでその程度のデータ処理でそんなに時間がかかるのは明らかに何かがおかしい
確実に変なことをしている

499 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 20:00:19.51 ID:TpwnHNL9M.net]
ADOのExcel Driverなんておもちゃに決まってんでしょ
上っ面の体裁整えただけ

500 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 21:28:40.17 ID:nUwfSeaH0.net]
今のPC平均てi8700 or Ryzen2600くらいじゃないんかいな?
2.4から3.5Ghz の6-12コアあたりが多いやろ。
3-4年前のマシン。

ややいいと4Ghz の12-16コアくらいでしょ。

501 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 22:55:53.13 ID:KFrQJBSS0.net]
SSDかHDDか
問題はここだけだ
変なエクセルファイル作る人は、どれだけPC性能よくてもいずれ詰む

502 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 01:29:04.78 ID:y95b8UUh0.net]
つかアーカイブドライブが大きな1-2T程度のSATASSDで、CやDの2つくらいが500-1TのNVMeなんじゃないの
HDDなんかは半年に一度みるかもなデータでもない限り使わないと思うけどな。
内蔵にHDDなんかあったら存在だけで使ってなくてもめっちゃ遅くなるし。

503 名前:デフォルトの名無しさん [2022/03/24(木) 02:30:52.55 ID:Rmqc3Mmn0.net]
>>494
馬鹿は黙っていればいいのに

504 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 03:16:35.71 ID:ECMUHWnp0.net]
ゲーミングPCの恩恵受けたいです。
派でなキーボードで

505 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 12:17:51.66 ID:vEIStuKr0.net]
20万x100の中から最大値求めたいなら
1万x100ずつ読みだして最大値20個比較するのが一番早いんでねーの?

506 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 13:05:59.63 ID:5Ha8a+Lla.net]
>>497
なぜそれで速くなると思った?

507 名前:デフォルトの名無しくん mailto:sage [2022/03/24(木) 14:49:33.59 ID:MIQ/3HwW0.net]
分割処理は面倒なようで低スペックには限界を回避し優しい



508 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:52:30.97 ID:Z1gVjOVJ0.net]
>>492
事務用PCだとセレロンがせいぜい
そしてエクセルは事務用ソフトやで
データベース扱わせたら即固まる

509 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 16:05:22.00 ID:0iDW3zlua.net]
数年前、外出時にexcelを使うため
windowsタブレット(atom)を、最適化してた
そこそこ使えるんだけど、
たまにすごく遅くなるから原因探ったらmdbにアクセスしてるときだった

510 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 20:19:51.61 ID:ECMUHWnp0.net]
会社はケチだから高級スペッコのパソコンを購入してくれない。
職場の古いデスクよか私物のノーパソの方がサクサク(Ryzen積んだヤツ)

511 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 20:23:26.56 ID:/oHcKJ7o0.net]
うちは全部SSDに変えたよ
i5 2400もサクサク
1万投資するだけでPCが復活するというのに、なんでみんなやらないんだろうな

512 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:32:40.98 ID:XNeV8CRo0.net]
儲かっている会社だけじゃないことくらい想像つくだろ

513 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:51:54.91 ID:3J8f/LKg0.net]
7年前に買ったi7のLavie。
何かメチャクチャ重いので中見てみたら
メモリが4G。そして当たり前のようにHDD。

メモリは買い換えて16G積んだけど
それでも立ち上げはなぜか遅い。

それ以来もうYAMADA電気では絶対PCを
買わないことを心に誓った。

514 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:16:28.60 ID:XVe+E9v/0.net]
さすがに、HDD は遅いでしょ

515 名前:デフォルトの名無しさん [2022/03/25(金) 01:24:52.38 ID:x94dfbyJ0.net]
>>505
ヤマダ電機は関係なくお前が馬鹿なだけだろ

516 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:25:53.93 ID:jqc8A7wc0.net]
事務員が職場でゲーミングノートなんか使っていたらカオスだね
遊びに見られる

517 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:28:11.57 ID:jqc8A7wc0.net]
つか立ち上がりってメモリよりSSDが大きく関係しているんじゃないの?
過去にウィンドウズスレで詳しい人に教えてもらった。



518 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:40:28.27 ID:p3htVTGSa.net]
どうしてVBAプログラマーって、
コードの内容だけ調べて、

「はい、こうなってこうなって、こうなっています。
 なぜこうなっているのか、これ以上のことに関しては、こちらではわかりません。
 詳しい人に聞いてねー」

となるんだろう。
自分で何も動こうとしないで、
ただ VBE 開いて、コードを日本語訳して、終わり。
それで仕事した気になってるんだから笑っちゃうよ。

519 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 01:48:43.98 ID:FbSlRBsRa.net]
そういう人はプログラマーとは言わないよ

520 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 02:37:31.54 ID:F54TZ40q0.net]
どういう状況でその回答に至ったかの前提条件がないとそれが妥当な返答である可能性を否定できない

521 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 05:36:38.48 ID:cwXcdCWcd.net]
>>510
ネットや書籍でも人に読ませる気のないコードやつぎはぎだらけでそもそもまともに動かないコード置いてはい終わり。ってのが多いし情報量は多いが質が悪いので質の悪い解釈が更に増えるという悪循環に陥ってる

522 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 06:16:41.66 ID:XWaROYx+0.net]
>>509
正解

>>510
「ルーチンに関しては」詳しい人に聞いてね、だよ
むしろそれ以上なんか答えてほしい事はあるのだろうか

523 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 08:31:08.17 ID:o8BOLFr/r.net]
そら「知らん」からよ
給料の範疇じゃないんだろ

524 名前:デフォルトの名無しさん [2022/03/25(金) 10:34:06.30 ID:1zyB+7jua.net]
>>510
お前が自分で動けばいいんじゃね

525 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 11:22:36.46 ID:ieGzCLlt0.net]
>>437
民族性としか言いようがない。山本七平さんが生涯かけて取り組んだ、
「なぜ我が国はこうも組織づくりと運営ががダメダメで、暴力と数合わせによる実態のないものに陥っていくのか」っていうあれ

526 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:05:26.87 ID:jqc8A7wc0.net]
本当にできる人はネットとか何も見ないでスラスラとコード書ける人だと聞いた。
なかなかいないと思うけど。

527 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:13:20.83 ID:gLxuAzS/r.net]
VBAは大体ググるわ
普段いじらんし構文まで覚えてないし独特な部分も多いし



528 名前:デフォルトの名無しさん [2022/03/25(金) 12:38:22.10 ID:dRfv/AP1a.net]
ググる人はできない人なのかw

529 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:55:56.28 ID:378bs0UD0.net]
>>510
それはVBAに限ったことじゃないよ。
VBA使う人だってモデリングしてクラスの構成やらインターフェースとかどう使って行くか考えてから作る人もいるし、
Javaや.Net使っている人でもその場凌ぎの平べったいコード書く人もいる。

むしろ何がどうなってそのような結果となるのかは、VBAやってる年寄り連中の方が
今ある便利な部品ばかり使うことじゃなく、もっとハードよりな理屈を知ってる人(ついでにCやC++、アセンブラ等も経験している人)が多いだろうから
一概にその理屈では片付くものでもないよ。

530 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 13:23:03.47 ID:rDRC/qkL0.net]
>>510
どう考えてもそれ以上は「プログラマー」の仕事じゃないわけですが

業務分担外の仕事まで無理やりやらせるブラック会社の人ですか?
責任範囲外のことを要請されても困るわけですが

531 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 13:44:09.14 ID:nD4Ua/6EF.net]
会社のパソコンは底辺スペックが
多いからできるだけ配列必須

532 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 14:15:40.45 ID:ogVYp57ed.net]
ここで質問してくる人はプログラマと呼ぶにはどうかと思うスキルだという認識だし
>>510みたいな答え返してくる奴が自分の職場にいたらっていうかこんなやついないけどw

533 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:09:31.18 ID:dbWOzFn0a.net]
そもそもどうしてそういうプログラムになっているか、
どうしてそういう条件文になっているか、
わからなければ、
チームリーダーやマネージャーに聞けばわかるかもしれないし、
チームリーダーやマネージャーは、主査に聞けばわかるかもしれない。

主査は、わからなかったとしたら、そういう仕様でやっていると
クライアントに説明できる。

クライアントからオペレーターに問合せが入って、
オペレーターからプログラマーに問合せがきた場合は、
プログラマーとしては、チームリーダーやチームメイトに聞くのが筋。
それをめんどくさがって、コードだけ読んで、条件文を和訳して
オペレーターに回答するだけのプログラマーって、どうなの。

オペレーターからすれば、まさかの異次元回答をくらった思いになる。
そうじゃなくて、こういう場合どう対処すればよいか、
関係者に聞いてほしい、でも関係者

534 名前:がわからないから、
唯一わかっている身近なプログラマーに聞いている。
そういう話だと思うんだけどなあ。

絶対いいたいこと説明できてない。
さすが俺。
[]
[ここ壊れてます]

535 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:25:13.86 ID:qqk/wS7c0.net]
前任が作ったコードをよくわからず使っているが、変な挙動があった
VBAかけるやつに聞いてみたら……

だとオレは思うけど

536 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:55:04.11 ID:8xCVgHwf0.net]
PGやSEを抱えていない職場で業務改善の一環としてワンオペで誰かが作ったものは仕様書すら作られてない時も少なくない
コーティング規約もないから中身が無法地帯なんてのもあるある

537 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:11:26.32 ID:378bs0UD0.net]
>>525
あー、そういうことね。
でもやっぱりそれはVBAがどうのではないよ。
要件定義、基本設計、詳細設計に携わっていて
仕様を押さえているかだもの。

つまり、>>527の人が言うように
PGと言うよりはSEのお仕事。

そしてここはVBAのスレだから
PGにそういうこというのはお門違いだし
このスレからしてみてもスレ違い。

で、VBAやってる人が仕様を押さえて
いないというのはそれこそ偏見だよ。
むしろちっちゃいツールばかりなんで
押さえ易いしね。



538 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:20:12.47 ID:rDRC/qkL0.net]
>>525
それはオペレーターが直接プログラマーに聞いてるのがおかしい
つか関係者わからんオペレーターがプログラマーならわかるってどんな異次元組織だよ
関係者がわからんからってプログラマーにきいてもわかるわけないだろ

ちゃんとした組織でのプログラマーの仕事と、事務員が片手間にプログラム作ったのと同じ次元で話されてもなぁ

539 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:30:04.98 ID:jqc8A7wc0.net]
ググってもおkなのか良かったわ
必死でヘルプ見て暗記していたのは非効率だよね

540 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:36:57.23 ID:378bs0UD0.net]
>>530
慣れでスラスラ書けるようにはなるだろうけど
どちらかといえばググり力の方が必要だよ

541 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:03:42.37 ID:rDRC/qkL0.net]
ググり方というより、公式ヘルプでの確認が大事だと思うんだが
いま公式ヘルプでさえオンラインとかいう時代だからなぁ

まあVBAの文法ていどなら暗記できるけど
エクセルのオブジェクト全部なんて暗記できる奴がいるとは思えん

542 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:39:02.37 ID:ogVYp57ed.net]
オペレータがプログラマに聞くって何を?w
知ってる言葉ならべてるだけなのかな

543 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 19:43:12.04 ID:RqRNte220.net]
要求通りの動作をするコードが書ければできるやつだろ
検索しようが、他人に聞こうが何も見ないで作ろうが関係ないよ

544 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:11:44.87 ID:XWaROYx+0.net]
>>534
それだとエラーチェックとかどうでも良くなってしまう
使い捨てのスクリプトならともかく、その言い方はさすがに意識が低すぎる

545 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:12:25.07 ID:/GQ4L54F0.net]
納期を守ってちゃんと動く
結果がすべて
検索だろうがコピペだろうが関係ない

546 名前: []
[ここ壊れてます]

547 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:40:46.85 ID:jqc8A7wc0.net]
さっき会社の上司とたまたまそういう話したけど、やっぱ何も見ないでスラスラとコード書けるヤツいたら貴重だから重宝するって言っていた。
ただ、そういう人ほど初歩的なミスに気がつかないとも。



548 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:44:28.64 ID:ogVYp57ed.net]
>ただ、そういう人ほど初歩的なミスに気がつかないとも。
こんな話はないわ
たまたまそういう人としか仕事してないだけ

549 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 20:57:16.02 ID:uzupo3Jn0.net]
飯島 彩矢
いいじま よした

550 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:03:49.94 ID:2zbf95kya.net]
>>535
???
要求通りなんだから要求にエラーチェックが入ってたら当然実装するだろ

551 名前:デフォルトの名無しさん [2022/03/25(金) 21:21:49.50 ID:UnnJynAs0.net]
エクセルのクエリで、一つのファイルにある複数のシートから、たとえば1つ目から4つ目のデータ(1000行くらい)を1枚目を1から4、2枚目を5から8に転記していくにはどのような設定でやればいいでしょうか

552 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:22:42.56 ID:8eXyKRPB0.net]
どうしよう、>>541の言っている意味が分からない…

553 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:26:08.92 ID:4vyR1Miw0.net]
おらも分からん

554 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:26:33.02 ID:378bs0UD0.net]
>>537
まぁちっこいツールとかならそうかもね
ある程度大きくなったら後々のメンテナンスのし易さとか、テストの工数をどうやれば減らせるかとか
最初の内に構成練り込んで考えて作るから、いくらスラスラ組めてもその辺がすっぽ抜けてると
後々手を加えるごとに分岐だらけのスパゲッティコードになって行くことが多いんだよね

555 名前:デフォルトの名無しさん [2022/03/25(金) 21:28:20.55 ID:UnnJynAs0.net]
>>542
えーっとですね
例えばシート1の1から4つめにA,B,C,Dってデータがあるとします
シートの1から10まであって、
それを一つのシートの1箇所に横に並べたいんです

556 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:32:43.40 ID:378bs0UD0.net]
>>541
スピード重視でなければこの間からここで色々言われてたADO接続使ってSQLでレコードセットに値取得してそのままシートに貼り付ければいいんじゃない?

ヘッダがいるなら最初から書いとくか、レコードセットから取得するなら別ロジックが必要だけど

557 名前:デフォルトの名無しさん [2022/03/25(金) 21:34:59.71 ID:UnnJynAs0.net]
>>546
単発での処理なのであまりそういう複雑なのは難しいです



558 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:38:14.89 ID:q+5lBwTqM.net]
>>547
こんなこともわからないような馬鹿は手を出すな

559 名前:デフォルトの名無しさん [2022/03/25(金) 21:39:37.46 ID:UnnJynAs0.net]
クエリとかの簡単な操作でデータ整理できないですかね?

560 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:45:45.83 ID:378bs0UD0.net]
>>549
何だろう、クエリってSQLも立派なクエリだよ?
そっちの言ってるクエリの定義が分からない。
アクセスとかにあるあのツールっぽいのを言ってるのかな?

561 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:46:14.94 ID:8eXyKRPB0.net]
普通にマクロの記録使ってシート1の範囲をコピーして
シート2の開始地点で貼り付けたらいいだけじゃないの…

562 名前:デフォルトの名無しさん [2022/03/25(金) 21:47:30.56 ID:UnnJynAs0.net]
そうすると横にデータを並べていきたいので重複していきます
シート全体の数もそのときどきで変わるので

563 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:50:02.56 ID:378bs0UD0.net]
???
どんどん何をしたいのか分からなくなってくるね

564 名前:デフォルトの名無しさん [2022/03/25(金) 21:51:28.75 ID:UnnJynAs0.net]
>>553
簡単に言うと、複数シートにまたがる複数列の1から4列のデータを、
1枚のシートの横に縦の行を順番に並べていきたいのです

565 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:56:14.91 ID:w2X6jrV+0.net]
ズコーッ !

566 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:56:37.17 ID:378bs0UD0.net]
>>554
本当に単純にそれだけなら
2シート目の1〜4列目をコピーして
1シート目に貼り付けたあとに、
貼り付け先の列先を+4して
シート3以降、シートがある分だけそれを
繰り返せばいいんじゃないの?

567 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:57:03.52 ID:qxuRWoIYM.net]
ID:UnnJynAs0と一緒に仕事しなきゃいけない同僚には同情する



568 名前:デフォルトの名無しさん [2022/03/25(金) 21:58:28.35 ID:UnnJynAs0.net]
>>556
そうなると場合によっては数百のシートを手作業でコピーしなければならないので現実出来ではありません

569 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:03:32.99 ID:378bs0UD0.net]
>>558
は?
手作業ってどこから出てきたの?
そういうコードを組めばいいという話をしてるつもりだったんbだけど伝わらなかったかな?

570 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:03:48.41 ID:8eXyKRPB0.net]
手作業でコピーしなければならない んじゃなくて
ループでそれぞれのワークシートを参照 したらいいじゃん
>>556 は 「手作業で」 なんて一言も書いてないよ

571 名前:デフォルトの名無しさん [2022/03/25(金) 22:05:38.52 ID:UnnJynAs0.net]
>>560
どうすればそれができますか?

572 名前:デフォルトの名無しさん [2022/03/25(金) 22:06:11.03 ID:UnnJynAs0.net]
エクセルの方のクエリでは縦に連結されて出てきたのでやり方を教えて下さい

573 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:08:44.67 ID:378bs0UD0.net]
>>562
いや、そもそもそれだけの処理ならクエリなんて必要ないでしょ

574 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:12:12.99 ID:8eXyKRPB0.net]
>>561
Worksheets.Count でシートの数を持ってこれるから
Worksheets(n)  ※nは1始まり  でそれぞれのワークシートを参照できるから
後はループの中で >>556 の言う通り行番号を加算しながら貼り付けするなり参照貼るなりすればできるよ
俺はもうここまで伝えるので限界

575 名前:デフォルトの名無しさん [2022/03/25(金) 22:15:02.86 ID:UnnJynAs0.net]
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません

576 名前:デフォルトの名無しさん [2022/03/25(金) 22:15:06.77 ID:UnnJynAs0.net]
>>563
すみません、パワークエリのことです
プログラム組んだりとかはできません

577 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:23:46.18 ID:4vyR1Miw0.net]
>>554
もしかしてPower Queryで言うところのマージをしたいの?
複数シートに共通する、keyとなる列が1つあれば出来るけど。



578 名前:デフォルトの名無しさん [2022/03/25(金) 22:39:41.75 ID:UnnJynAs0.net]
>>567
複数シートの配列は同じで、データの内容だけがちがいます

579 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:44:11.29 ID:3hBoOPeGa.net]
>>565
来る板間違えてる

> ローカルルール
> この板はプログラムを作る人のための板です。

こっちへ行け
【Excel】Power Queryを語るスレ【Power BI】
https://mevius.5ch.net/test/read.cgi/bsoft/1571540368/

580 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:44:52.03 ID:4vyR1Miw0.net]
>>568
縦軸となる共通するkey列はなに?
何の順番で行が並んでるの?

581 名前:デフォルトの名無しさん [2022/03/25(金) 22:58:31.64 ID:UnnJynAs0.net]
>>569
ありがとうございます

582 名前:デフォルトの名無しさん [2022/03/25(金) 22:58:38.87 ID:378bs0UD0.net]
なんだ、Power Queryか。
いい機会だからVBAも勉強してってくれ

583 名前:デフォルトの名無しさん [2022/03/25(金) 22:59:53.49 ID:378bs0UD0.net]
Sub hoge()
Dim targetSheet As Worksheet
Dim bottomRow As Long
Dim toPasteColumn As Long
Dim isFirstTime As Boolean

isFirstTime = True
toPasteColumn = 1

With ThisWorkbook
If .Sheets.Count = 1 Then
Exit Sub
End If

For Each targetSheet In .Worksheets
If Not isFirstTime Then
targetSheet.Activate
bottomRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row
targetSheet.Range(targetSheet.Cells(1, 1), targetSheet.Cells(bottomRow, 4)).Copy _
Destination:=Sheets(1).Cells(1, toPasteColumn)
toPasteColumn = toPasteColumn + 4
End If
isFirstTime = False
Next

End With
End Sub

584 名前:デフォルトの名無しさん [2022/03/25(金) 23:02:44.53 ID:378bs0UD0.net]
うん、やっぱりインデントつぶれたね。
これで動くはずなので良ければVBEに張り付けて実施してみて。
最初のA列がキーであることが前提だけども。

585 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:22:2 ]
[ここ壊れてます]

586 名前:2.08 ID:wN9O5mc/0.net mailto: あれ?確かインデント用のツールを紹介してくれている親切な人いたような?
あれ具合良さそう。
[]
[ここ壊れてます]

587 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:30:29.64 ID:3d/IeTqK0.net]
Sub aaa()
  For bbb = 0 To 0
    If ccc = 0 Then
      ddd = eee
    End If
  Next
End Sub



588 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:25:30.54 ID:x5oh4kDTa.net]
ツールの利用者から、ツールの改修担当者に問合せがいったんでしょ。

改修担当といっても、前任者から引き継いだだけだから、全ての仕様はわかっていない。
現在の業務にそぐわない仕様があって、エラーが出たから、
利用者が改修担当者に問合せ。

前任者なら「もともとこういう仕様です」と答えれば、
「ああ、それなら業務が変わったから改修が必要だな」と
改修依頼を出せる。

ツールの利用者も着任して間もない人の場合、
業務が変わったのかどうかもわからない。

そういう場合、ソースコードの条件文を日本語にして
回答するのではなくて、
昔から存続しているチームの誰かに聞くのが普通。
それをしないのは職務怠慢。

自分一人で売上を引っ張ってこれていると勘違いしているのかな。

589 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 06:35:02.37 ID:4/mAEYCl0.net]
>昔から存続しているチームの誰かに聞くのが普通。
>それをしないのは職務怠慢。
つまりそれをしないで改修担当者に聞いてるやつが悪いってことだな

590 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 10:14:46.58 ID:p8/YoqyTd.net]
ここって長文で講釈を垂れる人おおいよね
しかもVBAにはまったく無関係という

591 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:35:46.08 ID:OVfO91qG0.net]
自力でできないのに調べない、人に聞かない、期待されているのものがつくれないのは できない人 としか言いようがない

592 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 15:44:49.86 ID:wN9O5mc/0.net]
時には長文になるのは仕方ないよ。
丁寧に説明するばそうならね?

上の方で個人名みたいの書いてるアレな人いるけど今の5ちゃんて個人名書いただけでNGじゃなかったか?

593 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 16:02:36.43 ID:1KsbV4Zma.net]
個人名NGの規制ってあるのか?
WindowsやLinux板とかでは機能していないように見えるけど

594 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:07:43.61 ID:kCwfN6Gy0.net]
個人名というか個人情報な
通報されたら警察来るかな

595 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:58:02.51 ID:wN9O5mc/0.net]
昔バイトしていた居酒屋のマスターが5ちゃんに実名晒されて誹謗中傷書かれていたのを思い出してさ。

596 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:09:02.02 ID:Gn2xNTk6p.net]
>>577
> 昔から存続しているチーム
そんなのは跡形もないから

597 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 20:17:20.58 ID:wN9O5mc/0.net]
職務怠慢は言い過ぎでは?
何かしらの事情あるだろうし。



598 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:22:10.99 ID:lmdSWMnfa.net]
dim ki as string
ki = "まあいろんな事情があるよね"
ki = ki & "チームメイトに嫌われていて聞きづらいとか"

dim shou as string
shou = ki
shou = shou & "「こんなことくらいしかわからなくて、すみません」と謝られても"
shou = shou & "お前がそんなことしかわからないことは、百も承知。"
shou = shou & "誰かに回してくれることも見込んでの質問なんだけど、"
shou = shou & "ってね。"

dim ten as string
ten = shou
ten = ten & "プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、"
ten = ten & "という連携は面倒くさがる人が多いからね。"
ten = ten & "コーディングされていないことは、できませんが何か? みたいな"
ten = ten & "職務はここまで。これ以上はできませんが何か?みたいな"

dim ketu as string
ketu = ten & "ロボットみたいな人が多い。"

599 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:52:13.63 ID:4I5liEUu0.net]
何?
この気持ち悪いスレ・・・・・・

600 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:57:27.46 ID:zJILPsYJM.net]
>>587
汚いコードだな、そんな代入の仕方じゃ変数を4つ用意した意味がまったくないじゃん
そういう時は最後に足すんだよ
Dim DeathStory As String
DeathStory = ki & shou & ten & ketu

601 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:58:14.85 ID:zJILPsYJM.net]
>>588
そっ閉じすりゃいいのに、そんなスレに何か書き込んでる時点で同類

602 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:21:42.29 ID:hNNvtCzu0.net]
深夜になると定期的に変な書き込みあるよね

603 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:29:36.79 ID:/OZccBd9M.net]
>>591
自己紹介かよ!

604 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 07:40:40.82 ID:BqsGdBXW0.net]
>>587
無駄に
変数 = 変数 & 文字列 をやると
その分余計にメモリを使用する。やり直し。

605 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 09:48:21.10 ID:8deA3KtJa.net]
そもそも >>587 だと
"まあいろんな事情があるよねチームメイトに嫌われていて聞きづらいとか「こんなことくらいしかわからなくて、すみません」と謝られてもお前がそんなことしかわからないことは、百も承知。誰かに回してくれることも見込んでの質問なんだけど、ってね。プログラマーは基本、自分ひとりで仕事完結して、周りに電話したりメールしたりチャットしたり、という連携は面倒くさがる人が多いからね。コーディングされていないことは、できませんが何か? みたいな職務はここまで。これ以上はできませんが何か?みたいなロボットみたいな人が多い。"
ってなるし、適宜 vbCrLf 挟めや

606 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:09:59.57 ID:GXS4gvi+M.net]
>>594
読んでないけど読む価値のないレスであることだけは判る

607 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:21:55.52 ID:dieR0oCra.net]
↑ どこを読めばいいのかもわからんアホw



608 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:33:27.62 ID:jqHr+5yx0.net]
最初と最後の行しか読んでないけど
スペースも改行もつかないって突っ込みだって事だけは判る

609 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:56:36.33 ID:hNNvtCzu0.net]
ようは字下げしないと読みにくいって教えてくれたんですね親切な人。

610 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 11:49:34.86 ID:17nxG3290.net]
>>593
そうなのか
賢くなった
でもいつものクセでSQL文はこの式で書いているわ

611 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:17:45.42 ID:CPBl4WFea.net]
>>597
それで十分、てか最後の行読んだらわかるだろ

612 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:19:46.20 ID:CPBl4WFea.net]
>>599
まあ高々数十行位なら気にすることはないよ

613 名前:デフォルトの名無しさん [2022/03/27(日) 12:41:21.31 ID:cPay0R1J0.net]
誰かSalseforceのAPIをVBAでたたく方法わかる人いませんか?
API関連に関して全く無知で、何をどうしていいのか、、、
詳しい人教えてほしいです、、

614 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:52:04.46 ID:dAzXJbreM.net]
字下げや改行なんてVBAでやることじゃない
印刷だろうが電子化だろうが、文書の整形は出力アプリ側に投げるもんだ
リーダー端末の画面サイズやフォントサイズなんて予測できんだろ?

615 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 13:07:11.24 ID:OVREMJced.net]
文書の整形と文書自体を一緒にしてしまうところが悲しい・・・

616 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:11:35.24 ID:hNNvtCzu0.net]
なんでよ?VBAの義務教育編で字下げは真っ先に学習するはずじゃ??

617 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:22:28.69 ID:2Abk94v90.net]
年収1000万のインド人はインデントもコメントもなし
一般人はちゃんとつけよう



618 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:30:10.15 ID:6akgwO9ga.net]
>>602
アクセスするライブラリとAPIリファレンスを掲示してくれたら捗るんじゃね?

619 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:33:41.29 ID:OVREMJced.net]
>>607
APIは変に教えるとよくないと思うから
それを使って何かするような事をしたいなら正式な仕事なりで発注させるべきだと思うぞ
そもそも何もわかってない奴がここで質問してるのもおかしな話だろ

620 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:34:17.13 ID:OVREMJced.net]
スクレイピングもたまに質問するやつがいるけど
それも同じな

621 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:50:20.50 ID:ob1ESvJwH.net]
>>609
VBA でのスクレイピングはイマイチですねえ、動いたり動かなかったりするし、なにかいい方法はないものか?

Function ScrapingAlgoA003(objIE As InternetExplorer, url, keyword As String)
objIE.navigate url
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim ReturnValue As Double
Dim div As HTMLDivElement
For Each div In htmlDoc.getElementsByClassName(keyword)
ReturnValue = CDbl(div.innerText)
ScrapingAlgoA003 = ReturnValue
Next div
Set htmlDoc = Nothing
End Function

622 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:02:58.02 ID:jqHr+5yx0.net]
>>600
そうだな
>>597>>595へのレスだ

623 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:18:00.28 ID:7EXZAGuD0.net]
>>610
VBAのスクレイピングは今だとSelenium使ったChromeのスクレイピングが主流なんじゃなかろうか
バージョン合わせるのが面倒だけど安定してるし

624 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:39:07.33 ID:2Abk94v90.net]
Seleniumはほんといいね
IEからxpathで・・・ってやってたのがほんとアホらしくなった

625 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:43:23.36 ID:U13zJWe20.net]
Seleniumは昔インストールしたんだがよくわからず
未だにIEばかり使ってるんだが もうそろそろ切り替えた方がいいのかな

626 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:51:02.70 ID:7EXZAGuD0.net]
昔のSeleniumはChromeの方にも拡張機能入れて…とかだった気がするけど今は事前準備も書くのも凄く簡単になってるね

627 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 19:59:57.15 ID:2Abk94v90.net]
>>614
100%切り替えた方が良い
ちょっと癖があるけど、cssセレクタ覚えればアホみたいに楽になるぞ
ちなみにXPathはしんどい



628 名前:デフォルトの名無しさん [2022/03/27(日) 20:17:18.33 ID:Df2KiTxu0.net]
質問です。
連想配列に格納した連想配列の値を取り出すには
どうしたらよいのでしょうか?

Dim dicA as Dictionary
Dim dicB as Dictionary

dicB.Add "a",100
dicB.Add "b",100
dicB.Add "c",100

dicA.Add "A",dicB

としたとき、dicAの中のdicB("b")の値を取得したいとき
どうしたらいいのでしょうか。

Debug.print dicA("A").("b")
とかで出せるかと思ったのですが駄目でした。

629 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:19:01.83 ID:uW5IEa4H0.net]
set TikuB = dickA("A")
Tikubi("b") = bibibibibi-----

630 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:22:07.59 ID:EN8vWua40.net]
>>610
For EachなのにIfで条件指定しないのか

631 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:29:11.49 ID:hNNvtCzu0.net]
乳首エロい

632 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:31:09.02 ID:BqsGdBXW0.net]
>>617
よく分からんのだけど、Dictionalyって
型宣言しただけで使えるの?

普通に考えると、
Set dic A = New Dictionaly
Set dic B = New Dictionaly
とか、必要そうに見えるけど。

633 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:33:33.24 ID:BqsGdBXW0.net]
おっと、Dictionalyのスペルが違ってるか
Dictionaryかすまんこ

634 名前:デフォルトの名無しさん [2022/03/27(日) 20:45:16.14 ID:Df2KiTxu0.net]
元の文と違いますが解決しました。
ありがとうございました。

Sub foo()

Dim dicA As Dictionary: Set dicA = New Dictionary
Dim dicB As Dictionary: Set dicB = New Dictionary

Set dicA("A") = dicB

dicA("A")("a") = "test"

Debug.Print dicA("A")("a") 'test

End Sub

635 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 01:22:22.67 ID:LEJNBveMa.net]
("A")

636 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 02:04:12.07 ID:dJWBHkZn0.net]
(:; U: ::)

637 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:56:32.13 ID:bggr0gZp0.net]
Selenium Webdriver と、
Chrome の拡張機能・Selenium IDE の2種類ある



638 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:57:45.06 ID:W5FkPi4A0.net]
Selenium Webdriver

639 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 12:34:55.90 ID:DkLhkvc4M.net]
ウェブダイバー

640 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 13:29:17.84 ID:9Kb03WZY0.net]
ウェブダイバーはカラオケで歌うぞ

641 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:29:52.50 ID:jKre83rL0.net]
>>623
今更だけど
Dim dicA As New Dictuonary
みたいに普通に1命令で設定しなかったのは何故?

642 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:47:34.87 ID:2Ad/srHwa.net]
横からだけど
For ...
Dim D As New Dictionary
...
Next
ってやると最初の一回しかNewしないから常に
Dim D As Dictionary: Set D = New Dictionary
ってやる人はいるみたい

643 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 18:55:38.23 ID:jKre83rL0.net]
>>631
いやいや、ループでそれぞれ別インスタンスとして使うにしても、定義は1回でNewするのが複数回で済むでしょ。
例えば上のレスのようにDictionaryにDictionaryを格納する場合でもDictionaryにしまった時点で参照は渡されるんだから消えないし、
その後、Newしてまた渡してやればインスタンスはまた別物として扱われるよね。

644 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:07:54.06 ID:AcTRGxgL0.net]
コードで語ればいいのに

645 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:46:09.16 ID:W5FkPi4A0.net]
>>630
知らなかっただけじゃないか

646 名前:デフォルトの名無しさん [2022/03/28(月) 19:46:21.63 ID:jKre83rL0.net]
>>633
Sub hoge()
Dim dic1 As Scripting.Dictionary
Dim dic2 As Scripting.Dictionary
Dim itemCounter As Long

Set dic1 = New Scripting.Dictionary
For itemCounter = 0 To 3
Set dic2 = New Scripting.Dictionary
dic2.Add 0, "fuga" & CStr(itemCounter)
dic1.Add itemCounter, dic2
Next

For itemCounter = 0 To 3
Debug.Print dic1(itemCounter)(0)
Next

End Sub

出力結果:
fuga0
fuga1
fuga2
fuga3

dic1の中にdic2を入れてるけど、dic2の変数自体は使いまわし。
dic2はループの中でNewされているけど、dic1の中にそのときの
dic2の参照情報が格納されているため、きちんと別の値が保持される。
つまりはそういうこと。

647 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:51:37.75 ID:BH9MBdK/a.net]
↑ こいつは一体何を説明してるんだろう…



648 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 19:53:39.70 ID:nzzJclxc0.net]
みんな教え方バラバラだから質問者が困ってるよー

649 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 20:06:46.75 ID:GBAIeVpDp.net]
>>636
分からないならすっこんでればいいんじゃないかな

650 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 20:07:19.86 ID:jdteRYNZd.net]
実務ではよくある話

651 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 21:12:23.25 ID:DlrSWjY+a.net]
>>637
>>617の質問は解決してるし、>>630
の質問は>>634が一番ありそうだし
困ってる質問者って誰?

>>638
そうだねw

652 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 00:49:06.48 ID:zHBdUnr/a.net]
>>638
うるさい、だまってればいいんじゃないかな

653 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 01:38:58.63 ID:YOHlvasK0.net]
まあ、知らなかっただけって可能性が高いんだが
DimでNewしてるオブジェクト変数はNothingにできないって罠があるからな

そして今更だが、VBAにDictionaryはないぞ、と

654 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 06:28:42.33 ID:z3WwGups0.net]
>>642
nothingに出来ないってどういう事だ?
以下のコード、間違えてるんだろうか

Sub foo()
Dim a As New Collection
Set a = Nothing
End Sub

655 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:06:07.15 ID:YJRadFF90.net]
>>643
https://thom.hateblo.jp/entry/2016/09/27/221527

656 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:24:06.81 ID:Nk63wsBAa.net]
それをNothingにできないと言うか?

657 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:25:09.72 ID:z3WwGups0.net]
>>644
量子論で草
nothingできるけど元に戻る、vbaの狂気を垣間見た気がする



658 名前:デフォルトの名無しさん [2022/03/29(火) 08:16:28.05 ID:JuGZiW1lM.net]
dictionaryって連想配列だろ
VBA的にはマスタの代わりか、重複を避けて集計するぐらいしか使わないイメージ
だからここで問題にされてることってどうでもいい気もするけどなw
>>602
お前の質問に答えられるレベルに人はここにはいないだろw
海外のサイトで質問するほうがいいよ

659 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:48:32.13 ID:ZoTD6ZCz0.net]
そもそもVBAのオブジェクト型は参照カウンタ方式だから、Nothingの代入はオブジェクトの破棄じゃないし
破棄の予約とでも言えばいいのかな

システムは予約が入ってるかどうか定期的にチェックして、可能なら破棄する
実際に破棄するタイミングはシステムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる

ところで破棄のアルゴリズムって公開されてる?
あるいは誰かが解析した資料がどっかにある?

660 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:57:03.34 ID:91VKkhT6M.net]
カウントゼロで破棄だろ
説明するまでもない

661 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:58:53.63 ID:TzrFOdrRd.net]
>>648
トレーシングGCと参照カウントがごっちゃになってるのかな
参照カウントは基本的に参照が外れたら即破棄

662 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 10:42:09.75 ID:YJRadFF90.net]
この辺、VB.Netとかの他言語でCOMオブジェクトの解放とかやってないと想像つきにくいよね。
そういうの知ってても面倒くさいし、サーバーサイドでEXCEL自体ないこともあるから
あの手この手で別の方法使ってEXCELの更新行おうとするよね。

663 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 11:13:32.55 ID:DZfi33jJd.net]
想像というよりやるべき作法をわからずに適当に作るからでは
使ったら解放するものは何か理解していれば間違えないでしょ
適当にここでNothingすればいいやとか思ってるから問題がおきてしまう

664 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 11:35:23.69 ID:4eDRgxgoM.net]
>>602
Salesforce CLIを呼び出してCSV等に出力し、それを読み込めばいい
VBAから直接APIを呼ぶのは自前でパースしなきゃいけなくて面倒だぞ

665 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 12:59:23.02 ID:YOHlvasK0.net]
>>643
Set a = Nothing
のあとに
MsgBox (a Is Nothing)
とかやってみ

問題にしてるのはオブジェクト変数をNothingにできないことで
つまり
Set obj = Checkobj()
If obj Is Nothing Then
みたいなコードがバグるってことなんだが

>>648
インスタンスの解放とか問題にしてないが
破棄の予約ってなんなんだよ
Nothingの代入は単に参照カウンタを減らすだけだぞ
結果カウントゼロなら廃棄される
.Netじゃないし、VBAで
>システムが勝手に決めて、いつのまにか予測不可能なタイミングで破棄されてる
なんてことはないはず

666 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:35:16.03 ID:oJxqSb9ha.net]
>>654
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
> とかやってみ
>>644のリンク先にも書いてあるけどMsgBox にブレークポイントかけてウオッチウインドで見てみ
Nothing にできないことと、Nothing の時に参照されたら New されると言うのは違う

667 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:45:44.59 ID:YOHlvasK0.net]
>>655
ああ、そうだな
オブジェクト変数をNothingにできない

(VBAコードから)オブジェクト変数をNothingとして評価できない
に訂正しとくわ



668 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:49:11.35 ID:DZfi33jJd.net]
>>654
バグるんではなく自分でバグらせてるだけでしょ
Dimで変数を宣言する際にNewを付与するとヘルプのこちらの記載
「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの
新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を
割り当てる必要がなくなります。」
にある通り変数を参照する限りはNothingにすることはできない
(デバッグで変数を参照してしまっても同様)
変数がNothingか判定したいなら素直に宣言の際はNewを使わなければいいだけ
Newをどういうときに使うとコーディング上効果的かわからない、他人が理解

669 名前:ナきないかもしれないなら使わないほうがいい []
[ここ壊れてます]

670 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:53:26.54 ID:/B8eDHF6d.net]
>>656
評価って表現もなんかおかしくない?
Nothingになっていることを確認できない、とか

671 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 14:15:22.73 ID:YJRadFF90.net]
でもこれ、ちょっと怖いよね
Dimの宣言時にNewしてやると、Nothingにしたら次触るとき、インスタンスが設定されていなければ
勝手に新しいインスタンスを設定するなんて
知らなかったら分岐に Is Nothingとか使いそうだし、知ってたら知ってたでSet 〜 As New 〜の代わりに使って、知ってる人じゃなければ分からないような属人化コードわざと書いたり出来るってことだもんね。

.Netとかでも同じような挙動をするのかな?

672 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 14:49:39.05 ID:DZfi33jJd.net]
怖いもなにもヘルプに書いてあることを理解せずに伝えたりそれを聞きかじっただけでやるからでしょ
質問する側も答える側も一部分だけのやり取りしてるのを踏まえて会話しないと事故のもとだよ
まあ事故るのは質問する側だけなんで答える側はそこまで保証できないが

673 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:00:51.71 ID:5Hfxlu6fa.net]
>>657
> 「オブジェクト変数の宣言時に New を使用すると、その変数を最初に参照したときにオブジェクトの新しいインスタンスが作成されるようになり、Set ステートメントを使用してオブジェクト参照を割り当てる必要がなくなります。」

から

> 変数を参照する限りはNothingにすることはできない

と言うのは飛躍しすぎ

問題はそっちじゃなくて

> 「必ずオブジェクトが存在することが保証される (Nothing を設定してオブジェクトが破棄されたとしても、オブジェクト変数を再利用しようとすると、再作成される)」

の方な

ただ個人的には上記の文で「オブジェクトが破棄されたとして」のくだりは余計だと思う
複数から参照されてたらオブジェクト自体は破棄されないから

674 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:09:04.14 ID:DZfi33jJd.net]
Nothingしてもその後に”変数を参照した”らNothingが再作成されたインスタンスに変わるんだからできないと一緒じゃない?
それと変数とオブジェクトを一緒に考えてないか?
自分は
Dim A As Object
Dim B As Object
Set A = XXX
Set B = A
Set A = Nothing
この場合のAの話をしていてXXXで作成したインスタンスの話はしてないよ

675 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:12:01.06 ID:DZfi33jJd.net]
まあどうでもいい話だった無視してくれ
すまん

676 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:23:41.67 ID:YOHlvasK0.net]
>>657
元の話はなぜDimでNewしないって話だから
バグのもとだからやめといたほうが良いという、理由の可能性の一つを挙げてるだけだが

実際知っててもミスることはあるし、しらないとデバッグが困難だからな

677 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:30:09.53 ID:9zoeUatEa.net]
>>662
混同してるのはお前さんの方
Aは変数でオブジェクトじゃないぞ



678 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:31:19.17 ID:YOHlvasK0.net]
>>662
まあ、Nothingにできないは厳密には確かに違う。Nothing代入できるし
Nothingにならないって言うほうが正しいな

このコンテキストでその違いが重要か?とは思うが

679 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:54:16.92 ID:ffasCIjOa.net]
>>666
違いは重要じゃないけど
> Nothingにならないって言うほうが正しいな
と言う明らかな間違いを言い続けるのはどうかと思うぞ… ⇒ >>655

680 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:10:12.28 ID:OyTS9aq30.net]
列ではなく、選択した箇所だけを固定したいのですが出来ませんか?

681 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:32:44.42 ID:ZoTD6ZCz0.net]
>>666
違う
代入すればNothingになる
その次にアクセスすると、またそのタイミングで自動的にNewされる

682 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:52:31.36 ID:DZfi33jJd.net]
各自が想定してるコードが違うんだから言葉遊びにすぎないよ
自分のレスもいまいちだったかもしれんがNothingをセットして終了するならNothingかもしれないが
後続のコードにIs Nothingなり変数の参照があるならそれは結果的にNothingではなくなるのと一緒と自分は思ってるだけ
例に出して申し訳ないが
> Set a = Nothing
> のあとに
> MsgBox (a Is Nothing)
これとかね
自分なりの結論は宣言時にNewは使わないほうが無難

683 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:12:31.97 ID:YOHlvasK0.net]
>代入すればNothingになる
>その次にアクセスすると、またそのタイミングで自動的にNewされる
厳密にはその通り
そんなことは分かったうえで、それをコード上で確認できないから
Nothingにならない と表現したわけで、その表現が間違いらしいですわ

(VBAコードから)オブジェクト変数をNothingとして評価できない
すべての個所をそう読み替えといてくれ

飽きたし俺はこの話はもうこれで終わり

684 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:15:45.64 ID:YJRadFF90.net]
まぁ>>670の言う通り言葉遊びだよね
みんな実際の挙動は理解しての会話になってるみたいだし

685 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:19:18.21 ID:y+mxjJK80.net]
まあオレは今まで知らなかったけどな!

686 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:32:15.47 ID:/IcSX3Pk0.net]
>>644
おれ以外にもthom先生見てる人いたか

687 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 20:35:52.45 ID:TgcL8J/yM.net]
どう見ても最初はわかってなかったやろ
最後にやっと理解できたみたいだけど



688 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 21:25:13.63 ID:YV5lTWI/0.net]
人に優しく行きましょう
それは分かる人に与えられた特権なのです

689 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 05:40:49.56 ID:bXpTryOw0.net]
人生は優しくなるためにある

690 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:23:09.21 ID:0ps204vGM.net]
スマホ手打ちなので誤字等ありましたらすみませんがよろしくお願いします。

rangeを用いた範囲指定でcells(row,columns)の行、列の部分に端数切り上げで数式を入れたいと考えています。
vbaで roundupを用いる時はworksheetfunction.をつける必要があることをネットで知ったのですが、ページによって頭にapplication.をつけてるものとそうでないものが混在しました。有無によってどのような違いがあるのか教えてください。

691 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:47:30.52 ID:06EhkzBAd.net]
数式を入れるのかワークシート関数を使って値をいれたいのかよくわからないけど
後半の質問であればVBA上では動作に違いはないよ
「https://docs.microsoft.com/ja-jp/office/vba/api/excel.application(object)」の
「アクティブ セル (ActiveCell プロパティ) など、最も一般的なユーザーインターフェイス オブジェクトを返すプロパティとメソッドのほとんどは、Application オブジェクト修飾子を指定しないで使用できます。」
と書いてある通り
こういう質問する前にヘルプを見ると知りたい事や知っておいたいいことが書いてる場合もあるし怪しい回答の知識を覚えなくて済むから見る癖つけたほうがいいぞ

692 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:54:37.31 ID:6Q6BE8PxM.net]
>679
ありがとう、参考にします。

693 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 09:15:22.27 ID:p8/VPuFXr.net]
いえいえ

694 名前:デフォルトの名無しさん [2022/03/30(水) 10:25:12.15 ID:otm0Hfbh0.net]
実際に組んでみてうまく行かない場合に調べるとか質問とかしたらいいと思う

695 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 10:38:48.27 ID:xL2+oAob0.net]
ちょっと教えてください
複数のシートを一緒にスクロールして
常に同じ位置に同じ行列が表示させられるような移動方法ってありますか?

例)
シート1〜シート10までをグループ化して
シート1をスクロールして1000行目を頭に表示すると
残りのシート2〜シート10も同じように1000行目を表示している

よろしくお願いします

696 名前:デフォルトの名無しさん [2022/03/30(水) 14:07:54.57 ID:4QxrGADI0.net]
裸の王様がやってきた やってきた やってきたぞ

697 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:23:16.04 ID:QNA9H61R0.net]
>>683
いったんアクティブにしていいなら
Application.GotoとかWindow.ScrollIntoViewとかで表示位置は変えられるけど
まあ使い物にならない可能性が高いな

アクティブじゃないシートのスクロール位置を変える方法があるなら俺も知りたい

それかWindow10個作って同時にスクロールにするとか



698 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:31:25.53 ID:ljpoek3c0.net]
複数のシートのデータを纏めたシートを作ったらどうかな

699 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 19:32:55.87 ID:2JfZorGz0.net]
スクロールのイベントってないんか
クリックしたセルを同じにするマクロ
なんじゃこりゃ

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Sh.Name = "Sheet1" Then
Sheets("sheet2").Select
Sheets("sheet2").Cells(Target.Row, Target.Column).Select
Sheets("sheet3").Select
Sheets("sheet3").Cells(Target.Row, Target.Column).Select
Sheets("sheet1").Select
End If

End Sub

700 名前:デフォルトの名無しさん [2022/03/30(水) 19:47:16.20 ID:R9seM6Mc0.net]
馬鹿が考えた操作なんて実装しても、所詮馬鹿の馬鹿な発想でしかない

701 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:06:13.73 ID:wN+Ljz7f0.net]
>>687
フォーム内のスクロールバーはイベント取得できるぽい
そういうのでいいならフォーム内スクロールバーに従ってシートをスクロールさせることはできそう

もしくはシート1のスクロールを監視して自分でイベント発行するか

702 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:25:38.10 ID:N270RWsC0.net]
彼女の下のお口から出る糸を、シート(She糸)と呼びます

703 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:25:54.14 ID:2JfZorGz0.net]
>>689
逆にスクロールを実装すればよかったのね
下スクロールを実装したら期待通りの動きになったわ

Sub Macro4()
' Keyboard Shortcut: Ctrl+Shift+P
Windows("Book1 - 1").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 2").Activate
ActiveWindow.SmallScroll Down:=30
Windows("Book1 - 3").Activate
ActiveWindow.SmallScroll Down:=30
End Sub

704 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 04:24:20.35 ID:YoVJ22V0M.net]
糸を出す女ってスパイダーガールか

705 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 07:19:21.13 ID:fdMR9HVCM.net]
宗教的な話題になりそうだけど、If文で判定入れてそれ以外の場合は何もしないって処理の時、elseを省く?それとも何も処理をしないって明示するためにelseの中に何も書かない?

706 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:08:06.08 ID:AJ0kjIG/a.net]
俺は省く
逆に Select Case の Case Else は必ずつけて何もしなくていいことを明示するコメントを書いておく

707 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:13:36.66 ID:YZ/4IsUH0.net]
こういう書き方ってどうにかしてうまくまとめる方法はありますか?


if C=1 then
if B=1 then
if A=1 then
msgbox "メイン処理を実行します"
else
msgbox "A=1じゃなかったので実行しなかった"
else
msgbox "B=1じゃなかったので実行しなかった"
else
msgbox "C=1じゃなかったので実行しなかった"



708 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 08:33:32.40 ID:cX1o4aeta.net]
>>695
If C <> 1 Then
msgbox "C=1じゃなかったので実行しなかった"
Goto Skip
End If
If B <> 1 Then
msgbox "B=1じゃなかったので実行しなかった"
Goto Skip
End If
If A <> 1 Then
msgbox "A=1じゃなかったので実行しなかった"
Goto Skip
End If
msgbox "メイン処理を実行します"
Skip:

Goto 嫌なら Sub に入れて Return とか

709 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 09:19:19.95 ID:qbFmdfWP0.net]
>>695
ネスト深くなるとわかりにくい
処理は簡単な単位でまとめたほうがいい
実行する/しないは一つの単位(success/errorのように)としてまとめたほうがいい

拒否理由="なし"
if c<>1 then 拒否理由="cじゃない"
else if b<>1 then 拒否理由="bじゃない"
else if a<>1 then 拒否理由="aじゃない"

if 拒否理由="なし"
 メイン処理
else
msgbox 拒否理由&"ので実行しません"

710 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 19:02:13.39 ID:qNIRpAbL0.net]
わかりにくいってだけで正常に動作しているならコメントでも書いとけばいいんじゃね

711 名前:デフォルトの名無しさん mailto:sage [2022/04/01(金) 19:04:18.25 ID:iXF+QXI0M.net]
>>696
do loop 0でブレイク

712 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 10:46:13.39 ID:fjGlq1dk0.net]
>>697
おれもこんな感じだな
Elseifは好きじゃないからSelectCaseかなあ

713 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 12:32:39.80 ID:wbru5aYXa.net]
VBA の Select Case は Case 節に式が書けるから素直に

Select Case True
Case C <> 1
msgbox "C=1じゃなかったので実行しなかった"
Case B <> 1
msgbox "B=1じゃなかったので実行しなかった"
Case A <> 1
msgbox "A=1じゃなかったので実行しなかった"
Case Else
msgbox "メイン処理を実行します"
End Select

がわかりやすいかな

714 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 13:02:04.64 ID:ZSAOoecqp.net]
>>701
俺もこんな感じにするかな
C#とかと違って;で止められないけど
まぁそれはそれとして。

715 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 19:50:51.52 ID:xmwnc1Js0.net]
複数の条件が成り立つ場合の優先度とか気にせんと・・・

716 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 20:08:08.57 ID:rQp/oHNqa.net]
>>703
なんでドキュメント読まないの?

複数の Case 句の expressionlist 式に一致する場合は、最初に一致した句に続くステートメントのみが実行されます。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement

717 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 00:02:19.90 ID:ZgXClf4M0.net]
A=1かつB=1かつC=1だったらXが実行されるって言う事ではないのね
なんかややこしいね(´・ω・`)



718 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 03:01:36.86 ID:J74pUyNp0.net]
俺は中身が1行の時はCaseを1行にまとめる派
Sub Macro()
  Select Case True
    Case C <> 1: errmsg ("C")
    Case B <> 1: errmsg ("B")
    Case A <> 1: errmsg ("A")
    Case Else: MsgBox "メイン処理を実行します"
  End Select
End Sub

Sub errmsg(s$)
  MsgBox s & "=1じゃなかったので実行しなかった"
End Sub

719 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 06:50:49.06 ID:o4u0MtXma.net]
>>706
errmsg の呼出時の括弧は要らないのでは?

720 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 07:52:44.68 ID:6Vj/pyuu0.net]
>>706
こういうふうにはしないほうが良い?

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C"
    Case B <> 1: msg ="B"
    Case A <> 1: msg ="A"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)

721 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 08:39:48.32 ID:D1zTFGCZM.net]
そうやって本筋じゃない方へ話題は逸れていく

722 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:01:58.41 ID:Uf1/B9Ep0.net]
Subの場合は
括弧を付けるならCallも付ける
Callを付けないなら括弧も付けない
それだけ

723 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:05:23.70 ID:r53Jbhkva.net]
>>708
> こういうふうにはしないほうが良い?
うん、それだと C = 2 でテストしたら単に C って表示されるだけだし

724 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 09:06:11.26 ID:6Vj/pyuu0.net]
>>709
今回はどんどん話を膨らませていいよ

725 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:18:01.32 ID:spDayutJd.net]
僕が考えた最高のコード
ってやつだろこんな話題にくいつくのもはずいわ

726 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:39:12.57 ID:6Vj/pyuu0.net]
>>708は間違いね
こういう風に、メッセージの中だけ変数に入れて最後で表示させるってのはやめたほうがいいでしょうか

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C=1じゃなかったので実行しなかった"
    Case B <> 1: msg ="B=1じゃなかったので実行しなかった"
    Case A <> 1: msg ="A=1じゃなかったので実行しなかった"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)

727 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 10:49:41.47 ID:LxaPNz9fM.net]
好きにすればいい



728 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 12:48:35.67 ID:AxYcslms0.net]
>>714
実行しなかったって表示するのに実行しそうだな

729 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 13:26:31.81 ID:mz7mxvwZp.net]
しねーよハゲ

730 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 15:21:18.52 ID:4YOQBH220.net]
お前ら頑張ってるけど
メッセージなんかただの処理サンプルだろうから
>>701が採用されそうだけどね

731 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 15:52:40.85 ID:vYlFEoJTd.net]
実際の仕様でもなんでもない話に採用もクソもないのでは
好きにすればいいはなし

732 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:28:53.57 ID:m8vuVm8ra.net]
話題に食いつくのははずいのに批判だけはするんだな
てか、批判しかできないのかなw

733 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:42:03.95 ID:6Vj/pyuu0.net]


734 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 23:43:32.11 ID:4aElhsU0a.net]
>>714
最高のコード

735 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 20:06:13.11 ID:k57kmbe60.net]
>>722
End Sub の下に msgbox(msg) があるのに?

736 名前:デフォルトの名無しさん [2022/04/07(木) 20:57:01.15 ID:WZu7hIyw0.net]
やっと書き込めた。
BB2Cが死んでJane Stileとかいうアプリで書き込んでるけど、VBAスレもその煽りかめっきり書き込み減ってるね。

737 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 22:52:18.94 ID:shKfmndDa.net]
>>723
最(もお茶が)高(く噴き出た)のコード



738 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:32:33.40 ID:P5V0Axif0.net]
ハイパーリンクで、他のファイルを開こうとすると、警告ダイアログが出ますが、
(「ファイルには、ウイルスやコンピューターに問題を…」)
非表示にできますか?

レジストリでDisableHyperlinkWarningをやっても、ダメでした…。

739 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:48:16.01 ID:O75PAQWK0.net]
ユーザーフォームに設置したボタンをクリックすると
Private Sub 〜〜〜_Clickのイベントプロシージャが追加されますが、
このコードの追加位置はどういう基準で決まっていますか?

すぐ隣のボタンのClickの近くに挿入されることもあれば、
結構離れた位置に挿入されることもあります。

740 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 18:32:41.81 ID:DozpoMh4a.net]
質問は一人一つまで。

741 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:07:30.71 ID:aNhRPKRk0.net]
>>726
ウイルスでも作っているの?

742 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:44:29.30 ID:p3Omju050.net]
エクセルVBAでウイルスを作ることはできますか?
エクセルVBAでAIを作ることはできますか?

743 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 19:49:56.82 ID:0/Kcf5P10.net]
>>726
試してないから出来るか分からんけどディスプレイアラートは?

744 名前:デフォルトの名無しさん [2022/04/08(金) 19:59:37.27 ID:iHtexTHZ0.net]
>>730
直クライアントだからな
余裕で出来る

745 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:10:13.83 ID:cwm3b4Q1d.net]
>>730
はい
はい

746 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:43:11.43 ID:p3Omju050.net]
>>732
でもおまえウイルスの作り方わからないじゃん

747 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 20:59:12.69 ID:AMkeYZ900.net]
ウィルスの定義は「操作する人が意図しない動作を起こすプログラム」
だから空白のボタン押すと背景の色が変わるとかそんなんでもウィルスです



748 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 21:53:49.35 ID:iHtexTHZ0.net]
やっとBB2Cが使えるようになった
>>734
煽ってもダメ
ウイルスなんて作らないし
作り方だって載せるつもりはないよ

749 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 22:14:19.86 ID:AMkeYZ900.net]
>>736
いやもう作り方載せたって>>735

750 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 22:18:44.47 ID:7fG2FYL40.net]
ヤンキー・ドゥードルが懐かしい

751 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 00:48:37.33 ID:C63TJhml0.net]
AIの定義が明確に定まってないので自己学習して勝手に洗練されていくものもAIだしただのマクロもAI

752 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 00:55:30.60 ID:tyw5ZPAK0.net]
AIは作るものじゃない
育むものなんだよ

753 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 02:28:28.01 ID:FQQX8rtBa.net]
>>736
もうすでにウイルスのソースコード載ってますが?
>>714

754 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 06:04:10.90 ID:+bGajSMm0.net]
任意の列が左端に来るように水平スクロールする方法ってある?
Application.Gotoで左端に寄せてSmallScrollで上下位置を調整してるけど完全な水平スクロールにはならないんだよね

755 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 07:34:48.36 ID:Dec5MFVZ0.net]
With ActiveWindow
.ScrollRow = x
.ScrollColumn = y
End With

756 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 08:12:43.36 ID:+bGajSMm0.net]
>>743
それも試したけど、アクティブセルが変わると数値が変わらない?

757 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 08:52:12.11 ID:+bGajSMm0.net]
任意の列とアクティブセルの列の差を求めればScrollRowで行けるかな?
今度試してみよう



758 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 11:14:24.15 ID:Mfv2lAJId.net]
Sub World()
Dim Abe As Virus
Set Abe = New prime minister
Abe.coin.End(xldown)
Abe.tax.End(xlup)
Abe.wing.End(xlright)
End World

759 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 12:54:27.64 ID:FQQX8rtBa.net]
で、誰かがズームしたりページレイアウト変えたりして、
トラブルの元になると。
ウィンドウ系はいじらない方がいいと
職場のおじいちゃんが言ってた。

760 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:45:19.95 ID:6rDUdJJw0.net]
アース、ファイア、ウォータ系の属性のほうがいいかもね

761 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 14:39:59.55 ID:FQQX8rtBa.net]
Excel VBA の Window 関連のオブジェクトって、船に刻して剣を求むって感じ
走っている電車の中から、指で窓ガラスに風景を描くみたいな

762 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 15:26:28.03 ID:+bGajSMm0.net]
さっぱり例えが分からんw

763 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 16:04:42.29 ID:2h0/Yyo40.net]
詩的すぎるだろw

764 名前:デフォルトの名無しさん [2022/04/09(土) 18:41:50.44 ID:8cH1hwr70.net]
>>749
なるほど納得。
納豆食う。

765 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 20:23:31.13 ID:8/Ft6Y7L0.net]
日本人だけど意味がさっぱりわからんw

766 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 22:16:01.68 ID:XcpxlUbda.net]
ごめん失敗したテヘ

767 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 01:02:21.87 ID:tD6svEJl0.net]
ヘッドレスChromeをseleniumやWebdriverなしでどうにかなりませんか?



768 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 19:56:53.98 ID:anoG1hsda.net]
>>755
UiPathおすすめ

769 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 21:59:21.11 ID:Kyp6sDnX0.net]
オブジェクトの代入を同一プロジェクトで使いまわすことはできるでしょうか?

Public ws1 as worksheet
Module1
Sub test1()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A2") = "Test2"
End Sub

これを下記のようにできないかな、ということです。

Public ws1 as worksheet
Set ws1 = Worksheets("Sheet1")

Module1
Sub test1()
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
ws1.Range("A2") = "Test2"
End Sub

770 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 22:26:56.33 ID:p2QF/trT0.net]
なにがしたいのか

771 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 22:56:21.06 ID:7xr/cYmKd.net]
オブジェクトは無理でしょ
Funtionで対応すれば良い

最もそうしない方が良いからデフォで出来ないようになってることは考慮すべきだと思う

772 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:25:19.91 ID:9dLPe5470.net]


773 名前:?そもそもワークシートってオブジェクト化されてるんだからわざわざ変数にセットする必要なくない?
対象のシートがコードを書いているファイルにあるなら
Sheet1.Range("A1").Value = "Test1"
で良いでしょ?
[]
[ここ壊れてます]

774 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:56:27.01 ID:Kyp6sDnX0.net]
簡略化するためにThisworkbookを省略して書きましたが、実際には
マクロ動作中にほかのブックを触っても大丈夫且つコードがすっきり
するようにSet ws1 = Thisworkbook.Worksheets("Sheet1")のように
しています

少し時間ができたので増築増築でややこしくなったコードを整理している
最中で、複数のプロシージャで使う固定のシートはまとめて変数にセットして
おこうかと思ったのですがFunctionで調べてみます、ありがとうございます

775 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 23:58:43.07 ID:amT3mnzR0.net]
変数を使いまわす(というか広域で使う)のは普通にできる
モジュールレベルでPublic変数定義するだけ
なんならモジュール名で修飾してもいい

ただ、変数の寿命が管理しにくいから、
中身がセットされてないとか、いつの間にか中身が消えてるとかいうことになるかもなw

776 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 00:23:20.44 ID:ccOkbRo70.net]
シートをオブジェクト名で指定すればどのブックを触っていようがそのコードが書いてあるブックから参照すると思うのだけど
>>761 がやろうとしてる事って他のブックのシートを変数に収納したい場合しか使わなくないか?

777 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 02:00:50.12 ID:vEgugssg0.net]
>>763
一部のメソッドでオブジェクト名を省略できないのがあるじゃん
自分がちゃんと理解してないのが原因なのはわかってるけど、構文とかデフォルトのオブジェクトとかいちいち覚えるのが面倒くさいんだわ



778 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 06:30:21.52 ID:j+U2fOIu0.net]
やるならこうか?
init()に色々初期化みたいなものをまとめて、毎回呼び出す

Public ws1

Sub init()
Set ws1 = Worksheets("sheet1")
End Sub

Sub foo()
Call init
Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
Cells(2, 2) = 2
End Sub

779 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 06:46:39.08 ID:da5RcI7d0.net]
汎用性と独立性を確保するなら引数でシートを渡せ

780 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:15:19.69 ID:t+9U/8lg0.net]
>>757
初心者がかち当たるあるある疑問だよね。
最初は>>762の言う方法でやってみればいいと思うよ。
もう少しやり込んでくればデバッグし易くするためにモジュールスコープレベルのPrivateな変数をPublicな関数やプロパティでやり取りするようになるんだけどね。

781 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:20:31.49 ID:j+U2fOIu0.net]
こういうイメージ?
よく考えたらpublicにする必要性が全くない

Sub init()
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
Set ws3 = Worksheets("sheet3")
Set ws4 = Worksheets("sheet4")

End Sub

Sub foo()
Call init
ws1.Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
ws2.Cells(2, 2) = 2
End Sub

782 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:21:37.35 ID:j+U2fOIu0.net]
と思ったらpublicいるわスコープ他の言語と間違えたわ

783 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 17:42:54.51 ID:oSnOjvyr0.net]
Recordset.openでselect文を実行するとエラーになるけどツールでログに出した物を実行してもエラーにならない時って何が原因?
ダブルクォートは含まれてない
あとはイミディエイトウィンドウに出てくるsqlが変なとこで改行されてるけど関係ないよね?

784 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 17:45:16.76 ID:pq/BAZJoM.net]
シラネーヨ

785 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:22:20.07 ID:D2BP6h+A0.net]
742で書いた完全な水平スクロールできたわ

786 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:25:18.42 ID:D2BP6h+A0.net]
>>757
Sheet1モジュールに書くだけでは?

787 名前:デフォルトの名無しさん (ワッチョイ c6da-EhK1) mailto:sage [2022/04/12(火) 19:48:28 ID:hYDOb6070.net]
>>770
それだけで答えられるほどエスパーじゃない



788 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:58:04.86 ID:t+9U/8lg0.net]
>>770
まず出力されているエラーは何なの?

789 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 20:52:44.19 ID:oSnOjvyr0.net]
ora 00933
sqlコマンドが正しく終了されていません
が出るんだよね

790 名前:デフォルトの名無しさん (ワッチョイ e2da-vtdv) mailto:sage [2022/04/12(火) 21:13:36 ID:cLFsXNmb0.net]
そのままのエラー文でググれば一発で回答出てくるぢゃねーか

791 名前:デフォルトの名無しさん (ワッチョイ e24f-EtAN) mailto:sage [2022/04/12(火) 21:30:37 ID:t+9U/8lg0.net]
>>776
SQLのケツに;付けろってよ

792 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 01:24:31.19 ID:idY8HIbz0.net]
757です、いろいろご意見ありがとうございます
その後考えた結果、シートのオブジェクト名を変数として代入しようとした名前に変えればいいんじゃないかと思いついたんですが問題ないでしょうか

793 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 03:33:56.70 ID:+aMOkW0p0.net]
>>779
シチュエーションにもよるかな。
シート名を変えられてもそのシートを使う前提であればそれでいいんじゃないかな。

その場合、
自ブックのシートであれば
Dim targetSheet As Worksheet
Set targetSeet = 変更後のシートオブジェクト名
みたいに使えるし、

他ブックのシートを扱う場合は
Dim targetSheet As Worksheet
Set targetSheet = ブックオブジェクト.(シートオブジェクト.Name)
みたいに書けば設定出来る。

もっとも、後者の書き方で前者を賄えるから後者だけ関数化してそれを使い回してもいいけどね。

794 名前:デフォルトの名無しさん (ワッチョイ 7b68-xb3m) mailto:sage [2022/04/13(水) 07:03:06 ID:CoVp5Ukt0.net]
>>779
オブジェクト名はやめたほうが良い。あんまり意味が無い
やるなら、シートの内容を変数名にする

ローマ字
set shain_master = sheet("社員マスター")

日本語許容するなら
set 社員マスタ = sheet("社員マスター")

なおベストは英語

795 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:35:12.98 ID:6wqio091M.net]
会社員を英語でなんと言うかがわからんわ

worker(労働者)やemployee(被雇用者)じゃニュアンスが違うしー
辞書なしですぐ出てくるレベルのやつはVBAなんかやってないやろ、という偏見

796 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:37:38.41 ID:CoVp5Ukt0.net]
staffでええやろ

797 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:50:17.55 ID:+aMOkW0p0.net]
>>782
会社員だから
companyEmployeeでいいんじゃね?



798 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:56:48.50 ID:HWn/7Hddd.net]
Google翻訳だとmember
んー、なんかしっくり来ない

799 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 07:59:18.64 ID:PsKYJxH90.net]
staffは関係者ってイメージ

800 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 08:15:50.97 ID:1kKv9jFRd.net]
staffという単語はcompanyと同義で集団に対して使うって日本人は意外とわかってない

801 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 08:30:55.20 ID:CoVp5Ukt0.net]
employee以外ないだろう

802 名前:デフォルトの名無しさん (スプッッ Sd22-eTSu) mailto:sage [2022/04/13(水) 08:56:08 ID:wBIIYhTid.net]
会社員という表現は英語では難しい
大人しく syachiku か Karoushi_Man にしとけ

803 名前:デフォルトの名無しさん (ブーイモ MM02-CB6w) [2022/04/13(水) 09:04:23 ID:YJgAVhDkM.net]
業務用語の変数は日本語で業務用語そのものを使ってる
中途半端な英語だと誤解しやすいし、ローマ字は読みづらい

804 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:04:01.74 ID:NHlBNLdW0.net]
Accessならお馴染みの「Northwind」のテーブルでは Employee List とか Employee Details
概念としての会社員ではなく、自社の社員リストなので「従業員・使用人」の意で
ま、そのファイルを誰が見る?誰が使う?どこに出す?で適宜に 恥かかない程度で 何だっていいんだろうけれども

805 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:09:02.25 ID:93SXwTUS0.net]
リーマンが和製英語からすでに世界に浸透してる

806 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:28:39.30 ID:Wmi1ga+iM.net]
ワークマン

807 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 11:06:56.09 ID:BozzLOUH0.net]
ワークマンは流行りよ



808 名前:デフォルトの名無しさん (スップ Sd22-2p/j) [2022/04/13(水) 12:58:38 ID:7IxClg8bd.net]
緊急です!

マクロの入ったボタンが図だかイラストになってしまい困ってます。
直し方のアドバイスお願いします。

809 名前:デフォルトの名無しさん (ワッチョイ 6711-LXkm) mailto:sage [2022/04/13(水) 13:07:23 ID:zDnWB3YN0.net]
>>795
https://mevius.5ch.net/test/read.cgi/bsoft/1647570025/342

810 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 13:09:58.08 ID:Wntan1Ql0.net]
こういうの30分一万円無保証とかで稼げないかな

811 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 13:57:45.74 ID:+aMOkW0p0.net]
>>795
もうその図からマクロ実行させちゃえばいいじゃん

812 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 14:00:17.02 ID:uBZa/q6E0.net]
■質問
サウンド再生は何通りかあるけど、
一番遅延が小さい方法は何ですか?

winmmのPlaySound ?

813 名前:デフォルトの名無しさん [2022/04/13(水) 14:08:46.36 ID:6qNApkxLM.net]
>>798
多分それ自体わからんのちゃう?
Excel作った本人とかじゃなく事務員とかだろうし

814 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 15:42:21.02 ID:7cmYTCQn0.net]
3時間くらいかけてVBA作って、合間に別のエクセルファイル開いて、閉じようとしたら
「変更を保存しますか?」って出たので、保存せずに閉じたら。
VBAを作った方のファイルまで変更保存せずに閉じられてしまったーーー!!
どうにかならない?

815 名前:デフォルトの名無しさん [2022/04/13(水) 15:45:55.22 ID:7IxClg8bd.net]
とりあえず顧客に頭を下げてFAXでリスト送って頂いたのでしばらくはなんとかなりそうですがエクセルファイル自体のトラブルについては全員サッパリ意味不明なためどうしようも無さそうです…
(エクセルファイル作った方自身が既に会社にいないのでどうしようもない)

とりあえずエクセルファイルがどうする事もできないため私と社長ら数名は土日も休日出勤して1月から4月までの記録も全部紙ベースの資料に手書きで書き写す事になりそうです

しばらくは紙とペンでのアナログなやり方で回すしかないですがアドバイスくださった方ありがとうございました

816 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 17:20:07.59 ID:SMVlXKyy0.net]
>>801
3時間くらいなら今からやれよ

817 名前:デフォルトの名無しさん [2022/04/13(水) 17:28:47.62 ID:MldHjaMW0.net]
>>802
あちこちマルチで書いて馬鹿かよ
どこかに金を出して頼めよ
ゆとりの馬鹿はこれだから



818 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 17:42:34.06 ID:Wmi1ga+iM.net]
>>801
該当のファイルを開いた状態でファイルタブのどこかにある自動保存云々が書いてある場所を探せ
運が良ければ一時ファイルが残ってる
残ってなけりゃ諦めろ
次からは動作確認をする前に保存する癖をつけるようにするんだな

819 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 19:21:42.96 ID:9TA12m3K0.net]
>>801
これがあるからコーティング中はOneDriveに置いとる

820 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 21:38:12.45 ID:wBIIYhTid.net]
>>805
何で誰でも言える極々普通のアドバイスをこんなに上から目線で言えるんだろう

821 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 21:47:36.66 ID:MBul3VW80.net]
便所の落書きにいちいち目くじら立てて突っ掛かるなよ
より一層老けて見えるぞ

822 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 22:55:33.89 ID:uonj2wEf0.net]
全国10エリアのそれぞれに、2016年度から6か年度分の「各年度集計用book」があり、
中身は1時間値と月合計を集計する等のクエリーが17あって、
これをsheet上のクエリーリストを基に
For Nextで順次更新・上書き保存するVBAを仕込んであります。

これとは別に、各エリアごとにやはりbookのフルパスリストを基に
For Nextで「各年度集計用book」を順次開いて、
中のVBAを実行するよう仕込んだ「各エリア一括更新book」を作りました。
(今さら2016年度を再集計するのは、たまにシレーッと修正が訴求修正が入るため)

これまで10ヶ月間ほどの月次更新では問題もなく動いてきたのですが、今月の更新で
・sheet名とクエリー名によるクエリー更新のステップでデバックエラーで止まった
・2つ目2017年度あたりのbookをVBAで開いたと思ったら、Excelごと落ちた
となり、不安定になりました。

モジュールごと再構成たり、「各年度用集計book」クエリー計算を簡略化して17ステップに削減したりして、
・タスクマネージャーでは動作中のメモリーは最大10GB/32GBくらい、CPU使用率は最大60%弱
・1つの「各年度集計用book」の所要時間に30秒程度
まで軽量化したのですが、今後もbook数が増えることを考えると
何か工夫のしどころはないものかと。

自分で気になっているのは、6か年度分のbook更新がどうにか上手くいっても、
「各エリア一括更新book」のプロジェクトに、
済んだはずの「各年度集計用book」の情報が残っていること。
https://i.imgur.com/BvkH6sr.png
よく分からないけれど、VBAが扱えるインスタンス数を超過しているのか?
これが残っていて良いのか、よくわかりません。

・Set wb = Workbooks.Open で開いて
・wb.Close SaveChanges:=True で上書き保存して閉じているのですが、
・For Next内で済んだ変数はできる限りNothingで開放
していますが、改善の余地はありますか?

823 名前:809 mailto:sage [2022/04/13(水) 23:53:53.55 ID:uonj2wEf0.net]
>>809 タイポ訂正
誤) 訴求修正
正) 遡及修正

824 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 08:48:02.28 ID:jf4kHNax0.net]
>>809

825 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 09:46:20.53 ID:EGNxXvqd0.net]
>>809
マクロを1つの専用ブックにまとめてみたら

826 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 13:25:49.47 ID:E7ePXpuT0.net]
VBAで他ブックのプロシージャを実行したいんだけど、実行まちをなくすことてできる?
Application.Run "Book2!Test2"
を実行したあと、"Book2!Test2"の処理終了を待たずに次の行に移りたいんだが。

827 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 13:53:36.44 ID:TZzbtw0W0.net]
非同期は無理
試してないけど、別のApplicationインスタンスを作成して
そちらでファイルを読み込んで実行とか



828 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 18:58:30.99 ID:RElcaA4D0.net]
メソッドを使い回したいときはクラスを別のクラスに参照渡ししてるんだけど、これってVBAに継承があれば機能的に処理できるのか

829 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 19:03:41.33 ID:sxqTZKvqM.net]
クラスのメンバーに他のクラスを入れるのがマイルド

830 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 19:25:43.40 ID:RElcaA4D0.net]
いいね
それ試してみよう

831 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 20:26:12.03 ID:VI/N1Akx0.net]
>>816
継承を委譲で置き換える、というだけですね…

832 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 21:25:22.08 ID:YCtpuDrNx.net]
参照設定なしでエクセルからアクセスファイルの操作をしようとしているのですが
フィールド定義の構文エラーが出ます。
テーブルの登録数を減らすと通りますが
上限か何かに引っかかっているのでしょうか?

Sub Test()

Dim CN As Object

Set CN = CreateObject("ADODB.Connection")
CN.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" & "C:\Users\Downloads\データ.accdb"
CN.Execute "CREATE TABLE TBL(管理 INT,日付 DATE,番号 INT,内容 MEMO,担当 MEMO,OrderTeam MEMO,Place MEMO,Floor MEMO,GuestNum INT,種別 MEMO,物品 MEMO,対象 MEMO,状態 MEMO,時間1 MEMO,時間2 MEMO,Note MEMO,Total MEMO);"
CN.Close

MsgBox "作成しました。"

End Sub

833 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 21:40:59.88 ID:zMqJUzcEa.net]
MsgBox は、End Sub の外に出して下さい。
このスレの流れ的に。

834 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 22:31:20.84 ID:Ep0kCh050.net]
フィールド名 DATE は?  予約語では?
他には、day、month、table、text、user、when、where、year、zone とかも

835 名前:デフォルトの名無しさん (ワッチョイ e2da-EhK1) mailto:sage [2022/04/14(木) 22:55:38 ID:Ep0kCh050.net]
すまん 読み間違いだった MEMOが多いような気がするが、それも多分外してるな すまん 居ないことにしといてくれ

836 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 23:23:47.63 ID:fL/YN0Wd0.net]
予約後はNote
[]で括れ

837 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 23:41:44.78 ID:kOhvUD5R0.net]




838 名前:解決しました。
感謝です!
[]
[ここ壊れてます]

839 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 14:24:02.27 ID:TsNK8La+0.net]
>>816
クラスになじめなかったくせに

840 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 15:02:32.60 ID:m9CVWFGZ0.net]
う、うるさい!

841 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:04:25.26 ID:g0AA3ay0p.net]
無理してクラス使わんでもええんやで

842 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:12:12.08 ID:94XVUrLP0.net]
保健室でいいってことか

843 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 10:20:43.39 ID:Xjbe7mxod.net]
特別クラスにさえ入れてもらえないのk

844 名前:デフォルトの名無しさん (ワッチョイ 17da-UOua) mailto:sage [2022/04/16(土) 14:51:07 ID:gJCOre2S0.net]
今は特殊学級は廃止されつつあると聞いたわ
差別に繋がるからだとか

845 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/16(土) 14:55:23 ID:pYTE49690.net]
>>830
それな

・ひまわり学級導入
 差別だから廃止しろ!

・ひまわり学級撤廃
 障がい者と一緒に授業できるわけねーだろ!分けろ!

これを5年ぐらいの周期でず〜〜〜っと繰り返してる。少なくともここ30年はそう

846 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 15:07:04.56 ID:rh08QZl8a.net]
1年目 ひまわり学級導入
6年目 ひまわり学級撤廃
11年目 ひまわり学級導入
16年目 ひまわり学級撤廃
21年目 ひまわり学級導入
26年目 ひまわり学級撤廃

30年目、ひまわり学級は撤廃された状態

847 名前:デフォルトの名無しさん (ワッチョイ d7da-dJ8g) mailto:sage [2022/04/16(土) 17:39:51 ID:aIa1oxEK0.net]
コールバイネームしたいから無理にクラス使うというのはある。



848 名前:デフォルトの名無しさん (ワッチョイ 17da-UOua) mailto:sage [2022/04/16(土) 18:34:28 ID:gJCOre2S0.net]
自分が通っていた学校の特殊学級は8組て名称だった
6組まではノーマルで何故か7組が無くて8組が特殊だった。

849 名前:デフォルトの名無しさん mailto:sage [2022/04/16(土) 18:39:26.14 ID:vqf9SIAK0.net]
>>833
何故無理にCallbyName使う必要があるの?
標準モジュールなら普通にApplication.Runじゃダメなの?

850 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 02:09:30.35 ID:BVP+DOJH0.net]
>>835
コールバックのやり方調べた時に、
何か忘れたけど、他は面倒な制約があって、
コールバイネームしか使わなくなった。

851 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 03:28:38.26 ID:N2omx0Taa.net]
たまーに出てくるオブジェクト指向の話。
もうオブジェクト指向なんて忘れたは。

852 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 07:38:47.19 ID:X2S+9pHC0.net]
ワイのコードは素人指向

853 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 09:54:53.72 ID:c23oRZKe0.net]
>>837
それでも知らんうちに使ってるんやで
使ってる奴に意識させないのがオブジェクト指向

854 名前:デフォルトの名無しさん [2022/04/17(日) 10:13:47.49 ID:a3I3T2VGM.net]
excel vbaではオブジェクトを利用したプログラミングにはなるけど、
それだけでオブジェクト指向だとは言えないな

855 名前:デフォルトの名無しさん mailto:sage [2022/04/17(日) 10:56:37.84 ID:acUYvJMnd.net]
玄人志向が玄人向けだったのは最初だけ

856 名前:デフォルトの名無しさん [2022/04/18(月) 22:09:45.73 ID:dtBLR+IO0.net]
どなたか相談に乗っていただきたいです。
現在、大学の講義で使用するため関数を作成しているのですが、最後に関数に戻り値を入れる際に「代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなけれななりません。」
とコンパイルエラーが出てしまいます。このエラーはどのように解決したらよいでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:14:18.56 ID:5XyRTXLN0.net]
コード見ないとちょっときつい



858 名前:デフォルトの名無しさん [2022/04/18(月) 22:20:21.18 ID:JAMU3YD50.net]
コード作成お願いします!

2つのcsvがあってどちらも1列目に主キーがあります。
B:15列目の対応するキーの値を
A:3列目に代入
したいです。

できますかね?

859 名前:デフォルトの名無しさん [2022/04/18(月) 22:25:33.62 ID:dtBLR+IO0.net]
Sub TEST1()
Dim Hight As Double, Time As Double
Hight = 0.4
Time = 2#
MsgBox WaveLength(Hight, Time)
End Sub

Function WaveLength(Hight, Time) As Double

Dim G As Double, PAI As Double
Dim WL0 As Double, WL1 As Double, WL2 As Double

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time * Time / (2# * PAI)
WL1 = WL0

Do While ((WL2 - WL1) / WL1) >= 0.001
WL2 = WL0 * Worksheet.Tanh((2) * PAI * Hight / WL1)
If ((WL2 - WL1) / WL1) < 0.001 Then Exit Do
WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength() = WL2


End Function

860 名前:デフォルトの名無しさん [2022/04/18(月) 22:26:31.08 ID:dtBLR+IO0.net]
>>845
こういった感じです

861 名前:デフォルトの名無しさん [2022/04/18(月) 22:27:22.86 ID:dtBLR+IO0.net]
VBA自体初めてなので何からしたらいいのかわかっていない状況です。

862 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/18(月) 22:30:08 ID:5XyRTXLN0.net]
>>845
functionの返り値使いたい時はfunction名に代入すればok。カッコは不要

Sub TEST1()
MsgBox WaveLength(Hight, Time)
End Sub

Function WaveLength(Hight, Time) As Double
WaveLength = 5
End Function

863 名前:デフォルトの名無しさん [2022/04/18(月) 22:41:26.28 ID:dtBLR+IO0.net]
>>848
できました。ありがとうございます。
すみません、もう少し相談させていただいてもよろしいですか?
ループさせる際に値を変化させてDoにもどすことはできますか?

864 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:44:42.92 ID:kMWXV8yj0.net]
>>847
本筋と関係ない話だけど、HightとTimeは変数名に使わない方がいいよ
同じ名前の関数が既に存在するからトラブルの原因になる
別の単語か略語を考えて

865 名前:デフォルトの名無しさん [2022/04/18(月) 22:46:49.95 ID:dtBLR+IO0.net]
>>850
小文字一文字とかでも大丈夫ですか?

866 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:48:03.57 ID:tZvgKjwbd.net]
それが出来るのがFunctionの良いところよ
戻り値は配列とかに入れておけばok

867 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 22:54:56.92 ID:kMWXV8yj0.net]
>>851
1文字でも動くけど、誰が見ても意味のわかる言葉にするのがマナー
どうしても別の単語を決められなかったら、Height1とかTime1とかにしとけばいい
1文字にするよりはマシ



868 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:00:04.07 ID:5XyRTXLN0.net]
マナーってなんだよw
あとで自分が見て分からなくなるのが問題
赤の他人が見てもわかるような名前にしておくと、自分のためになる

869 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:00:47.59 ID:5XyRTXLN0.net]
>>849
>ループさせる際に値を変化させてDoにもどすことはできますか?
言ってる意味がよくわからんかった

870 名前:デフォルトの名無しさん [2022/04/18(月) 23:01:50.92 ID:dtBLR+IO0.net]
とりあえず、できました。
Sub TEST1()
Dim hight1 As Double, Time1 As Double
hight1 = 0.4
Time1 = 2#
MsgBox WaveLength(hight1, Time1)
End Sub

Function WaveLength(hight1, Time1) As Double

Dim G As Double, PAI As Double
Dim WL0 As Double, WL1 As Double, WL2 As Double

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0

Do While ((WL2 - WL1) / WL1) >= 0.001
WL2 = WL0 * Worksheet.Tanh((2) * PAI * hight1 / WL1)
WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength = WL2

End Function

871 名前:デフォルトの名無しさん [2022/04/18(月) 23:03:04.12 ID:dtBLR+IO0.net]
ただ、まちがっているみたいです。

872 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:03:10.61 ID:wKhqv1yX0.net]
>>850
Hight なんていう関数あったっけ?

873 名前:デフォルトの名無しさん [2022/04/18(月) 23:09:31.78 ID:dtBLR+IO0.net]
Doの中でWL2=WL0*tanh(2*PAI*H/WL1)を実行して、((WL2-WL1)/WL1)の絶対値が0.001より小さい場合には関数にWL2を代入して、0.001より大きい場合にはWL1=0.5*(WL1+WL2))と変換して再度Doを行うという繰り返しです。

874 名前:デフォルトの名無しさん [2022/04/18(月) 23:13:08.37 ID:dtBLR+IO0.net]
すみません、わかりにくいですね。
WL1からなる計算式で求められるWL2とWL1の関係が条件に合わない場合、WL1をWL1とWL2の平均をとって再度WL2を求めたいです。

875 名前:デフォルトの名無しさん mailto:sage [2022/04/18(月) 23:55:22.83 ID:6SbGdBJw0.net]
Do
WL2 = WL0 * Worksheet.Tanh((2) * PAI * hight1 / WL1)
If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do

WL1 = 0.5 * (WL1 + WL2)
Loop

876 名前:デフォルトの名無しさん [2022/04/19(火) 05:01:48.08 ID:dRTEe6m5a.net]
どうでもいいが GやPAIは定数として関数の外にだす方が好き

877 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 06:39:40.35 ID:UDMLP6tq0.net]
>>858
cellsのプロパティにある
文脈的に予約後ってコトぐらいwかるだろ



878 名前:デフォルトの名無しさん (ワッチョイ 9f01-0UVf) mailto:sage [2022/04/19(火) 07:20:27 ID:KrqnU+fb0.net]
>>863
Cells w
それを言うなら Range だし、Range にあるのは Height な
そもそも単なるプロパティ名で関数でも

879 名前:予約後でもないし []
[ここ壊れてます]

880 名前:デフォルトの名無しさん (ワッチョイ b768-fNw1) mailto:sage [2022/04/19(火) 07:25:56 ID:UDMLP6tq0.net]
よく見たらhightかよクソがw

881 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 07:48:45.10 ID:muVDZfH30.net]
>>860
ざっくり見た感じだけなので詳しく分からないけどその計算式って正しい?
その計算式の内容と判定条件だと初期値の値によっては計算が収束せずに振動を繰り返すことになるので
ループから脱出できなくなる気がする

882 名前:デフォルトの名無しさん (ワッチョイ bf14-4qoo) mailto:sage [2022/04/19(火) 12:03:50 ID:SIyX6JLR0.net]
Do?Loopの例文見ると条件はWhileが多い気がする
自分はUntil派なんですが

883 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 12:41:24.95 ID:y80OoYXYM.net]
でっていう

884 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 12:53:32.89 ID:Hbe28u0D0.net]
Untilはコーディングミスで「なぜか抜けられない」状態が起きた時の解決がめんどくさいからあんま使いたくない
Whileならコーディングミスっても、値が範囲内でループし続けてるくらいしか原因がないから突き止めやすい

885 名前:デフォルトの名無しさん [2022/04/19(火) 14:33:22.38 ID:XaMNMP/i0.net]
>>869
無能自慢?

886 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 14:38:03.91 ID:Hbe28u0D0.net]
>>870
リスクは減らしたいってだけの話
自分一人だけがマクロいじるとは限らないし

887 名前:デフォルトの名無しさん [2022/04/19(火) 15:06:19.06 ID:XaMNMP/i0.net]
>>871
いや、お前が無能なだけ



888 名前:デフォルトの名無しさん [2022/04/19(火) 15:24:45.82 ID:Cixyrkk96.net]
https://imgur.com/srNrR8t
一応、大学から共有されている理論式がこんな感じなのでおそらく会ってます

889 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:03:50.77 ID:NrfRvlTVr.net]
どうでもいいけど、Excelってそういう計算やったほうがいいんだっけ
小数点以下になるようなものは避けたほうがいいって記憶がある

890 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:13:18.16 ID:Hbe28u0D0.net]
小数点以下の計算は誤った結果が出ることも結構あるから、
・型はCurrencyにして小数点以下5桁までにする
・可能であれば整数に直してから計算させる
くらいはしておいた方がいいね

891 名前:デフォルトの名無しさん [2022/04/19(火) 16:39:16.39 ID:Cixyrkk96.net]
Function WaveLength(Height1, Time1) As Double

Dim G As Double, PAI As Double
Dim WL0 As Currency, WL1 As Currency, WL2 As Currency

G = 9.80665
PAI = WorksheetFunction.Pi()

WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)


Do
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)

If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do

WL1 = 0.5 * (WL1 + WL2)
Loop

WaveLength = WL2

End Function
とりあえずこういった感じで修正したものの実行するとオーバーフローするみたいです。
何が原因でしょうか?

892 名前:デフォルトの名無しさん [2022/04/19(火) 16:41:24.14 ID:Cixyrkk96.net]
IF条件で抜け出せなくなってしまったとかでしょうか?

893 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 16:59:26.12 ID:Hbe28u0D0.net]
>>876
内容はあまりわかっていないが、できそうな対策から
お察しの通りLoopを抜ける判定が上手く行ってないと推測される
オーバーフロー対策に、書き換え可能であればDoじゃなくてForNextに書き換えたほうがいいかも

Function WaveLength(Height1, Time1) As Double
↑引数は接頭にByValかByRefかを書く 多分ByVal
そして引数の型も明記する 特にTime1はDate型かそれ以外か明記が必要
Dim G As Double, PAI As Double
 ↑どっちもCurrencyでいいかと
Dim WL0 As Currency, WL1 As Currency, WL2 As Currency
G = 9.80665
PAI = WorksheetFunction.Pi()
WL0 = G * Time1 * Time1 / (2# * PAI)
WL1 = WL0
'WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)
 ↑ここのWL2はいらない
Do
WL2 = WL0 * WorksheetFunction.Tanh(2 * PAI * Height / WL1)
 ↑HeightはHeight1にする

'If Abs((WL2 - WL1) / WL1) < 0.001 Then Exit Do
'WL1 = 0.5 * (WL1 + WL2)
 ↑ここ2行は↓のように書き換える
 If Abs((WL2 - WL1) / WL1) *1000< 1 Then
   Exit Do
  Else’上の条件を満たしていないときはこの値を代入して処理を続けますよの記載にする
  WL1 = 0.5 * (WL1 + WL2)
  End If
Loop

WaveLength = WL2

894 名前:デフォルトの名無しさん [2022/04/19(火) 17:04:43.35 ID:XaMNMP/i0.net]
馬鹿だからCurrencyを使うのだな

895 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 17:07:08.59 ID:3cTbAnobM.net]
数値計算に固定小数点数のCurrecyは駄目
浮動小数点数のDlubleでないと直ぐにオーバーフローする

896 名前:デフォルトの名無しさん [2022/04/19(火) 17:34:34.65 ID:C02npA8w0.net]
解決しました!!本当にありがとうございます!

897 名前:デフォルトの名無しさん [2022/04/19(火) 17:35:09.38 ID:C02npA8w0.net]
めっちゃ興奮するw



898 名前:デフォルトの名無しさん [2022/04/19(火) 17:37:09.90 ID:C02npA8w0.net]
>>878
ありがとうございます!

899 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 17:44:54.91 ID:Hbe28u0D0.net]
>>883
解決したみたいで何よりです
多分、0.001より小さいかの判定だけがネックだったんだと思う
もし1と比較している理由を教授に訊かれたら「VBAだと小数の計算が正確ではない事象があるため、回避できるように数式を書きました」と答えとき

900 名前:デフォルトの名無しさん [2022/04/19(火) 17:56:52.80 ID:C02npA8w0.net]
>>884
わかりました!
今回は本当助かりました。本当にありがとうございました。

901 名前:デフォルトの名無しさん mailto:sage [2022/04/19(火) 22:29:37.25 ID:2A4xjXpz0.net]
おー理解できたのなら大学の工機前頑張ってなー

902 名前:デフォルトの名無しさん (ワッチョイ b717-73NO) mailto:sage [2022/04/20(水) 00:08:28 ID:Tl7YCJ+60.net]
double型を使って除算をすると小数点以下の誤差が出る場合があるのはどのように解決したら良いでしょうか
四捨五入では本来算出したい数値からズレてしまいます
currency型なら誤差が発生しない聞いたのですがどうやら馬鹿が使う物らしいので何か別の方法をご教示頂けませんでしょうか

903 名前:デフォルトの名無しさん [2022/04/20(水) 00:24:45.89 ID:TUC465n/0.net]
>>887
馬鹿が悔しくて質問か?
除算で1÷3だったらどうなると思う?

904 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 00:37:19.89 ID:EV0gbz680.net]
>>887
除算した結果をどうしたいのかによる
結果を他の数値と比較したいのなら、比較したい数値に除数を掛けて比較する

905 名前:デフォルトの名無しさん (ラクッペペ MM8f-/HVa) mailto:sage [2022/04/20(水) 02:03:14 ID:HkpFcH5SM.net]
実際のところ除算の丸め誤差が問題になることは少ない
数値計算では有効数字と桁数さえ把握していれば十分な精度で演算できる
というか浮動小数点だろうが固定小数点だろうが四捨五入すれば必ず丸め誤差は発生する
むしろ浮動小数点を扱う場合は桁数の差が大きい数値を加減算する時の情報落ちと、値が近い数値同士を減算する時の桁落ちの方が厄介

906 名前:デフォルトの名無しさん (ワッチョイ b717-73NO) mailto:sage [2022/04/20(水) 02:16:34 ID:Tl7YCJ+60.net]
>>889
分かりにくかったらごめんなさい
・数十行(場合により数百行から千行弱)の作業計画表があってそれぞれ開始日、終了日、工数を作業担当者が決定し、それとは別に納期を設定します
・各行では作業日数を算出し、工数を日割り計算し、小数点第二位で四捨五入、最終日に余りを加算して進捗の計画とします
・作業担当者は日毎に各項目の進捗率を入力します
・作業担当者はこのファイルとは別に上位工程担当者との連絡シートを更新し、そこで発生する追加工数などをこのファイルで読み込みます
・上記データを元に様々な演算を行い、納期に対して進み見込みか遅れ見込みか、またそれが何日の見込みかを算出します
・結果を当初計画、進捗実績および予測、納期などをグラフで可視化

という仕様のツールなのですが2つ目のあたりで余計なズレが発生して演算が狂ってしまう場合があり、
currency型に値を放り込んで強引にズレが生じないようにしているのが現状です
100%発生するのではなく20物件に1件程度の発生率なので如何したものかと頭を悩ませております

907 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 04:15:00.17 ID:i+5dFZiZM.net]
>>891
算数わかる?



908 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 06:42:44.94 ID:PPr2by3tM.net]
>891
2つ目のあたりというのがよく分からないけど箇条書きの2段目の項目のことなら処理の仕方が間違ってる
最後に余りを足すなら途中経過はすべて切捨てで処理、途中経過を四捨五入するなら全ての累積値を最後に被除数から引いて加算値を求める
どちらかで処理しないとズレるのは当たり前

909 名前:デフォルトの名無しさん (ワッチョイ 1701-hfAD) mailto:sage [2022/04/20(水) 07:19:32 ID:Ls68Jrpy0.net]
Currency型てのは誤差が出ないわけじゃなくて精度が固定されてるっていうことなんだけどな
そもそも工程表程度の精度で浮動小数点の誤差が問題になることなんてないだろうに
どうしても誤差が気になるなら割り算を商余で表現するとか演算順序の見直し(割り算を最後に)

910 名前:デフォルトの名無しさん (ブーイモ MMcf-73NO) mailto:sage [2022/04/20(水) 07:23:24 ID:uFaPvbC9M.net]
>>893
余りは工数-日毎工数x作業日数で算出していましたが処理が違いますか?
勿論この場合余りが負の値になる状況もあるので正確には余りとは違う表現をするのが正しいのですが
これで算出した最終日の工数が3.5hになるべきところが3.49999hになるのは計算式の誤りですか?

911 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:34:26.59 ID:lCHITGXH0.net]
>>895
最後に小数点以下第二位で四捨五入すればいいじゃん

912 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:40:54.07 ID:lCHITGXH0.net]
>>895
どこでどれぐらい誤差が出るかは元データと計算式とデータ型によるから、その情報だけではどこが悪いか判断できない
工数は小数点以下第何位まで入力されてんの?

そもそもデータが1000行しかないんなら別にCurrencyのままでいいじゃん
仕事の目的はプログラミングじゃないんだから、結果がちゃんと出たんなら現時点ではそこで終わっとけ
誤差の処理をちゃんとやうとすると情報サイエンスの基礎をみっちりやらないと無理だから、今回の件とは別に自宅で時間かけて勉強しろ

913 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 07:47:48.41 ID:uFaPvbC9M.net]
>>896
四捨五入した値をdouble型に代入した際にもこの誤差が発生する場合もあったのですがその場合の対処はDoWhileで数値が丸められるまで四捨五入を繰り返す処理を噛ませれば良いですか?
それよりcurrency型に代入した方が処理を省略できるのではないでしょうか
担当者の癖や上位工程担当者の癖、物件の種類などを加味して分析して完了予測を出すためツール全体で2万弱のステップ数があり、可能な限り処理を早めたいです
まぁそんなの誤差の範囲じゃんとかもっと別に短縮出来る所あるだろって言われたらそれはそうってなるんですが

工数は小数点第一位までの入力です

914 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 08:21:13.14 ID:lCHITGXH0.net]
>>898
10進数の0.1は2進数だと循環小数になるんだわ
Doubleは単に桁数が増えるだけで誤差がなくなるわけじゃないから、たぶん根本的に理解が間違ってる

915 名前:デフォルトの名無しさん [2022/04/20(水) 11:58:28.08 ID:TUC465n/0.net]
>>898
そもそも何が問題かわかってる?
コンピュータ(VBA)の割り算では例えば0.999999とかになる問題は常にあることと、有効桁数を常に頭に入れてロジックを組む必要がある
割り算した結果の少数点同士の足し算もできるだけ避ける
小数点以下は一桁と決まってるなら最初から10倍しといて見せる時だけ小数点を付ける
最終的に割り算したら四捨五入する
などなど当たり前のことをわかってないから数値が合わないように見える
こんなの基本だが

916 名前:デフォルトの名無しさん [2022/04/20(水) 12:03:05.91 ID:TUC465n/0.net]
それと、変数や定数、埋め込み数値の型に気を付け、違う型同士の演算ではどういう結果になるかも言語の仕様を常に調べるのは当たり前のこと

917 名前:デフォルトの名無しさん (ワッチョイ ff63-0fbr) mailto:sage [2022/04/20(水) 12:14:09 ID:AAz4B5BA0.net]
>>901
なるほど!さすが



918 名前:物知りですね!
でもここは質問スレだからもう少し人には優しくしてくださいね
[]
[ここ壊れてます]

919 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 12:39:04.97 ID:dxBIrhD/0.net]
プログラムの本質からは外れるけど、現場の工場要員を秒刻みで拘束することに繋がるのを
把握しておくべき 上の方の役員からの指示でのシステム構築なのか、現場の意見を汲んだ
システム化なのかでも変わってくるかも知らんが、古来そういうのは運用し出してから破綻する
相手がロボットならまだしも、自分だって作業を秒刻みで拘束されたら嫌気さすだろうに
システム構築する側の自己満足に過ぎないような無駄なヶ所に注力したところで給料泥棒化するだけ

実際には不良(材料不良・加工不良・落下などの破損・etc)が出たり加工機械の不具合で作業がSTOPしたり
余った時間をバッファに充てるだけじゃ無くて、敢えて余裕をもたせたプランニングを意識しないと
全社員から反発くらって、せっかくの仕事が無かったことにされる 黒歴史の予感しかしない
ロボットやオートメーション機器のためのプログラムだとしたらVBAは間違ってると思うし

920 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 13:55:16 ID:wuSnjbzX0.net]
>>900
浮動小数点数は特定の桁数の2進数で表現できる数字に丸める表現方法で、10進数の有効桁数は関係ないんじゃ?
そもそも「有効桁数を頭に入れて〜」みたいな正確さを考えて使う型じゃなくて、曖昧で良い場合に使う。

小数同士の演算は(オーバーフローを無視すれば)固定小数点数で問題なく行えるから避ける必要ない。

921 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 13:58:17.02 ID:nqlym3kL0.net]
基本は大事だから
何度でも繰り返しておくんなまし。

922 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 14:12:37.06 ID:2WayYnGs0.net]
質問ですが、
VBAからwebページのデータを取得するとき、
CreateObject("InternetExplorer.Application")とかってやりますが、
サポート終了後はどうなりますか?

Edgeでできる?

923 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 14:45:20.55 ID:W96CmtFuM.net]
>>906
Selenium Webdriver

924 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 15:54:04 ID:wuSnjbzX0.net]
>>906
当分サポート終了はないけど、そうなったらできなくなる。
Edgeじゃできないから代替案を考える必要がある。

有名なのはSelenium、Chrome DevTool Protocol

前者はライブラリ(参照設定する奴)を利用者全員にインストールしてもらい、
更にブラウザとのバージョン互換性にも対応する必要がある
ただし動作環境はエクセルのみっていうVBA最大のメリットを失う

後者は単独で動作するモジュールが作られてる

VBA以外の言語の開発環境があるなら、
スクレイピング部分はそれで作成してVBAから呼び出すって方法もある。
自分はそうしてるよ

925 名前:デフォルトの名無しさん (ワッチョイ 5701-5h/q) mailto:sage [2022/04/20(水) 15:57:01 ID:wuSnjbzX0.net]
edgeじゃできない、は
CreateObject("InternetExplorer.Application") を使ってedgeを操作できないって意味ね
だからseleniumとかでedgeを操作することになる

926 名前:デフォルトの名無しさん [2022/04/20(水) 16:15:46.15 ID:TUC465n/0.net]
>>904
わからないなら黙っていればいいのに

927 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 16:20:42.29 ID:oDE2bDUYM.net]
固定小数点は格納するたびに四捨五入するようなもんだから誤差の蓄積は多いが
人間社会ではコレをヨシ!としているから問題ない
天文学的な計算では命中しないだろう



928 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 16:26:01.75 ID:2WayYnGs0.net]
>>907
ありがとう。

929 名前:デフォルトの名無しさん (ワッチョイ b72f-mbkD) mailto:sage [2022/04/20(水) 17:45:44 ID:DAsyvBxD0.net]
>>911
>固定小数点は格納するたびに四捨五入するようなもん
もってる精度の桁数を超えない限りそんなことはないわ
想定する桁数内で誤差がでないから固定小数点使うんだぞ
逆に一般的なプログラム言語の浮動小数点は小数以下桁数が浮動する癖に0.1が正確じゃなかったりするから問題なんだよ

930 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:09:32.27 ID:cVTwugEg0.net]
0.1は0.1だよ

931 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:25:53.48 ID:FB1fQipzM.net]
0.1E+15
桁数は10の15乗の1京
有効数字は1桁の0.1
値は1000兆でも数値は0.1

932 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 19:43:46.55 ID:lF2OJV8Ed.net]
Trunc関数で不要な桁をバッサリ逝けば良いんじゃない?

933 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 20:09:02.82 ID:2WayYnGs0.net]
>>908
ありがとうございます。

iMacrosってのを試してました。

Selenium、Chrome DevTool Protocolを調べてみます。

Excelで入力ダイアログボックスを出して、入力した番号に応じて、そのページのデータを取りに行く、
ってことがやりたいです。

言語はなんでもいいですね。
できれば、Visual Studioを使いたいですが…w

934 名前:デフォルトの名無しさん [2022/04/20(水) 20:56:24.65 ID:by8HP/iQ0.net]
なんだIEEE754仕様問題の話題か。
10進と16進(2進)の浮動小数差異が出るのはまぁある意味仕方がない。
固定小数点の型を持つ言語を使うか、割る前に何桁か分10のべき乗数を掛けて割った後に同じだけ割ってやって適当なところで諦めるか、というところが落としどころだろうね。

ちなみにEXCELの数式の四捨五入は本当に四捨五入だけど、VBAの四捨五入は銀行丸めだから気をつけてね。

935 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:03:02.83 ID:lF2OJV8Ed.net]
因みにパワクエも銀行丸め
いい加減統一して欲しいわ

936 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:09:55.19 ID:Q+UfmON+0.net]
四捨五入はRound使わなくてもできるらしいで
知らんけど

937 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 21:17:52.87 ID:Me5L26li0.net]
>>906
おれも心配してたけどオートメーションの場合は6月以降も使えるらしいな



938 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 22:25:36.74 ID:DAsyvBxD0.net]
>>918
暗黙の変換(丸め)を四捨五入というのは問題があるかと

939 名前:デフォルトの名無しさん [2022/04/20(水) 23:37:18.06 ID:by8HP/iQ0.net]
>>922
何故に暗黙の変換限定の話と思ったのかは分からないけど、型はなるべく明示的に変換しないとね。
その辺、VBAはOption Strict Onが使えないから大変。
もっとも、.Netでも匿名型を使うメソッドは固めてOption Strict Offに設定したモジュールに突っ込んでおく必要があるけど。

940 名前:デフォルトの名無しさん (ワッチョイ b72f-mbkD) mailto:sage [2022/04/21(木) 17:21:20 ID:pjiVvgnX0.net]
ああ、そうだな。Cxxxで明示的に型変換しても銀行丸めだから
暗黙の変換に限った話ではなかったな

匿名型のくだりは何を言ってるか意味不明だがな
匿名型は名前がついてないだけで厳密に型指定されているんだが

941 名前:デフォルトの名無しさん [2022/04/21(木) 23:11:20.77 ID:VWW2tbiZ0.net]
CcxxとかじゃなくてもRound使ったって普通に銀行丸のだろ

942 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 02:09:40.61 ID:M5fmJ0ze0.net]
ワークシート関数のROUNDは四捨五入
VBAのRound関数は銀行丸め
VB.netのMath.Roundメソッドも銀行丸め
これ真面目な話テストに出るし実務でもトラブルの元だからちゃんと覚えて使い分けろよ

943 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 08:50:16.15 ID:Uci4ALKRM.net]
そもそも四捨五入や銀行丸めは暗黙の(型)変換でも何でもないけどな

944 名前:デフォルトの名無しさん [2022/04/22(金) 12:17:14.78 ID:6grDaRhxp.net]
VBAの四捨五入は型変換でやるもんだと思ってるんだろ

945 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 12:26:05.45 ID:Sb+Ase1ga.net]
VBAで全ての物事を解決したいと考えています。
まずはOCRからやっていきたいです。
次に、人工知能とビッグデータに関する VBA のライブラリを充実させたいです。
それができたら、VBA で、callbyName を使って、疑似マルチスレッド化してサーバーOSを作り、
メタバースを作りたいです。
どうしたらいいですか?

946 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 12:56:56.20 ID:JqjwtZFMr.net]
沢山金がある
→MSに依頼する
少しだけ金がある
→スクールにでも通う
金が無い
→自力で調べろ

947 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 13:46:25.69 ID:qHWul8Ex0.net]
>>929
もう休み始まったのか羨ましいな



948 名前:デフォルトの名無しさん [2022/04/23(土) 07:32:43.48 ID:Q/JWtTUi0.net]
VBAのコードをパスワードではなく
AccessのようにMDEまたはACCDE化して隠蔽できないのかね?

949 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 13:58:03.66 ID:yVxZarCbp.net]
あったとして、ワークシートが見れない

950 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 21:14:41.84 ID:QWCWIiV00.net]
VB6.0の質問となります。
ご存じのかた、ご教授お願い致します。

CommandButton1のDownPictureプロパティ(ボタンを押すと指定したピクチャが表示される)
で設定するピクチャファイルをボタンを押すたびにランダムのピクチャを
表示する方法はありますでしょうか?
ピクチャを固定でなく、可変でいろいろなピクチャを表示することはできるのでしょうか?

宜しくお願い致します。

951 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 21:26:02.35 ID:Owv7WUis0.net]
>>934
可能だけどスレチ
VBとVBAは似てるけどまったく違う言語なのよ
VB専門のスレで聞くか、できるという情報を手がかりにぐぐって

952 名前:934 (ワッチョイ 2590-WvSx) mailto:sage [2022/04/23(土) 21:56:53 ID:QWCWIiV00.net]
>>935
ありがとうございます。
VBスレで聞いてみます。

953 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 03:02:47.88 ID:dQQkhpXr0.net]
なんで.netじゃなくてVB6.0?

954 名前:デフォルトの名無しさん (ワッチョイ a868-g9NX) mailto:sage [2022/04/24(日) 07:12:27 ID:V025dUWC0.net]
聞いてやるな

955 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 08:27:40.38 ID:rcB2xidb0.net]
保守案件じゃねーの?
それより
> VBとVBAは似てるけどまったく違う言語なのよ
のほうが気になるわ

956 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 08:33:51.29 ID:V025dUWC0.net]
VB6とVBAは割りと似てるよ
.netは別物だけど

957 名前:デフォルトの名無しさん [2022/04/24(日) 09:47:15.58 ID:K6J8xSzg0.net]
VB.NetとVBAが違うと言いたかったんじゃないか?
VBAとVB6.0なんてガワ以外大して変わらんだろ



958 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 11:05:42.56 ID:JjYc30D0a.net]
それなら全くスレチって言うわけでもないだろうしVB6以前スレに誘導してもあっちは過疎ってるから>>935の真意がわからん

古代VBプログラマ質問スレ(Ver.6.0 まで) part65 [転載禁止]c2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1440930335/

959 名前:デフォルトの名無しさん [2022/04/24(日) 11:34:19.84 ID:3PCmdv6z0.net]
>>934
配列かコレクションに取りうる画像ファイルのパス全部突っ込んどいて
毎回Rnd関数でランダム添え字作成してDownPictureへ代入する処理を
Timerイベントで定期的に起こせばいいんじゃね

960 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 12:34:51.24 ID:/i/HSWcF0.net]
>934の方法で出来るね
vb.netはCommandButtonというコントロールがないからButtonコントロールで処理することになるけど

961 名前:934 mailto:sage [2022/04/24(日) 14:05:21.06 ID:sOMp0pcl0.net]
>>943
教えていただき、ありがとうございます!
この方法でできました!
助かりました!

>>944
.netは方法が違うんですね。
ありがとうございます。

962 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:18:48.53 ID:H35nhyzua.net]
VBAに聞けば、VB6.0の問題が解決すると思ってる魂胆がむかつく

963 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:19:17.64 ID:H35nhyzua.net]
次の質問どーぞー!

964 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:49:27.80 ID:SWKX3wPR0.net]
>>933
なんでだよ Accessだってオブジェクトはそのまんまだぞ Codeを隠すってだけだ
まあ、Excelでそんなことしたら阿鼻叫喚の地獄絵図がそこら中で起きるだけだろうが

965 名前:デフォルトの名無しさん [2022/04/24(日) 15:00:54.37 ID:awQxKQ/u0.net]
>>945
結局、こういう馬鹿は馬鹿だからこんな書き込みをすることになるんだよな

966 名前:デフォルトの名無しさん (ワッチョイ a868-g9NX) mailto:sage [2022/04/24(日) 19:19:11 ID:V025dUWC0.net]
>>949
そうそう、まさに>>949みたいな感じで

967 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 20:32:26.94 ID:4thwl0KN0.net]
VBAのコードを隠すとかw
いやらしいコードとか胸アツ



968 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 21:56:52.40 ID:HnHBh+4U0.net]
ソースを見たらBase64が書き込まれてるとかかw

969 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:10:43.02 ID:qlayZYg40.net]
変数や関数名を1文字にして、インデントをなくし、マルチステートメントを使い、GoToで飛ばしまくる
これぐらいやっとけばニワカには暗号化されてるのと同じに見えるよ
組み込み関数に型文字を付けたり、行番号とか書いとけばさらに混乱するんじゃない?

970 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:11:47.35 ID:qlayZYg40.net]
代入のLetを省略せずに書くとか

971 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 22:21:56.70 ID:qlayZYg40.net]
例えばこういうのは初心者だとVBAのコードだと認識できない

Option Explicit
Sub a()
10 Dim i%, s$: For i% = 0# To 15 Step 1&: Let s$ = Hex$(i%): Debug.Print s$,
20 Next i%: GoTo Next_i: Let i% = 999#
30 Next_i: Debug.Print
End Sub

972 名前:デフォルトの名無しさん mailto:sage [2022/04/25(月) 16:32:49.44 ID:mIKR8D/k0.net]
もっと初心者だとこういうもんだと覚えて、ウルトラコード量産して
逆にそれがウケてそこら中から引っ張りだこに成る可能性も

973 名前:デフォルトの名無しさん [2022/04/25(月) 18:25:34.65 ID:d4FCGwAUa.net]
あとどこからも呼ばれないコードを周囲に書いとくとか

974 名前:デフォルトの名無しさん mailto:sage [2022/04/25(月) 22:42:22.33 ID:LL5g/Itw0.net]
難読化してくれるサイトもあるようだがAIでも駆使してんのかよ

975 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:34:27.36 ID:h7wIW8Sj0.net]
VBを学んでみたいのだけど、専用アプリをインストールすれば良いのですか?

976 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:39:28.14 ID:4e+J3DaO0.net]
それを聞くようでは勉強進まないと思うぞ
VBAなら、Excelのオプションから設定しよう

977 名前:デフォルトの名無しさん mailto:sage [2022/04/26(火) 13:41:38.59 ID:h7wIW8Sj0.net]
はい!分かりました先輩!



978 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 11:18:39.59 ID:13VCBUUL0.net]
VBとVBAは違うだろ

979 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 11:35:58.26 ID:5AfXZQ180.net]
めんどくさくなりそうだからその話題はいいわ

980 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 12:17:37.70 ID:0nl7nS5l0.net]
ヤフーの質問サイトをたまに見ていると、VB板なのにExcel VBAの質問している方が多いですからね。

981 名前:デフォルトの名無しさん mailto:sage [2022/04/27(水) 14:37:20.10 ID:VQIBBePJ0.net]
これはマイクロソフトが悪い

982 名前:デフォルトの名無しさん [2022/04/28(木) 02:09:14.27 ID:ba7q24a/0.net]
質問と言うわけじゃないんだけど、最近VBAのお仕事が立て込んでて、こねくり回していたら変な現象が起きたのでちょっと報告。

セルのフォーマットを変えても値がそのフォーマットに合わせて変更されず、セルの中身を触ろうとして初めて設定したフォーマットが反映されることがある。
個人的に勝手に「ガラスのフォーマット」と呼んでいるけど、これをVBA上でフォーマットを反映させたいと思い、Cell(1,1).value = Cell(1.1).valueみたいにすれば行けるかなと思ってやってみたら行けたので、
範囲でも行けるかなと思ってRange(“A:A”).value = Range(“A:A”).valueとしてみたら行けた。

調子にのって複数のセル範囲を一度にしてみたら、VBA側ではエラーはなくセルの内容がまばらに#N/Aとなった。
それも何かしら値が設定されていたセルもそうでないセルも関係なくまばらに#N/A。

複数範囲、例えば”A:A,B:B”みたいなのをSplitで「,」で分割してひと範囲づつ行ったら起きなくなった。

まだ詳しくは調べていないし、ヘルプも見ていないけどEXCELのバグと考えるのは早計かな?

983 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 06:30:27.37 ID:4LxgxN/hd.net]
ストゼロのコピペみたいになってるので先ずはExcelの異常より自分の異常を気にした方が良い
お大事に

984 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 06:56:19.59 ID:Xx5H6lJB0.net]
>>966
重い

985 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 07:13:52.33 ID:Nya/6dWlM.net]
うーんこの

986 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 08:23:08.41 ID:tFS3Ff7A0.net]
同一sheet、複数areaの仕様通り

987 名前:デフォルトの名無しさん mailto:sage [2022/04/28(木) 10:11:30.42 ID:w1n3DLDr0.net]
新人の頃、なんでもやたらバグ!と言い募ってたら、ここの諸先輩にブン殴られた
何でもかでもぜんぶ他者のせいにしてると、モニタから腕が伸びてきてホントにブン殴られる
多分、立て込んでるがキーワード 立て込んでるなら尚更マシン複数台用意して
作業を分散して負荷を軽減するなり、都度都度保存してExcelも終了させておいて
合間にエロ動画見たりしながらExcelさんを休ませてあげないと、テンポる



988 名前:デフォルトの名無しさん [2022/04/28(木) 14:24:22.28 ID:UYKtqYXXd.net]
糖質か

989 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 15:02:24.64 ID:VxUwChyk0.net]
ここ最近、5ちゃん全体が重いのだが?
同志達もそう?

990 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 17:00:23.18 ID:1aSdL/gJ0.net]
>>973
昔から2ちゃん5ちゃんは世界のどこかで紛争が起きるとアクセスが急増したりサイバー攻撃されたりで重くなる
今はロシちゃんウクちゃんのせい

991 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 19:06:07.89 ID:lunnn7Hg0.net]
5chのサーバーはアメリカにある
なんかあるとすぐに攻撃されるからな

992 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 00:10:15.39 ID:xtMjZAZqa.net]
まったく重くないが。
そろそろ次スレよろ

993 名前:デフォルトの名無しさん [2022/04/30(土) 10:32:12.86 ID:lfBpjyTL0.net]
>>976
はぁ?よろじゃねえよ
てめえが立てろハゲ

994 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 10:33:08.68 ID:/k/F8o6k0.net]
よろ~☆ミ

995 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 11:25:04.05 ID:SY9/68Ub0.net]
46497!

996 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:57:06.54 ID:jIMADI4Y0.net]
あれ?昔からのしきたりで、スレ主が次のスレ立てを担当するはずでは??

997 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:58:48.35 ID:ttNuaWX+d.net]
質問したい奴が立てればいいぐらい
どうでもいいスレだろ



998 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 00:13:28.72 ID:AQA/eAvl0.net]
980番を踏んだ奴が立てるんじゃなかったか

999 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 01:58:03.34 ID:Pk0oKD+E0.net]
建て方知らないもん
アソコの立て方は得意だけどさ

1000 名前:デフォルトの名無しさん [2022/05/01(日) 02:01:11.00 ID:q0kLnjNbd.net]
立てても使い道(相手がいない)がないのになぜ立てるか

1001 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 02:24:06.36 ID:2t63WK/jM.net]
立てたぞ

Excel VBA 質問スレ Part76
https://mevius.5ch.net/test/read.cgi/tech/1651339421/

1002 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 05:51:26.54 ID:QKAZyHTH0.net]
>>985
有能

1003 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 14:10:11.29 ID:X7BfbxUdr.net]
Excel2019になってから重いデータを処理する時にエラーが出やすくなりました。
7000データあるものから鳥瞰図を作成して画像として貼り付ける処理をしているんですがコピーして貼り付ける際にたまにエラーが発生します。(1004データを貼り付けできません)

バッファとして貼り付ける前にwaitで数秒待ってあげるとエラーが出なくなるんですが……
仕方ないんですかね?

1004 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 16:57:37.12 ID:9Zz7qGMa0.net]
エラーをキャッチすれば?

1005 名前:デフォルトの名無しさん (ワッチョイ 2701-XZ6m) mailto:sage [2022/05/03(火) 18:40:38 ID:1FiEgH3Q0.net]
エラー発生時にエラータグにとばしてそこで数秒待って再度実行も試しましたが結局永久ループになってしまいました。

1006 名前:デフォルトの名無しさん (ワッチョイ 075f-erxH) mailto:sage [2022/05/03(火) 18:51:21 ID:wJ2FprYn0.net]
DoEvents入れてみるとか

1007 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 19:57:23.11 ID:1FiEgH3Q0.net]
DoEventsも最初に試しましたがイマイチでした。
あまり同じような症状が出ている方少ないのかな?重い処理だと次の処理が追い越しちゃってエラーが出てる感じなんですよね。



1008 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 23:05:49.83 ID:0jm7qJTo0.net]
Application.ScreenUpdating = False
をやってから処理して、終わったら
Application.ScreenUpdating = True
にしてみたら?

1009 名前:デフォルトの名無しさん [2022/05/04(水) 01:08:45.09 ID:llwekS7n0.net]
>>987
まぁ同期が取り切れていないということで、
コピーが終了したタイミングが取得出来ないと言うことなら待たせるのは仕方ないんじゃないかな?

後続の処理の流れによりけりになるけど、
ある程度時間が経過すればエラーが起きなくなると言うことであれば、それを待たせる時間がもったいないなら
そこで貼り付けはしないで後続処理を進めて、貼り付け自体はタイマーでイベントを起こしてそこで貼り付けの処理すれば時間の節約にはなるかも知れない。
内部的にどんな感じで処理されてるか分からないから後続処理の内容によって待つ時間を増やさなければいけなくなるかも知れないけどね。

1010 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 04:41:51.29 ID:Bmz10qTz0.net]
アドバイスありがとうございます。
Application.ScreenUpdating=Falseはいれています。

やはり仕方無いのですかね?
PCの性能面でも良くないのかも知れません。
メモリーリークのような事が起こっているのでしょうかね?

1011 名前:デフォルトの名無しさん (ワッチョイ 87da-Nh0L) mailto:sage [2022/05/04(水) 06:45:06 ID:XHZmixda0.net]
オブジェクト変数のその都度開放とかは?

1012 名前:デフォルトの名無しさん (ワッチョイ df4f-bbcD) [2022/05/04(水) 07:00:53 ID:llwekS7n0.net]
>>994
メモリーリークというのは
メモリの解放を上手く行えずゴミが溜まったり
本来指すべきメモリのアドレスを
違うアドレスをさして変なアドレスからデータ読んだり
変なところに飛んだりすることを指す訳だけど
話を聞いた限りだとその可能性は低いかな。

強いて言えばコピーする際にクリップボードが
数、あるいは容量的にパンパンで次のコピーを
行おうとしたときにもうコピー出来ない、
またはコピーしようとしているんだけど
空き容量が少なくて、そこで内容を展開しているから
時間が掛かっているとかの類が考えられるかな。

どのくらいコピーペーストしているのか分からないけど、
とりあえずコピーペーストする前かした後に
一回一回、クリップボードをクリアする処理を挟んでみては?

1013 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 07:22:42.23 ID:sN1XYX+fd.net]
Excel2019当方でも同じ
PCの性能が良すぎてExcelの処理が追いついてない感じ
極力クリップボード経由を避ける
どうしても必要なら間にDoEvents - Sleep - DoEvents を入れる

1014 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 07:28:33.66 ID:CsYq7Xth0.net]
>>996
> 本来指すべきメモリのアドレスを
> 違うアドレスをさして変なアドレスからデータ読んだり
> 変なところに飛んだりすることを指す訳だけど
それはメモリーリークとは言いません

1015 名前:デフォルトの名無しさん [2022/05/04(水) 11:56:06.30 ID:ZnBr6fHma.net]
pc買い替え

1016 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 12:08:38.05 ID:7uEIwZovM.net]
1000

1017 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 21時間 44分 6秒



1018 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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