22/04/08 22:18:44.47 7fG2FYL40.net
ヤンキー・ドゥードルが懐かしい
751:デフォルトの名無しさん
22/04/09 00:48:37.33 C63TJhml0.net
AIの定義が明確に定まってないので自己学習して勝手に洗練されていくものもAIだしただのマクロもAI
752:デフォルトの名無しさん
22/04/09 00:55:30.60 tyw5ZPAK0.net
AIは作るものじゃない
育むものなんだよ
753:デフォルトの名無しさん
22/04/09 02:28:28.01 FQQX8rtBa.net
>>736
もうすでにウイルスのソースコード載ってますが?
>>714
754:デフォルトの名無しさん
22/04/09 06:04:10.90 +bGajSMm0.net
任意の列が左端に来るように水平スクロールする方法ってある?
Application.Gotoで左端に寄せてSmallScrollで上下位置を調整してるけど完全な水平スクロールにはならないんだよね
755:デフォルトの名無しさん
22/04/09 07:34:48.36 Dec5MFVZ0.net
With ActiveWindow
.ScrollRow = x
.ScrollColumn = y
End With
756:デフォルトの名無しさん
22/04/09 08:12:43.36 +bGajSMm0.net
>>743
それも試したけど、アクティブセルが変わると数値が変わらない?
757:デフォルトの名無しさん
22/04/09 08:52:12.11 +bGajSMm0.net
任意の列とアクティブセルの列の差を求めればScrollRowで行けるかな?
今度試してみよう
758:デフォルトの名無しさん
22/04/09 11:14:24.15 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:デフォルトの名無しさん
22/04/09 12:54:27.64 FQQX8rtBa.net
で、誰かがズームしたりページレイアウト変えたりして、
トラブルの元になると。
ウィンドウ系はいじらない方がいいと
職場のおじいちゃんが言ってた。
760:デフォルトの名無しさん
22/04/09 13:45:19.95 6rDUdJJw0.net
アース、ファイア、ウォータ系の属性のほうがいいかもね
761:デフォルトの名無しさん
22/04/09 14:39:59.55 FQQX8rtBa.net
Excel VBA の Window 関連のオブジェクトって、船に刻して剣を求むって感じ
走っている電車の中から、指で窓ガラスに風景を描くみたいな
762:デフォルトの名無しさん
22/04/09 15:26:28.03 +bGajSMm0.net
さっぱり例えが分からんw
763:デフォルトの名無しさん
22/04/09 16:04:42.29 2h0/Yyo40.net
詩的すぎるだろw
764:デフォルトの名無しさん
22/04/09 18:41:50.44 8cH1hwr70.net
>>749
なるほど納得。
納豆食う。
765:デフォルトの名無しさん
22/04/09 20:23:31.13 8/Ft6Y7L0.net
日本人だけど意味がさっぱりわからんw
766:デフォルトの名無しさん
22/04/09 22:16:01.68 XcpxlUbda.net
ごめん失敗したテヘ
767:デフォルトの名無しさん
22/04/10 01:02:21.87 tD6svEJl0.net
ヘッドレスChromeをseleniumやWebdriverなしでどうにかなりませんか?
768:デフォルトの名無しさん
22/04/10 19:56:53.98 anoG1hsda.net
>>755
UiPathおすすめ
769:デフォルトの名無しさん
22/04/11 21:59:21.11 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:デフォルトの名無しさん
22/04/11 22:26:56.33 p2QF/trT0.net
なにがしたいのか
771:デフォルトの名無しさん
22/04/11 22:56:21.06 7xr/cYmKd.net
オブジェクトは無理でしょ
Funtionで対応すれば良い
最もそうしない方が良いからデフォで出来ないようになってることは考慮すべきだと思う
772:デフォルトの名無しさん
22/04/11 23:25:19.91 9dLPe5470.net
ん
773:?そもそもワークシートってオブジェクト化されてるんだからわざわざ変数にセットする必要なくない? 対象のシートがコードを書いているファイルにあるなら Sheet1.Range("A1").Value = "Test1" で良いでしょ?
774:デフォルトの名無しさん
22/04/11 23:56:27.01 Kyp6sDnX0.net
簡略化するためにThisworkbookを省略して書きましたが、実際には
マクロ動作中にほかのブックを触っても大丈夫且つコードがすっきり
するようにSet ws1 = Thisworkbook.Worksheets("Sheet1")のように
しています
少し時間ができたので増築増築でややこしくなったコードを整理している
最中で、複数のプロシージャで使う固定のシートはまとめて変数にセットして
おこうかと思ったのですがFunctionで調べてみます、ありがとうございます
775:デフォルトの名無しさん
22/04/11 23:58:43.07 amT3mnzR0.net
変数を使いまわす(というか広域で使う)のは普通にできる
モジュールレベルでPublic変数定義するだけ
なんならモジュール名で修飾してもいい
ただ、変数の寿命が管理しにくいから、
中身がセットされてないとか、いつの間にか中身が消えてるとかいうことになるかもなw
776:デフォルトの名無しさん
22/04/12 00:23:20.44 ccOkbRo70.net
シートをオブジェクト名で指定すればどのブックを触っていようがそのコードが書いてあるブックから参照すると思うのだけど
>>761 がやろうとしてる事って他のブックのシートを変数に収納したい場合しか使わなくないか?
777:デフォルトの名無しさん
22/04/12 02:00:50.12 vEgugssg0.net
>>763
一部のメソッドでオブジェクト名を省略できないのがあるじゃん
自分がちゃんと理解してないのが原因なのはわかってるけど、構文とかデフォルトのオブジェクトとかいちいち覚えるのが面倒くさいんだわ
778:デフォルトの名無しさん
22/04/12 06:30:21.52 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:デフォルトの名無しさん
22/04/12 06:46:39.08 da5RcI7d0.net
汎用性と独立性を確保するなら引数でシートを渡せ
780:デフォルトの名無しさん
22/04/12 07:15:19.69 t+9U/8lg0.net
>>757
初心者がかち当たるあるある疑問だよね。
最初は>>762の言う方法でやってみればいいと思うよ。
もう少しやり込んでくればデバッグし易くするためにモジュールスコープレベルのPrivateな変数をPublicな関数やプロパティでやり取りするようになるんだけどね。
781:デフォルトの名無しさん
22/04/12 07:20:31.49 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:デフォルトの名無しさん
22/04/12 07:21:37.35 j+U2fOIu0.net
と思ったらpublicいるわスコープ他の言語と間違えたわ
783:デフォルトの名無しさん
22/04/12 17:42:54.51 oSnOjvyr0.net
Recordset.openでselect文を実行するとエラーになるけどツールでログに出した物を実行してもエラーにならない時って何が原因?
ダブルクォートは含まれてない
あとはイミディエイトウィンドウに出てくるsqlが変なとこで改行されてるけど関係ないよね?
784:デフォルトの名無しさん
22/04/12 17:45:16.76 pq/BAZJoM.net
シラネーヨ
785:デフォルトの名無しさん
22/04/12 19:22:20.07 D2BP6h+A0.net
742で書いた完全な水平スクロールできたわ
786:デフォルトの名無しさん
22/04/12 19:25:18.42 D2BP6h+A0.net
>>757
Sheet1モジュールに書くだけでは?
787:デフォルトの名無しさん (ワッチョイ c6da-EhK1)
22/04/12 19:48:28 hYDOb6070.net
>>770
それだけで答えられるほどエスパーじゃない
788:デフォルトの名無しさん
22/04/12 19:58:04.86 t+9U/8lg0.net
>>770
まず出力されているエラーは何なの?
789:デフォルトの名無しさん
22/04/12 20:52:44.19 oSnOjvyr0.net
ora 00933
sqlコマンドが正しく終了されていません
が出るんだよね
790:デフォルトの名無しさん (ワッチョイ e2da-vtdv)
22/04/12 21:13:36 cLFsXNmb0.net
そのままのエラー文でググれば一発で回答出てくるぢゃねーか
791:デフォルトの名無しさん (ワッチョイ e24f-EtAN)
22/04/12 21:30:37 t+9U/8lg0.net
>>776
SQLのケツに;付けろってよ
792:デフォルトの名無しさん
22/04/13 01:24:31.19 idY8HIbz0.net
757です、いろいろご意見ありがとうございます
その後考えた結果、シートのオブジェクト名を変数として代入しようとした名前に変えればいいんじゃないかと思いついたんですが問題ないでしょうか
793:デフォルトの名無しさん
22/04/13 03:33:56.70 +aMOkW0p0.net
>>779
シチュエーションにもよるかな。
シート名を変えられてもそのシートを使う前提であればそれでいいんじゃないかな。
その場合、
自ブックのシートであれば
Dim targetSheet As Worksheet
Set targetSeet = 変更後のシートオブジェクト名
みたいに使えるし、
他ブックのシートを扱う場合は
Dim targetSheet As Worksheet
Set targetSheet = ブックオブジェクト.(シートオブジェクト.Name)
みたいに書けば設定出来る。
もっとも、後者の書き方で前者を賄えるから後者だけ関数化してそれを使い回してもいいけどね。
794:デフォルトの名無しさん (ワッチョイ 7b68-xb3m)
22/04/13 07:03:06 CoVp5Ukt0.net
>>779
オブジェクト名はやめたほうが良い。あんまり意味が無い
やるなら、シートの内容を変数名にする
ローマ字
set shain_master = sheet("社員マスター")
日本語許容するなら
set 社員マスタ = sheet("社員マスター")
なおベストは英語
795:デフォルトの名無しさん
22/04/13 07:35:12.98 6wqio091M.net
会社員を英語でなんと言うかがわからんわ
worker(労働者)やemployee(被雇用者)じゃニュアンスが違うしー
辞書なしですぐ出てくるレベルのやつはVBAなんかやってないやろ、という偏見
796:デフォルトの名無しさん
22/04/13 07:37:38.41 CoVp5Ukt0.net
staffでええやろ
797:デフォルトの名無しさん
22/04/13 07:50:17.55 +aMOkW0p0.net
>>782
会社員だから
companyEmployeeでいいんじゃね?
798:デフォルトの名無しさん
22/04/13 07:56:48.50 HWn/7Hddd.net
Google翻訳だとmember
んー、なんかしっくり来ない
799:デフォルトの名無しさん
22/04/13 07:59:18.64 PsKYJxH90.net
staffは関係者ってイメージ
800:デフォルトの名無しさん
22/04/13 08:15:50.97 1kKv9jFRd.net
staffという単語はcompanyと同義で集団に対して使うって日本人は意外とわかってない
801:デフォルトの名無しさん
22/04/13 08:30:55.20 CoVp5Ukt0.net
employee以外ないだろう
802:デフォルトの名無しさん (スプッッ Sd22-eTSu)
22/04/13 08:56:08 wBIIYhTid.net
会社員という表現は英語では難しい
大人しく syachiku か Karoushi_Man にしとけ
803:デフォルトの名無しさん (ブーイモ MM02-CB6w)
22/04/13 09:04:23 YJgAVhDkM.net
業務用語の変数は日本語で業務用語そのものを使ってる
中途半端な英語だと誤解しやすいし、ローマ字は読みづらい
804:デフォルトの名無しさん
22/04/13 10:04:01.74 NHlBNLdW0.net
Accessならお馴染みの「Northwind」のテーブルでは Employee List とか Employee Details
概念としての会社員ではなく、自社の社員リストなので「従業員・使用人」の意で
ま、そのファイルを誰が見る?誰が使う?どこに出す?で適宜に 恥かかない程度で 何だっていいんだろうけれども
805:デフォルトの名無しさん
22/04/13 10:09:02.25 93SXwTUS0.net
リーマンが和製英語からすでに世界に浸透してる
806:デフォルトの名無しさん
22/04/13 10:28:39.30 Wmi1ga+iM.net
ワークマン
807:デフォルトの名無しさん
22/04/13 11:06:56.09 BozzLOUH0.net
ワークマンは流行りよ
808:デフォルトの名無しさん (スップ Sd22-2p/j)
22/04/13 12:58:38 7IxClg8bd.net
緊急です!
マクロの入ったボタンが図だかイラストになってしまい困ってます。
直し方のアドバイスお願いします。
809:デフォルトの名無しさん (ワッチョイ 6711-LXkm)
22/04/13 13:07:23 zDnWB3YN0.net
>>795
スレリンク(bsoft板:342番)
810:デフォルトの名無しさん
22/04/13 13:09:58.08 Wntan1Ql0.net
こういうの30分一万円無保証とかで稼げないかな
811:デフォルトの名無しさん
22/04/13 13:57:45.74 +aMOkW0p0.net
>>795
もうその図からマクロ実行させちゃえばいいじゃん
812:デフォルトの名無しさん
22/04/13 14:00:17.02 uBZa/q6E0.net
■質問
サウンド再生は何通りかあるけど、
一番遅延が小さい方法は何ですか?
winmmのPlaySound ?
813:デフォルトの名無しさん
22/04/13 14:08:46.36 6qNApkxLM.net
>>798
多分それ自体わからんのちゃう?
Excel作った本人とかじゃなく事務員とかだろうし
814:デフォルトの名無しさん
22/04/13 15:42:21.02 7cmYTCQn0.net
3時間くらいかけてVBA作って、合間に別のエクセルファイル開いて、閉じようとしたら
「変更を保存しますか?」って出たので、保存せずに閉じたら。
VBAを作った方のファイルまで変更保存せずに閉じられてしまったーーー!!
どうにかならない?
815:デフォルトの名無しさん
22/04/13 15:45:55.22 7IxClg8bd.net
とりあえず顧客に頭を下げてFAXでリスト送って頂いたのでしばらくはなんとかなりそうですがエクセルファイル自体のトラブルについては全員サッパリ意味不明なためどうしようも無さそうです…
(エクセルファイル作った方自身が既に会社にいないのでどうしようもない)
とりあえずエクセルファイルがどうする事もできないため私と社長ら数名は土日も休日出勤して1月から4月までの記録も全部紙ベースの資料に手書きで書き写す事になりそうです
しばらくは紙とペンでのアナログなやり方で回すしかないですがアドバイスくださった方ありがとうございました
816:デフォルトの名無しさん
22/04/13 17:20:07.59 SMVlXKyy0.net
>>801
3時間くらいなら今からやれよ
817:デフォルトの名無しさん
22/04/13 17:28:47.62 MldHjaMW0.net
>>802
あちこちマルチで書いて馬鹿かよ
どこかに金を出して頼めよ
ゆとりの馬鹿はこれだから
818:デフォルトの名無しさん
22/04/13 17:42:34.06 Wmi1ga+iM.net
>>801
該当のファイルを開いた状態でファイルタブのどこかにある自動保存云々が書いてある場所を探せ
運が良ければ一時ファイルが残ってる
残ってなけりゃ諦めろ
次からは動作確認をする前に保存する癖をつけるようにするんだな
819:デフォルトの名無しさん
22/04/13 19:21:42.96 9TA12m3K0.net
>>801
これがあるからコーティング中はOneDriveに置いとる
820:デフォルトの名無しさん
22/04/13 21:38:12.45 wBIIYhTid.net
>>805
何で誰でも言える極々普通のアドバイスをこんなに上から目線で言えるんだろう
821:デフォルトの名無しさん
22/04/13 21:47:36.66 MBul3VW80.net
便所の落書きにいちいち目くじら立てて突っ掛かるなよ
より一層老けて見えるぞ
822:デフォルトの名無しさん
22/04/13 22:55:33.89 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」の情報が残っていること。
URLリンク(i.imgur.com)
よく分からないけれど、VBAが扱えるインスタンス数を超過しているのか?
これが残っていて良いのか、よくわかりません。
・Set wb = Workbooks.Open で開いて
・wb.Close SaveChanges:=True で上書き保存して閉じているのですが、
・For Next内で済んだ変数はできる限りNothingで開放
していますが、改善の余地はありますか?
823:809
22/04/13 23:53:53.55 uonj2wEf0.net
>>809 タイポ訂正
誤) 訴求修正
正) 遡及修正
824:デフォルトの名無しさん
22/04/14 08:48:02.28 jf4kHNax0.net
>>809
825:デフォルトの名無しさん
22/04/14 09:46:20.53 EGNxXvqd0.net
>>809
マクロを1つの専用ブックにまとめてみたら
826:デフォルトの名無しさん
22/04/14 13:25:49.47 E7ePXpuT0.net
VBAで他ブックのプロシージャを実行したいんだけど、実行まちをなくすことてできる?
Application.Run "Book2!Test2"
を実行したあと、"Book2!Test2"の処理終了を待たずに次の行に移りたいんだが。
827:デフォルトの名無しさん
22/04/14 13:53:36.44 TZzbtw0W0.net
非同期は無理
試してないけど、別のApplicationインスタンスを作成して
そちらでファイルを読み込んで実行とか
828:デフォルトの名無しさん
22/04/14 18:58:30.99 RElcaA4D0.net
メソッドを使い回したいときはクラスを別のクラスに参照渡ししてるんだけど、これってVBAに継承があれば機能的に処理できるのか
829:デフォルトの名無しさん
22/04/14 19:03:41.33 sxqTZKvqM.net
クラスのメンバーに他のクラスを入れるのがマイルド
830:デフォルトの名無しさん
22/04/14 19:25:43.40 RElcaA4D0.net
いいね
それ試してみよう
831:デフォルトの名無しさん
22/04/14 20:26:12.03 VI/N1Akx0.net
>>816
継承を委譲で置き換える、というだけですね…
832:デフォルトの名無しさん
22/04/14 21:25:22.08 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:デフォルトの名無しさん
22/04/14 21:40:59.88 zMqJUzcEa.net
MsgBox は、End Sub の外に出して下さい。
このスレの流れ的に。
834:デフォルトの名無しさん
22/04/14 22:31:20.84 Ep0kCh050.net
フィールド名 DATE は? 予約語では?
他には、day、month、table、text、user、when、where、year、zone とかも
835:デフォルトの名無しさん (ワッチョイ e2da-EhK1)
22/04/14 22:55:38 Ep0kCh050.net
すまん 読み間違いだった MEMOが多いような気がするが、それも多分外してるな すまん 居ないことにしといてくれ
836:デフォルトの名無しさん
22/04/14 23:23:47.63 fL/YN0Wd0.net
予約後はNote
[]で括れ
837:デフォルトの名無しさん
22/04/14 23:41:44.78 kOhvUD5R0.net
838:解決しました。 感謝です!
839:デフォルトの名無しさん
22/04/15 14:24:02.27 TsNK8La+0.net
>>816
クラスになじめなかったくせに
840:デフォルトの名無しさん
22/04/15 15:02:32.60 m9CVWFGZ0.net
う、うるさい!
841:デフォルトの名無しさん
22/04/16 10:04:25.26 g0AA3ay0p.net
無理してクラス使わんでもええんやで
842:デフォルトの名無しさん
22/04/16 10:12:12.08 94XVUrLP0.net
保健室でいいってことか
843:デフォルトの名無しさん
22/04/16 10:20:43.39 Xjbe7mxod.net
特別クラスにさえ入れてもらえないのk
844:デフォルトの名無しさん (ワッチョイ 17da-UOua)
22/04/16 14:51:07 gJCOre2S0.net
今は特殊学級は廃止されつつあると聞いたわ
差別に繋がるからだとか
845:デフォルトの名無しさん (ワッチョイ b768-fNw1)
22/04/16 14:55:23 pYTE49690.net
>>830
それな
・ひまわり学級導入
差別だから廃止しろ!
・ひまわり学級撤廃
障がい者と一緒に授業できるわけねーだろ!分けろ!
これを5年ぐらいの周期でず~~~っと繰り返してる。少なくともここ30年はそう
846:デフォルトの名無しさん
22/04/16 15:07:04.56 rh08QZl8a.net
1年目 ひまわり学級導入
6年目 ひまわり学級撤廃
11年目 ひまわり学級導入
16年目 ひまわり学級撤廃
21年目 ひまわり学級導入
26年目 ひまわり学級撤廃
30年目、ひまわり学級は撤廃された状態
847:デフォルトの名無しさん (ワッチョイ d7da-dJ8g)
22/04/16 17:39:51 aIa1oxEK0.net
コールバイネームしたいから無理にクラス使うというのはある。
848:デフォルトの名無しさん (ワッチョイ 17da-UOua)
22/04/16 18:34:28 gJCOre2S0.net
自分が通っていた学校の特殊学級は8組て名称だった
6組まではノーマルで何故か7組が無くて8組が特殊だった。
849:デフォルトの名無しさん
22/04/16 18:39:26.14 vqf9SIAK0.net
>>833
何故無理にCallbyName使う必要があるの?
標準モジュールなら普通にApplication.Runじゃダメなの?
850:デフォルトの名無しさん
22/04/17 02:09:30.35 BVP+DOJH0.net
>>835
コールバックのやり方調べた時に、
何か忘れたけど、他は面倒な制約があって、
コールバイネームしか使わなくなった。
851:デフォルトの名無しさん
22/04/17 03:28:38.26 N2omx0Taa.net
たまーに出てくるオブジェクト指向の話。
もうオブジェクト指向なんて忘れたは。
852:デフォルトの名無しさん
22/04/17 07:38:47.19 X2S+9pHC0.net
ワイのコードは素人指向
853:デフォルトの名無しさん
22/04/17 09:54:53.72 c23oRZKe0.net
>>837
それでも知らんうちに使ってるんやで
使ってる奴に意識させないのがオブジェクト指向
854:デフォルトの名無しさん
22/04/17 10:13:47.49 a3I3T2VGM.net
excel vbaではオブジェクトを利用したプログラミングにはなるけど、
それだけでオブジェクト指向だとは言えないな
855:デフォルトの名無しさん
22/04/17 10:56:37.84 acUYvJMnd.net
玄人志向が玄人向けだったのは最初だけ
856:デフォルトの名無しさん
22/04/18 22:09:45.73 dtBLR+IO0.net
どなたか相談に乗っていただきたいです。
現在、大学の講義で使用するため関数を作成しているのですが、最後に関数に戻り値を入れる際に「代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなけれななりません。」
とコンパイルエラーが出てしまいます。このエラーはどのように解決したらよいでしょうか?
857:デフォルトの名無しさん
22/04/18 22:14:18.56 5XyRTXLN0.net
コード見ないとちょっときつい
858:デフォルトの名無しさん
22/04/18 22:20:21.18 JAMU3YD50.net
コード作成お願いします!
2つのcsvがあってどちらも1列目に主キーがあります。
B:15列目の対応するキーの値を
A:3列目に代入
したいです。
できますかね?
859:デフォルトの名無しさん
22/04/18 22:25:33.62 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:デフォルトの名無しさん
22/04/18 22:26:31.08 dtBLR+IO0.net
>>845
こういった感じです
861:デフォルトの名無しさん
22/04/18 22:27:22.86 dtBLR+IO0.net
VBA自体初めてなので何からしたらいいのかわかっていない状況です。
862:デフォルトの名無しさん (ワッチョイ b768-fNw1)
22/04/18 22:30:08 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:デフォルトの名無しさん
22/04/18 22:41:26.28 dtBLR+IO0.net
>>848
できました。ありがとうございます。
すみません、もう少し相談させていただいてもよろしいですか?
ループさせる際に値を変化させてDoにもどすことはできますか?
864:デフォルトの名無しさん
22/04/18 22:44:42.92 kMWXV8yj0.net
>>847
本筋と関係ない話だけど、HightとTimeは変数名に使わない方がいいよ
同じ名前の関数が既に存在するからトラブルの原因になる
別の単語か略語を考えて
865:デフォルトの名無しさん
22/04/18 22:46:49.95 dtBLR+IO0.net
>>850
小文字一文字とかでも大丈夫ですか?
866:デフォルトの名無しさん
22/04/18 22:48:03.57 tZvgKjwbd.net
それが出来るのがFunctionの良いところよ
戻り値は配列とかに入れておけばok
867:デフォルトの名無しさん
22/04/18 22:54:56.92 kMWXV8yj0.net
>>851
1文字でも動くけど、誰が見ても意味のわかる言葉にするのがマナー
どうしても別の単語を決められなかったら、Height1とかTime1とかにしとけばいい
1文字にするよりはマシ
868:デフォルトの名無しさん
22/04/18 23:00:04.07 5XyRTXLN0.net
マナーってなんだよw
あとで自分が見て分からなくなるのが問題
赤の他人が見てもわかるような名前にしておくと、自分のためになる
869:デフォルトの名無しさん
22/04/18 23:00:47.59 5XyRTXLN0.net
>>849
>ループさせる際に値を変化させてDoにもどすことはできますか?
言ってる意味がよくわからんかった
870:デフォルトの名無しさん
22/04/18 23:01:50.92 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:デフォルトの名無しさん
22/04/18 23:03:04.12 dtBLR+IO0.net
ただ、まちがっているみたいです。
872:デフォルトの名無しさん
22/04/18 23:03:10.61 wKhqv1yX0.net
>>850
Hight なんていう関数あったっけ?
873:デフォルトの名無しさん
22/04/18 23:09:31.78 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:デフォルトの名無しさん
22/04/18 23:13:08.37 dtBLR+IO0.net
すみません、わかりにくいですね。
WL1からなる計算式で求められるWL2とWL1の関係が条件に合わない場合、WL1をWL1とWL2の平均をとって再度WL2を求めたいです。
875:デフォルトの名無しさん
22/04/18 23:55:22.83 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:デフォルトの名無しさん
22/04/19 05:01:48.08 dRTEe6m5a.net
どうでもいいが GやPAIは定数として関数の外にだす方が好き
877:デフォルトの名無しさん
22/04/19 06:39:40.35 UDMLP6tq0.net
>>858
cellsのプロパティにある
文脈的に予約後ってコトぐらいwかるだろ
878:デフォルトの名無しさん (ワッチョイ 9f01-0UVf)
22/04/19 07:20:27 KrqnU+fb0.net
>>863
Cells w
それを言うなら Range だし、Range にあるのは Height な
そもそも単なるプロパティ名で関数でも
879:予約後でもないし
880:デフォルトの名無しさん (ワッチョイ b768-fNw1)
22/04/19 07:25:56 UDMLP6tq0.net
よく見たらhightかよクソがw
881:デフォルトの名無しさん
22/04/19 07:48:45.10 muVDZfH30.net
>>860
ざっくり見た感じだけなので詳しく分からないけどその計算式って正しい?
その計算式の内容と判定条件だと初期値の値によっては計算が収束せずに振動を繰り返すことになるので
ループから脱出できなくなる気がする
882:デフォルトの名無しさん (ワッチョイ bf14-4qoo)
22/04/19 12:03:50 SIyX6JLR0.net
Do?Loopの例文見ると条件はWhileが多い気がする
自分はUntil派なんですが
883:デフォルトの名無しさん
22/04/19 12:41:24.95 y80OoYXYM.net
でっていう
884:デフォルトの名無しさん
22/04/19 12:53:32.89 Hbe28u0D0.net
Untilはコーディングミスで「なぜか抜けられない」状態が起きた時の解決がめんどくさいからあんま使いたくない
Whileならコーディングミスっても、値が範囲内でループし続けてるくらいしか原因がないから突き止めやすい
885:デフォルトの名無しさん
22/04/19 14:33:22.38 XaMNMP/i0.net
>>869
無能自慢?
886:デフォルトの名無しさん
22/04/19 14:38:03.91 Hbe28u0D0.net
>>870
リスクは減らしたいってだけの話
自分一人だけがマクロいじるとは限らないし
887:デフォルトの名無しさん
22/04/19 15:06:19.06 XaMNMP/i0.net
>>871
いや、お前が無能なだけ
888:デフォルトの名無しさん
22/04/19 15:24:45.82 Cixyrkk96.net
URLリンク(imgur.com)
一応、大学から共有されている理論式がこんな感じなのでおそらく会ってます
889:デフォルトの名無しさん
22/04/19 16:03:50.77 NrfRvlTVr.net
どうでもいいけど、Excelってそういう計算やったほうがいいんだっけ
小数点以下になるようなものは避けたほうがいいって記憶がある
890:デフォルトの名無しさん
22/04/19 16:13:18.16 Hbe28u0D0.net
小数点以下の計算は誤った結果が出ることも結構あるから、
・型はCurrencyにして小数点以下5桁までにする
・可能であれば整数に直してから計算させる
くらいはしておいた方がいいね
891:デフォルトの名無しさん
22/04/19 16:39:16.39 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:デフォルトの名無しさん
22/04/19 16:41:24.14 Cixyrkk96.net
IF条件で抜け出せなくなってしまったとかでしょうか?
893:デフォルトの名無しさん
22/04/19 16:59:26.12 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:デフォルトの名無しさん
22/04/19 17:04:43.35 XaMNMP/i0.net
馬鹿だからCurrencyを使うのだな
895:デフォルトの名無しさん
22/04/19 17:07:08.59 3cTbAnobM.net
数値計算に固定小数点数のCurrecyは駄目
浮動小数点数のDlubleでないと直ぐにオーバーフローする
896:デフォルトの名無しさん
22/04/19 17:34:34.65 C02npA8w0.net
解決しました!!本当にありがとうございます!
897:デフォルトの名無しさん
22/04/19 17:35:09.38 C02npA8w0.net
めっちゃ興奮するw
898:デフォルトの名無しさん
22/04/19 17:37:09.90 C02npA8w0.net
>>878
ありがとうございます!
899:デフォルトの名無しさん
22/04/19 17:44:54.91 Hbe28u0D0.net
>>883
解決したみたいで何よりです
多分、0.001より小さいかの判定だけがネックだったんだと思う
もし1と比較している理由を教授に訊かれたら「VBAだと小数の計算が正確ではない事象があるため、回避できるように数式を書きました」と答えとき
900:デフォルトの名無しさん
22/04/19 17:56:52.80 C02npA8w0.net
>>884
わかりました!
今回は本当助かりました。本当にありがとうございました。
901:デフォルトの名無しさん
22/04/19 22:29:37.25 2A4xjXpz0.net
おー理解できたのなら大学の工機前頑張ってなー
902:デフォルトの名無しさん (ワッチョイ b717-73NO)
22/04/20 00:08:28 Tl7YCJ+60.net
double型を使って除算をすると小数点以下の誤差が出る場合があるのはどのように解決したら良いでしょうか
四捨五入では本来算出したい数値からズレてしまいます
currency型なら誤差が発生しない聞いたのですがどうやら馬鹿が使う物らしいので何か別の方法をご教示頂けませんでしょうか
903:デフォルトの名無しさん
22/04/20 00:24:45.89 TUC465n/0.net
>>887
馬鹿が悔しくて質問か?
除算で1÷3だったらどうなると思う?
904:デフォルトの名無しさん
22/04/20 00:37:19.89 EV0gbz680.net
>>887
除算した結果をどうしたいのかによる
結果を他の数値と比較したいのなら、比較したい数値に除数を掛けて比較する
905:デフォルトの名無しさん (ラクッペペ MM8f-/HVa)
22/04/20 02:03:14 HkpFcH5SM.net
実際のところ除算の丸め誤差が問題になることは少ない
数値計算では有効数字と桁数さえ把握していれば十分な精度で演算できる
というか浮動小数点だろうが固定小数点だろうが四捨五入すれば必ず丸め誤差は発生する
むしろ浮動小数点を扱う場合は桁数の差が大きい数値を加減算する時の情報落ちと、値が近い数値同士を減算する時の桁落ちの方が厄介
906:デフォルトの名無しさん (ワッチョイ b717-73NO)
22/04/20 02:16:34 Tl7YCJ+60.net
>>889
分かりにくかったらごめんなさい
・数十行(場合により数百行から千行弱)の作業計画表があってそれぞれ開始日、終了日、工数を作業担当者が決定し、それとは別に納期を設定します
・各行では作業日数を算出し、工数を日割り計算し、小数点第二位で四捨五入、最終日に余りを加算して進捗の計画とします
・作業担当者は日毎に各項目の進捗率を入力します
・作業担当者はこのファイルとは別に上位工程担当者との連絡シートを更新し、そこで発生する追加工数などをこのファイルで読み込みます
・上記データを元に様々な演算を行い、納期に対して進み見込みか遅れ見込みか、またそれが何日の見込みかを算出します
・結果を当初計画、進捗実績および予測、納期などをグラフで可視化
という仕様のツールなのですが2つ目のあたりで余計なズレが発生して演算が狂ってしまう場合があり、
currency型に値を放り込んで強引にズレが生じないようにしているのが現状です
100%発生するのではなく20物件に1件程度の発生率なので如何したものかと頭を悩ませております
907:デフォルトの名無しさん
22/04/20 04:15:00.17 i+5dFZiZM.net
>>891
算数わかる?
908:デフォルトの名無しさん
22/04/20 06:42:44.94 PPr2by3tM.net
>891
2つ目のあたりというのがよく分からないけど箇条書きの2段目の項目のことなら処理の仕方が間違ってる
最後に余りを足すなら途中経過はすべて切捨てで処理、途中経過を四捨五入するなら全ての累積値を最後に被除数から引いて加算値を求める
どちらかで処理しないとズレるのは当たり前
909:デフォルトの名無しさん (ワッチョイ 1701-hfAD)
22/04/20 07:19:32 Ls68Jrpy0.net
Currency型てのは誤差が出ないわけじゃなくて精度が固定されてるっていうことなんだけどな
そもそも工程表程度の精度で浮動小数点の誤差が問題になることなんてないだろうに
どうしても誤差が気になるなら割り算を商余で表現するとか演算順序の見直し(割り算を最後に)
910:デフォルトの名無しさん (ブーイモ MMcf-73NO)
22/04/20 07:23:24 uFaPvbC9M.net
>>893
余りは工数-日毎工数x作業日数で算出していましたが処理が違いますか?
勿論この場合余りが負の値になる状況もあるので正確には余りとは違う表現をするのが正しいのですが
これで算出した最終日の工数が3.5hになるべきところが3.49999hになるのは計算式の誤りですか?
911:デフォルトの名無しさん
22/04/20 07:34:26.59 lCHITGXH0.net
>>895
最後に小数点以下第二位で四捨五入すればいいじゃん
912:デフォルトの名無しさん
22/04/20 07:40:54.07 lCHITGXH0.net
>>895
どこでどれぐらい誤差が出るかは元データと計算式とデータ型によるから、その情報だけではどこが悪いか判断できない
工数は小数点以下第何位まで入力されてんの?
そもそもデータが1000行しかないんなら別にCurrencyのままでいいじゃん
仕事の目的はプログラミングじゃないんだから、結果がちゃんと出たんなら現時点ではそこで終わっとけ
誤差の処理をちゃんとやうとすると情報サイエンスの基礎をみっちりやらないと無理だから、今回の件とは別に自宅で時間かけて勉強しろ
913:デフォルトの名無しさん
22/04/20 07:47:48.41 uFaPvbC9M.net
>>896
四捨五入した値をdouble型に代入した際にもこの誤差が発生する場合もあったのですがその場合の対処はDoWhileで数値が丸められるまで四捨五入を繰り返す処理を噛ませれば良いですか?
それよりcurrency型に代入した方が処理を省略できるのではないでしょうか
担当者の癖や上位工程担当者の癖、物件の種類などを加味して分析して完了予測を出すためツール全体で2万弱のステップ数があり、可能な限り処理を早めたいです
まぁそんなの誤差の範囲じゃんとかもっと別に短縮出来る所あるだろって言われたらそれはそうってなるんですが
工数は小数点第一位までの入力です
914:デフォルトの名無しさん
22/04/20 08:21:13.14 lCHITGXH0.net
>>898
10進数の0.1は2進数だと循環小数になるんだわ
Doubleは単に桁数が増えるだけで誤差がなくなるわけじゃないから、たぶん根本的に理解が間違ってる
915:デフォルトの名無しさん
22/04/20 11:58:28.08 TUC465n/0.net
>>898
そもそも何が問題かわかってる?
コンピュータ(VBA)の割り算では例えば0.999999とかになる問題は常にあることと、有効桁数を常に頭に入れてロジックを組む必要がある
割り算した結果の少数点同士の足し算もできるだけ避ける
小数点以下は一桁と決まってるなら最初から10倍しといて見せる時だけ小数点を付ける
最終的に割り算したら四捨五入する
などなど当たり前のことをわかってないから数値が合わないように見える
こんなの基本だが
916:デフォルトの名無しさん
22/04/20 12:03:05.91 TUC465n/0.net
それと、変数や定数、埋め込み数値の型に気を付け、違う型同士の演算ではどういう結果になるかも言語の仕様を常に調べるのは当たり前のこと
917:デフォルトの名無しさん (ワッチョイ ff63-0fbr)
22/04/20 12:14:09 AAz4B5BA0.net
>>901
なるほど!さすが
918:物知りですね! でもここは質問スレだからもう少し人には優しくしてくださいね
919:デフォルトの名無しさん
22/04/20 12:39:04.97 dxBIrhD/0.net
プログラムの本質からは外れるけど、現場の工場要員を秒刻みで拘束することに繋がるのを
把握しておくべき 上の方の役員からの指示でのシステム構築なのか、現場の意見を汲んだ
システム化なのかでも変わってくるかも知らんが、古来そういうのは運用し出してから破綻する
相手がロボットならまだしも、自分だって作業を秒刻みで拘束されたら嫌気さすだろうに
システム構築する側の自己満足に過ぎないような無駄なヶ所に注力したところで給料泥棒化するだけ
実際には不良(材料不良・加工不良・落下などの破損・etc)が出たり加工機械の不具合で作業がSTOPしたり
余った時間をバッファに充てるだけじゃ無くて、敢えて余裕をもたせたプランニングを意識しないと
全社員から反発くらって、せっかくの仕事が無かったことにされる 黒歴史の予感しかしない
ロボットやオートメーション機器のためのプログラムだとしたらVBAは間違ってると思うし
920:デフォルトの名無しさん (ワッチョイ 5701-5h/q)
22/04/20 13:55:16 wuSnjbzX0.net
>>900
浮動小数点数は特定の桁数の2進数で表現できる数字に丸める表現方法で、10進数の有効桁数は関係ないんじゃ?
そもそも「有効桁数を頭に入れて〜」みたいな正確さを考えて使う型じゃなくて、曖昧で良い場合に使う。
小数同士の演算は(オーバーフローを無視すれば)固定小数点数で問題なく行えるから避ける必要ない。
921:デフォルトの名無しさん
22/04/20 13:58:17.02 nqlym3kL0.net
基本は大事だから
何度でも繰り返しておくんなまし。
922:デフォルトの名無しさん
22/04/20 14:12:37.06 2WayYnGs0.net
質問ですが、
VBAからwebページのデータを取得するとき、
CreateObject("InternetExplorer.Application")とかってやりますが、
サポート終了後はどうなりますか?
Edgeでできる?
923:デフォルトの名無しさん
22/04/20 14:45:20.55 W96CmtFuM.net
>>906
Selenium Webdriver
924:デフォルトの名無しさん (ワッチョイ 5701-5h/q)
22/04/20 15:54:04 wuSnjbzX0.net
>>906
当分サポート終了はないけど、そうなったらできなくなる。
Edgeじゃできないから代替案を考える必要がある。
有名なのはSelenium、Chrome DevTool Protocol
前者はライブラリ(参照設定する奴)を利用者全員にインストールしてもらい、
更にブラウザとのバージョン互換性にも対応する必要がある
ただし動作環境はエクセルのみっていうVBA最大のメリットを失う
後者は単独で動作するモジュールが作られてる
VBA以外の言語の開発環境があるなら、
スクレイピング部分はそれで作成してVBAから呼び出すって方法もある。
自分はそうしてるよ
925:デフォルトの名無しさん (ワッチョイ 5701-5h/q)
22/04/20 15:57:01 wuSnjbzX0.net
edgeじゃできない、は
CreateObject("InternetExplorer.Application") を使ってedgeを操作できないって意味ね
だからseleniumとかでedgeを操作することになる
926:デフォルトの名無しさん
22/04/20 16:15:46.15 TUC465n/0.net
>>904
わからないなら黙っていればいいのに
927:デフォルトの名無しさん
22/04/20 16:20:42.29 oDE2bDUYM.net
固定小数点は格納するたびに四捨五入するようなもんだから誤差の蓄積は多いが
人間社会ではコレをヨシ!としているから問題ない
天文学的な計算では命中しないだろう
928:デフォルトの名無しさん
22/04/20 16:26:01.75 2WayYnGs0.net
>>907
ありがとう。
929:デフォルトの名無しさん (ワッチョイ b72f-mbkD)
22/04/20 17:45:44 DAsyvBxD0.net
>>911
>固定小数点は格納するたびに四捨五入するようなもん
もってる精度の桁数を超えない限りそんなことはないわ
想定する桁数内で誤差がでないから固定小数点使うんだぞ
逆に一般的なプログラム言語の浮動小数点は小数以下桁数が浮動する癖に0.1が正確じゃなかったりするから問題なんだよ
930:デフォルトの名無しさん
22/04/20 19:09:32.27 cVTwugEg0.net
0.1は0.1だよ
931:デフォルトの名無しさん
22/04/20 19:25:53.48 FB1fQipzM.net
0.1E+15
桁数は10の15乗の1京
有効数字は1桁の0.1
値は1000兆でも数値は0.1
932:デフォルトの名無しさん
22/04/20 19:43:46.55 lF2OJV8Ed.net
Trunc関数で不要な桁をバッサリ逝けば良いんじゃない?
933:デフォルトの名無しさん
22/04/20 20:09:02.82 2WayYnGs0.net
>>908
ありがとうございます。
iMacrosってのを試してました。
Selenium、Chrome DevTool Protocolを調べてみます。
Excelで入力ダイアログボックスを出して、入力した番号に応じて、そのページのデータを取りに行く、
ってことがやりたいです。
言語はなんでもいいですね。
できれば、Visual Studioを使いたいですが…w
934:デフォルトの名無しさん
22/04/20 20:56:24.65 by8HP/iQ0.net
なんだIEEE754仕様問題の話題か。
10進と16進(2進)の浮動小数差異が出るのはまぁある意味仕方がない。
固定小数点の型を持つ言語を使うか、割る前に何桁か分10のべき乗数を掛けて割った後に同じだけ割ってやって適当なところで諦めるか、というところが落としどころだろうね。
ちなみにEXCELの数式の四捨五入は本当に四捨五入だけど、VBAの四捨五入は銀行丸めだから気をつけてね。
935:デフォルトの名無しさん
22/04/20 21:03:02.83 lF2OJV8Ed.net
因みにパワクエも銀行丸め
いい加減統一して欲しいわ
936:デフォルトの名無しさん
22/04/20 21:09:55.19 Q+UfmON+0.net
四捨五入はRound使わなくてもできるらしいで
知らんけど
937:デフォルトの名無しさん
22/04/20 21:17:52.87 Me5L26li0.net
>>906
おれも心配してたけどオートメーションの場合は6月以降も使えるらしいな
938:デフォルトの名無しさん
22/04/20 22:25:36.74 DAsyvBxD0.net
>>918
暗黙の変換(丸め)を四捨五入というのは問題があるかと
939:デフォルトの名無しさん
22/04/20 23:37:18.06 by8HP/iQ0.net
>>922
何故に暗黙の変換限定の話と思ったのかは分からないけど、型はなるべく明示的に変換しないとね。
その辺、VBAはOption Strict Onが使えないから大変。
もっとも、.Netでも匿名型を使うメソッドは固めてOption Strict Offに設定したモジュールに突っ込んでおく必要があるけど。
940:デフォルトの名無しさん (ワッチョイ b72f-mbkD)
22/04/21 17:21:20 pjiVvgnX0.net
ああ、そうだな。Cxxxで明示的に型変換しても銀行丸めだから
暗黙の変換に限った話ではなかったな
匿名型のくだりは何を言ってるか意味不明だがな
匿名型は名前がついてないだけで厳密に型指定されているんだが
941:デフォルトの名無しさん
22/04/21 23:11:20.77 VWW2tbiZ0.net
CcxxとかじゃなくてもRound使ったって普通に銀行丸のだろ
942:デフォルトの名無しさん
22/04/22 02:09:40.61 M5fmJ0ze0.net
ワークシート関数のROUNDは四捨五入
VBAのRound関数は銀行丸め
VB.netのMath.Roundメソッドも銀行丸め
これ真面目な話テストに出るし実務でもトラブルの元だからちゃんと覚えて使い分けろよ
943:デフォルトの名無しさん
22/04/22 08:50:16.15 Uci4ALKRM.net
そもそも四捨五入や銀行丸めは暗黙の(型)変換でも何でもないけどな
944:デフォルトの名無しさん
22/04/22 12:17:14.78 6grDaRhxp.net
VBAの四捨五入は型変換でやるもんだと思ってるんだろ
945:デフォルトの名無しさん
22/04/22 12:26:05.45 Sb+Ase1ga.net
VBAで全ての物事を解決したいと考えています。
まずはOCRからやっていきたいです。
次に、人工知能とビッグデータに関する VBA のライブラリを充実させたいです。
それができたら、VBA で、callbyName を使って、疑似マルチスレッド化してサーバーOSを作り、
メタバースを作りたいです。
どうしたらいいですか?
946:デフォルトの名無しさん
22/04/22 12:56:56.20 JqjwtZFMr.net
沢山金がある
→MSに依頼する
少しだけ金がある
→スクールにでも通う
金が無い
→自力で調べろ
947:デフォルトの名無しさん
22/04/22 13:46:25.69 qHWul8Ex0.net
>>929
もう休み始まったのか羨ましいな
948:デフォルトの名無しさん
22/04/23 07:32:43.48 Q/JWtTUi0.net
VBAのコードをパスワードではなく
AccessのようにMDEまたはACCDE化して隠蔽できないのかね?
949:デフォルトの名無しさん
22/04/23 13:58:03.66 yVxZarCbp.net
あったとして、ワークシートが見れない
950:デフォルトの名無しさん
22/04/23 21:14:41.84 QWCWIiV00.net
VB6.0の質問となります。
ご存じのかた、ご教授お願い致します。
CommandButton1のDownPictureプロパティ(ボタンを押すと指定したピクチャが表示される)
で設定するピクチャファイルをボタンを押すたびにランダムのピクチャを
表示する方法はありますでしょうか?
ピクチャを固定でなく、可変でいろいろなピクチャを表示することはできるのでしょうか?
宜しくお願い致します。
951:デフォルトの名無しさん
22/04/23 21:26:02.35 Owv7WUis0.net
>>934
可能だけどスレチ
VBとVBAは似てるけどまったく違う言語なのよ
VB専門のスレで聞くか、できるという情報を手がかりにぐぐって
952:934 (ワッチョイ 2590-WvSx)
22/04/23 21:56:53 QWCWIiV00.net
>>935
ありがとうございます。
VBスレで聞いてみます。
953:デフォルトの名無しさん
22/04/24 03:02:47.88 dQQkhpXr0.net
なんで.netじゃなくてVB6.0?
954:デフォルトの名無しさん (ワッチョイ a868-g9NX)
22/04/24 07:12:27 V025dUWC0.net
聞いてやるな
955:デフォルトの名無しさん
22/04/24 08:27:40.38 rcB2xidb0.net
保守案件じゃねーの?
それより
> VBとVBAは似てるけどまったく違う言語なのよ
のほうが気になるわ
956:デフォルトの名無しさん
22/04/24 08:33:51.29 V025dUWC0.net
VB6とVBAは割りと似てるよ
.netは別物だけど
957:デフォルトの名無しさん
22/04/24 09:47:15.58 K6J8xSzg0.net
VB.NetとVBAが違うと言いたかったんじゃないか?
VBAとVB6.0なんてガワ以外大して変わらんだろ
958:デフォルトの名無しさん
22/04/24 11:05:42.56 JjYc30D0a.net
それなら全くスレチって言うわけでもないだろうしVB6以前スレに誘導してもあっちは過疎ってるから>>935の真意がわからん
古代VBプログラマ質問スレ(Ver.6.0 まで) part65 [転載禁止]c2ch.net
スレリンク(tech板)
959:デフォルトの名無しさん
22/04/24 11:34:19.84 3PCmdv6z0.net
>>934
配列かコレクションに取りうる画像ファイルのパス全部突っ込んどいて
毎回Rnd関数でランダム添え字作成してDownPictureへ代入する処理を
Timerイベントで定期的に起こせばいいんじゃね
960:デフォルトの名無しさん
22/04/24 12:34:51.24 /i/HSWcF0.net
>934の方法で出来るね
vb.netはCommandButtonというコントロールがないからButtonコントロールで処理することになるけど
961:934
22/04/24 14:05:21.06 sOMp0pcl0.net
>>943
教えていただき、ありがとうございます!
この方法でできました!
助かりました!
>>944
.netは方法が違うんですね。
ありがとうございます。
962:デフォルトの名無しさん
22/04/24 14:18:48.53 H35nhyzua.net
VBAに聞けば、VB6.0の問題が解決すると思ってる魂胆がむかつく
963:デフォルトの名無しさん
22/04/24 14:19:17.64 H35nhyzua.net
次の質問どーぞー!
964:デフォルトの名無しさん
22/04/24 14:49:27.80 SWKX3wPR0.net
>>933
なんでだよ Accessだってオブジェクトはそのまんまだぞ Codeを隠すってだけだ
まあ、Excelでそんなことしたら阿鼻叫喚の地獄絵図がそこら中で起きるだけだろうが
965:デフォルトの名無しさん
22/04/24 15:00:54.37 awQxKQ/u0.net
>>945
結局、こういう馬鹿は馬鹿だからこんな書き込みをすることになるんだよな
966:デフォルトの名無しさん (ワッチョイ a868-g9NX)
22/04/24 19:19:11 V025dUWC0.net
>>949
そうそう、まさに>>949みたいな感じで
967:デフォルトの名無しさん
22/04/24 20:32:26.94 4thwl0KN0.net
VBAのコードを隠すとかw
いやらしいコードとか胸アツ
968:デフォルトの名無しさん
22/04/24 21:56:52.40 HnHBh+4U0.net
ソースを見たらBase64が書き込まれてるとかかw
969:デフォルトの名無しさん
22/04/24 22:10:43.02 qlayZYg40.net
変数や関数名を1文字にして、インデントをなくし、マルチステートメントを使い、GoToで飛ばしまくる
これぐらいやっとけばニワカには暗号化されてるのと同じに見えるよ
組み込み関数に型文字を付けたり、行番号とか書いとけばさらに混乱するんじゃない?
970:デフォルトの名無しさん
22/04/24 22:11:47.35 qlayZYg40.net
代入のLetを省略せずに書くとか
971:デフォルトの名無しさん
22/04/24 22:21:56.70 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:デフォルトの名無しさん
22/04/25 16:32:49.44 mIKR8D/k0.net
もっと初心者だとこういうもんだと覚えて、ウルトラコード量産して
逆にそれがウケてそこら中から引っ張りだこに成る可能性も
973:デフォルトの名無しさん
22/04/25 18:25:34.65 d4FCGwAUa.net
あとどこからも呼ばれないコードを周囲に書いとくとか
974:デフォルトの名無しさん
22/04/25 22:42:22.33 LL5g/Itw0.net
難読化してくれるサイトもあるようだがAIでも駆使してんのかよ
975:デフォルトの名無しさん
22/04/26 13:34:27.36 h7wIW8Sj0.net
VBを学んでみたいのだけど、専用アプリをインストールすれば良いのですか?
976:デフォルトの名無しさん
22/04/26 13:39:28.14 4e+J3DaO0.net
それを聞くようでは勉強進まないと思うぞ
VBAなら、Excelのオプションから設定しよう
977:デフォルトの名無しさん
22/04/26 13:41:38.59 h7wIW8Sj0.net
はい!分かりました先輩!
978:デフォルトの名無しさん
22/04/27 11:18:39.59 13VCBUUL0.net
VBとVBAは違うだろ
979:デフォルトの名無しさん
22/04/27 11:35:58.26 5AfXZQ180.net
めんどくさくなりそうだからその話題はいいわ
980:デフォルトの名無しさん
22/04/27 12:17:37.70 0nl7nS5l0.net
ヤフーの質問サイトをたまに見ていると、VB板なのにExcel VBAの質問している方が多いですからね。
981:デフォルトの名無しさん
22/04/27 14:37:20.10 VQIBBePJ0.net
これはマイクロソフトが悪い
982:デフォルトの名無しさん
22/04/28 02:09:14.27 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:デフォルトの名無しさん
22/04/28 06:30:27.37 4LxgxN/hd.net
ストゼロのコピペみたいになってるので先ずはExcelの異常より自分の異常を気にした方が良い
お大事に
984:デフォルトの名無しさん
22/04/28 06:56:19.59 Xx5H6lJB0.net
>>966
重い
985:デフォルトの名無しさん
22/04/28 07:13:52.33 Nya/6dWlM.net
うーんこの
986:デフォルトの名無しさん
22/04/28 08:23:08.41 tFS3Ff7A0.net
同一sheet、複数areaの仕様通り
987:デフォルトの名無しさん
22/04/28 10:11:30.42 w1n3DLDr0.net
新人の頃、なんでもやたらバグ!と言い募ってたら、ここの諸先輩にブン殴られた
何でもかでもぜんぶ他者のせいにしてると、モニタから腕が伸びてきてホントにブン殴られる
多分、立て込んでるがキーワード 立て込んでるなら尚更マシン複数台用意して
作業を分散して負荷を軽減するなり、都度都度保存してExcelも終了させておいて
合間にエロ動画見たりしながらExcelさんを休ませてあげないと、テンポる
988:デフォルトの名無しさん
22/04/28 14:24:22.28 UYKtqYXXd.net
糖質か
989:デフォルトの名無しさん
22/04/29 15:02:24.64 VxUwChyk0.net
ここ最近、5ちゃん全体が重いのだが?
同志達もそう?
990:デフォルトの名無しさん
22/04/29 17:00:23.18 1aSdL/gJ0.net
>>973
昔から2ちゃん5ちゃんは世界のどこかで紛争が起きるとアクセスが急増したりサイバー攻撃されたりで重くなる
今はロシちゃんウクちゃんのせい
991:デフォルトの名無しさん
22/04/29 19:06:07.89 lunnn7Hg0.net
5chのサーバーはアメリカにある
なんかあるとすぐに攻撃されるからな
992:デフォルトの名無しさん
22/04/30 00:10:15.39 xtMjZAZqa.net
まったく重くないが。
そろそろ次スレよろ
993:デフォルトの名無しさん
22/04/30 10:32:12.86 lfBpjyTL0.net
>>976
はぁ?よろじゃねえよ
てめえが立てろハゲ
994:デフォルトの名無しさん
22/04/30 10:33:08.68 /k/F8o6k0.net
よろ~☆ミ
995:デフォルトの名無しさん
22/04/30 11:25:04.05 SY9/68Ub0.net
46497!
996:デフォルトの名無しさん
22/04/30 15:57:06.54 jIMADI4Y0.net
あれ?昔からのしきたりで、スレ主が次のスレ立てを担当するはずでは??
997:デフォルトの名無しさん
22/04/30 15:58:48.35 ttNuaWX+d.net
質問したい奴が立てればいいぐらい
どうでもいいスレだろ
998:デフォルトの名無しさん
22/05/01 00:13:28.72 AQA/eAvl0.net
980番を踏んだ奴が立てるんじゃなかったか
999:デフォルトの名無しさん
22/05/01 01:58:03.34 Pk0oKD+E0.net
建て方知らないもん
アソコの立て方は得意だけどさ
1000:デフォルトの名無しさん
22/05/01 02:01:11.00 q0kLnjNbd.net
立てても使い道(相手がいない)がないのになぜ立てるか
1001:デフォルトの名無しさん
22/05/01 02:24:06.36 2t63WK/jM.net
立てたぞ
Excel VBA 質問スレ Part76
スレリンク(tech板)
1002:デフォルトの名無しさん
22/05/01 05:51:26.54 QKAZyHTH0.net
>>985
有能
1003:デフォルトの名無しさん
22/05/03 14:10:11.29 X7BfbxUdr.net
Excel2019になってから重いデータを処理する時にエラーが出やすくなりました。
7000データあるものから鳥瞰図を作成して画像として貼り付ける処理をしているんですがコピーして貼り付ける際にたまにエラーが発生します。(1004データを貼り付けできません)
バッファとして貼り付ける前にwaitで数秒待ってあげるとエラーが出なくなるんですが……
仕方ないんですかね?
1004:デフォルトの名無しさん
22/05/03 16:57:37.12 9Zz7qGMa0.net
エラーをキャッチすれば?
1005:デフォルトの名無しさん (ワッチョイ 2701-XZ6m)
22/05/03 18:40:38 1FiEgH3Q0.net
エラー発生時にエラータグにとばしてそこで数秒待って再度実行も試しましたが結局永久ループになってしまいました。
1006:デフォルトの名無しさん (ワッチョイ 075f-erxH)
22/05/03 18:51:21 wJ2FprYn0.net
DoEvents入れてみるとか
1007:デフォルトの名無しさん
22/05/03 19:57:23.11 1FiEgH3Q0.net
DoEventsも最初に試しましたがイマイチでした。
あまり同じような症状が出ている方少ないのかな?重い処理だと次の処理が追い越しちゃってエラーが出てる感じなんですよね。
1008:デフォルトの名無しさん
22/05/03 23:05:49.83 0jm7qJTo0.net
Application.ScreenUpdating = False
をやってから処理して、終わったら
Application.ScreenUpdating = True
にしてみたら?
1009:デフォルトの名無しさん
22/05/04 01:08:45.09 llwekS7n0.net
>>987
まぁ同期が取り切れていないということで、
コピーが終了したタイミングが取得出来ないと言うことなら待たせるのは仕方ないんじゃないかな?
後続の処理の流れによりけりになるけど、
ある程度時間が経過すればエラーが起きなくなると言うことであれば、それを待たせる時間がもったいないなら
そこで貼り付けはしないで後続処理を進めて、貼り付け自体はタイマーでイベントを起こしてそこで貼り付けの処理すれば時間の節約にはなるかも知れない。
内部的にどんな感じで処理されてるか分からないから後続処理の内容によって待つ時間を増やさなければいけなくなるかも知れないけどね。
1010:デフォルトの名無しさん
22/05/04 04:41:51.29 Bmz10qTz0.net
アドバイスありがとうございます。
Application.ScreenUpdating=Falseはいれています。
やはり仕方無いのですかね?
PCの性能面でも良くないのかも知れません。
メモリーリークのような事が起こっているのでしょうかね?
1011:デフォルトの名無しさん (ワッチョイ 87da-Nh0L)
22/05/04 06:45:06 XHZmixda0.net
オブジェクト変数のその都度開放とかは?
1012:デフォルトの名無しさん (ワッチョイ df4f-bbcD)
22/05/04 07:00:53 llwekS7n0.net
>>994
メモリーリークというのは
メモリの解放を上手く行えずゴミが溜まったり
本来指すべきメモリのアドレスを
違うアドレスをさして変なアドレスからデータ読んだり
変なところに飛んだりすることを指す訳だけど
話を聞いた限りだとその可能性は低いかな。
強いて言えばコピーする際にクリップボードが
数、あるいは容量的にパンパンで次のコピーを
行おうとしたときにもうコピー出来ない、
またはコピーしようとしているんだけど
空き容量が少なくて、そこで内容を展開しているから
時間が掛かっているとかの類が考えられるかな。
どのくらいコピーペーストしているのか分からないけど、
とりあえずコピーペーストする前かした後に
一回一回、クリップボードをクリアする処理を挟んでみては?
1013:デフォルトの名無しさん
22/05/04 07:22:42.23 sN1XYX+fd.net
Excel2019当方でも同じ
PCの性能が良すぎてExcelの処理が追いついてない感じ
極力クリップボード経由を避ける
どうしても必要なら間にDoEvents - Sleep - DoEvents を入れる
1014:デフォルトの名無しさん
22/05/04 07:28:33.66 CsYq7Xth0.net
>>996
> 本来指すべきメモリのアドレスを
> 違うアドレスをさして変なアドレスからデータ読んだり
> 変なところに飛んだりすることを指す訳だけど
それはメモリーリークとは言いません
1015:デフォルトの名無しさん
22/05/04 11:56:06.30 ZnBr6fHma.net
pc買い替え
1016:デフォルトの名無しさん
22/05/04 12:08:38.05 7uEIwZovM.net
1000
1017:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 21時間 44分 6秒
1018:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています