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


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

Excel VBA 質問スレ Part82



1 名前:デフォルトの名無しさん [2025/01/24(金) 03:31:15.25 ID:l239yW+P.net]
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

関連スレ
Excel VBA 質問スレ Part79(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1674875532/
Excel VBA 質問スレ Part80(ワッチョイあり)
https://mevius.5ch.net/test/read.cgi/tech/1700826110/

※前スレ
Excel VBA 質問スレ Part79
https://mevius.5ch.net/test/read.cgi/tech/1674874007/
Excel VBA 質問スレ Part80
https://mevius.5ch.net/test/read.cgi/tech/1685489018/
Excel VBA 質問スレ Part81
https://mevius.5ch.net/test/read.cgi/tech/1713416618/

508 名前:デフォルトの名無しさん [2025/04/27(日) 21:56:06.79 ID:22nZEpjv.net]
>>497
じゃあC言語とかでもそうなのですか?

509 名前:デフォルトの名無しさん [2025/04/27(日) 22:00:02.07 ID:22nZEpjv.net]
>>497
いやいや、パッと調べただけでも他言語でも変数の使い回しできてるじゃん
私が言いたいのは一つのループブロックごとに、他の箇所では再利用できない変数一つという事

510 名前:デフォルトの名無しさん mailto:sage [2025/04/27(日) 22:56:41.73 ID:RSOujG5D.net]
例えばC#のforやforeach文のループ変数はそのループの中だけで有効だが、そういう話か?
C++も大昔のバージョンを除けば同様

511 名前:デフォルトの名無しさん [2025/04/28(月) 01:52:20.30 ID:hDmEwqG0.net]
>>481
>他人の書いたプログラムを解読して修正できるやつ

自分で描いたものでさえろくに保守出来ない香具師の方が大半な現実

512 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 10:21:58.00 ID:AuNLagCl.net]
ダイクストラが言う構造化プログラミングはモジュールとか抽象データ型とかも含む広範で抽象的な概念として説明されている。
連接・分岐・反復で構成しようという話はそれより前に発表されたものだが、この時代は構造化もクソもないプログラムがまかり通っていたという前提がある。
まずはその三要素を基礎に据えて構成したらわかりやすくね? という提案 (というか感想?) に過ぎず、それで全て事足りるみたいな主張ではない。
(理論上は連接・分岐・反復で全て表現可能であるという証明はされている。)

構造化プログラミングの考え方のキモは構造は人間の認知の中にあるということ。
人間が思考しているときの構造を書き表すためにどんな言語機能 (またはデザインパターン) があればよいの? ってのが構造化プログラミングの議論なんだよ。
書いた人が思ってる構造が表現されているなら構造化プログラミングだし、構造化プログラミングのために用意された機能を使っていても構造が表れていなければ構造化プログラミングではない。
まあついでに言えば書き表されたものについて (コンパイラも人間も) 検証しやすいことも大事だ。

機械的に goto を除去したらむしろ構造が失われるという例をクヌースが出したりもしていて、結局のところはどんな機能も正しく使えば正しいし、悪い使い方をすれば駄目になるというシンプルな話。
そんなわけで break が構造化を崩すか崩さないかは使い方による。
ただ、常識的に考えて break は goto より構造を破綻させにくいだろうってだけ。

513 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 11:10:41.08 ID:6D3yvt7l.net]
どこのスレの誤爆かな?

514 名前:デフォルトの名無しさん [2025/04/28(月) 16:28:52.13 ID:5fRt9Dct.net]
SQLiteのデータベースをODBC経由ADODBで引っ張ってきてるけど、
CopyFromRecordSet で一発で貼るのと 1行1カラムずつ地道に貼るのとで
267件中1件1カラムだけ違う これは何なんだろう

515 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 17:32:10.75 ID:L3M/APjY.net]
知らんがな
違うと思ったならチェックしたんだろ?どう違うかを知っているのはお前だけ

516 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 19:04:28.97 ID:opVSzI03.net]
>>504
自分で作ったコードを調べて原因を見つける能力がない無能っぷりを白状しているようにしか見えない



517 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 19:12:48.88 ID:77Ku1S4P.net]
質問スレなんだし、そんなにきつく当たらなくてもいいんじゃない? もう少しゆるい感じでやっていこうよ。

518 名前:デフォルトの名無しさん [2025/04/28(月) 19:29:47.71 ID:5fRt9Dct.net]
辛辣だなぁw CopyFromRecordSetで貼ったやつの方だけ1箇所違うんだよ
1行、1カラムずつ貼った方は正しい 元データももちろん正しい

lobjが対象テーブルのListObject dbrsがADODBで引いたRecordSet

データが違うパターン
lobj.InsertRowRange.CopyFromRecordset dbrs

正しいパターン
rc = 1
Do Until dbrs.EOF
  For co = 1 To lobj.ListColumns.Count
    lobj.ListRows(rc).Range(co).Value = dbrs.Fields(co - 1).Value
  Next
  rc = rc + 1
  dbrs.MoveNext
Loop

これでどう検証したらいいのよ

519 名前:デフォルトの名無しさん [2025/04/28(月) 19:34:46.10 ID:aApiL0z1.net]
どう違うのかも書かない無能だから

520 名前:デフォルトの名無しさん [2025/04/28(月) 20:16:18.13 ID:Fc2g4rbd.net]
PowerQueryの方がVBA よりも処理が高速なはずだ
と思っていたけど、配列を使えばVBAの方が処理が高速だったよ

521 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 22:36:06.18 ID:opVSzI03.net]
>>508
一カ所違うというのは実データがおかしな変換をされているのか?
それとも一方のデータが 多い/少ない と言っているのかな?

522 名前:デフォルトの名無しさん [2025/04/29(火) 00:38:17.02 ID:Cio0Z7DT.net]
>>511
ざっくり例えると、1件ずつ処理すると元データどおり
みかん 150円
バナナ 200円
りんご 250円

となるところがCopyFromRecordSetだと
みかん 150円
みかん 200円
りんご 250円

になる感じかな もちろん今回が初めてのケース

523 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 03:39:13.13 ID:uCA5xnZY.net]
>>512
再現性があるか
何番目がおかしいか
一度にコピーする件数を少しずつ減らしたらどうなるか

そういう地道な作業を繰り返して、条件を絞り込み、原因を突き止めていくんだ

524 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 05:46:13.95 ID:DUP3Wr3v.net]
重複したデータでなければプログラムに問題がありそうだけどなぁ
ザックリすぎてわっかんねぇなぁ

525 名前:デフォルトの名無しさん [2025/04/29(火) 05:58:53.59 ID:NELjOoG5.net]
質問の間抜けな感じからして凡ミスやな

526 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 06:09:56.99 ID:DUP3Wr3v.net]
スゲー適当なんだけど違いが1件ってことはEOFが入ってるとかそんな感じかな?



527 名前:デフォルトの名無しさん [2025/04/29(火) 09:40:01.77 ID:Cio0Z7DT.net]
>>513
同じデータをAccessにインポートして実行→再現せず
SQLiteで検索するデータ量を減らす→再現せず
で、よく見たら256レコード目で検索条件(SQL文)変えても必ず発生することがわかった
SQLite3 ODBC DriverからADODBでデータ取得してCopyFromRecordSetでデータ貼付けすると起こる
データ取得方法は同じでも1レコード1カラムずつデータ貼っていくと起こらない
ダミーデータ作って色々試してみるかな

528 名前:デフォルトの名無しさん [2025/04/29(火) 09:48:33.61 ID:cxg+2T2y.net]
>>517
元データの中に制御文字のようなゴミがあるとか、取得したものを表示する過程でミスっている可能性もある
ダミーで試すか、文字コードをバイナリ値でチェックするとかだな
あと256番目って数値がbyte扱いで0になってないかとか

529 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 09:57:59.04 ID:LEbvev28.net]
昔Oracleのバグで1件くらい少ないレコードセット返ってくるバグ思い出した

530 名前:デフォルトの名無しさん [2025/04/29(火) 11:15:10.56 ID:Cio0Z7DT.net]
ダミーでも再現した
SQLite側のフィールドがTEXT型の場合のみ、256レコード目の内容が255レコード目と同じになる
INTEGER方だと起らない

