1 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 02:23:41.78 ID:2t63WK/jM.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part75 https://mevius.5ch.net/test/read.cgi/tech/1644384272/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
720 名前:デフォルトの名無しさん [2022/06/27(月) 10:00:09.47 ID:Do3p35pda.net] >>698 内容がわかるようにコメントつければいいんじゃね
721 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 10:15:26.20 ID:3L19Fpz+0.net] >>705-706 モジュール名にはできないけど>>694 のは手続き名だからモジュール名で修飾(※)すれば呼び出せるよ ※ マクロ名の欄に直接 Module1.n98 のように入力する
722 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 10:19:02.79 ID:iDqL/u9w0.net] >>712 スマン、勘違いしてた
723 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 10:24:13.47 ID:3L19Fpz+0.net] >>698 一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700 や>>708 みたいにした方が読み易い ただ>>701 が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても If N <= UBound(A) And A(N) = 1 Then ... みたいなのは If N <= UBound(A) Then If A(N) = 1 Then ... のようにする必要がある
724 名前:デフォルトの名無しさん [2022/06/27(月) 10:29:53.48 ID:kVADuAyl0.net] まあ、複雑な判定するならメソッドに切り出すのが間違いないわな VBEだとIDEのサポートないから若干めんどくさいけど
725 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:00:14.42 ID:tRNW+/P90.net] >>698 賛否あると思うが For Each i In Collection: Do If a <> 1 Then Exit Do If b <> 1 Then Exit Do If c <> 1 Then Exit Do Debug.Print "OK" Loop: Next みたいな書き方もある
726 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:01:13.33 ID:tRNW+/P90.net] 最後の行間違えた Loop Until 1: Next
727 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:05:37.12 ID:zkyvRAcfa.net] あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし
728 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:29:16.42 ID:gUdOjGv30.net] セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。 本来はメッセージだして弾くべきじゃね? office365でも同じならだれかMSにチクってみてくれ。 以前、MSの掲示板にWinの不具合を書いたら、 速攻で消されたが、 こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。
729 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:31:14.56 ID:iDqL/u9w0.net] >>719 365でも同じだよ
730 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:34:53.87 ID:gUdOjGv30.net] >>700 if a=1 and b=1 and c=1 にすると内部では判断を3回することになる。 if a=1 then if b=1 then if c=1 then にすると判断は少なくなるのだから、ネストするほうが正解じゃね? もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。
731 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:48:23.44 ID:Fr547gX6r.net] >>719 ゆうてVBAとかアプデすんの?
732 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:52:04.31 ID:iDqL/u9w0.net] してるよ
733 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:52:52.11 ID:nfvw1vkN0.net] セキュリティ以外で?
734 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:57:18.86 ID:iDqL/u9w0.net] うん
735 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 11:59:27.42 ID:iDqL/u9w0.net] 頻度はwindoewsやエクセルに比べたらかなり低いけど、やってるよ 確かちょっとずつ便利になってる。本当にちょっとだけ。関数が増えたりはしていないはず。 ソース探したけど見つからねぇ
736 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 12:02:08.29 ID:nfvw1vkN0.net] ふーん。。 まあ元号はあったね。。 古臭いよね。。
737 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 12:04:52.44 ID:nfvw1vkN0.net] 言語仕様っぽいページはあった https://docs.microsoft.com/en-us/openspecs/microsoft_general_purpose_programming_languages/ms-vbal/d5418146-0bd2-45eb-9c7a-fd9502722c74 結局代替がないからなあ
738 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 13:50:25.11 ID:FDoLWwM/d.net] >>718 俺も大体これでやってる
739 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 19:05:07.99 ID:IOT9Z53O0.net] >>698 そもそもi使ってねーじゃん
740 名前:デフォルトの名無しさん [2022/06/27(月) 19:57:12.47 ID:UdQiWAN30.net] どなたか教えてください。 売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。 目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。 とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。
741 名前:デフォルトの名無しさん [2022/06/27(月) 20:18:45.52 ID:UdQiWAN30.net] 731です。 sub ソルバー() dim 振込1 as variant 振込1=worksheets("ソルバー").range("n2:n8") solverok setcell:= worksheets("ソルバー").range("i3"), maxminval:=3, valueof:=振込1, bychange:=worksheets("ソルバー").range("e2:e40"), enginedesc:="grg nonliner" solveradd celreff:=worksheets("ソルバー").range("e2:e40"),relation:=4 solversolve userfinish=true
742 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 20:22:23.17 ID:jYXkLZ/o0.net] で、何がうまくいかないの?
743 名前:デフォルトの名無しさん [2022/06/27(月) 20:26:50.30 ID:UdQiWAN30.net] >>733 ソルバーを実行しても、目的セルが0のままで指定値にと一致する金額の組み合わせが見つかりません。 どの請求分の入金なのか、突合したいです。
744 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 20:35:36.69 ID:9IVJ+eiIa.net] >>734 ソルバーわからんから確認させてください 振込1って変数は配列に入れた値を指定したいものですか?それともセル自体を指定したいものですか? 前者であればそれでいいですが、後者なら変数はRange型にする上で代入時に Set 振込1 =〇〇 としないといけませんが…
745 名前:デフォルトの名無しさん [2022/06/27(月) 20:37:19.75 ID:UdQiWAN30.net] 連投すみません。 変数宣言して、for〜next構文でe列を("e"&i+40)や、n列も("n"&i+40)みたいにしたいんです。 d列には請求金額、e列は空白、目的セルにはsumproduct関数が入ってます。 指定値セルはn2:n8で、それぞれ違う金額が入力されてます。入金額とn2:n8内の金額が一致する組み合わせの請求金額をVBAを使って、求めたいです。
746 名前:デフォルトの名無しさん [2022/06/27(月) 20:39:44.13 ID:UdQiWAN30.net] >>735 ありがとうございます。 ヘルプを確認したら、指定値はバリアント型で書けとあったので、なんとなくvariantにしていました。
747 名前:デフォルトの名無しさん [2022/06/27(月) 20:45:55.27 ID:qw9z/asOd.net] >>737 マルチ死ね
748 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 20:58:49.57 ID:jYXkLZ/o0.net] とりあえず、rangeで回すんじゃなくてcellsで回したら? n列はcells(i,14) e列はcells(i,5)で
749 名前:デフォルトの名無しさん [2022/06/27(月) 21:09:33.28 ID:UdQiWAN30.net] >>739 sub または functionが定義されませんエラーが出ます…
750 名前:デフォルトの名無しさん [2022/06/27(月) 21:10:43.06 ID:UdQiWAN30.net] >>739 cellsも以前試したんですが、上手いこといきませんでした
751 名前:デフォルトの名無しさん [2022/06/27(月) 23:45:06.09 ID:8dHt2RWvM.net] こんな奴が作るプログラムで金勘定とか笑えるわ 己を知らないって馬鹿の特徴なんだよな
752 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 00:04:39.14 ID:41/DPGawd.net] ソルバーってカタカナで書くの余計分からないよ 素直にSolverで良いだろうに 上の困ってるのは一旦マクロの記録で動作確認お薦め
753 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 00:07:49.75 ID:bUNh/khy0.net] >>742 2行目はよく解る www
754 名前:デフォルトの名無しさん [2022/06/28(火) 05:51:37.94 ID:kKObdKOQ0.net] オレオレ詐欺の手伝い?
755 名前:デフォルトの名無しさん [2022/06/28(火) 07:36:23.45 ID:XbsSoqMza.net] >>736 なんで会計ソフト使わないの?
756 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 07:54:25.17 ID:2SIMEAUf0.net] Excelは万能ではないから会計ソフトでやるべき事柄
757 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 08:48:25.11 ID:8yuWSL180.net] この世で最高のコードを見かけた With Range("F27:F56") .Value = .Value End With
758 名前:デフォルトの名無しさん [2022/06/28(火) 09:10:04.94 ID:3ZxXgE6I0.net] >>748 それの意味解る? ちょっと前に同じ様なコード載せてた人いたけど 複数範囲は一度に設定できないって嘆いていたよ
759 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 09:10:36.27 ID:a//tJk240.net] >>732 solverを使うときのパラメーターの設定の方法が間違ってんじゃない。多分値渡しではなくsetを使うと思うよ。 まずマクロの記録もう使ってなんでもいいからsolverで問題を解いてみて、solverを使うときの正しいVBA の書き方を確認しなさい。
760 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 09:52:29.46 ID:qOxYqvDuM.net] >>698 Ifなんたらかんたらを使わないで B2になんか文字が入っていたらC2を B3になんか文字が入っていたらC3を… をスマートに書くならどう書きます? https://i.imgur.com/5VtTNti.jpg
761 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 11:02:29.10 ID:1UWi0IGcd.net] >>751 こんな質問してマウントとりたいんだろうか・・・ こんな質問するならそのスマートな回答も書いておけばいいのに
762 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 11:15:10.25 ID:cqDrGvOU0.net] VBA使わなくてもセルに関数書いときゃいいんじゃね
763 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 12:14:32.96 ID:S7aFTH1NM.net] >>751 お前Access VBAスレにExcelの質問書き込みするんじゃねーよ 迷惑だ
764 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 17:20:05.57 ID:mlWlUbMB0.net] すみません、神様達、教えてください エクセルVBAでは 関数内関数はどうやって作れますか? また複数の関数を目的別に整理する方法として パッケージやモジュール単位にまとめたり マップに収納したりはできるのでしょうか?
765 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 17:52:33.73 ID:fjXXNeRNM.net] >>755 できる vbeエディタウインドウを凝視しているとやり方が判るはず
766 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 17:59:52.62 ID:8yuWSL180.net] >>756 具体的にやり方を教えてあげなよ
767 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 18:51:45.14 ID:gpLDnVSMr.net] >>755 関数内関数ってこれのこと? https://www.sejuku.net/blog/28904
768 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 19:15:28.84 ID:+0CREnk7H.net] >>756 ちょっと凝視してみます >>758 疑似コードですけど例えば、 Function out() Function in1() End Function Dim a=Function in2() End Function out=Array(in1,a) End Function みたいな感じで 関数outの中に関数in1を宣言したり 変数に関数を代入して、returnしたりしたいのです
769 名前:デフォルトの名無しさん [2022/06/28(火) 19:22:25.73 ID:EFCYXnQm0.net] ローカル関数もサポートされてないし 関数をオブジェクトとして扱えないので変数への代入も無理です
770 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 19:22:27.90 ID:+0CREnk7H.net] >>756 標準モジュール単位で関数をまとめればいいってことでしょうか?
771 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 19:29:24.91 ID:+0CREnk7H.net] >>760 ありがとうございます なるほどです すっきりしました、神様ありがとう モジュールを使いながら関数を整理するか 関数用にファイルを作って管理するかします
772 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:14:33.61 ID:a//tJk240.net] >>761 正解です
773 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:14:53.99 ID:a//tJk240.net] それからモジュールには適当に名前を付けることができますので
774 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:17:06.37 ID:8yuWSL180.net] 関数内関数ってのは、関数の中で定義する関数のこと phpだと sub foo1 if a = b then sub foo2 foo2=1 end sub else if sub foo2 foo2=2 end sub end sub みたいなことができる あんまやらんけど
775 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:22:34.06 ID:a//tJk240.net] >>759 関数内関数をそこで書いているようなやり方ではできないけれど、どうしてもやりたければ vbe オブジェクトを定義してそこにコードを書き込むという疑似なやり方はできる。あるいはコードを作成するプロシージャを作成してそのプロシージャを呼び出して引数を渡してコード作った後、そのコードを呼び出すみたいなことはできるのかもしれない。 コードを実行中に別のコードを作成するという経験がないんでエラーが出るかどうかは分からない。 ただ面倒だし見通しも悪くなるんで外側で関数を定義した方が簡単だと思うんだけれどなぜ関数の中で関数を定義したいのでしょうか。
776 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:32:39.05 ID:+0CREnk7H.net] >>766 ありがとうございます vbaがエクセル前提の言語と考えると 私が考えているような関数は使うべきでもないのだなって思いました 神様たちのアドバイスに感謝です ありがとうございました
777 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:42:12.06 ID:+0CREnk7H.net] >>765 ありがとうございます
778 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:50:26.07 ID:+0CREnk7H.net] >>766 なぜ関数の中で関数を定義したいのか すべての関数を同列に記載すると見通しが悪い気がして 例えば数式に関するものなら、calcurationでまとめ 出力に関するものなら、printでまとめ 保存に関するものなら、saveでまとめ っていうように、目的別、機能別、階層別に関数をまとめると 後で見直したときに分かりやすいかなって さらにfacadeみたいに間口を作れば 拡張も修正もしやすいかなって思いまして
779 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:56:44.33 ID:8yuWSL180.net] >>755 >関数内関数はどうやって作れますか? 関数内関数はない classは貧弱だけど、ある ただvbaそもそもの概念として、エクセルのスクリプトであるという点がある あんまり大きなclass作りたいなら、別言語の方が良いと思う エクセルvbaはゲームとかもキツイ(メインloopが超貧弱でvbaを起動しっぱなしだとよく落ちる) >また複数の関数を目的別に整理する方法として >パッケージやモジュール単位にまとめたり >マップに収納したりはできるのでしょうか? 標準モジュール単位でまとめられるけど・・・ エクセルvbaの標準モジュールは「どのシートにも共通する処理」のような意味合いで用いられる よくも悪くも、vbaはエクセルのためにあるので あまり壮大な事をするのには向いていない
780 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 20:59:53.87 ID:+0CREnk7H.net] >>770 class調べてみます! モジュールとclassが使えれば 見やすいコードかけるかも! そんな壮大なプログラムを作るつもりなないのですけど 一処理、一関数にしたいとなると ある程度の単位で処理をまとめていきたいなって ご丁寧なご解説に感謝です ありがとう、神様!
781 名前:デフォルトの名無しさん (ワッチョイ ff02-tQxS) [2022/06/28(火) 21:13:22 ID:i28fB/zi0.net] >>750 アドバイスありがとうございます! 入金消し込みの自動化をせよと上司からの指示で、初心者なりになんとかやってるんですが、会計ソフトの会社でもお手上げな仕組みの売掛金管理のようです。 setとcellsでなんとか、試行錯誤してやってみようと思います! またわからなくなったら、質問させて頂きます。
782 名前:デフォルトの名無しさん (アウアウウー Sad3-/ybv) mailto:sage [2022/06/28(火) 21:26:40 ID:WQvDBuzoa.net] 十年近くぶりに触るし上級者だったとかじゃないけど VBAで 今開いてるPhotoshopの選択しているレイヤーを基準にExcelの指定セル範囲(例:A1からA20)を1セルごとにレイヤーを1枚作りセルの中身を文字ツール(テキスト)でレイヤーを作成。 例:ExcelのA1に「あいう」、A2に「えお」、A3に「123」が入力されていたとし、指定範囲選択(A1〜A3)を、開いてるPhotoshopにレイヤー追加しながらテキストレイヤー「あいう」、「えお」、「123」を作る(計3枚)。その際、Excelに近い見た目の形で…この場合、横に少し間隔を空けて「あいう」「えお」「123」が並ぶように作成する。(文字の大きさや色は直前に使ったpxサイズ、色とする) って出来ますか?
783 名前:デフォルトの名無しさん (ワッチョイ 3f4f-60CD) [2022/06/28(火) 21:45:50 ID:3ZxXgE6I0.net] いや、関数内関数? まぁ似たようなものはあるよ。 GOSUBってのが。 ただ、これも負の遺産のひとつだから あまり使うことはお勧め出来ないけど。
784 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 21:52:47.26 ID:/U22FX/80.net] gosubは全然違うでしょ
785 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 22:11:43.10 ID:GB8Zx7jKM.net] 関数内関数いわゆる高階関数について、VBA関数には高階関数のための機能は無いけどワークシート関数のLAMBDAが該当する
786 名前:デフォルトの名無しさん mailto:sage [2022/06/28(火) 22:18:47.50 ID:8yuWSL180.net] 確かに!その発想は正解だが・・・だが・・・
787 名前:デフォルトの名無しさん [2022/06/28(火) 23:36:42.40 ID:EFCYXnQm0.net] >>773 COM経由で操作できるっぽい。こんなのが引っかかった https://minatoya.work/419/
788 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 07:26:36.96 ID:f9LCV9hba.net] >>776 お前名前に騙されやすいタイプだろw LAMBDA は単なる関数定義で VBA スレ的にはユーザー定義関数と変わらんぞ ユーザー定義関数はマクロブックにしか入れられないから LAMBDA が作られた
789 名前:デフォルトの名無しさん (ワッチョイ 7fda-eqyh) mailto:sage [2022/06/29(水) 08:15:54 ID:SMNkprrA0.net] 他のプログラミングと同じだと思われているのかな LAMBDA 関数は
790 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 08:48:09.67 ID:sZpGYWcf0.net] ユーザー定義関数では(コーディング時に)関数を自作することはできるが、(実行中に)関数内で関数を定義したり (実行中の)関数の引数に関数そのものを与えるたりすることはできない そもそもユーザー定義関数とLAMBDA関数はまったく別のもの Excelの新関数「LAMBDA」(ラムダ)が一般提供開始 ~Excel数式が本格的なプログラミング言語に https://forest.watch.impress.co.jp/docs/news/1387035.html
791 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 08:51:20.38 ID:GuRBEGnka.net] >>778 ありがとう そこのページ起点に頑張ってみる
792 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 08:55:02.95 ID:8rr9zLPCM.net] 関数型パラダイムをサポートしている言語か、最低でもC言語などで関数ポインタを使ったことがある人でないと高階関数の概念は理解が難しい
793 名前:デフォルトの名無しさん [2022/06/29(水) 10:34:47.30 ID:7c8LgVFIa.net] privateで良くないか
794 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 12:27:16.10 ID:f9LCV9hba.net] >>781 高階関数の話ならそこに書いてあるMAPとかSCANがLAMBDAを受けられる様になったことを言うべき あと関数内関数と高階関数は全く別物だし実行中に定義できるか
795 名前:かどうかも関係がない [] [ここ壊れてます]
796 名前:デフォルトの名無しさん [2022/06/29(水) 13:48:20.01 ID:Es0nfTu8a.net] 記者がアホなんやで
797 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 14:05:01.02 ID:SMNkprrA0.net] ネットの記事って怪しかったり間違っているのが多々あるよね
798 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 14:22:16.06 ID:3IrndTU40.net] ネットの記事だけがそうだと思ってる?
799 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 14:30:17.44 ID:par7A0IW0.net] はい次の方
800 名前:デフォルトの名無しさん [2022/06/29(水) 14:59:30.13 ID:0RCF24VI0.net] .Netでもひとつの壁と言われているラムダ式が VBAどころかEXCELで使えるようになるのか。 胸熱だが脱落者も増えるだろうな。
801 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 15:07:56.16 ID:Ajq9RLSRM.net] 一般的な意味での高階関数は数学的な抽象概念としての話ではあるけど、プログラム言語としては第一級関数の実装のことを言う場合が多い (C言語の関数ポインタのように擬似的に実現する方法もある) 高階関数 https://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0 第一級関数 https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0
802 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 15:09:05.56 ID:JurptZkT0.net] 脱落者なんて増えないさ 世の中にエクセルの全機能使いこなしてる奴なんていないからな 理解できない機能は使われないだけだよ
803 名前:デフォルトの名無しさん [2022/06/29(水) 17:35:51.56 ID:0RCF24VI0.net] >>791 読んでてよく分からんかったけど 要はアセンブラでいうところのアドレスの間接参照とか 間接修飾とか言われているやつで .NetではDelegate、VBAではCallByNameによるコールバックって理解でいい?
804 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 17:43:32.68 ID:8wQcCZ0gd.net] VBAでできない事をダラダラと話さず別スレいけばいいのに
805 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 17:56:17.53 ID:vfJ3sAv3M.net] Excelで例えるなら関数を特定のオブジェクトのメソッドとしてではなく、それ自体を実体のあるオブジェクト(あるいはコレクション)と見做すようなもの 利用側の関数内で関数オブジェクト(のようなもの)を参照する手段として関数そのものをラムダとして扱う
806 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 18:54:09.74 ID:zPLPBKg6H.net] エクセルもVBAも詳しくないんですけど VBAは非同期処理でコールバック関数を使わないんですか?
807 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 19:06:05.99 ID:tW8kR1cqM.net] イベント駆動型ですから
808 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 19:13:20.08 ID:i0xj9Opya.net] >>794 高階関数っていうのを最近覚えたんだろうな 関数内関数に1mmも関係ないのにしつこく語ってる 他の言語スレだと瞬殺されるレベルだからこんなスレで管巻くしか無いんだろうw
809 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 19:15:29.13 ID:uu2mw40gD.net] >>796 使おうと思えば使える
810 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:47:59.24 ID:zPLPBKg6H.net] >>799 コールバック関数を使えるのなら 引数に関数参照できるということです? なら変数に関数を代入できそう
811 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 21:55:21.60 ID:zPLPBKg6H.net] >>797 非同期処理はイベント処理に依存してるってことでしょうか? コメントありがとうございました VBA初心者なのでいろいろ勉強していきます
812 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 22:13:03.71 ID:sZpGYWcf0.net] >>800 特定のオブジェクトやクラスに所属する関数やAPIなどシステムで定義された関数(メソッド)であればコールバック関数で参照することはできる グローバルのユーザー定義の関数はラムダ式で記述するなどの手段を使わない限りは無理
813 名前:デフォルトの名無しさん (ワッチョイ 4f2f-BYhf) mailto:sage [2022/06/29(水) 22:45:43 ID:JurptZkT0.net] コールバック「関数」とはなにを指してるんだろうかねぇ コールバックを実現する手段はイベント以外に CallByNameとかApplication.Runとかでまあ実現できなくはない
814 名前:デフォルトの名無しさん (JP 0Ha3-tCSL) mailto:sage [2022/06/29(水) 22:55:30 ID:zPLPBKg6H.net] コールバック関数は何を指しているのか なぜラムダ式が存在するのか 即時関数とラムダはどこから分岐していったのか 関数プログラミングは本当に有益なのか 本当に変数は悪者で動的型付けは悪なのか それらはもはや哲学なのかもしれません
815 名前:デフォルトの名無しさん (ワッチョイ ff68-TsA2) mailto:sage [2022/06/29(水) 23:01:15 ID:L0Xzxy470.net] 慣れれば別にどっちでも・・・って感じになるけどな
816 名前:デフォルトの名無しさん mailto:sage [2022/06/29(水) 23:50:10.86 ID:HQQahVZ60.net] >>783 自作の階乗作らせりゃ一発だろ。Cの関数へのポインタとか、可読性0に近い。組んでて楽しいけど、1ヶ月後の自分はこれを理解できるだろうかという疑問が湧くw
817 名前:デフォルトの名無しさん [2022/06/30(木) 05:47:49.15 ID:P7B/AZjs0.net] まぁでもあんまりVBAでコールバック使う機会ないかな 呼び出しや生成元のモジュール側の関数を 呼び出された側や生成された側から呼び出すときに 密結合になるのを避けるためくらいにしか使ってない
818 名前:デフォルトの名無しさん mailto:sage [2022/06/30(木) 07:16:43.81 ID:1TbRNwlJH.net] >>807 エクセルVBAでDBのデータやファイルデータを読み込むとき 非同期にならないように処理するってことなんでしょうか? 例えばフラグを立ててdo-while、breakで処理待ちしてから次の処理に進むとか? webのように処理と表示のタイムラグを気にするようなことがないのかもしれませんね
819 名前:デフォルトの名無しさん mailto:sage [2022/06/30(木) 07:32:44.20 ID:wDIpT9iQ0.net] それすんごい資源食わないか?
820 名前:デフォルトの名無しさん mailto:sage [2022/06/30(木) 07:37:53.64 ID:1TbRNwlJH.net] >>809 vbaはコールバックを使わないということらしいのですが コールバックを使わずに非同期処理する方法があるのでしょうか?