ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part54
https://mevius.5ch.net/test/read.cgi/tech/1527334657/
探検
Excel VBA 質問スレ Part55
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/07/22(日) 14:13:18.78ID:/fuF+goF116デフォルトの名無しさん
2018/07/31(火) 22:34:16.53ID:HEdj3l67117デフォルトの名無しさん
2018/07/31(火) 22:37:03.15ID:hnMeVpcj118デフォルトの名無しさん
2018/08/01(水) 18:45:11.44ID:/7P6ICDY119デフォルトの名無しさん
2018/08/01(水) 19:29:44.50ID:bLi+fVsi できる。
120118
2018/08/01(水) 19:37:48.99ID:CrgSL/Mw121デフォルトの名無しさん
2018/08/01(水) 20:05:31.66ID:KK2iEEgZ 「できますか?」としか聞いていないだろ
122デフォルトの名無しさん
2018/08/01(水) 20:09:04.73ID:SDXNPz2D お金を頂きます
123デフォルトの名無しさん
2018/08/01(水) 20:47:02.77ID:Cx2XTKqG あの説明じゃ何したいんだかさっぱり判らんけど出来るかってんなら出来るんだろうなぁ w
124デフォルトの名無しさん
2018/08/01(水) 20:49:54.52ID:atM50NE9125デフォルトの名無しさん
2018/08/01(水) 20:58:32.29ID:ADJFw6Sc ( )の中が長すぎる
126デフォルトの名無しさん
2018/08/01(水) 21:01:06.09ID:sbkooZWR127デフォルトの名無しさん
2018/08/01(水) 21:14:43.63ID:dwiwmIsf つーかVBAスレで関数とはどういうことよ
WorksheetFunction?
WorksheetFunction?
128デフォルトの名無しさん
2018/08/01(水) 21:16:08.42ID:htMziwx3 pivotじゃだめなのん?
129デフォルトの名無しさん
2018/08/01(水) 21:56:40.95ID:714hG0Tb >>121
文は文脈に関係なく不変の意味を持つという形式意味論の立場ですね
一方で、自然言語の解釈は文脈や発話者の意図と密接に関係しているという
立場をとるのが語用論です
夏目漱石は「I love you」を「月が綺麗ですね」と訳しなさいと
言ったらしいですがこれなんかは文脈を考えないとわからない言葉です
それでは問題です
最初にりんごが3個あります、あと2個りんごを買ったらいくつになるでしょう?
文は文脈に関係なく不変の意味を持つという形式意味論の立場ですね
一方で、自然言語の解釈は文脈や発話者の意図と密接に関係しているという
立場をとるのが語用論です
夏目漱石は「I love you」を「月が綺麗ですね」と訳しなさいと
言ったらしいですがこれなんかは文脈を考えないとわからない言葉です
それでは問題です
最初にりんごが3個あります、あと2個りんごを買ったらいくつになるでしょう?
130デフォルトの名無しさん
2018/08/01(水) 23:19:06.30ID:sbkooZWR >>129
スレチなんでそろそろ帰って
スレチなんでそろそろ帰って
131デフォルトの名無しさん
2018/08/01(水) 23:56:36.26ID:sS7kLAAW132デフォルトの名無しさん
2018/08/02(木) 07:19:05.05ID:M9+gUzRN133デフォルトの名無しさん
2018/08/02(木) 07:19:41.69ID:M9+gUzRN >>130
ただいま
ただいま
134デフォルトの名無しさん
2018/08/02(木) 08:12:15.27ID:2BgkbQH+ こうして回答も得られず、何も叶わず、¥無駄な人生を歩むのでした
135デフォルトの名無しさん
2018/08/02(木) 10:09:33.51ID:kHzgrEZ3 >>118
の者です
なんだかお騒がせしてしまってすいません
Sheet2の別の列に検索キーとして氏名と県名の結合文字列を作ってvlookupで参照するようにしました
もっとスマートなやり方があれば一番良いのですが…
の者です
なんだかお騒がせしてしまってすいません
Sheet2の別の列に検索キーとして氏名と県名の結合文字列を作ってvlookupで参照するようにしました
もっとスマートなやり方があれば一番良いのですが…
136デフォルトの名無しさん
2018/08/02(木) 19:14:12.00ID:dYoMhZad137デフォルトの名無しさん
2018/08/02(木) 21:04:52.53ID:TLBzkUIv 複数シートのデータを3次元配列に格納する効率の良いコードを組みたいんだけど、
サンプルコードをお願いできない?
条件
・三次元配列は(シートのインデックス番号,行,列)を想定
・対象のシートはインデックスの二番目から最後までで、現状5シートだが10シート程度まで増える見込み
・一枚のシート内におけるデータ数は、列数は30程度で固定、行数はシート毎に可変で現状は100程度だが1000程度まで増える見込み
サンプルコードをお願いできない?
条件
・三次元配列は(シートのインデックス番号,行,列)を想定
・対象のシートはインデックスの二番目から最後までで、現状5シートだが10シート程度まで増える見込み
・一枚のシート内におけるデータ数は、列数は30程度で固定、行数はシート毎に可変で現状は100程度だが1000程度まで増える見込み
138デフォルトの名無しさん
2018/08/02(木) 21:39:08.04ID:2BgkbQH+ >>137
行、列、シートで三次元になってるから、
sheets(1).cells(2,3)
みたいに配列にいれずそのまま扱うのは駄目なの?
効率がいいかどうかは知らんけど、
二次元配列ならセルを直接保折り込めばok
これをシートの数だけ回せば瞬殺
Sub foo()
a = Range("a1:b2")
End Sub
行、列、シートで三次元になってるから、
sheets(1).cells(2,3)
みたいに配列にいれずそのまま扱うのは駄目なの?
効率がいいかどうかは知らんけど、
二次元配列ならセルを直接保折り込めばok
これをシートの数だけ回せば瞬殺
Sub foo()
a = Range("a1:b2")
End Sub
139デフォルトの名無しさん
2018/08/02(木) 22:04:18.70ID:rqIgowuq >>137
max_row = 0 : max_col = 0 : result = array() : jug = array()
for i = 1 to Worksheets.Count
buf = Worksheets(i).UsedRange.Value
Redim Preserve jug(ubound(jug) + 1) : jug(ubound(jug)) = buf
if max_row < ubound(buf, 1) then max_row = ubound(buf, 1)
if max_col < ubound(buf, 2) then max_col = ubound(buf, 2)
next
redim result(ubound(jug) + 1, max_row, max_col)
for i = 0 to ubound(jug)
for row = 1 to max_row
if row > ubound(jug(i), 1) then exit for
for col = 1 to max_col
if col > ubound(jug(i), 2) then exit for
result(i + 1, row, col) = jug(i)(row, col)
next
next
next
これで result(1, 2, 3) で取り出せるし
インデックスが0オリジンでよければ jug(0)(2, 3) でも取り出せる
UsedRangeのとこは適当に書き換えてね
max_row = 0 : max_col = 0 : result = array() : jug = array()
for i = 1 to Worksheets.Count
buf = Worksheets(i).UsedRange.Value
Redim Preserve jug(ubound(jug) + 1) : jug(ubound(jug)) = buf
if max_row < ubound(buf, 1) then max_row = ubound(buf, 1)
if max_col < ubound(buf, 2) then max_col = ubound(buf, 2)
next
redim result(ubound(jug) + 1, max_row, max_col)
for i = 0 to ubound(jug)
for row = 1 to max_row
if row > ubound(jug(i), 1) then exit for
for col = 1 to max_col
if col > ubound(jug(i), 2) then exit for
result(i + 1, row, col) = jug(i)(row, col)
next
next
next
これで result(1, 2, 3) で取り出せるし
インデックスが0オリジンでよければ jug(0)(2, 3) でも取り出せる
UsedRangeのとこは適当に書き換えてね
140わ
2018/08/02(木) 23:16:22.80ID:XQFP0WAE141デフォルトの名無しさん
2018/08/02(木) 23:18:46.98ID:2BgkbQH+ >>140
綺麗
綺麗
142デフォルトの名無しさん
2018/08/03(金) 00:40:38.97ID:A1FDqy6b >>139
こういう馬鹿はすぐにクビ
こういう馬鹿はすぐにクビ
143デフォルトの名無しさん
2018/08/03(金) 05:28:19.46ID:wa60SFcl ユーザ定義型に対してforeach的なことってできないの?
Dictionaryやcollectionじゃないとだめかね
Dictionaryやcollectionじゃないとだめかね
144デフォルトの名無しさん
2018/08/03(金) 08:10:11.78ID:FdAoJ/Ly >>143
クラスにすればええやん。
クラスにすればええやん。
145デフォルトの名無しさん
2018/08/03(金) 10:48:59.11ID:efvhV3fR VBAで多態性(ポリフォーリズム)が実現できることを発見した。
ただし親オブジェクトはObjectクラスのみ。
これ以外に方法ないよね?
あとどうしてもコンストラクタを実現したいけど方法ある?
Class_Initializeのブロシージャは使えるんだけど引数が取れないという致命的な欠陥がある。
ただし親オブジェクトはObjectクラスのみ。
これ以外に方法ないよね?
あとどうしてもコンストラクタを実現したいけど方法ある?
Class_Initializeのブロシージャは使えるんだけど引数が取れないという致命的な欠陥がある。
146デフォルトの名無しさん
2018/08/03(金) 10:49:43.01ID:efvhV3fR ポリモーフィズム
147デフォルトの名無しさん
2018/08/03(金) 11:24:42.37ID:WNWnteXi148デフォルトの名無しさん
2018/08/03(金) 12:10:29.95ID:7xkrIrco149デフォルトの名無しさん
2018/08/03(金) 18:29:30.81ID:Jes/PhJV150デフォルトの名無しさん
2018/08/03(金) 19:49:24.72ID:GOZ9L8DI151デフォルトの名無しさん
2018/08/03(金) 20:07:46.13ID:EY4tsGwx VBAは手軽だって言ってた人いたけど上のような事をするならVBAでする必要ある?
VBAでするには面倒だよね
VBAでするには面倒だよね
152デフォルトの名無しさん
2018/08/03(金) 20:18:21.80ID:V7pxWvhe そうだねPowerShellなら(ry
153デフォルトの名無しさん
2018/08/03(金) 20:21:52.83ID:Jes/PhJV インターフェースを定義するか、そこまではしなくても良いかと考えるかだな。
どっちもあり有り得るけど、大きなプログラムなら定義して小さなプログラムなら定義しないって感じ。
でも、クラス作るべきって思うこともそんなに多くない。
VBAでするのは面倒とか感じることは無いな。
VBAでクラス作るのにピッタリな時は作って得られる恩恵が多いから感じないし、ピッタリな時は少ないから普段は無理して作らん。
どっちもあり有り得るけど、大きなプログラムなら定義して小さなプログラムなら定義しないって感じ。
でも、クラス作るべきって思うこともそんなに多くない。
VBAでするのは面倒とか感じることは無いな。
VBAでクラス作るのにピッタリな時は作って得られる恩恵が多いから感じないし、ピッタリな時は少ないから普段は無理して作らん。
154デフォルトの名無しさん
2018/08/03(金) 20:36:12.66ID:P22i9c3x VBAでクラス設計ってなんかうさんくさい感じがして使わないんだけどC#みたいな感覚で設計出来るの?
155デフォルトの名無しさん
2018/08/03(金) 20:54:03.97ID:TQSHsawm >>145>>149
一体エクセルで何を作っているんだ?
一体エクセルで何を作っているんだ?
156デフォルトの名無しさん
2018/08/03(金) 20:55:51.99ID:EY4tsGwx 気になる
何作ってるの?
何作ってるの?
157デフォルトの名無しさん
2018/08/03(金) 22:16:03.36ID:19fg4Hec ひと昔前ならともかく今はいろんなツールが無料だからねぇ
excelはさくっと一覧表やグラフを作るときにしか使ってないや
ちょっとした作業が1週間くらいの見積もりで入ったけど、Redmine立てるのめんどくせーな、
一人作業だしタスク100以下ならエクセル一覧表で管理すりゃ、まあいーかポチポチー、みたいな感じ
こうなるともうVBAは大した役にはたたんのだな
プログラム書くほどの込み入った仕事なら、別の手段で楽に、収穫を大きくしようかってなる
何でも揃ってるこの時代に、あえてVBAを主力で使ってる人たちが、
普段Excelでどんな仕事してるのか興味ある
excelはさくっと一覧表やグラフを作るときにしか使ってないや
ちょっとした作業が1週間くらいの見積もりで入ったけど、Redmine立てるのめんどくせーな、
一人作業だしタスク100以下ならエクセル一覧表で管理すりゃ、まあいーかポチポチー、みたいな感じ
こうなるともうVBAは大した役にはたたんのだな
プログラム書くほどの込み入った仕事なら、別の手段で楽に、収穫を大きくしようかってなる
何でも揃ってるこの時代に、あえてVBAを主力で使ってる人たちが、
普段Excelでどんな仕事してるのか興味ある
158デフォルトの名無しさん
2018/08/03(金) 22:24:24.13ID:GOZ9L8DI Excelより優れた表計算ソフトはいまだにないからのお
159デフォルトの名無しさん
2018/08/03(金) 22:44:29.83ID:qP1+Mw6P 知らないだけかもよ
160デフォルトの名無しさん
2018/08/03(金) 22:51:02.21ID:TQSHsawm 例えあったとしても、デファクトスタンダードという地位はもう揺るぎないものだろう
161デフォルトの名無しさん
2018/08/03(金) 23:02:27.33ID:IVrK95Nj ハンバーガーとコカコーラは世界で一番売れてるから一番優秀な食品だとかいう話を思い出した
162デフォルトの名無しさん
2018/08/03(金) 23:05:21.62ID:19fg4Hec バーガーとコーラだけじゃあっという間に病気だよ
163デフォルトの名無しさん
2018/08/03(金) 23:50:22.61ID:19fg4Hec 相変わらず具体例でねえなぁこのスレ
お前らほんとにVBA使ってんのか?www
お前らほんとにVBA使ってんのか?www
164デフォルトの名無しさん
2018/08/04(土) 00:14:17.09ID:HKzLzVCj165デフォルトの名無しさん
2018/08/04(土) 07:34:19.25ID:h4pZIq0i166デフォルトの名無しさん
2018/08/04(土) 08:36:12.58ID:hMaWSw1n エクセルは簡単な関数までで出来ることに使う
定期で使ってコードを書くような事ならC#でWinアプリかWebアプリにする
そんな使い分けです
定期で使ってコードを書くような事ならC#でWinアプリかWebアプリにする
そんな使い分けです
167デフォルトの名無しさん
2018/08/04(土) 08:59:40.72ID:Pz55ajO/ ある文字が文字配列の要素の中に存在するかどうかを調べるには
for i = 0 to Ubound(配列)〜のようにして
添え字を使ったループで一個ずつ比較するしかないですかね?
Pythonなどのように、 値 in 配列 とかで一発で判定できると楽なのだが
for i = 0 to Ubound(配列)〜のようにして
添え字を使ったループで一個ずつ比較するしかないですかね?
Pythonなどのように、 値 in 配列 とかで一発で判定できると楽なのだが
168デフォルトの名無しさん
2018/08/04(土) 09:27:21.51ID:iY2bfIdC for eachあるよ
169デフォルトの名無しさん
2018/08/04(土) 14:03:53.24ID:d9q3+5Xm Worksheet Functionのmatchなら一発でしょ、インデックスはわからんけど
filter関数のほうが早いんだっけ?
てか職場の老害が作るコードがいちいちforでぶん回すコード書いててイライラ
filter関数のほうが早いんだっけ?
てか職場の老害が作るコードがいちいちforでぶん回すコード書いててイライラ
170デフォルトの名無しさん
2018/08/04(土) 14:10:44.90ID:AEBP847j filterやmatchも中でforでぶん回してるよ
171デフォルトの名無しさん
2018/08/04(土) 14:20:20.63ID:vm6Y2AFh パフォーマンス無視でコードをシンプルにしたいだけなら Instr(Join( ))
172デフォルトの名無しさん
2018/08/04(土) 14:50:32.42ID:MinsDCPQ >>164
自分はAccessに繋ぐ所はクラス作らないからどんな所が上手くまとまると思うのか知りたいな。
自分はマ―クシートの管理と実際の用紙との比較をしやすいように管理上の結果(Excelシート)をForm上の用紙レイアウトに再現するようなプログラムでクラスを使ったのが良かった。
用紙上に配置するのはImageコントロールを使ったラジオボタンのようなものとテキストボックス、ラべル、他でユーザーが使う用紙にあわせて好きな位置に配置出来る編集モ―ドと配置後にデ―タにあわせてチェック状態を表示編集できる運用モードを持ったもの。
種類の違う可変個数のコントロールを同じように扱うのに便利。
自分はAccessに繋ぐ所はクラス作らないからどんな所が上手くまとまると思うのか知りたいな。
自分はマ―クシートの管理と実際の用紙との比較をしやすいように管理上の結果(Excelシート)をForm上の用紙レイアウトに再現するようなプログラムでクラスを使ったのが良かった。
用紙上に配置するのはImageコントロールを使ったラジオボタンのようなものとテキストボックス、ラべル、他でユーザーが使う用紙にあわせて好きな位置に配置出来る編集モ―ドと配置後にデ―タにあわせてチェック状態を表示編集できる運用モードを持ったもの。
種類の違う可変個数のコントロールを同じように扱うのに便利。
173デフォルトの名無しさん
2018/08/04(土) 15:05:27.11ID:iY2bfIdC174デフォルトの名無しさん
2018/08/04(土) 15:43:02.15ID:rFYImZyl 質問なのだが、エクセル関数とvba の使い分ける基準ってどうしてる?
175デフォルトの名無しさん
2018/08/04(土) 16:55:00.51ID:K8sTmQ88176デフォルトの名無しさん
2018/08/04(土) 17:18:02.49ID:/poCSM2A177デフォルトの名無しさん
2018/08/04(土) 17:43:58.28ID:Pz55ajO/ >>176
このコードでいう test_string のことです
複数の値を取りうる入力項目のチェックなんかはいつもこうしています
Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")
Dim i As Integer
For i = 0 To UBound(test_string)
If "one" = test_string(i) Then
MsgBox "one" & "はありまーす"
End If
Next
End Sub
このコードでいう test_string のことです
複数の値を取りうる入力項目のチェックなんかはいつもこうしています
Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")
Dim i As Integer
For i = 0 To UBound(test_string)
If "one" = test_string(i) Then
MsgBox "one" & "はありまーす"
End If
Next
End Sub
178デフォルトの名無しさん
2018/08/04(土) 17:49:50.34ID:rFYImZyl シート上で使うとき!
179デフォルトの名無しさん
2018/08/04(土) 17:51:01.98ID:/poCSM2A180デフォルトの名無しさん
2018/08/04(土) 19:29:54.74ID:h4pZIq0i181デフォルトの名無しさん
2018/08/04(土) 19:58:42.71ID:FI6ie7QF >>177
こういう処理は関数化した方がよい
Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")
If あるかな(test_string, "one") Then
MsgBox "one" & "はありまーす"
End If
End Sub
Function あるかな(a, b)
If InStr(Join(a, "&"), b) Then
あるかな = True
Else
あるかな = False
End If
End Function
こういう処理は関数化した方がよい
Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")
If あるかな(test_string, "one") Then
MsgBox "one" & "はありまーす"
End If
End Sub
Function あるかな(a, b)
If InStr(Join(a, "&"), b) Then
あるかな = True
Else
あるかな = False
End If
End Function
182デフォルトの名無しさん
2018/08/04(土) 20:00:16.54ID:FI6ie7QF バグ修正
Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function
Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function
183デフォルトの名無しさん
2018/08/04(土) 20:08:45.16ID:ClJJf5ah Functionの戻り値を関数名に代入する構文が最高に気持ち悪いんだけどどうにかならんの?
184デフォルトの名無しさん
2018/08/04(土) 20:39:40.48ID:A9MJ7JgF はじめまして。
下記のようなマクロを組もうと考えています。
x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。
このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。
下記のようなマクロを組もうと考えています。
x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。
このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。
185デフォルトの名無しさん
2018/08/04(土) 21:04:07.47ID:nAdkHQiH >>184
マクロ?
マクロ?
186デフォルトの名無しさん
2018/08/04(土) 21:04:16.50ID:u8rcbYXZ187デフォルトの名無しさん
2018/08/04(土) 21:22:04.15ID:AH7fLvgn188デフォルトの名無しさん
2018/08/04(土) 21:33:22.58ID:BuSBdH9D189デフォルトの名無しさん
2018/08/04(土) 21:38:34.48ID:h4pZIq0i190184
2018/08/04(土) 21:44:58.48ID:VLm3wLVC >>186
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、
私としては下記の手順でできるのではないかと考えています。
@コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
Aエクセルに新しいシートを作る
B既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
C3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
D3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
E5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出
質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、
私としては下記の手順でできるのではないかと考えています。
@コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
Aエクセルに新しいシートを作る
B既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
C3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
D3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
E5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出
質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。
191デフォルトの名無しさん
2018/08/04(土) 21:47:53.70ID:AH7fLvgn >>183
Pascal由来の構文だからいまさらどうしようもない
Pascal由来の構文だからいまさらどうしようもない
192デフォルトの名無しさん
2018/08/04(土) 21:55:39.30ID:ClJJf5ah >>187
VBA専門の人って変な常識で固まってるからしょうがない
VBA専門の人って変な常識で固まってるからしょうがない
193デフォルトの名無しさん
2018/08/04(土) 21:56:58.85ID:ClJJf5ah194デフォルトの名無しさん
2018/08/04(土) 22:05:27.29ID:h4pZIq0i195デフォルトの名無しさん
2018/08/04(土) 22:07:10.27ID:h4pZIq0i >>190
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う
196デフォルトの名無しさん
2018/08/04(土) 22:29:32.76ID:ZYatmaNb197デフォルトの名無しさん
2018/08/04(土) 22:42:04.41ID:qDTSwX/K >>184
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが
バイトのシフト表作ってみるみたいなサイトあった気がするから参考に
頑張れば数理的に最適解も求まりそう
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが
バイトのシフト表作ってみるみたいなサイトあった気がするから参考に
頑張れば数理的に最適解も求まりそう
198デフォルトの名無しさん
2018/08/04(土) 22:43:45.76ID:h4pZIq0i >>196
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ
199デフォルトの名無しさん
2018/08/04(土) 23:00:54.48ID:ClJJf5ah >>194
なんでグローバルにしたの?
なんでグローバルにしたの?
200デフォルトの名無しさん
2018/08/04(土) 23:15:34.93ID:vm6Y2AFh instr(join(だと部分一致で誤爆する
201デフォルトの名無しさん
2018/08/04(土) 23:17:23.65ID:h4pZIq0i202184
2018/08/04(土) 23:26:11.15ID:A9MJ7JgF203デフォルトの名無しさん
2018/08/04(土) 23:26:28.61ID:ClJJf5ah204デフォルトの名無しさん
2018/08/04(土) 23:27:52.91ID:u3c/0jtm ref使えばいいってなるわな
205デフォルトの名無しさん
2018/08/05(日) 00:06:17.04ID:VayD9W7b >>203
知るかボケ
知るかボケ
206デフォルトの名無しさん
2018/08/05(日) 00:32:29.81ID:iOJlEZ6A >>202
ここは何のスレだかわかっているか?低脳
ここは何のスレだかわかっているか?低脳
207デフォルトの名無しさん
2018/08/05(日) 01:06:08.74ID:TorrOw0p >>184
例えば、40人を、5グループ8人毎
min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)
こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか
こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる
例えば、40人を、5グループ8人毎
min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)
こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか
こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる
208デフォルトの名無しさん
2018/08/05(日) 01:14:27.29ID:jrr7Gub0 そんなん言語関係ないやん、アルゴリズムの問題だろ
Rubyの関数で短時間で解ける問題なら、VBAでも数倍ぐらいの時間で同じ結果は出せる
Rubyの関数で短時間で解ける問題なら、VBAでも数倍ぐらいの時間で同じ結果は出せる
209207
2018/08/05(日) 01:17:12.67ID:TorrOw0p >48人を、1グループあたり8人の6グループ
グループA は、48*47*46*45* 44*43*42*41 / 8!
グループB は、40*39*38*37* 36*35*34*33 / 8!
...
グループF は、8! / 8! = 1
ここから、A〜F のグループ名を変えるだけで、
同一になるものを省くから、6! で割る
グループA は、48*47*46*45* 44*43*42*41 / 8!
グループB は、40*39*38*37* 36*35*34*33 / 8!
...
グループF は、8! / 8! = 1
ここから、A〜F のグループ名を変えるだけで、
同一になるものを省くから、6! で割る
210207
2018/08/05(日) 01:22:35.24ID:TorrOw0p 48人分のデータを作って「プログラミングのお題スレ」にでも書き込んでみ。
誰か解けるか、計算時間が掛かりすぎて解けないか
こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!
誰か解けるか、計算時間が掛かりすぎて解けないか
こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!
211デフォルトの名無しさん
2018/08/05(日) 01:28:53.98ID:88RY240q だからソルバー使えって
数理計画法とか大学でやらなかったのか?
数理計画法とか大学でやらなかったのか?
212デフォルトの名無しさん
2018/08/05(日) 02:38:17.19ID:Gfvh6gaU 夏休みの宿題は自分でやれ
213デフォルトの名無しさん
2018/08/05(日) 08:28:04.96ID:jOOhioBF214デフォルトの名無しさん
2018/08/05(日) 08:47:11.10ID:fib/Q9e8 >>203
戻り値を使わないという回避策なんじゃないの?
そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?
関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。
戻り値を使わないという回避策なんじゃないの?
そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?
関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。
215デフォルトの名無しさん
2018/08/05(日) 09:53:33.07ID:DQLB2G4w 何故関数名に代入するのが気持ち悪く感じるのかというと、後に述べるような危険性を無視しているからだと思う。
1.戻り値を関数名に代入しなければならない。
プロシャージャ中に何度も関数名が出てくるため、関数名を変更した時に変え忘れてエラーになることがある。
例えばhoge()全体をコピーして挙動の異なるhoge2を作ったとき、hoge2の中のhoge=***はコンパイルエラーにならないめ、テストするまでエラーを発見できない。
※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
2.戻り値を設定していないのにExit Subできてしまう。
せっかく1の対処法実施しても途中でExit Subされたら意味がない。
せめてExit Sub 戻り値 という書き方ができればよかったのだが。
対処法としてはExit Subを禁止して、そもそもExitが必要ない書き方に変えるかEnd Function直前までワープするGoToを使用する。
よって、関数を定義するときの推奨テンプレ
Function hoge() As Variant
Dim Ret As Variant
'-----
'処理
'Exit Subは禁止。GoTo ExitSubを使うこと
'-----
ExitSub:
hoge = Ret
End Function
もちろん異論は認める。
1.戻り値を関数名に代入しなければならない。
プロシャージャ中に何度も関数名が出てくるため、関数名を変更した時に変え忘れてエラーになることがある。
例えばhoge()全体をコピーして挙動の異なるhoge2を作ったとき、hoge2の中のhoge=***はコンパイルエラーにならないめ、テストするまでエラーを発見できない。
※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
2.戻り値を設定していないのにExit Subできてしまう。
せっかく1の対処法実施しても途中でExit Subされたら意味がない。
せめてExit Sub 戻り値 という書き方ができればよかったのだが。
対処法としてはExit Subを禁止して、そもそもExitが必要ない書き方に変えるかEnd Function直前までワープするGoToを使用する。
よって、関数を定義するときの推奨テンプレ
Function hoge() As Variant
Dim Ret As Variant
'-----
'処理
'Exit Subは禁止。GoTo ExitSubを使うこと
'-----
ExitSub:
hoge = Ret
End Function
もちろん異論は認める。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 俺「お湯を流してと…」シンク「ボンッw」
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- ヤフコメ「中国への輸出がなくなる事で、日本国内で美味しくいただける事に感謝します」👈やたら政権寄りなのはなぜ?(´・ω・`) [399259198]
- 三郷流山橋を渡った [793051416]
- もう寝ます