531 名前:デフォルトの名無しさん [2025/04/29(火) 11:17:05.94 ID:Cio0Z7DT.net]
こんな感じ SQLiteに日付型は無いのでTEXT扱い
254 test254 2025/06/11 1253
255 test255 2025/06/12 1254
256 test255 2025/06/12 1255
257 test257 2025/06/14 1256

532 名前:デフォルトの名無しさん [2025/04/29(火) 12:21:37.37 ID:TmvDscRd.net]
属人的と言うなら車間距離だな
ExcelやVBA利用者には車間距離詰める馬鹿が多過ぎる
総じて「だろう運転」ばかりしていて「かもしれない運転」なんて眼中に無い
そもそもMicrosoft開発陣が「だろう運転」を推奨してる節がある

533 名前:デフォルトの名無しさん [2025/04/29(火) 12:25:39.07 ID:Cio0Z7DT.net]
連投失礼、256だけじゃなく512,768,1024も同じ現象だった

534 名前:デフォルトの名無しさん [2025/04/29(火) 13:23:59.14 ID:lJszgH0z.net]
ODBCのバージョンと定義がわかる画面貼っとけ

535 名前:デフォルトの名無しさん [2025/04/29(火) 14:30:57.99 ID:AuvQCcIn.net]
久しぶりに面白そうな話題じゃん
自己解決しちゃっても是非原因教えてね

536 名前:デフォルトの名無しさん [2025/04/29(火) 16:26:16.90 ID:Cio0Z7DT.net]
スクショは貼らないw 64bit
SQLite3 ODBC Driver 1.34455.00.00 Christian Werner Software & Consulting SQLITE3ODBC.DLL 2023/10/23

データ取得と貼り付けは至ってシンプル
Set dbcn = New ADODB.Connection
dbcn.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=E:\Temp\testdb.db"
dbcn.Open
Set dbrs = New ADODB.Recordset
dbrs.Open "select * from testtbl", dbcn, adOpenStatic, adLockReadOnly
ThisWorkbook.Sheets("Sheet1").Range("A1").CopyFromRecordset dbrs



537 名前:デフォルトの名無しさん [2025/04/29(火) 16:31:39.01 ID:Mpe85ZPY.net]
>>526
やっと全部情報を出してきた
だから馬鹿とか罵られていたんだよ
ドライバのバージョンを替えてみ

538 名前:デフォルトの名無しさん [2025/04/29(火) 16:37:30.76 ID:Cio0Z7DT.net]
>>525
早速自決w
Set dbrs = New ADODB.Recordset
dbrs.CursorLocation = adUseClient
dbrs.Open "select * from testtbl", dbcn, adOpenStatic, adLockReadOnly
で正常になった お騒がせしました

539 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 16:47:03.16 ID:EclpVRbh.net]
ちょうど総合相談スレでも
3時間くらい前に発生した本日の事案への弔辞

> 介錯人は頼んだのかな
> 成仏しろよ

540 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 16:58:21.16 ID:EclpVRbh.net]
「自決」の辞書上のもう一つの意味、民族自決主義の「自決」は
「自分の意志で自分のことを決めること」だけど、
くだんの「自決する」の文脈は、意志うんぬんや決めるとかの流れはない。
なので、「問題を自分で解決した」という意味はならなさそう・・・
とマジレスしてみる

541 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 20:39:35.35 ID:la4ZcTxc.net]
自分のケツのことかと思った

542 名前:デフォルトの名無しさん [2025/04/29(火) 21:12:16.89 ID:hhMpSOWT.net]
痔になったケツかと思った

543 名前:デフォルトの名無しさん [2025/04/29(火) 22:00:44.14 ID:V3jk1q3e.net]
WinAPIでvisual styleを適用させたい
office2021だとCreateWindowEXで作ればvisual styleになるのにoffice2019だとならない

544 名前:デフォルトの名無しさん [2025/04/29(火) 23:44:21.62 ID:jEUD8QFb.net]
今頃になって列の行ごとの文字列のReplaceは、まず文字列をカンマでもなんでもいいから全部くっつけてひとまとめにして変数に代入して、Replace(文字列,検索文字,"")すれば一括で置き換えられるって理解したよ
そしてSplitで配列に戻して元通り

