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/
探検
Excel VBA 質問スレ Part82
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2025/01/24(金) 03:31:15.25ID:l239yW+P503デフォルトの名無しさん
2025/04/28(月) 11:10:41.08ID:6D3yvt7l どこのスレの誤爆かな?
504デフォルトの名無しさん
2025/04/28(月) 16:28:52.13ID:5fRt9Dct SQLiteのデータベースをODBC経由ADODBで引っ張ってきてるけど、
CopyFromRecordSet で一発で貼るのと 1行1カラムずつ地道に貼るのとで
267件中1件1カラムだけ違う これは何なんだろう
CopyFromRecordSet で一発で貼るのと 1行1カラムずつ地道に貼るのとで
267件中1件1カラムだけ違う これは何なんだろう
505デフォルトの名無しさん
2025/04/28(月) 17:32:10.75ID:L3M/APjY 知らんがな
違うと思ったならチェックしたんだろ?どう違うかを知っているのはお前だけ
違うと思ったならチェックしたんだろ?どう違うかを知っているのはお前だけ
506デフォルトの名無しさん
2025/04/28(月) 19:04:28.97ID:opVSzI03 >>504
自分で作ったコードを調べて原因を見つける能力がない無能っぷりを白状しているようにしか見えない
自分で作ったコードを調べて原因を見つける能力がない無能っぷりを白状しているようにしか見えない
507デフォルトの名無しさん
2025/04/28(月) 19:12:48.88ID:77Ku1S4P 質問スレなんだし、そんなにきつく当たらなくてもいいんじゃない? もう少しゆるい感じでやっていこうよ。
508デフォルトの名無しさん
2025/04/28(月) 19:29:47.71ID:5fRt9Dct 辛辣だなぁ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
これでどう検証したらいいのよ
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
これでどう検証したらいいのよ
509デフォルトの名無しさん
2025/04/28(月) 19:34:46.10ID:aApiL0z1 どう違うのかも書かない無能だから
510デフォルトの名無しさん
2025/04/28(月) 20:16:18.13ID:Fc2g4rbd PowerQueryの方がVBA よりも処理が高速なはずだ
と思っていたけど、配列を使えばVBAの方が処理が高速だったよ
と思っていたけど、配列を使えばVBAの方が処理が高速だったよ
511デフォルトの名無しさん
2025/04/28(月) 22:36:06.18ID:opVSzI03512デフォルトの名無しさん
2025/04/29(火) 00:38:17.02ID:Cio0Z7DT >>511
ざっくり例えると、1件ずつ処理すると元データどおり
みかん 150円
バナナ 200円
りんご 250円
となるところがCopyFromRecordSetだと
みかん 150円
みかん 200円
りんご 250円
になる感じかな もちろん今回が初めてのケース
ざっくり例えると、1件ずつ処理すると元データどおり
みかん 150円
バナナ 200円
りんご 250円
となるところがCopyFromRecordSetだと
みかん 150円
みかん 200円
りんご 250円
になる感じかな もちろん今回が初めてのケース
513デフォルトの名無しさん
2025/04/29(火) 03:39:13.13ID:uCA5xnZY514デフォルトの名無しさん
2025/04/29(火) 05:46:13.95ID:DUP3Wr3v 重複したデータでなければプログラムに問題がありそうだけどなぁ
ザックリすぎてわっかんねぇなぁ
ザックリすぎてわっかんねぇなぁ
515デフォルトの名無しさん
2025/04/29(火) 05:58:53.59ID:NELjOoG5 質問の間抜けな感じからして凡ミスやな
516デフォルトの名無しさん
2025/04/29(火) 06:09:56.99ID:DUP3Wr3v スゲー適当なんだけど違いが1件ってことはEOFが入ってるとかそんな感じかな?
517デフォルトの名無しさん
2025/04/29(火) 09:40:01.77ID:Cio0Z7DT >>513
同じデータをAccessにインポートして実行→再現せず
SQLiteで検索するデータ量を減らす→再現せず
で、よく見たら256レコード目で検索条件(SQL文)変えても必ず発生することがわかった
SQLite3 ODBC DriverからADODBでデータ取得してCopyFromRecordSetでデータ貼付けすると起こる
データ取得方法は同じでも1レコード1カラムずつデータ貼っていくと起こらない
ダミーデータ作って色々試してみるかな
同じデータをAccessにインポートして実行→再現せず
SQLiteで検索するデータ量を減らす→再現せず
で、よく見たら256レコード目で検索条件(SQL文)変えても必ず発生することがわかった
SQLite3 ODBC DriverからADODBでデータ取得してCopyFromRecordSetでデータ貼付けすると起こる
データ取得方法は同じでも1レコード1カラムずつデータ貼っていくと起こらない
ダミーデータ作って色々試してみるかな
518デフォルトの名無しさん
2025/04/29(火) 09:48:33.61ID:cxg+2T2y >>517
元データの中に制御文字のようなゴミがあるとか、取得したものを表示する過程でミスっている可能性もある
ダミーで試すか、文字コードをバイナリ値でチェックするとかだな
あと256番目って数値がbyte扱いで0になってないかとか
元データの中に制御文字のようなゴミがあるとか、取得したものを表示する過程でミスっている可能性もある
ダミーで試すか、文字コードをバイナリ値でチェックするとかだな
あと256番目って数値がbyte扱いで0になってないかとか
519デフォルトの名無しさん
2025/04/29(火) 09:57:59.04ID:LEbvev28 昔Oracleのバグで1件くらい少ないレコードセット返ってくるバグ思い出した
520デフォルトの名無しさん
2025/04/29(火) 11:15:10.56ID:Cio0Z7DT ダミーでも再現した
SQLite側のフィールドがTEXT型の場合のみ、256レコード目の内容が255レコード目と同じになる
INTEGER方だと起らない
SQLite側のフィールドがTEXT型の場合のみ、256レコード目の内容が255レコード目と同じになる
INTEGER方だと起らない
521デフォルトの名無しさん
2025/04/29(火) 11:17:05.94ID:Cio0Z7DT こんな感じ 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
254 test254 2025/06/11 1253
255 test255 2025/06/12 1254
256 test255 2025/06/12 1255
257 test257 2025/06/14 1256
522デフォルトの名無しさん
2025/04/29(火) 12:21:37.37ID:TmvDscRd 属人的と言うなら車間距離だな
ExcelやVBA利用者には車間距離詰める馬鹿が多過ぎる
総じて「だろう運転」ばかりしていて「かもしれない運転」なんて眼中に無い
そもそもMicrosoft開発陣が「だろう運転」を推奨してる節がある
ExcelやVBA利用者には車間距離詰める馬鹿が多過ぎる
総じて「だろう運転」ばかりしていて「かもしれない運転」なんて眼中に無い
そもそもMicrosoft開発陣が「だろう運転」を推奨してる節がある
523デフォルトの名無しさん
2025/04/29(火) 12:25:39.07ID:Cio0Z7DT 連投失礼、256だけじゃなく512,768,1024も同じ現象だった
524デフォルトの名無しさん
2025/04/29(火) 13:23:59.14ID:lJszgH0z ODBCのバージョンと定義がわかる画面貼っとけ
525デフォルトの名無しさん
2025/04/29(火) 14:30:57.99ID:AuvQCcIn 久しぶりに面白そうな話題じゃん
自己解決しちゃっても是非原因教えてね
自己解決しちゃっても是非原因教えてね
526デフォルトの名無しさん
2025/04/29(火) 16:26:16.90ID:Cio0Z7DT スクショは貼らない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
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
527デフォルトの名無しさん
2025/04/29(火) 16:31:39.01ID:Mpe85ZPY528デフォルトの名無しさん
2025/04/29(火) 16:37:30.76ID:Cio0Z7DT >>525
早速自決w
Set dbrs = New ADODB.Recordset
dbrs.CursorLocation = adUseClient
dbrs.Open "select * from testtbl", dbcn, adOpenStatic, adLockReadOnly
で正常になった お騒がせしました
早速自決w
Set dbrs = New ADODB.Recordset
dbrs.CursorLocation = adUseClient
dbrs.Open "select * from testtbl", dbcn, adOpenStatic, adLockReadOnly
で正常になった お騒がせしました
529デフォルトの名無しさん
2025/04/29(火) 16:47:03.16ID:EclpVRbh ちょうど総合相談スレでも
3時間くらい前に発生した本日の事案への弔辞
> 介錯人は頼んだのかな
> 成仏しろよ
3時間くらい前に発生した本日の事案への弔辞
> 介錯人は頼んだのかな
> 成仏しろよ
530デフォルトの名無しさん
2025/04/29(火) 16:58:21.16ID:EclpVRbh 「自決」の辞書上のもう一つの意味、民族自決主義の「自決」は
「自分の意志で自分のことを決めること」だけど、
くだんの「自決する」の文脈は、意志うんぬんや決めるとかの流れはない。
なので、「問題を自分で解決した」という意味はならなさそう・・・
とマジレスしてみる
「自分の意志で自分のことを決めること」だけど、
くだんの「自決する」の文脈は、意志うんぬんや決めるとかの流れはない。
なので、「問題を自分で解決した」という意味はならなさそう・・・
とマジレスしてみる
531デフォルトの名無しさん
2025/04/29(火) 20:39:35.35ID:la4ZcTxc 自分のケツのことかと思った
532デフォルトの名無しさん
2025/04/29(火) 21:12:16.89ID:hhMpSOWT 痔になったケツかと思った
533デフォルトの名無しさん
2025/04/29(火) 22:00:44.14ID:V3jk1q3e WinAPIでvisual styleを適用させたい
office2021だとCreateWindowEXで作ればvisual styleになるのにoffice2019だとならない
office2021だとCreateWindowEXで作ればvisual styleになるのにoffice2019だとならない
534デフォルトの名無しさん
2025/04/29(火) 23:44:21.62ID:jEUD8QFb 今頃になって列の行ごとの文字列のReplaceは、まず文字列をカンマでもなんでもいいから全部くっつけてひとまとめにして変数に代入して、Replace(文字列,検索文字,"")すれば一括で置き換えられるって理解したよ
そしてSplitで配列に戻して元通り
そしてSplitで配列に戻して元通り
535デフォルトの名無しさん
2025/04/30(水) 01:17:17.74ID:0P1GE/1d >>533
ComCtl32.DLLにリンクしてないからだと思う
ComCtl32.DLLにリンクしてないからだと思う
536デフォルトの名無しさん
2025/04/30(水) 03:14:35.45ID:IvfkHP7P >>534
たまたまデリミタと同じ文字(列)がデータにも含まれててExcelのバグだと騒ぐまでがセット
たまたまデリミタと同じ文字(列)がデータにも含まれててExcelのバグだと騒ぐまでがセット
537デフォルトの名無しさん
2025/04/30(水) 06:29:26.31ID:7AsrwtYN >>536
わかるわかる
わかるわかる
538デフォルトの名無しさん
2025/04/30(水) 06:54:36.59ID:TQaKmIw3539デフォルトの名無しさん
2025/04/30(水) 18:11:25.83ID:/xZzLlpB Range("A1:C10").Replace What:="置換前の文字", Replacement:="置換後の文字", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
ってchatgptさんが言ってます
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
ってchatgptさんが言ってます
540デフォルトの名無しさん
2025/04/30(水) 18:39:00.27ID:3/ALrefg Replaceメソッドはシートの検索/置換オプションも変更されるから嫌い
541デフォルトの名無しさん
2025/04/30(水) 19:34:30.68ID:Ypkgz0ac >>528
さんきゅ
さんきゅ
542デフォルトの名無しさん
2025/05/01(木) 10:16:05.61ID:NoOjVvyj 開発では作るだけでなく動作確認、評価、検証をきちんとやるのも大事なのじゃ
わざと異常を出して正しく異常が出るか、桁数やデータが大量だとどうなるかとか、日本語以外の環境でも動くとか
実際に動かして確認すると気づかなかった問題が見えてくるものだ
わざと異常を出して正しく異常が出るか、桁数やデータが大量だとどうなるかとか、日本語以外の環境でも動くとか
実際に動かして確認すると気づかなかった問題が見えてくるものだ
543デフォルトの名無しさん
2025/05/01(木) 10:51:14.04ID:/KCrsMZn テストが重要なのはもちろんだが、VBAerレベルではそもそもバグが出にくくテストケースを闇雲に増やさなくていい書き方というものも多少は勉強した方がよい
似た処理をいちいちコピペすればその分ミスは増えるし、プログラムに直行性がないとテストケースは無限に増える
似た処理をいちいちコピペすればその分ミスは増えるし、プログラムに直行性がないとテストケースは無限に増える
544デフォルトの名無しさん
2025/05/01(木) 11:52:17.40ID:nTiKCI2R >プログラムに直行性がないとテストケースは無限に増える
ほんそれ
直交性が無いのは言語の欠陥だと思う
ほんそれ
直交性が無いのは言語の欠陥だと思う
545デフォルトの名無しさん
2025/05/01(木) 13:39:51.25ID:yf6hHvtn x ほんそれ
o 本当にそれ
o 本当にそれ
546デフォルトの名無しさん
2025/05/01(木) 14:02:16.67ID:NoOjVvyj 問題ないですとか言ってたのに後になって実は確認してませんでした とか言う新人たまにいる
547デフォルトの名無しさん
2025/05/01(木) 15:05:48.78ID:my1nUwSm VBAで単体テスト、カバレージ100とか聞いたことないわ
あれ?ACCESSの納品物の評価ってどうやってたっけ……(もう忘れた)
あれ?ACCESSの納品物の評価ってどうやってたっけ……(もう忘れた)
548デフォルトの名無しさん
2025/05/01(木) 23:23:13.02ID:15supz3z スレチだけど
やっとPowerQueryの変数宣言、代入、for each、無名(名前付き)関数がわかった。
.Buffer早すぎ
やっとPowerQueryの変数宣言、代入、for each、無名(名前付き)関数がわかった。
.Buffer早すぎ
549デフォルトの名無しさん
2025/05/02(金) 00:25:17.81ID:+dCfSpYU 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式の中身をワークシートに書き出せるのね
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式の中身をワークシートに書き出せるのね
550デフォルトの名無しさん
2025/05/02(金) 01:50:51.67ID:TLbUOI0p >>549
いやん見ないで照
いやん見ないで照
551デフォルトの名無しさん
2025/05/02(金) 06:41:36.56ID:TLbUOI0p 前に言っていた、Power Automateみたいにコードブロックを入れたら、作成したコードブロックだけで有効な変数が自動的に作成されて、コードブロックを抜けたら変数が削除される、コードブロックごとに変数が一意、コードブロックがカプセル化、秘匿化されている、もはやコードブロックがサブプロシージャ、ファンクション関数っていうの、関数型プログラミングの事だったんだな
552549
2025/05/02(金) 06:43:09.29ID:+dCfSpYU そんな、他人を痴漢扱いすなw
いやこれ、一昨日ChatGPTに
「クエリーの依存関係がもっと見やすいツール、何かない?」
って聞いた中で、教わったばかりの一部なんだけど。
需要があるなら、フルでプロシージャを晒すよ?
おのおのChatGPTに聞けばいいんだろうけれど。
ここから親子関係の一覧表を作る、次のプロシージャは
正規表現検出をどう扱うか、相談しながらチューニング中なんだけど。
いやこれ、一昨日ChatGPTに
「クエリーの依存関係がもっと見やすいツール、何かない?」
って聞いた中で、教わったばかりの一部なんだけど。
需要があるなら、フルでプロシージャを晒すよ?
おのおのChatGPTに聞けばいいんだろうけれど。
ここから親子関係の一覧表を作る、次のプロシージャは
正規表現検出をどう扱うか、相談しながらチューニング中なんだけど。
553デフォルトの名無しさん
2025/05/02(金) 07:20:32.31ID:TLbUOI0p ワイはCopilotにsheet.copyで作成した新規ブックのクエリを削除するにはどうしたらいいですか?
のコードでマクロ実行ブック(コピー元)のクエリも削除された泣
プログラマが型がわからないってマジ?
VBAでtypeっていうともっぱらそのモジュールのみで有効なプロパティ?の事を指すと思うけど
TypeScriptでは静的型付けの様に、バグの無いコードというのは、できる事、やれる事、受け付ける操作を限定する事だと思う。
何でもかんでもできる、受け付けるというのはバグの元だよ。
のコードでマクロ実行ブック(コピー元)のクエリも削除された泣
プログラマが型がわからないってマジ?
VBAでtypeっていうともっぱらそのモジュールのみで有効なプロパティ?の事を指すと思うけど
TypeScriptでは静的型付けの様に、バグの無いコードというのは、できる事、やれる事、受け付ける操作を限定する事だと思う。
何でもかんでもできる、受け付けるというのはバグの元だよ。
554デフォルトの名無しさん
2025/05/02(金) 07:59:38.75ID:TLbUOI0p VBAは変数を宣言しなくても変数が使用できるし、Variantは中のデータの型を判断するし、動的型付けだった😫
宣言を強制しているし、型指定もしているからすっかり忘れていた
宣言を強制しているし、型指定もしているからすっかり忘れていた
555デフォルトの名無しさん
2025/05/02(金) 08:41:13.69ID:IByDjNOR556デフォルトの名無しさん
2025/05/02(金) 09:45:33.14ID:G++s7sQD >>551
Power Automateって使ったことないので分からないんだが、多くの言語で一般的ないわゆるブロックスコープとは別物なの?
Power Automateって使ったことないので分からないんだが、多くの言語で一般的ないわゆるブロックスコープとは別物なの?
557デフォルトの名無しさん
2025/05/02(金) 12:34:26.30ID:FVfG1Al+ >>556
同じなんだけど、
Power Automateはループ処理のアクションを追加すると自動的にvbaでいう for i の i とか for each 変数 の 変数が自動的に宣言される
vbaで同じ事をしようとするといちいち宣言しなくちゃいけないし、命名のレパートリーも尽きるからやらないし、流用になる
個別に変数を自動的に宣言してしかも管理も把握も一目瞭然だと、これからの時代はそれぞれのアクション、ブロックが一つのオブジェクト、関数みたいになるのがスタンダードで、しかもさらに進化するのかなと思う
同じなんだけど、
Power Automateはループ処理のアクションを追加すると自動的にvbaでいう for i の i とか for each 変数 の 変数が自動的に宣言される
vbaで同じ事をしようとするといちいち宣言しなくちゃいけないし、命名のレパートリーも尽きるからやらないし、流用になる
個別に変数を自動的に宣言してしかも管理も把握も一目瞭然だと、これからの時代はそれぞれのアクション、ブロックが一つのオブジェクト、関数みたいになるのがスタンダードで、しかもさらに進化するのかなと思う
558デフォルトの名無しさん
2025/05/02(金) 13:08:27.70ID:i8P7c2SF だからそんなもん20年前から他の言語では一般的だし、
PowerAutomateって複雑なことやろうとすると共通の変数を複数ステップに渡って弄り回すことになって簡単にVBAの糞コードみたいになるよ
変数のスコープに関する君の考えは一般的には正しいが、残念ながらPower Automateは君が期待しているようなものではない
PowerAutomateって複雑なことやろうとすると共通の変数を複数ステップに渡って弄り回すことになって簡単にVBAの糞コードみたいになるよ
変数のスコープに関する君の考えは一般的には正しいが、残念ながらPower Automateは君が期待しているようなものではない
559デフォルトの名無しさん
2025/05/02(金) 13:46:02.65ID:G++s7sQD スコープが別なことが分かっていれば、ループ変数は同じ名前の流用でも特に問題は起きないような気もするけれど。まぁでも便利なんだろうね。
ブロックスコープがない言語もそこそこあるような……。Pythonとか昔のJavaScriptとかは、関数スコープはあるけれどブロックスコープはないよね。
ブロックスコープがない言語もそこそこあるような……。Pythonとか昔のJavaScriptとかは、関数スコープはあるけれどブロックスコープはないよね。
560デフォルトの名無しさん
2025/05/02(金) 16:53:20.86ID:nKjy1k/M ブロックがあればええ
561デフォルトの名無しさん
2025/05/02(金) 19:06:46.82ID:ngu+xaVd 全てグローバル
変数名も文字数制限あり
BASICとはそういうものだ
変数名も文字数制限あり
BASICとはそういうものだ
562デフォルトの名無しさん
2025/05/02(金) 20:16:54.76ID:KF55o+fS 変数名といえばおまえら Option Explicitしてるの?
俺はうっかりさんでスペルミスしがちだから外せないけど
俺はうっかりさんでスペルミスしがちだから外せないけど
563デフォルトの名無しさん
2025/05/02(金) 20:38:35.86ID:sdnBjLxl しない理由がない
564デフォルトの名無しさん
2025/05/02(金) 20:55:10.60ID:1BRp4bnH あれ消えないようにして欲しい
565デフォルトの名無しさん
2025/05/03(土) 05:59:05.73ID:2+JR0EAo 今更ながらブックオープン 読み取り専用のコードだけを書いたfunction関数を作れば短い文字数でブックを開いて変数に代入できるって気づいたんだけど
もっと有用なコードはありますか?
さらにテーブルをセットするfunctionとか、ディクショナリーの作成、登録するfunctionとかもいいな
もっと有用なコードはありますか?
さらにテーブルをセットするfunctionとか、ディクショナリーの作成、登録するfunctionとかもいいな
566デフォルトの名無しさん
2025/05/03(土) 07:20:36.45ID:0JGyOYLe 自分だけが読み書きするコードならそれもありだと思うけど、一般論としては、文字数を少し節約できるというくらいしかメリットがないなら、あえてラッパーを作る意味はあまりないような気がする。
567デフォルトの名無しさん
2025/05/03(土) 09:23:52.05ID:Hazt22aJ >>565
短い文字数が有用ならコメント付けないで変数名とか全部1文字にしたらいいんじゃね
短い文字数が有用ならコメント付けないで変数名とか全部1文字にしたらいいんじゃね
568デフォルトの名無しさん
2025/05/03(土) 10:20:15.15ID:VRj6VpYS 使用回数によるよね
同じ操作が何回も出てくるなら適当なラッパー書いてあげると見通し良くて親切かなと
もちろんコメント付きでね
同じ操作が何回も出てくるなら適当なラッパー書いてあげると見通し良くて親切かなと
もちろんコメント付きでね
569デフォルトの名無しさん
2025/05/03(土) 11:20:28.73ID:F8pywi6k そのプロジェクト内では1回しか使わなくても、よくある定形処理は関数にまとめた方がいい
文字数を減らす必要はないけど、行数は少ない方がデバッグがしやすくなる
文字数を減らす必要はないけど、行数は少ない方がデバッグがしやすくなる
570デフォルトの名無しさん
2025/05/03(土) 16:42:04.86ID:h9Jrb8E+ 1ファイルに全部書く
571デフォルトの名無しさん
2025/05/03(土) 17:16:40.74ID:2+JR0EAo ラッパーというのですね
ありがとうございます
function関数やサブプロシージャは短い方がいい(一つの処理しか行わなくてもいい、行わない方がいい)
一回しか使用しない処理でも、メインプロシージャから切り分けた方がいい
と聞いていましたが、これはラッパーというのですね
ありがとうございます
function関数やサブプロシージャは短い方がいい(一つの処理しか行わなくてもいい、行わない方がいい)
一回しか使用しない処理でも、メインプロシージャから切り分けた方がいい
と聞いていましたが、これはラッパーというのですね
572デフォルトの名無しさん
2025/05/03(土) 18:50:44.41ID:ocHu15P2 ぱっぱらぱー
573デフォルトの名無しさん
2025/05/03(土) 21:38:51.92ID:Hazt22aJ お鍋の中からインチキおじさんが登場しますた
574デフォルトの名無しさん
2025/05/03(土) 22:43:16.33ID:aLoX39eB ぴーひゃらぴーひゃら
575デフォルトの名無しさん
2025/05/04(日) 07:28:49.39ID:ajXSlqYh ラッパーというのは、元の関数とかにガワを被せた(つまり、その中で元の関数を呼び出している)関数とかのことね。包装するとかの意味のラップ。念のため。
576デフォルトの名無しさん
2025/05/04(日) 08:17:46.31ID:kPdoN8ak ラッパーとインターフェースはどう違うのっと
577デフォルトの名無しさん
2025/05/04(日) 09:35:43.88ID:VN1fyBP0 インターフェースは、抽象的にいえばひとまとまりと観念されるコードの塊(クラスとかモジュールとか)同士の間の境界、その境界に接するコード部分かな。インターフェースを介して情報のやり取りを行うに際して互いの前提が異なる場合には、そのままでは情報のやり取りができないので前提を合わせる必要がある。ラッパーはそのために使われることもあるけれど、基本的には全然別の概念。
578デフォルトの名無しさん
2025/05/04(日) 16:30:55.85ID:IQyuDcpS579デフォルトの名無しさん
2025/05/04(日) 16:35:24.36ID:IQyuDcpS >>577
質問者じゃないけど、あなたの説明は入出力のインターフェース
質問者はオブジェクト思考のインターフェースのことを聞いているとおもわれる
インターフェースはモジュールに決まったメソッド、プロパティを持たせるための骨格となる設計の定義
特定のインターフェースを継承させることで、そのクラスにはどういうメソッド、どういうプロパティがあるのか調べなくてもわかるようにできる
質問者じゃないけど、あなたの説明は入出力のインターフェース
質問者はオブジェクト思考のインターフェースのことを聞いているとおもわれる
インターフェースはモジュールに決まったメソッド、プロパティを持たせるための骨格となる設計の定義
特定のインターフェースを継承させることで、そのクラスにはどういうメソッド、どういうプロパティがあるのか調べなくてもわかるようにできる
580デフォルトの名無しさん
2025/05/04(日) 21:24:05.55ID:NkPvwNmC 具象クラスの(>>577の意味での)インターフェイスを規定する抽象クラス(抽象基底クラス)それ自体のことをインターフェイスと呼ぶのは、オブジェクト指向というよりもJavaとかから広まった用語法なのでは。
個人的には、インターフェイスという語の本来の意味はあくまでも577のようなものであって、Javaとかでいうインターフェイスはそこからの派生とか転用として位置付けられるべき用語法だと思うかな。
ただたしかに、Javaみたいな意味でインターフェイスという語を用いることの方が(プログラミング関係の文脈では)もはや多いのかもしれないし、質問した576の意図もそちらにあったのかもしれないね。
個人的には、インターフェイスという語の本来の意味はあくまでも577のようなものであって、Javaとかでいうインターフェイスはそこからの派生とか転用として位置付けられるべき用語法だと思うかな。
ただたしかに、Javaみたいな意味でインターフェイスという語を用いることの方が(プログラミング関係の文脈では)もはや多いのかもしれないし、質問した576の意図もそちらにあったのかもしれないね。
581デフォルトの名無しさん
2025/05/04(日) 21:50:46.14ID:6QG7+rqM PowerQueryでの動的な繰り返し処理を理解したら、VBAにもList.Select関数とかText.PositionOfのOccurrence.Allとか欲しい
582デフォルトの名無しさん
2025/05/05(月) 01:42:23.95ID:6skGH2rL 自分で実装すればいいじゃん
583デフォルトの名無しさん
2025/05/05(月) 09:14:01.67ID:8n1c0Fvg 実装は難しくはないだろうけど、汎用的に使える便利な関数はできれば組み込みで持っていて欲しいという感覚は分かる。
584デフォルトの名無しさん
2025/05/05(月) 10:45:35.51ID:NKQxWENO 配列の中に、対象に含まれているものがあれば、配列から取り出す、
っていう処理だから、内部処理的には、結局配列を全てチェックしていて意味がないのかな
っていう処理だから、内部処理的には、結局配列を全てチェックしていて意味がないのかな
585デフォルトの名無しさん
2025/05/05(月) 10:46:27.32ID:Q8K4+hk+ 自分が欲しいと思ったものは誰かがすでに作ってる
作るよりAIに聞いた方が早い
作るよりAIに聞いた方が早い
586デフォルトの名無しさん
2025/05/05(月) 11:03:49.52ID:20YqVkB+587デフォルトの名無しさん
2025/05/05(月) 11:43:00.38ID:EffckoF6 VBAにもInterfaceという機能があり見た目はJavaに似ている
しかし実質的にはCOM相互運用専用の機能であり、JavaのようなInterfaceは無いと考えて差し支えない
そもそもクラスメンバへのアクセスは常にダックタイピングなのでInterfaceはあってもなくても何の影響もなく、特に意味はない
しかし実質的にはCOM相互運用専用の機能であり、JavaのようなInterfaceは無いと考えて差し支えない
そもそもクラスメンバへのアクセスは常にダックタイピングなのでInterfaceはあってもなくても何の影響もなく、特に意味はない
588デフォルトの名無しさん
2025/05/05(月) 13:17:06.42ID:bvP/AgOh 今時のプログラミングの考え方とか、関数型プログラミングというのは、ワークシート関数でいうindex関数とmatch関数の組み合わせの検索関数や、
マッチ関数とoffset関数とcount if関数の組み合わせによるプルダウンリストの絞り込みの様な、
一つのセルに対して関数のネストはやめましょう、
一つの関数は一つの答えを返しましょう、という認識なのですがどうなのでしょうか?
マッチ関数とoffset関数とcount if関数の組み合わせによるプルダウンリストの絞り込みの様な、
一つのセルに対して関数のネストはやめましょう、
一つの関数は一つの答えを返しましょう、という認識なのですがどうなのでしょうか?
589デフォルトの名無しさん
2025/05/05(月) 13:26:58.67ID:qohU83nC 入門書読んだこと無いの?
590デフォルトの名無しさん
2025/05/05(月) 13:37:24.10ID:EffckoF6 違う
関数型プログラミングってのは、VBAなんか使わずにワークシートの式と関数だけで作りましょう、というものだと考えるとイメージしやすい
正確には、副作用のない式や関数だけを組み合わせてプログラムを作るのが関数型プログラミングで、Excelのワークシートはその一例
VBAでも注意深くやれば副作用のない関数だけで作ることは可能だが、それができるスキルの奴はVBAなんか使わないだろうね
関数型プログラミングってのは、VBAなんか使わずにワークシートの式と関数だけで作りましょう、というものだと考えるとイメージしやすい
正確には、副作用のない式や関数だけを組み合わせてプログラムを作るのが関数型プログラミングで、Excelのワークシートはその一例
VBAでも注意深くやれば副作用のない関数だけで作ることは可能だが、それができるスキルの奴はVBAなんか使わないだろうね
591デフォルトの名無しさん
2025/05/05(月) 17:39:10.53ID:ueUnqmHR 関数型プログラミングは入門記事でちょっと齧ったくらいだけど自分にはムリそうだなーと思った。
VBAとかPythonとかの手続型言語で書く分には、@決定性や副作用を意識する、A言語に取り入れられた関数型言語由来の構文(Pythonでいえば、イテレーター、内包表記、構造的パターンマッチとか?)を使うというくらいで十分じゃんじゃないかなぁ。
本格的に関数型でやるぞっていう人なら関数型言語(HaskellとかOCamlとか?)を使うんだろうし、そこまでは頑張れないけど手続型言語を書く際に関数型言語の考え方を参考にしたいという程度なら、上記@Aくらいでお茶を濁しておく感じになるのではないかと。
VBAとかPythonとかの手続型言語で書く分には、@決定性や副作用を意識する、A言語に取り入れられた関数型言語由来の構文(Pythonでいえば、イテレーター、内包表記、構造的パターンマッチとか?)を使うというくらいで十分じゃんじゃないかなぁ。
本格的に関数型でやるぞっていう人なら関数型言語(HaskellとかOCamlとか?)を使うんだろうし、そこまでは頑張れないけど手続型言語を書く際に関数型言語の考え方を参考にしたいという程度なら、上記@Aくらいでお茶を濁しておく感じになるのではないかと。
592デフォルトの名無しさん
2025/05/05(月) 22:54:48.45ID:bvP/AgOh オブジェクト指向でカプセル化とか言っていたけど、結局はその理想通りにはならなかった。
その反省で生まれたのが関数型プログラミングという理解です。
関数には引数を引き渡す事と戻り値を受け取る事しか絶対にできない。
横槍も茶々入れも鶴の一声もない。
関数は一つのだけの事しかできない。
だからバグらない、誰がやっても結果は同じ。
その反省で生まれたのが関数型プログラミングという理解です。
関数には引数を引き渡す事と戻り値を受け取る事しか絶対にできない。
横槍も茶々入れも鶴の一声もない。
関数は一つのだけの事しかできない。
だからバグらない、誰がやっても結果は同じ。
593デフォルトの名無しさん
2025/05/05(月) 23:40:24.40ID:fQ8xBj6s 関数型プログラミングはオブジェクト指向よりも圧倒的に古い
594デフォルトの名無しさん
2025/05/06(火) 01:25:53.28ID:AZSw2w0R 関数型において関数は引数を受けることと戻り値を返すことしかできないというのは正しいのだけど、
鬼門なのは関数そのものを引数として渡したり関数の戻り値として関数を返したりできるところ
それにより関数型プログラミングは飛躍的に自由度と難易度が上がり、>>592の頭だとたぶんそこで挫折する
鬼門なのは関数そのものを引数として渡したり関数の戻り値として関数を返したりできるところ
それにより関数型プログラミングは飛躍的に自由度と難易度が上がり、>>592の頭だとたぶんそこで挫折する
595デフォルトの名無しさん
2025/05/06(火) 06:45:59.65ID:j1SFEq5D596デフォルトの名無しさん
2025/05/06(火) 07:24:57.73ID:Gnnon1y6 引数として関数そのものを渡したり、戻り値として関数そのものを返したりできるかは言語仕様の問題だから、言語によってできるかできないかは決まっている。VBAではできない。
597デフォルトの名無しさん
2025/05/06(火) 08:15:59.98ID:Gnnon1y6 念のためだけど、
@ある関数(関数A)の引数の一つとして、他の関数(関数B)からの戻り値を渡すこと(大袈裟に言えば、関数呼び出し式のネスト?)と
Aある関数(関数A)の引数の一つとして、他の関数(関数B)そのものを渡すこととは、違うことだよ。
C言語もVBAと同じく、関数そのものを他の関数の引数として渡したりすること(上記A)はできないが(もっとも、関数へのポインタを渡すことによって同等のことは実現できる)、上記@はできる。
さらにいえば、関数を引数として渡せたり、戻り値として返したりできる(関数が第1級の値である等と表現されることも多い)というのは、関数型プログラミングのおそらく必要条件にはなるのだと思うけど、だからといってこれらの性質があれば関数型言語というわけでもない。JavaScriptとかPythonとかは関数が第1級の値である言語だけと、いわゆる関数型言語とは言われていないと思うし。
VBAは、構文的にはJavaScript、Pytnon、C辺りと比べても関数型プログラミングからより遠い位置にいる言語だと思うので、あまり関数型にこだわる必要はないのでは? 実践的には、関数の決定性と副作用の有無に意識的になるだけでも、それなりのメリットはあると思う。
@ある関数(関数A)の引数の一つとして、他の関数(関数B)からの戻り値を渡すこと(大袈裟に言えば、関数呼び出し式のネスト?)と
Aある関数(関数A)の引数の一つとして、他の関数(関数B)そのものを渡すこととは、違うことだよ。
C言語もVBAと同じく、関数そのものを他の関数の引数として渡したりすること(上記A)はできないが(もっとも、関数へのポインタを渡すことによって同等のことは実現できる)、上記@はできる。
さらにいえば、関数を引数として渡せたり、戻り値として返したりできる(関数が第1級の値である等と表現されることも多い)というのは、関数型プログラミングのおそらく必要条件にはなるのだと思うけど、だからといってこれらの性質があれば関数型言語というわけでもない。JavaScriptとかPythonとかは関数が第1級の値である言語だけと、いわゆる関数型言語とは言われていないと思うし。
VBAは、構文的にはJavaScript、Pytnon、C辺りと比べても関数型プログラミングからより遠い位置にいる言語だと思うので、あまり関数型にこだわる必要はないのでは? 実践的には、関数の決定性と副作用の有無に意識的になるだけでも、それなりのメリットはあると思う。
598デフォルトの名無しさん
2025/05/06(火) 09:32:02.27ID:ePr8aXMn あとこれは割とどうでもいいことだけど、関数の戻り値を他の関数の引数にすることを「関数のネスト」ということは、普通はあまりないのではないかなぁ(関数呼び出し式のネストという趣旨だとすれば意図は通じるけれども)。
普通は「関数のネスト」といわれれば、関数定義のネスト(関数内で定義された関数)の方を想起すると思う。
普通は「関数のネスト」といわれれば、関数定義のネスト(関数内で定義された関数)の方を想起すると思う。
599デフォルトの名無しさん
2025/05/06(火) 09:47:26.27ID:K1Pjz07i pythonの凸レータは関数型らしいし関数のネストっぽく観える
600デフォルトの名無しさん
2025/05/07(水) 23:18:41.10ID:5rQjCI4p 関数型プログラミングは手続きという処理を見せないだけで、ロジックを隠すことでシンプルな見た目にするもの。
歴史上、常にこういう発想が何度も出てきているが、見た目をきれいにしたいだけで仕様の変更に耐えられない構文であることから、一度も主流になったことがない。
歴史上、常にこういう発想が何度も出てきているが、見た目をきれいにしたいだけで仕様の変更に耐えられない構文であることから、一度も主流になったことがない。
601デフォルトの名無しさん
2025/05/07(水) 23:48:45.09ID:8NEt0qiL602デフォルトの名無しさん
2025/05/08(木) 01:43:07.29ID:eAkjlYW3 VBA使ってる人間が他言語批判は草
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【芸能】『バンダイナムコフェス』上海公演 日本人歌手・大槻マキが歌唱中に強制退場… 急に音を止められスタッフらしき人達に [冬月記者★]
- 「怒りに震えて涙が出た」 同性婚認めず「合憲」判断に原告が反発 「差別的な判決だ」 [ぐれ★]
- 橋下徹氏 高市首相“台湾有事”発言に「政治家の失言で一部の人でも仕事がキャンセルに…我々は認めていいのかな」疑問呈す [muffin★]
- 「インバウンド政策上、中国は重要」、訪日自粛で金子国交相「早く通常の状況に戻っていただきたい」★2 [ぐれ★]
- 中国外務省「正式な発言撤回なければ受け入れず」 高市首相は台湾有事「存立危機事態」言及せずも「言及しないことと撤回は別問題」★5 [ぐれ★]
- Amazonブラックフライデー 活況の裏に過酷労働 事故やケガを「自己責任にしないで」配達員ら4年連続抗議 [蚤の市★]
- (*´ω`*)おはようドリーム
- 【動画】上海バンダイナムコフェス、ワンピース歌ってる途中に中国政府「日本人の公演全面禁止」発令された瞬間強制終了 怖すぎ★4 [579392623]
- 佳子様に似てる
- プロレスラーってロープに振ると走って戻ってくるけど
- 【悲報】ルビィちゃん、しばかれる
- 葉山舞鈴とかってvチューバー人生イージーモードすぎじゃね?