545 名前:デフォルトの名無しさん [2025/04/30(水) 01:17:17.74 ID:0P1GE/1d.net]
>>533
ComCtl32.DLLにリンクしてないからだと思う

546 名前:デフォルトの名無しさん mailto:sage [2025/04/30(水) 03:14:35.45 ID:IvfkHP7P.net]
>>534
たまたまデリミタと同じ文字(列)がデータにも含まれててExcelのバグだと騒ぐまでがセット



547 名前:デフォルトの名無しさん [2025/04/30(水) 06:29:26.31 ID:7AsrwtYN.net]
>>536
わかるわかる

548 名前:デフォルトの名無しさん [2025/04/30(水) 06:54:36.59 ID:TQaKmIw3.net]
>>534
初級を脱したい奴が考えそうな無駄な技
経験積めば自然に書くのが一番て解るよ

549 名前:デフォルトの名無しさん mailto:sage [2025/04/30(水) 18:11:25.83 ID:/xZzLlpB.net]
Range("A1:C10").Replace What:="置換前の文字", Replacement:="置換後の文字", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False

ってchatgptさんが言ってます

550 名前:デフォルトの名無しさん mailto:sage [2025/04/30(水) 18:39:00.27 ID:3/ALrefg.net]
Replaceメソッドはシートの検索/置換オプションも変更されるから嫌い

551 名前:デフォルトの名無しさん [2025/04/30(水) 19:34:30.68 ID:Ypkgz0ac.net]
>>528
さんきゅ

552 名前:デフォルトの名無しさん mailto:sage [2025/05/01(木) 10:16:05.61 ID:NoOjVvyj.net]
開発では作るだけでなく動作確認、評価、検証をきちんとやるのも大事なのじゃ
わざと異常を出して正しく異常が出るか、桁数やデータが大量だとどうなるかとか、日本語以外の環境でも動くとか
実際に動かして確認すると気づかなかった問題が見えてくるものだ

553 名前:デフォルトの名無しさん mailto:sage [2025/05/01(木) 10:51:14.04 ID:/KCrsMZn.net]
テストが重要なのはもちろんだが、VBAerレベルではそもそもバグが出にくくテストケースを闇雲に増やさなくていい書き方というものも多少は勉強した方がよい
似た処理をいちいちコピペすればその分ミスは増えるし、プログラムに直行性がないとテストケースは無限に増える

554 名前:デフォルトの名無しさん mailto:sage [2025/05/01(木) 11:52:17.40 ID:nTiKCI2R.net]
>プログラムに直行性がないとテストケースは無限に増える

ほんそれ
直交性が無いのは言語の欠陥だと思う

555 名前:デフォルトの名無しさん [2025/05/01(木) 13:39:51.25 ID:yf6hHvtn.net]
x ほんそれ
o 本当にそれ

556 名前:デフォルトの名無しさん mailto:sage [2025/05/01(木) 14:02:16.67 ID:NoOjVvyj.net]
問題ないですとか言ってたのに後になって実は確認してませんでした とか言う新人たまにいる



557 名前:デフォルトの名無しさん [2025/05/01(木) 15:05:48.78 ID:my1nUwSm.net]
VBAで単体テスト、カバレージ100とか聞いたことないわ
あれ?ACCESSの納品物の評価ってどうやってたっけ……(もう忘れた)

558 名前:デフォルトの名無しさん [2025/05/01(木) 23:23:13.02 ID:15supz3z.net]
スレチだけど
やっとPowerQueryの変数宣言、代入、for each、無名(名前付き)関数がわかった。
.Buffer早すぎ

559 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 00:25:17.81 ID:+dCfSpYU.net]
Dim wb As Workbook
Dim pq As WorkbookQuery
Dim ws As Worksheet
Dim i As Long
とか宣言して、wb、wsの変数代入して、
For Each pq In wb.Queries
ws.Cells(i, 1).Value = pq.Name
ws.Cells(i, 2).Value = pq.Formula
i = i + 1
Next pq
とかやると、VBAで各クエリーの名前とM式の中身をワークシートに書き出せるのね

560 名前:デフォルトの名無しさん [2025/05/02(金) 01:50:51.67 ID:TLbUOI0p.net]
>>549
いやん見ないで照

561 名前:デフォルトの名無しさん [2025/05/02(金) 06:41:36.56 ID:TLbUOI0p.net]
前に言っていた、Power Automateみたいにコードブロックを入れたら、作成したコードブロックだけで有効な変数が自動的に作成されて、コードブロックを抜けたら変数が削除される、コードブロックごとに変数が一意、コードブロックがカプセル化、秘匿化されている、もはやコードブロックがサブプロシージャ、ファンクション関数っていうの、関数型プログラミングの事だったんだな

562 名前:549 mailto:sage [2025/05/02(金) 06:43:09.29 ID:+dCfSpYU.net]
そんな、他人を痴漢扱いすなw

いやこれ、一昨日ChatGPTに
「クエリーの依存関係がもっと見やすいツール、何かない?」
って聞いた中で、教わったばかりの一部なんだけど。

需要があるなら、フルでプロシージャを晒すよ?
おのおのChatGPTに聞けばいいんだろうけれど。

ここから親子関係の一覧表を作る、次のプロシージャは
正規表現検出をどう扱うか、相談しながらチューニング中なんだけど。

563 名前:デフォルトの名無しさん [2025/05/02(金) 07:20:32.31 ID:TLbUOI0p.net]
ワイはCopilotにsheet.copyで作成した新規ブックのクエリを削除するにはどうしたらいいですか?
のコードでマクロ実行ブック(コピー元)のクエリも削除された泣

プログラマが型がわからないってマジ?
VBAでtypeっていうともっぱらそのモジュールのみで有効なプロパティ?の事を指すと思うけど

TypeScriptでは静的型付けの様に、バグの無いコードというのは、できる事、やれる事、受け付ける操作を限定する事だと思う。
何でもかんでもできる、受け付けるというのはバグの元だよ。

564 名前:デフォルトの名無しさん [2025/05/02(金) 07:59:38.75 ID:TLbUOI0p.net]
VBAは変数を宣言しなくても変数が使用できるし、Variantは中のデータの型を判断するし、動的型付けだった😫
宣言を強制しているし、型指定もしているからすっかり忘れていた

565 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 08:41:13.69 ID:IByDjNOR.net]
>>549
WorkbookQuery初めて知った
面白そうだな

566 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 09:45:33.14 ID:G++s7sQD.net]
>>551
Power Automateって使ったことないので分からないんだが、多くの言語で一般的ないわゆるブロックスコープとは別物なの?



567 名前:デフォルトの名無しさん [2025/05/02(金) 12:34:26.30 ID:FVfG1Al+.net]
>>556
同じなんだけど、
Power Automateはループ処理のアクションを追加すると自動的にvbaでいう for i の i とか for each 変数 の 変数が自動的に宣言される

vbaで同じ事をしようとするといちいち宣言しなくちゃいけないし、命名のレパートリーも尽きるからやらないし、流用になる

個別に変数を自動的に宣言してしかも管理も把握も一目瞭然だと、これからの時代はそれぞれのアクション、ブロックが一つのオブジェクト、関数みたいになるのがスタンダードで、しかもさらに進化するのかなと思う

568 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 13:08:27.70 ID:i8P7c2SF.net]
だからそんなもん20年前から他の言語では一般的だし、
PowerAutomateって複雑なことやろうとすると共通の変数を複数ステップに渡って弄り回すことになって簡単にVBAの糞コードみたいになるよ
変数のスコープに関する君の考えは一般的には正しいが、残念ながらPower Automateは君が期待しているようなものではない

569 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 13:46:02.65 ID:G++s7sQD.net]
スコープが別なことが分かっていれば、ループ変数は同じ名前の流用でも特に問題は起きないような気もするけれど。まぁでも便利なんだろうね。
ブロックスコープがない言語もそこそこあるような……。Pythonとか昔のJavaScriptとかは、関数スコープはあるけれどブロックスコープはないよね。

570 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 16:53:20.86 ID:nKjy1k/M.net]
ブロックがあればええ

571 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 19:06:46.82 ID:ngu+xaVd.net]
全てグローバル
変数名も文字数制限あり

BASICとはそういうものだ

572 名前:デフォルトの名無しさん [2025/05/02(金) 20:16:54.76 ID:KF55o+fS.net]
変数名といえばおまえら Option Explicitしてるの?
俺はうっかりさんでスペルミスしがちだから外せないけど

573 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 20:38:35.86 ID:sdnBjLxl.net]
しない理由がない

574 名前:デフォルトの名無しさん mailto:sage [2025/05/02(金) 20:55:10.60 ID:1BRp4bnH.net]
あれ消えないようにして欲しい

575 名前:デフォルトの名無しさん [2025/05/03(土) 05:59:05.73 ID:2+JR0EAo.net]
今更ながらブックオープン 読み取り専用のコードだけを書いたfunction関数を作れば短い文字数でブックを開いて変数に代入できるって気づいたんだけど
もっと有用なコードはありますか?
さらにテーブルをセットするfunctionとか、ディクショナリーの作成、登録するfunctionとかもいいな

576 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 07:20:36.45 ID:0JGyO ]
[ここ壊れてます]



577 名前:YLe.net mailto: 自分だけが読み書きするコードならそれもありだと思うけど、一般論としては、文字数を少し節約できるというくらいしかメリットがないなら、あえてラッパーを作る意味はあまりないような気がする。 []
[ここ壊れてます]

578 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 09:23:52.05 ID:Hazt22aJ.net]
>>565
短い文字数が有用ならコメント付けないで変数名とか全部1文字にしたらいいんじゃね

579 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 10:20:15.15 ID:VRj6VpYS.net]
使用回数によるよね
同じ操作が何回も出てくるなら適当なラッパー書いてあげると見通し良くて親切かなと
もちろんコメント付きでね

580 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 11:20:28.73 ID:F8pywi6k.net]
そのプロジェクト内では1回しか使わなくても、よくある定形処理は関数にまとめた方がいい
文字数を減らす必要はないけど、行数は少ない方がデバッグがしやすくなる

581 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 16:42:04.86 ID:h9Jrb8E+.net]
1ファイルに全部書く

582 名前:デフォルトの名無しさん [2025/05/03(土) 17:16:40.74 ID:2+JR0EAo.net]
ラッパーというのですね
ありがとうございます
function関数やサブプロシージャは短い方がいい(一つの処理しか行わなくてもいい、行わない方がいい)
一回しか使用しない処理でも、メインプロシージャから切り分けた方がいい
と聞いていましたが、これはラッパーというのですね

583 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 18:50:44.41 ID:ocHu15P2.net]
ぱっぱらぱー

584 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 21:38:51.92 ID:Hazt22aJ.net]
お鍋の中からインチキおじさんが登場しますた

585 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 22:43:16.33 ID:aLoX39eB.net]
ぴーひゃらぴーひゃら

586 名前:デフォルトの名無しさん mailto:sage [2025/05/04(日) 07:28:49.39 ID:ajXSlqYh.net]
ラッパーというのは、元の関数とかにガワを被せた(つまり、その中で元の関数を呼び出している)関数とかのことね。包装するとかの意味のラップ。念のため。



587 名前:デフォルトの名無しさん mailto:sage [2025/05/04(日) 08:17:46.31 ID:kPdoN8ak.net]
ラッパーとインターフェースはどう違うのっと

588 名前:デフォルトの名無しさん mailto:sage [2025/05/04(日) 09:35:43.88 ID:VN1fyBP0.net]
インターフェースは、抽象的にいえばひとまとまりと観念されるコードの塊(クラスとかモジュールとか)同士の間の境界、その境界に接するコード部分かな。インターフェースを介して情報のやり取りを行うに際して互いの前提が異なる場合には、そのままでは情報のやり取りができないので前提を合わせる必要がある。ラッパーはそのために使われることもあるけれど、基本的には全然別の概念。

589 名前:デフォルトの名無しさん [2025/05/04(日) 16:30:55.85 ID:IQyuDcpS.net]
>>571
それはモジュール分割

ラッパーはすでにあるものを呼び出すファンクションやサブプロシージャ

ラッパーはラッピングだから、モジュールを包むモジュールというイメージ

590 名前:デフォルトの名無しさん [2025/05/04(日) 16:35:24.36 ID:IQyuDcpS.net]
>>577
質問者じゃないけど、あなたの説明は入出力のインターフェース
質問者はオブジェクト思考のインターフェースのことを聞いているとおもわれる

インターフェースはモジュールに決まったメソッド、プロパティを持たせるための骨格となる設計の定義
特定のインターフェースを継承させることで、そのクラスにはどういうメソッド、どういうプロパティがあるのか調べなくてもわかるようにできる

591 名前:デフォルトの名無しさん mailto:sage [2025/05/04(日) 21:24:05.55 ID:NkPvwNmC.net]
具象クラスの(>>577の意味での)インターフェイスを規定する抽象クラス(抽象基底クラス)それ自体のことをインターフェイスと呼ぶのは、オブジェクト指向というよりもJavaとかから広まった用語法なのでは。
個人的には、インターフェイスという語の本来の意味はあくまでも577のようなものであって、Javaとかでいうインターフェイスはそこからの派生とか転用として位置付けられるべき用語法だと思うかな。
ただたしかに、Javaみたいな意味でインターフェイスという語を用いることの方が(プログラミング関係の文脈では)もはや多いのかもしれないし、質問した576の意図もそちらにあったのかもしれないね。

592 名前:デフォルトの名無しさん [2025/05/04(日) 21:50:46.14 ID:6QG7+rqM.net]
PowerQueryでの動的な繰り返し処理を理解したら、VBAにもList.Select関数とかText.PositionOfのOccurrence.Allとか欲しい

593 名前:デフォルトの名無しさん [2025/05/05(月) 01:42:23.95 ID:6skGH2rL.net]
自分で実装すればいいじゃん

594 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 09:14:01.67 ID:8n1c0Fvg.net]
実装は難しくはないだろうけど、汎用的に使える便利な関数はできれば組み込みで持っていて欲しいという感覚は分かる。

595 名前:デフォルトの名無しさん [2025/05/05(月) 10:45:35.51 ID:NKQxWENO.net]
配列の中に、対象に含まれているものがあれば、配列から取り出す、
っていう処理だから、内部処理的には、結局配列を全てチェックしていて意味がないのかな

596 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 10:46:27.32 ID:Q8K4+hk+.net]
自分が欲しいと思ったものは誰かがすでに作ってる
作るよりAIに聞いた方が早い



597 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 11:03:49.52 ID:20YqVkB+.net]
>>579
InterfaceはJava用語
TraitはRust用語
Excelでは何と言うのか?概念がそもそも無いのか?

598 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 11:43:00.38 ID:EffckoF6.net]
VBAにもInterfaceという機能があり見た目はJavaに似ている
しかし実質的にはCOM相互運用専用の機能であり、JavaのようなInterfaceは無いと考えて差し支えない
そもそもクラスメンバへのアクセスは常にダックタイピングなのでInterfaceはあってもなくても何の影響もなく、特に意味はない

599 名前:デフォルトの名無しさん [2025/05/05(月) 13:17:06.42 ID:bvP/AgOh.net]
今時のプログラミングの考え方とか、関数型プログラミングというのは、ワークシート関数でいうindex関数とmatch関数の組み合わせの検索関数や、
マッチ関数とoffset関数とcount if関数の組み合わせによるプルダウンリストの絞り込みの様な、
一つのセルに対して関数のネストはやめましょう、
一つの関数は一つの答えを返しましょう、という認識なのですがどうなのでしょうか?

600 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 13:26:58.67 ID:qohU83nC.net]
入門書読んだこと無いの?

601 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 13:37:24.10 ID:EffckoF6.net]
違う
関数型プログラミングってのは、VBAなんか使わずにワークシートの式と関数だけで作りましょう、というものだと考えるとイメージしやすい
正確には、副作用のない式や関数だけを組み合わせてプログラムを作るのが関数型プログラミングで、Excelのワークシートはその一例
VBAでも注意深くやれば副作用のない関数だけで作ることは可能だが、それができるスキルの奴はVBAなんか使わないだろうね

602 名前:デフォルトの名無しさん mailto:sage [2025/05/05(月) 17:39:10.53 ID:ueUnqmHR.net]
関数型プログラミングは入門記事でちょっと齧ったくらいだけど自分にはムリそうだなーと思った。
VBAとかPythonとかの手続型言語で書く分には、@決定性や副作用を意識する、A言語に取り入れられた関数型言語由来の構文(Pythonでいえば、イテレーター、内包表記、構造的パターンマッチとか?)を使うというくらいで十分じゃんじゃないかなぁ。
本格的に関数型でやるぞっていう人なら関数型言語(HaskellとかOCamlとか?)を使うんだろうし、そこまでは頑張れないけど手続型言語を書く際に関数型言語の考え方を参考にしたいという程度なら、上記@Aくらいでお茶を濁しておく感じになるのではないかと。

603 名前:デフォルトの名無しさん [2025/05/05(月) 22:54:48.45 ID:bvP/AgOh.net]
オブジェクト指向でカプセル化とか言っていたけど、結局はその理想通りにはならなかった。
その反省で生まれたのが関数型プログラミングという理解です。
関数には引数を引き渡す事と戻り値を受け取る事しか絶対にできない。
横槍も茶々入れも鶴の一声もない。
関数は一つのだけの事しかできない。
だからバグらない、誰がやっても結果は同じ。

604 名前:デフォルトの名無しさん [2025/05/05(月) 23:40:24.40 ID:fQ8xBj6s.net]
関数型プログラミングはオブジェクト指向よりも圧倒的に古い

605 名前:デフォルトの名無しさん mailto:sage [2025/05/06(火) 01:25:53.28 ID:AZSw2w0R.net]
関数型において関数は引数を受けることと戻り値を返すことしかできないというのは正しいのだけど、
鬼門なのは関数そのものを引数として渡したり関数の戻り値として関数を返したりできるところ
それにより関数型プログラミングは飛躍的に自由度と難易度が上がり、>>592の頭だとたぶんそこで挫折する

606 名前:デフォルトの名無しさん [2025/05/06(火) 06:45:59.65 ID:j1SFEq5D.net]
>>594
まさに今それをやろうとしていますね
引数に関数を渡そうとしているの
値を引数にしたいけど、関数をネストせざるを得ない



607 名前:デフォルトの名無しさん mailto:sage [2025/05/06(火) 07:24:57.73 ID:Gnnon1y6.net]
引数として関数そのものを渡したり、戻り値として関数そのものを返したりできるかは言語仕様の問題だから、言語によってできるかできないかは決まっている。VBAではできない。

608 名前:デフォルトの名無しさん mailto:sage [2025/05/06(火) 08:15:59.98 ID:Gnnon1y6.net]
念のためだけど、
@ある関数(関数A)の引数の一つとして、他の関数(関数B)からの戻り値を渡すこと(大袈裟に言えば、関数呼び出し式のネスト?)と
Aある関数(関数A)の引数の一つとして、他の関数(関数B)そのものを渡すこととは、違うことだよ。
C言語もVBAと同じく、関数そのものを他の関数の引数として渡したりすること(上記A)はできないが(もっとも、関数へのポインタを渡すことによって同等のことは実現できる)、上記@はできる。

さらにいえば、関数を引数として渡せたり、戻り値として返したりできる(関数が第1級の値である等と表現されることも多い)というのは、関数型プログラミングのおそらく必要条件にはなるのだと思うけど、だからといってこれらの性質があれば関数型言語というわけでもない。JavaScriptとかPythonとかは関数が第1級の値である言語だけと、いわゆる関数型言語とは言われていないと思うし。
VBAは、構文的にはJavaScript、Pytnon、C辺りと比べても関数型プログラミングからより遠い位置にいる言語だと思うので、あまり関数型にこだわる必要はないのでは? 実践的には、関数の決定性と副作用の有無に意識的になるだけでも、それなりのメリットはあると思う。






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

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

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