Excel VBA 質問スレ Part70at TECH
Excel VBA 質問スレ Part70 - 暇つぶし2ch103:102
21/04/01 16:01:13.59 yB6nLlLi0.net
>>102
修正
>re = %r!(https?://)! #=> https?:\/\/
re = %r!https?://! #=> https?:\/\/
( ) は、いらない

104:デフォルトの名無しさん
21/04/01 16:53:17.71 7y1pTd6e0.net
>>94
オプションのスマイルカーブをリアルタイムに描画するエクセルソフトとかもあるよ。

105:デフォルトの名無しさん
21/04/01 17:08:13.22 jznaQuthF.net
外部からローカルのファイルを更新するなんてマルウェアみたいだな。

106:デフォルトの名無しさん
21/04/01 21:32:16.81 5T6IIfi20.net
>>95
配当なんてせいぜい数%
そこから税金2割引かれる
値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない
つまり税金を考慮した期待値はマイナス

107:デフォルトの名無しさん
21/04/01 23:13:35.12 yB6nLlLi0.net
>損しても2割補填してもらえるなんてことはない
補填してもらえる。
何年か損失を繰り越ししていれば、儲かった時に相殺される
長年、銀行が税金を払わないのは繰越損失があるので、
その後、利益が出ても相殺されるから

108:デフォルトの名無しさん
21/04/02 20:32:20.64 OjzTopDr0.net
>>107
永久保証ならな
3年でさようならなんだから期待値はマイナス

109:デフォルトの名無しさん
21/04/03 10:18:57.57 0vCxCYiYa.net
最近のはinternetexploreを許否するwebがあるからこまる
スマホならともかくビジネスではまだ主流なのに

110:デフォルトの名無しさん
21/04/03 10:25:49.87 RckTLwqyd.net
さすがワッチョイにIEを出す男は言うことが違う

111:デフォルトの名無しさん
21/04/03 10:59:03.48 D2e+M4g2M.net
Web開発でIE対応が要件にないときにはむしろ意図的にIEで動かないようにするわ
勝手にIEで使われて文句言われるの最高にウザい

112:デフォルトの名無しさん
21/04/03 13:29:03.89 XPTw6Pj4M.net
>>33
自己レスだがわかったわ
WEBクエリでWEB内容をシートに書き出す
その中から出来高とかのワードをfindで探して
そのワードのn行後を取ってくる
みたいな動作をしてるんだけど、
ヤフーファイナンスの仕様が変わって
n行後の場所が変更になってた
ETFだけは従来の場所だから
上記結果がゼロならば違う場所を
取ってくるようにした
コピペプログラマだから
今回findとかOffsetを強制的に
学ばされて勉強になった

113:デフォルトの名無しさん
21/04/03 13:43:31.82 LoNYZ+kpF.net
>>110
IEが拒否されるときは
こっそりExcelシートでhtml をつくるだよ
htmlならまず拒否されないから
そーして、いつの間にかフォルダーが開いてる
フォルダー御開帳よ

114:デフォルトの名無しさん
21/04/04 02:10:27.86 7SFCjwlv0.net
ListViewのすべての項目を一発で削除する方法はありませんか?
ListBoxならClearメソッドが使えるようなのですが

115:デフォルトの名無しさん
21/04/04 03:01:59.01 OlWsfN+XM.net
>>114
ListView.ListItems.Clear

116:デフォルトの名無しさん
21/04/04 04:07:16.17 hsI5tKvB0.net
別ブックから別ブックへ値を持ってきたいときって、コピーか配列使うしかないですか?
コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?

117:デフォルトの名無しさん
21/04/04 06:20:04.03 5jDGrLPha.net
コピーでいいやん

118:デフォルトの名無しさん
21/04/04 13:08:15.45 X/c7fPAEM.net
>>116
コピー先ブック.コピー先シート.Range().Value = コピー元ブック.コピー元シート.Range().Value
カッコ内はテキトーに

119:デフォルトの名無しさん
21/04/04 13:44:02.06 7SFCjwlv0.net
>>115
ありがとうございます!うまくいきました
すみませんがListViewについてもう一つ教えていただけないでしょうか
MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています
リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか
ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます
ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています

120:デフォルトの名無しさん
21/04/04 17:46:13.14 JgvM3WMx0.net
>>116
コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる

121:デフォルトの名無しさん
21/04/04 18:49:59.93 hsI5tKvB0.net
>>116です
>>118さんのいった通りrangeにvalueをつけてあげればrange.value =range.valueでうまく値をいれることができました
まだオブジェクトがうまく理解できていなかったです
もっと勉強したいと思います
ありがとうございました!

122:デフォルトの名無しさん
21/04/05 04:34:52.29 3N8BM4zS0.net
セルには0.9って入力してあるのに
VBAのcellsでそれを取得すると1と認識されるんですが
勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?

123:デフォルトの名無しさん
21/04/05 07:04:34.80 FxhyQ6l10.net
Currency型の変数に代入する

124:デフォルトの名無しさん
21/04/05 07:43:12.07 CnxjloBy0.net
>>123
そだね
ただCurrency型は小数点4桁までしか扱えないから
上記みたいに小数点1桁だったらいいけど
5桁以上扱ったり


125:掛けたり割ったりする場合はDoubleの方がいいかな ただ、Double型の場合は 浮動小数点あつかいでIEEE754規格だから 変に丸められちゃうことがあるんでかけ算割り算行う時は 一度整数にして計算してやる必要があるけど まぁ使い所でどの型使うのか分けて使うのがいいかもね



126:デフォルトの名無しさん
21/04/05 12:36:23.48 3N8BM4zS0.net
>>123
>>124
ありがとうございます。integer型にしてました

127:デフォルトの名無しさん
21/04/05 17:42:39.68 GNHugBRe0.net
>>122
0.9の小数点以下を切り捨てたら 0 じゃね 

128:デフォルトの名無しさん
21/04/05 18:04:06.91 34gLfvfqa.net
別にInteger使う理由もないしlongにしちゃえばとも思う

129:デフォルトの名無しさん
21/04/05 19:09:20.57 IFZcDQ1J0.net
>>126
たしかに

130:デフォルトの名無しさん
21/04/06 06:08:10.23 KMOOpCjWa.net
型を指定すると遅くなるから
できるだけ指定なしがよいよ
マクロらしさを生かそう

131:デフォルトの名無しさん
21/04/06 07:02:52.46 Au4GybQm0.net
>>129
メンテが遅くなるからだめ

132:デフォルトの名無しさん
21/04/06 10:21:14.29 e+L9SfjT0.net
>>129
おいおいw
いくら質問スレで初心者だらけだからって
適当なことを教えてはいけない
指定しなかった型には自動的にVariant型が割り当てられて
本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる
VBAは比較的型の扱いが雑でも何とかなる方ではあるが
頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい

133:デフォルトの名無しさん
21/04/06 11:09:39.71 jDDsYkyr0.net
複数の多次元配列をプロシージャに参照渡しするときはどう書けばいいですか
こう書くとスルーされます。
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant)
・・・略
Call SheetCreate(ara(),arb(),arc())
End Sub
Sub SheetCreate(ByRef ara As Variant, ByRef arb As Variant, ByRef As arc As Variant)
・・・略
End Sub

134:デフォルトの名無しさん
21/04/06 12:45:54.77 e+L9SfjT0.net
>>132
うん、まあ
引数の型をVariantにしているからでしょうなぁ
何故Variantにすると値渡しになるのかは分からんけど
ちゃんと変数宣言のところで
StringとかIntegerとかの配列型宣言をして
呼び出される関数の引数にも
それに見合った型にすれば参照渡しされるんじゃない?
試してみて

135:132
21/04/06 14:36:15.96 jDDsYkyr0.net
>133
知らなかったです。ありがとうございます

136:デフォルトの名無しさん
21/04/06 14:39:05.93 7PISA/BhM.net
>>132
普通に
Sub Smple()
Dim ara(2,4) As Variant, arb(85,3) As Variant, arc As Variant
・・・略
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ara As Variant, arb As Variant, arc As Variant)
・・・略
End Sub
って書けばいいだけだと思う

137:132
21/04/06 19:30:17.02 jDDsYkyr0.net
>>135
最初はそれでやっていたのですが、同じくスルーされてました
このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、
サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。

138:デフォルトの名無しさん
21/04/06 19:51:59.72 JmeclF78d.net
ブレークポイントで止まらないのはおかしい
根本的に別のとこで間違ってる

139:デフォルトの名無しさん
21/04/06 20:36:50.07 DMwNdxSba.net
うむ、おかしい

140:デフォルトの名無しさん
21/04/06 22:23:14.18 kxv5hjcy0.net
Sub Smple()
Dim ara(2, 4) As Variant, arb(85, 3) As Variant, arc As Variant
Call SheetCreate(ara, arb, arc)
End Sub
Sub SheetCreate(ByRef ara() As Variant, ByRef arb() As Variant, ByRef arc As Variant)
End Sub

141:デフォルトの名無しさん
21/04/07 19:30:33.27 aMJgToSe0.net
全部省略すれば勝手にByRefだと思ってけど違うの?
SheetCreate ara, arb, arc
Sub SheetCreate(ara, arb, arc)
End Sub

142:デフォルトの名無しさん
21/04/07 20:03:43.34 rHsSD320H.net
>>140
その認識は半分正しいけど半分は場合によるので間違い
とくに配列を渡す場合はややこしい

143:デフォルトの名無しさん
21/04/07 20:42:25.04 Vn8Hoh2Q0.net
配列・オブ・カリビアン

144:デフォルトの名無しさん
21/04/07 20:47:54.61 nkaFkhSP0.net
>>141
不思議なんだよねー
配列変数だとByrefにしてもVariantで渡すと値渡しになることがある
よしんばVariantが値型だとしても値型の参照渡しで渡るのは参照渡しになるはずなのに何で?

145:デフォルトの名無しさん
21/04/08 15:04:36.48 6DaO6dJm0.net
色々しらべたよ
まず、VBAやってる人はByValとByRefくらいしか気にしない人多いけど、
そもそも変数には参照型と値型というのがあって値型は値そのものが変数に入っているけど
参照型というのは実体が入っているんじゃなくて実体の入っている場所の情報が入っているんだよ。
オブジェクトの類が参照型で、StringやIntegerなんかが値型。
参照渡し、値渡しとこの参照型、値型という組み合わせで何が渡るか決まるんだけど
参照型の参照渡し;
引数の入っているアドレス(場所)を見に行って、その引数の中に入っているアドレスに入っているものを見に行くから、
内容を変更すると関数で呼ぶ前のものも変更されるよ
値型の参照渡し;
引数の入っているアドレスをコピーしてそのアドレスが指してるところの値を見に行くから、
内容を変更すると関数で呼ぶ前のものも変更されるよ
参照型の値渡し:
引数の入ってる値をコピーするけど、その引数の中には実体の入ってるアドレスが入ってて、そっちを見に行くから
内容を変更すると関数で呼ぶ前のものも変更されるよ
値型の値渡し
引数の入ってる値をコピーして、そのコピーした値の内容も値そのものが入っているから
内容を変更しても関数を呼ぶ前のものは変更されないよ
まずこれが大前提ね

146:デフォルトの名無しさん
21/04/08 15:20:56.67 6DaO6dJm0.net
本題に入るね。
配列変数でもその辺は基本変わらないけど、
何故か値渡しにしようとすると構文エラーになるんだ
そんなときは呼び出し先の引数をVariant型に変えてあげればいいって話だけど、
Variant型にしても参照型のものは参照が見られるから内容を変えれば関数を呼び出す前の内容も変わるんだよね。
variant型の配列を作って値型のものと参照型のものを違う要素に入れてそれを引き数に値渡しで設定してあげると
参照型のものを入れた部分は変更すると関数呼び出す前のものにも反映され、値型の部分は変更が反映されない。
思ったよりお利口さんだったよ。
結論を言うと
何で配列でキチンと型設定して値渡ししようとすると構文エラーで落ちるんじゃマイクロソフトのボケが!!
と言うところに落ち着いたよ

147:デフォルトの名無しさん
21/04/08 17:10:39.89 OX80XKzVM.net
うろ覚えで申し訳ないんだけど、引数をByVal TestAry() As Longとかにすれば値渡し出来なかったっけ?

148:デフォルトの名無しさん
21/04/08 17:27:48.87 6DaO6dJm0.net
>>146
呼び出し元に設定した変数もしくはリテラル値が型的にあっている、
もしくは暗黙の変換が行われる型ならそもそも設定しているものが値型。
そうでなければエラーになると思う。

149:デフォルトの名無しさん
21/04/08 17:47:34.27 vZ3ddDF70.net
質問場所間違ってたら言ってください
iPhone用Excelで仕事の日報を書いてるのですが
時間を書き込んで→を押して数字を書き込むと
前のセルに書き込んだ数字
例えば8:00と書き込んで→を、次に16:00と記入しようと1を押すと8:00:001ってなってしまいます
これってならなくする方法ありますか?

150:デフォルトの名無しさん
21/04/08 18:07:25.00 BiHFumMw0.net
>>148
死ね

151:デフォルトの名無しさん
21/04/08 18:07:51.70 6DaO6dJm0.net
>>148
iPhoneは持ってるんだけどPC側しか365のアカウント持ってないんだ。ごめんね。
だけどググってみたら書式設定は出来るみたいだから数字にしたいセルの部分をそう書式設定すればいいんじゃないかな?
あと、一応EXCEL関連のスレはここに有ったけど
Excel友の会
スレリンク(software板)
何か過疎ってるどころか最後の書き込みが去年の10月だから機能していないね。ここのスレでEXCELのこと聞くのは
ここのスレの住人がみんなOKすれば大丈夫だと思うけど
今まで随分色んなことあったから難しいかも知れないよ。

152:デフォルトの名無しさん
21/04/08 19:22:03.89 wZLPNhcm0.net
こんなマクロの使い方もあるようで。
URLリンク(anond.hatelabo.jp)

153:デフォルトの名無しさん
21/04/08 20:16:35.28 JmFnD0edM.net
要素数の限界ってどれくらいなの?
多次元配列で一次元あたり数千とかにしたらメモリ不足のエラーになった

154:デフォルトの名無しさん
21/04/08 20:37:06.14 eomKGQCU0.net
多次元はめっちゃメモリ食うからなるべくやるなと言われている

155:デフォルトの名無しさん
21/04/08 22:20:43.27 xay8Megr0.net
タスクマネージャでも眺めながら色々試してみては
物理メモリだけじゃないだろうけど、なんぼか目安にはなるだろう

156:デフォルトの名無しさん
21/04/08 23:36:50.07 zGFXp+zdH.net
64bit版なら配列変数1個あたり4GBまで
32bit版は2GBまで
つまりデータの型によって要素数の上限は違う

157:デフォルトの名無しさん
21/04/09 00:36:31.60 J+L5UjPE0.net
>>153-155
ありがとう
タスクマネージャ見ても余裕だったんで理由を知りたかった
次元数2次元までにしといた方が無難だね

158:デフォルトの名無しさん
21/04/09 17:10:54.57 v0s3XxNT0.net
>>156
そうだね
あくまで俺の経験則だけど
2次元から3次元にしたとき何でも一挙に難しくなる気がする
元々簡単な作りのものしか扱わないならいいけど
VBAではないけど以前東大生が3次元で配列の制御を行うロジックを作って
自分でもよく分からなくなってしまったというのを見たことがあるし
ゲーム作るときも画面表示するだけで
三角関数はもとより行列やアフィン変換とか
理解してないとまともに出来ない
メモリ食うのも理由のひとつかも知れないけど
3次元には出来れば手を出さない方がいいと思う

159:デフォルトの名無しさん
21/04/09 19:26:47.90 o5ukQupNM.net
>>157
ちなみに今回使おうとしたのは3次元配列なんだけど、3次元配列にした理由は同じような2次元配列に順番にアクセスしたかったから
こういう場合は2次元配列を複数用意すればいいのかな?
3次元配列にした方がスマートに記述できると思ったんだけど

160:デフォルトの名無しさん
21/04/09 19:41:20.17 H0DC02Cp0.net
行、列、シートで、3次元
配列で重くなるならセルに入れてしまうという手も

161:デフォルトの名無しさん
21/04/09 21:04:50.47 v0s3XxNT0.net
>>159
シートを余計に食うけど場合によってはそれもひとつの有効手段だよね。
あまり見せたくなければVerryHiddenとかにしてしまえばいい訳だし。
>>158
使い処によると思うよ。使い方が単純でスピードが速い方がいいならそれでいいと思う。
ただ、これはあくまで「俺が」なんだけど実はあまり配列が好きじゃないんだ。
だからと言うわけでもないんだけどある程度大きなプログラムを組むときは
配列を使うこともあるにはあるけど、2次元配列の代わりにプロパティだけのエンティティクラス作って
それをコレクションやディクショナリに詰め込んで使ったり、
レコードセットを使ったりすることもあるし、
3次元では上記したような仕組みのものやそういった仕組みを持つクラスを作って、
それをまたコレクションやディクショナリにいれたりするように作ったりとか。
何でこんなまどろっこしいことするのかと言えば、要素と言うか項目やレコードの追加や
データ抽出が楽なんだよね。
シート足していいと言うなら先程の>>159の人の案も有りだと思う。
削除系は使えないけどシートにはその気になればSQLが投げられるから
抽出や計算、変換、加工とかする必要があるならかなり楽に作れることもあるからね。

162:デフォルトの名無しさん
21/04/09 21:29:44.17 H0DC02Cp0.net
三次元配列は単純に頭がしんどい
三次元空間の様にそれぞれの次元が同じ重みを持っているなら仕方ないけど、
それ意外なら行列の二次元+シート一次元、のように分けたほうがスッキリすると思う

163:デフォルトの名無しさん
21/04/09 21:34:45.69 VGCoQhdKa.net
省略したら値渡しでしよ
再帰かけるときには値渡しにしないと、いろいろ都合がある

164:デフォルトの名無しさん
21/04/09 21:37:45.95 VGCoQhdKa.net
>>161
賛成、エクセルのシート使うよね

165:デフォルトの名無しさん
21/04/09 21:50:51.12 v0s3XxNT0.net
>>162
これな
実はVB.Netの場合は省略するとByVal(値渡し)で
旧VB6やVBAの場合は省略するとByRef(参照渡し)で
両方やってる人はよく間違えるんだよね。
再起の場合は確かにどれを反映させてどれを反映させないか結構大事になるけど、
まぁ基本デフォルト使わないで明示的に書くだろうからあまり気にしなくてもいいかもね。

166:デフォルトの名無しさん
21/04/10 00:28:07.23 xAikY8XJ0.net
みんなありがとう
>>160
VBAは基本の参考書を読んで一通り分かったつもり
でもクラスは上級者すぎて分からないや
一応自作のオブジェクトという理解でいる
色々案を考えてくれてありがとう、もう少し勉強してからそのあたりも試してみる

167:デフォルトの名無しさん
21/04/10 06:57:57.98 +Fv9eRvVa.net
シートに書き出すととピポットにできるから
ピポットなら何重にも次元が増やせるし
処理もはやい
ピポットとvbaを組み合わせると、
けっこうはやい

168:デフォルトの名無しさん
21/04/10 08:02:59.36 GLiDRYw80.net
>>165
頑張って
クラスはObject指向言語だと必須だけどVBAでは無理して知ってる必要もないから気が向いたときに覚えればいいと思うよ
とは言ってもクラス自体はそんなに難しいものじゃないんだけどね。よく、ひとつの纏まった機能を他のモジュールに書くよね。
あれを標準モジュールの変わりにクラスモジュールに書けばクラスの出来上がり。
後は他のオブジェクト使うときと同じようにNewして変数に入れて、変数名.メソッド名、変数名.プロパティ名とか書けば使えるよ。
どっちかっていうと考え方と使いどころに慣れるまでがちょっと大変かもね。
それ以上の多態性とかデザインパターンとかの知識を身につけるころには他の言語やってるだろうから
今そんなに深く考えることもないと思うよ。

169:デフォルトの名無しさん
21/04/10 09:30:59.12 ASUPMck3M.net
>>165
VBAの範疇ならクラスは忘れてもいいと思う
コンストラクタに引数も持てないし継承もできないから普通にユーザー定義型と操作ルーチンをモジュールにまとめるのとたいして変わらんし

170:デフォルトの名無しさん
21/04/10 10:08:24.05 +Fv9eRvVa.net
エクセルというクラスを使いこなせば
ビジネスなら十分
エクセル以上のobject作るのは無理だから
なんつてセカンドオニオンでした

171:デフォルトの名無しさん
21/04/10 15:51:59.07 duTza7EGd.net
自分もクラスで挫折して今はユーザー定義型で幸せです

172:デフォルトの名無しさん
21/04/10 16:02:42.86 4ha6UGTxp.net
自分もユーザー定義にした途端お金が入って彼女が出来ました。今ではとっても幸せです。

173:デフォルトの名無しさん
21/04/10 17:05:30.13 eY7Q/L5k0.net
そうかい

174:デフォルトの名無しさん
21/04/10 20:22:47.19 mgDf3XRg0.net
>>170
プロパティとかコンストラクタとかあとは鯛焼きの型とかいきなり説明しだすから分かりにくいんだよな

175:デフォルトの名無しさん
21/04/10 20:23:09.87 mgDf3XRg0.net
最初はクラス内の変数と関数だけでプロシージャ内のコードがこれだけ簡潔書けるようになります程度でいいのに

176:デフォルトの名無しさん
21/04/10 20:31:08.56 u4vdYafN0.net
EXCELvbaで、クラスってどういう時に使うのでしょうか
ゲームのように細かいオブジェクトが多数ある状態なら分かりますが、
表の状態になったデータだと、今ひとつピント来ないです
社員classや顧客classを作るのでしょうか

177:デフォルトの名無しさん
21/04/10 20:42:21.31 r9QO1mE4M.net
無理に使う必要は無い。
「使わなくては!」と閃く状況が来るときまで。

178:デフォルトの名無しさん
21/04/10 21:10:26.00 2jN52YXT0.net
>>175
よく使うけど毎回書くのが面倒な処理がある時
DB接続とかUIAutomationとか長げぇよってやつ

179:デフォルトの名無しさん
21/04/10 21:22:16.81 GLiDRYw80.net
>>175
どう使うかを決めるのも自分。
だからクラスそのものより
考え方や使いどころに慣れるまで
そっちの方が大変だって言ったんだよ。
まぁ表であればあくまで俺であれば、
項目をプロパティにして
1レコードをクラスにして、
それをコレクションやディクショナリに
登録して使うよ。前記したけどね。

180:デフォルトの名無しさん
21/04/10 22:23:34.34 duTza7EGd.net
オレ知ってる!
クラスってニューして使うんだよな!

181:デフォルトの名無しさん
21/04/10 23:22:47.33 kj/emQZa0.net
エクセルでガントチャートを作りたく極力簡単な方法を探しています。
(手順が少なく、エクセル苦手でも理解しやすい)
自力で探したところ
URLリンク(excel-master.net)
の「条件付き書式でガントチャートをつくる」が一番簡単な気がしましたが
より簡単な方法があったらご教授いただきたく。
windows板で尋ねようかと思いましたがエクセル専用スレが無いため
詳しい人が多そうなこのスレにお邪魔しました。

182:デフォルトの名無しさん
21/04/10 23:41:30.33 KgXo78Rva.net
要望は何回もやり直したほうがよいよ
さいしょは相手も自分もよくわかってないから
Ver3ぐらいでようやく完成する

183:デフォルトの名無しさん
21/04/11 00:00:57.05 0+LhiyyI0.net
>>180
あ、これ、俺は苦手だわ
WBS作ろうとするとどうしても
簡単に作ることより分かり易くする方に
力入れちゃうから多分そのリンク先に
載ってることよりややこしい数式にしてしまう
ま、WBSなんて基本、予定線と実績線、
あと遅れそうになった時のワーニング色と
遅れた時のアラート色、
あと遅延リカバリ用の枠付けとくくらいだから
大したもんじゃないからまぁ頑張って。
こういうの作るときにもっと大事なのは
見積もりとそれに対するする人員と期間の
配分だから、そっちも任されているなら
そっちに作業の80%くらい割り振って
考えた方がいいよ。

184:デフォルトの名無しさん
21/04/11 02:17:20.23 x6o0gjqGd.net
馬鹿ばっかのスレ

185:デフォルトの名無しさん
21/04/11 02:27:18.88 C7VIYXjZa.net
ガントチャートだとあんまり工程管理にならないんだよ
やってみるとわかるけど
8割がた遅延する、というか遅れてないと進捗がわからないだよ
1、そもそもスタートしていなかった?
これがいちばんおおい
2、深刻で致命的なもんだいが、見つかるとはいちばん最後
だから

186:デフォルトの名無しさん
21/04/11 10:19:59.88 Gib6KHmfM.net
>>180
そのガントチャートで問題ないならそれが一番簡単だと思う
ただ>>184が言うような日程管理をしたいならもうちょい作り込むなり専用アプリを使ったほうがいい

187:デフォルトの名無しさん
21/04/11 11:13:40.17 udnt6yH0p.net
質問です
今後このスレ
こう言ったEXCELのとか
旧VB6とか許容すんの?
古参なら今までどういったことが
有ったか覚えていると思うけど

188:デフォルトの名無しさん
21/04/11 11:43:22.55 TwIBijR2M.net
質問者はワークシートでの作り方はある程度想像がつくけどVBAの知識がある人ならよりスマートな方法を知っているかもしれないと考えてここで聞いたんだろうし、
それに対してワークシートの機能でできることはVBA使うよりワークシートの機能でやった方がいいってのは極めて妥当で健全な回答だろう
そんなことでいちいちスレ違い警察さんが出動しなくていいよ

189:デフォルトの名無しさん
21/04/11 12:04:02.09 0+LhiyyI0.net
>>187
そう
許容するのね?

190:デフォルトの名無しさん
21/04/11 12:41:42.70 WBicdlML0.net
excelのOnTime関数をPowerPointで使うこと出来ないよね?同じ機能を持った関数ってある?

191:デフォルトの名無しさん
21/04/11 12:55:23.83 0+LhiyyI0.net
>>189
無いからAPIで行うらしい
URLリンク(detail.chiebukuro.yahoo.co.jp)

192:デフォルトの名無しさん
21/04/11 13:01:24.60 J2w1eWX20.net
Excelから呼び出せないのか
起動中のソフトを検索するワード関数をExcelから呼び出してるの見かけたことあるけど

193:デフォルトの名無しさん
21/04/11 14:13:05.18 WBicdlML0.net
>>190
ありがとう
まったく理解できないけど、もっと楽な方法ないのかなー

194:デフォルトの名無しさん
21/04/11 15:30:39.63 VuRQUus/0.net
vb.netでdllとか作った方が早いような

195:デフォルトの名無しさん
21/04/11 20:16:20.16 MoadxaFG0.net
>>180
スレ作ればいいだろ
厚かましいにも程がある

196:デフォルトの名無しさん
21/04/11 21:10:22.11 LXnW0jT40.net
Python, Julia, Ruby などで使う、Jupyter Lab に、ガントチャートは無いのか?

197:デフォルトの名無しさん
21/04/11 21:40:30.24 VuRQUus/0.net
>>196
あることはある
URLリンク(cafe-mickey.com)
でも結局死ぬほどカスタマイズすることになるから、EXCELで作るのが一番マシ

198:デフォルトの名無しさん
21/04/11 23:13:09.15 rV+Er0Dj0.net
業務とはかけ離れた腕自慢スレになりつつあるなここは

199:デフォルトの名無しさん
21/04/11 23:26:48.43 ZRspFCij0.net
>>180
です。スレ違いな質問に回答くださってありがとうございました。
>>187
さんのご推察どおりここの先生方を最も頼りにしております!
残念ながら任されているのはエクセル上の作業のみであり
人員期間の配分は担当外ですが
コレが一番スマートだと確信できました。
これで安心して作業に入れます。感謝します。

200:デフォルトの名無しさん
21/04/11 23:52:08.05 Omw3/P/WH.net
>>197
昔から、質問の答えが出た後に別の方法を書き込む競争はやってた

201:デフォルトの名無しさん
21/04/12 00:09:38.61 zgwaoc/v0.net
いつものあいつだな

202:デフォルトの名無しさん
21/04/12 02:49:52.91 Bvz5U6oCM.net
まだ引っ掛かる馬鹿がいるのか

203:デフォルトの名無しさん
21/04/12 09:23:22.30 H+Y94TUB0.net
回答者さん同士で競争とか知恵袋と同じじゃんか
無駄にスレの無駄遣い

204:デフォルトの名無しさん
21/04/12 10:17:02.71 5VvoR6W20.net
無駄な書き込みを無駄にスレに書き込んでスレを無駄に使うことはスレの無駄遣いだと書き込むことはスレの無駄遣いかもしれない

205:デフォルトの名無しさん
21/04/12 10:35:19.07 0gH2bD5Aa.net
無駄な努力が、むくわれるのさ

206:デフォルトの名無しさん
21/04/12 10:49:33.17 0gH2bD5Aa.net
VLookupをつかったのは無駄な努力だったな
やめときゃよかった

207:デフォルトの名無しさん
21/04/12 10:56:04.87 0gH2bD5Aa.net
これをマクロでどうにかなりませんか
そういってわたされたのがVLookupが山のように貼り付けられた
エクセルシートだった
うまくと動くけと突然とまるw
けっきょくforループの検索に代えた
とここまで書いておもいだしたが
去年、メンタル悪化で退職した同僚がいたけど
のこしていってのはやはりVLookupの山だったな
動かないVLookupで退職するまえに本スレにご相談ください

208:デフォルトの名無しさん
21/04/12 12:12:04.06 8dcLaG4EM.net
Excel初心者はVLookupしか知らないから
何でもこれでやろうとして自爆する傾向があるね

209:デフォルトの名無しさん
21/04/12 12:24:31.30 H+Y94TUB0.net
そのVlook関数はマクロ経由なのかが気になる

210:デフォルトの名無しさん
21/04/12 12:42:14.50 HPbAbv3kH.net
池の女神は言いました
あなたが落としたのはVLOOKUPですか、HLOOKUPですか
いいえ私が落としたのはXLOOKUPです

211:デフォルトの名無しさん
21/04/12 13:02:43.22 A3OoULtt0.net
質問です
>>209の言う
VlookupとHlookupの頭文字は
バーティカル(垂直)とホライズン(水平)
なのは分かるんですがXlookupの頭文字の
Xってなんですか?
EXCELの質問でスレ違いなのは
重々承知していますが
このスレにいる方々の知識の豊富さに縋らせてください
考えると夜も眠れない有様です

212:デフォルトの名無しさん
21/04/12 13:25:12.45 QkakYyyta.net
>>210
クロス

213:デフォルトの名無しさん
21/04/12 13:30:51.45 A3OoULtt0.net
>>211
クロスのスペルってCROSSではないんですか?
それともX_JAPANの「エーックス」のクロスですか?
分かりません><

214:デフォルトの名無しさん
21/04/12 13:34:07.13 X9TSjYQR0.net
XmasのX

215:デフォルトの名無しさん
21/04/12 13:36:54.52 MyLZJXYdp.net
向こうではCrossとかChristmasをXで省略するから、だと思う

216:デフォルトの名無しさん
21/04/12 13:41:07.52 A3OoULtt0.net
>>213
>>214
やっと分かりました
今日からぐっすりと眠れそうです
ありがとうございました

217:デフォルトの名無しさん
21/04/12 15:02:08.77 3rdXwFWw0.net
>>215
死ねよ

218:デフォルトの名無しさん
21/04/12 17:28:11.89 H+Y94TUB0.net
バツルックアップじゃないの??
事務のオバチャンにそう聞いたけど

219:デフォルトの名無しさん
21/04/12 19:56:57.26 UqVxKohHa.net
とんこつととんかつの違いはなんですか
そういう質問をうけたときがあったなぁ

220:デフォルトの名無しさん
21/04/12 20:02:02.68 HPbAbv3kH.net
とんかつ
とんかち

221:デフォルトの名無しさん
21/04/12 22:40:18.25 6cC4Cv/z0.net
マジレスするとExtraやExtendのX

222:デフォルトの名無しさん
21/04/13 12:25:16.60 XNPY+hAHa.net
ガントチャートの欠点は
遅れの検出がおそいだよね
期限が過ぎないと遅れることがわからない
これでは手遅れですよ

223:デフォルトの名無しさん
21/04/13 12:40:10.17 5GJi7nDK0.net
>>221
あ、そうなんだ
EXCELの数式だったら予定線より実績線が
二日くらい前になったらワーニングで黄色、
予定線以降になったら赤とかにしとけば
ワーニングに入った時点でリカバリ案とか
会議で話し合えるのにね。

224:デフォルトの名無しさん
21/04/13 12:54:32.74 mzxN/X4qM.net
期限過ぎる前に進捗率がヤバくなればリスケで仕切り直し
いつまで経っても期限が過ぎることは無い

225:デフォルトの名無しさん
21/04/13 13:24:50.99 5GJi7nDK0.net
>>223
本当にありそうで怖いわ!

226:デフォルトの名無しさん
21/04/13 17:28:26.59 XNPY+hAHa.net
開始日でだいたいわかる
おおくのばあいはまともにスタート出来てないからw
人がいない、資料がそろってない、仕様がきまってない
だも
スタートできなきゃゴールするわけがない

227:デフォルトの名無しさん
21/04/13 20:57:49.87 5GJi7nDK0.net
>>225
開発あるあるだなw
そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。
他のある程度大きいシステムになると
・客先から上がって来ない要件定義
・客先だから強く言えないチームのリーダー
・差し迫る納期
・焦りが出てきてイラつく俺ら。それを宥めるリーダー
この辺からが違うところかな
・システム間の連携や他システムとの連携のため伸ばせない納期
・更に焦る俺ら。宥めきれなくなるリーダー
・上がって来る要件定義、血眼で設計書を作る俺ら
・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書
・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら
・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間
・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人
・何とかSTまで終了。飛ばされるリーダー、バグだらけの成果物、昇天する俺ら
最悪こんな感じかな。

228:デフォルトの名無しさん
21/04/13 21:11:48.26 QqfAiqTvM.net
>>225
開発あるあるだなw
そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。
他のある程度大きいシステムになると
・客先から上がって来ない要件定義
・客先だから強く言えないチームのリーダー
・差し迫る納期
・焦りが出てきてイラつく俺ら。それを宥めるリーダー
この辺からが違うところかな
・システム間の連携や他システムとの連携のため伸ばせない納期
・更に焦る俺ら。宥めきれなくなるリーダー
・上がって来る要件定義、血眼で設計書を作る俺ら
・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書
・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら
・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間
・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人
・何とかSTまで終了。飛ばされるリーダー、ハゲだらけの社員、昇天する俺ら
最悪こんな感じかな。

229:デフォルトの名無しさん
21/04/13 21:15:01.18 5GJi7nDK0.net
うーん、何か接続がおかしいのかな
他のスレに誤爆になってこのスレでも2回載ってしまった
すまんこ

230:デフォルトの名無しさん
21/04/13 21:34:03.40 QqfAiqTvM.net
うーん、何か接続がおかしいのかな
他のスレに誤爆になってこのスレでも2回載ってしまった
おまんこ

231:デフォルトの名無しさん
21/04/13 21:38:41.78 5GJi7nDK0.net
>>229
おいw

232:デフォルトの名無しさん
21/04/14 07:51:01.50 EILUghab0.net
ウンコマクロ

233:デフォルトの名無しさん
21/04/14 19:17:03.44 hXL/FQf4a.net
まあ。そんなんだ

234:デフォルトの名無しさん
21/04/14 19:29:05.82 jCprHRHj0.net
EXCEL VBAは好きだし凄く肌に合ってると思うけど、案件単価がちょっとなぁ

235:デフォルトの名無しさん
21/04/14 19:47:31.92 kMGrei9fM.net
EXCEL VBAが肌に合う様な奴が案件単価とか生意気。

236:デフォルトの名無しさん
21/04/14 20:39:37.17 E4KyUeCU0.net
一般事務が仕事中に覚える→結婚・退職→主婦の傍ら有り余る時間で糞みたいな単価で受注
まぁ、悪い事でもなんでもないんだけどね、うん

237:デフォルトの名無しさん
21/04/14 20:45:27.19 ijCB3EYv0.net
あたまが鉛のようにおもい

238:デフォルトの名無しさん
21/04/14 20:47:48.07 cTgQ8ZPt0.net
1時間で作れるような案件が高いわけない

239:デフォルトの名無しさん
21/04/14 20:52:06.82 ijCB3EYv0.net
冷戦時代日本がロケットのことでロシアに教えをこうたとき
一言ジャイロに問題があるといって
100億ぐらいもって去っていったそうな

240:デフォルトの名無しさん
21/04/14 21:21:01.64 tTtaKpUk0.net
VBA Seleniumdriveで
driver.ExecuteScript ("XXXX")
でonclickをクリックするとモーダルコンテンツが表示されます。
コンテンツ内のXpathをクリックしてもボタンを押すことが出来ないんですが、
SendKeys "{TAB}", Trueで該当のボタンをクリックする以外に
要素を指定してクリックする方法ってありますか?

241:デフォルトの名無しさん
21/04/14 22:43:58.06 bsTwIiw80.net
下記「やりたいこと」のようにhtmlから抽出したいのですが、
下記「前提」があって、どうしたらいいのか分かりません。
なにか方法ありますでしょうか?
--- やりたいこと ---
下記htmlにおいて、"ヘッダ"のすぐ次に存在しているtableタグ内の項目1,2、要素1,2を取得したい
--- 前提 ---
①"ヘッダ"は特定できる
②tableは特定できない
 ・tableのidや要素から特定できない
 ・tableの数から特定できない(取得したいtableが何個目なのか分からない)
--- html例 ---
 ・・・
<h2>ヘッダ</h2>
<table>
<tr><th>項目1</th><th>項目2</th></tr>
<tr><td>要素1</td><td>要素2</td></tr>
</table>
 ・・・
--- プログラム例(Microsoft Internet Controls、Microsoft HTML Object Libraryは参照設定済み) ---
Dim objIE As New InternetExplorer
objIE.Navigate "URLリンク(***")
Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
For Each obj In objIE.Document.getElementsByTagName("h2")
If InStr(obj.innerText, "ヘッダ") > 0 Then  ヘッダは見つけることができるが、この後どうしたらいいのか・・・
End If
Next obj

242:デフォルトの名無しさん
21/04/14 23:08:27.54 mIFbuL/UH.net
>>240
<HTML>タグか<BODY>タグで全体のソースを取り込んで、あとは文字列として処理

243:デフォルトの名無しさん
21/04/15 01:36:52.92 E+h/Uieza.net
VBAでやる意味あんの?

244:デフォルトの名無しさん
21/04/15 02:03:12.55 Un6DIa9Z0.net
>>242
ありがとうです。
もう少し考えます。。

245:デフォルトの名無しさん
21/04/15 06:20:29.14 5JoH8OD60.net
>>240
jQuery なら、2重ループで、
<h2 id="id-1">ヘッダ</h2>
<table><tbody>
<tr><th>項目1</th><th>項目2</th></tr>
<tr><td>要素1</td><td>要素2</td></tr>
</tbody></table>
<table><tbody>
<tr><th>項目3</th><th>項目4</th></tr>
<tr><td>要素3</td><td>要素4</td></tr>
</tbody></table>
$( function ( ) {
let table = $( '#id-1' ).next( ); //次の兄弟要素
// table > tbody > tr を、1行ずつ処理する
$( table ).children( ).children( ).each( function ( index, row ) {
// 1列ずつ処理する
$( row ).children( ).each( function ( index_2, col ) {
console.log( `${ index }行 ${ index_2 }列`, col.textContent );
} );
} );
} );
出力
0行 0列 項目1
0行 1列 項目2
1行 0列 要素1
1行 1列 要素2

246:デフォルトの名無しさん
21/04/15 06:53:10.31 r2UxJQfIM.net
>>244
VBAの構文に変換してくれ

247:デフォルトの名無しさん
21/04/15 11:25:51.10 c60l0/FJ0.net
>>244
VBAに対してHTMLの集約やメソッドチェーンが使える言語をぶつけてくるのは卑怯だと思うの

248:デフォルトの名無しさん
21/04/15 12:05:58.59 nvZZu+k0a.net
スクリプトぐらいなら良くねの

249:デフォルトの名無しさん
21/04/15 12:18:14.12 ivOr0/mk0.net
>>244
結局総当りか
まあそうだよね

250:デフォルトの名無しさん
21/04/15 16:07:09.80 MUSbI6ab0.net
質問です。
今は下記のようなコードとvlookupを組み合わせて連続で請求書を印刷しています。
一つのジョブにまとめて印刷するにはどのようにしたらよいでしょうか?
Sub 連続印刷()
Dim i As Integer
Dim LastRow As Integer
Worksheets("請求書").Select
With Worksheets("データ")
For i = 3 To 5
Range("d1").Value = .Range("A" & i).Value
Range("n1").Value = .Range("A" & i + 1).Value
i = i + 1
ActiveSheet.PrintOut
Next
End With
End Sub

251:デフォルトの名無しさん
21/04/15 17:29:43.21 c2wrGnlaM.net
>>249
vlookup部分もVBA化して組入れれば一つのJOBに出来るよ

252:デフォルトの名無しさん
21/04/15 17:46:43.97 BAka9uDVM.net
>>249
3つぐらいなら請求書シートを必要分コピーして各々値を入れて複数シートを一気に印刷するしか思い付かない

253:デフォルトの名無しさん
21/04/15 17:53:55.45 c2wrGnlaM.net
請求書シートも複数有るなら、それをFor Nextで繰り返すぐらいだろうね

254:デフォルトの名無しさん
21/04/15 19:09:26.62 pI0uqt930.net
UI Automationの質問てここでいいの?
VBAでゆっくりムービーメーカー4のキャラクター切り替えをやりたいんだけど、
うまくいかず。
キー操作をWindowsに送ることでごまかしている。
”追加してシーク”ボタンを押すだけならこんな感じでできるんだけど、
Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "追加してシーク")
Set elmYukkuri_Button = elmYukkuri_timeline.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = elmYukkuri_Button.GetCurrentPattern(UIA_InvokePatternId)
ボタンじゃなくてコンボボックスでボタン内容が切り替わるときはどうすればいいんだろう?

255:デフォルトの名無しさん
21/04/15 21:08:32.60 fGNDJEoP0.net
>>249
俺もそれ使ってたわ
100セットとか印刷するとコピー機占領するからすごい迷惑なんだよね。
色々あって、vbaは逆に使わなくなった
方法はは>>251にかなり近くて、
・シートを連番で用意しておく
・シート名は「3」~「5」
・vlookupのキーはシート名にする
Range("d1").Valueには、 .Range("A" & シート名).Value
Range("n1").Value には、.Range("A" & シート名+ 1).Value
のように、予めシート名を引っ張ってvlokup部分は完結させておく
後はシート「3」~シート「5」を選択し、印刷するだけ。ジョブは一つになるし、vbaも不要になる
シート内容が変更になる時は、vbaを使って連番のシートを再作成すると良い

256:デフォルトの名無しさん
21/04/15 22:20:13.95 8+4wzY1VH.net
直接印刷せずPDFにすればいいじゃん
PDFなら大量のファイルを1回のジョブで一気に印刷できるぞ

257:デフォルトの名無しさん
21/04/15 22:56:26.48 fGNDJEoP0.net
>255
PDFに出力する時はvbaで制御できないんじゃ

258:デフォルトの名無しさん
21/04/15 23:42:15.25 rzqCvIH40.net
>>253
ここで良いけど、
UIAutomationとムービーメーカー4両方知ってるレアな人じゃないとわからないと思うぞ。
俺は前者しかわからんからあてずっぽうで言うけど、
FindFirstじゃなくてFindAllして中身を調べれば良いんじゃないの?

259:デフォルトの名無しさん
21/04/16 04:48:18.88 aO0hqHGi0.net
>>257
とりあえずごまかしながら作ったのがこんなやつ
URLリンク(youtu.be)
ソースとかほしい?

260:249
21/04/16 19:03:44.09 yYdNvwCc0.net
様々なご提案ありがとうございます。
シートを増やして行くやり方にしようと思います。

261:デフォルトの名無しさん
21/04/17 04:28:55.40 aiLxsK7Md.net
質問です。変更したセルに色をつけたいと思っており、調べたところ変更履歴の使用や色を変更するマクロ(private sub~)は出てきました。
それに加えて、その色変更をその日だけ有効にすることは可能ですか?
例えば、
4/17 A1の値 1
1→2に変更すると色も変更
4/18 A1の値 2 白に戻っている
      2→3に変更すると色も変更…
といった感じなんですが。。。

262:デフォルトの名無しさん
21/04/17 04:47:34.80 5JzvmzAs0.net
If Today()="2021/04/17" Then
Range("A1").Interior.Color = 256
~とか条件加えればいいんじゃね

263:デフォルトの名無しさん
21/04/17 05:37:32.98 HGZEZM9x0.net
こんなこと出来ますか?
URLリンク(i.imgur.com)
A列に予め色の見本が、C列に数値を代入していく。
C列に数値を代入したら、そのセルの背景色をA列の色の見本と同じ色にしたい。
A列め色の見本は20色ぐらいを想定。
条件付き書式を使おうと思ったけど、20色も増えたらルールも20個書かないといけないので、ちょっとなえた。

264:デフォルトの名無しさん
21/04/17 06:27:08.23 fydw5HpOa.net
>>261
これを、ワークブックオープンにいれておけばよいよ

265:デフォルトの名無しさん
21/04/17 06:33:53.75 fydw5HpOa.net
>>262
セルに入力されたらシートチェンジというモジュールがあるはずなので
それをさがしてその中でいろいろな処理をすればよいよ

266:デフォルトの名無しさん
21/04/17 06:44:21.86 iZq5P4oj0.net
>>262
出来る出来ないで聞かれたら出来ると答えるよ。
方法は?と聞かれたらワークシートチェンジイベントをシートモジュールに付け足して、引数にはRangeが入ってくるから
その範囲にC列が被っていたらそこの数字みてA列の該当する数字の色拾って来て着色する。
イベントの範囲とC列が被っているかどうかは計算でも求められるけど、今回はセル値も見ることになるからFor Each でイベントでとったRangeを
ぐーるぐる回してC列かどうかを見ればいいと思うよ。
その際、イベントの引数の範囲もRangeだけど
Eachの後に書くCellに該当する変数の型もRangeになることに気をつけて。
実はCellって型はRangeなんだよ。

267:デフォルトの名無しさん
21/04/17 07:03:20.22 jQb3oNGZ0.net
>>265
こういう回答する人って知識ひけらかしたいだけに見える
簡潔答えられないのかね

268:デフォルトの名無しさん
21/04/17 07:05:28.63 gHXBJYD60.net
まあ条件付き書式のほうがスッキリしていいと思うけどな

269:デフォルトの名無しさん
21/04/17 07:19:08.72 iZq5P4oj0.net
>>266
そうなんだ
最近ヒマしててちょっとひけらかしたい部分もあったんだ。
でも作る時のポイントになること押さえてるからいいだろ?
本当は手元に環境があればソース貼りゃいいんだけど。

270:デフォルトの名無しさん
21/04/17 07:26:58.07 fydw5HpOa.net
ふつうはシート・チェンジのモジュールのなかで
target.アドレスやtarget.valueで値を取り出すのじゃないのか
なにをやってるのかよくわからんぞ、

271:デフォルトの名無しさん
21/04/17 07:28:09.89 5JzvmzAs0.net
>>262
どういうシステムにしたいかがいまいち分からん
まずC列の複数のセルに0~5の整数をまとめていくつも代入して、
その後に数字入れたセルの背景色をまとめて変えたい?

272:デフォルトの名無しさん
21/04/17 07:30:13.57 jQb3oNGZ0.net
口だけ出すのもなんなので一応作ってみた
Sheet1モジュール用
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Alea数値 As Range
Set Alea数値 = Range("C4:C9")
If Intersect(Target, Alea数値) Is Nothing Then Exit Sub
Dim AleaColor As Range
Set AleaColor = Range("A4:A9")
Dim Rng As Range
Dim Color№ As Long
For Each Rng In AleaColor
If Rng.Value = Target.Value Then
Color№ = Rng.Interior.Color
Target.Interior.Color = Color№
Exit Sub
End If
Next Rng
End Sub

273:デフォルトの名無しさん
21/04/17 07:46:50.44 fydw5HpOa.net
>>262
てさあ、なかなか賢いとうか
赤や黄色のセルを取り出す、⬅これできないだよな
どこかのセルと同じ色にするならできるだけど

274:デフォルトの名無しさん
21/04/17 07:47:30.68 IoVEY+h40.net
>>271
素晴らしいです。
やりたいことが出来ました。
コメントくれた人にも感謝します。

275:デフォルトの名無しさん
21/04/17 08:50:15.05 xdZBdiobH.net
>>271
いま見返したらAreaがAleaになってるな

276:デフォルトの名無しさん
21/04/17 08:56:18.27 fydw5HpOa.net
エクセルは1600万色もあるからどれが赤で黄色なのかわからない
262のように色見本があって、これが赤です。と決めてくれないと

277:デフォルトの名無しさん
21/04/17 09:08:47.12 lNzUtf8u0.net
>275
EXCEL関係ない

278:デフォルトの名無しさん
21/04/17 12:35:40.75 .net
>>102,103
返信ありがとうございます。
input_str =~ の()内にB2の文字列を貼付して出来ましたが、
input_str =~
input_str =~
と複数行にして試しましたが、複数行は出来ませんでした、どうすれば複数行処理可能になりますでしょうか?

279:デフォルトの名無しさん
21/04/17 20:38:15.19 A+RmKR4F0.net
>>258
いや、ムービーメーカー4がわからないから、貰ってもわからないし。
コンボボックスって未選択の所?
UIAutomationじゃなくてもSendMessageで行けそうな気がするけど・・。
▼が何の文字を指定すればいいのかわからないって意味なら、
やっぱりFindAllで取得して、配列の何番目にそれっぽいのが入ってるか調べればいいと思うな。

280:デフォルトの名無しさん
21/04/17 20:55:43.60 IoVEY+h40.net
>>278
1日がかりでググりまくりの苦労と試行で出来た。
'コンボボックスを開いて折りたたむ
Dim ptnExpand As IUIAutomationExpandCollapsePattern
Set ptnExpand = elmYukkuri.GetCurrentPattern(UIA_ExpandCollapsePatternId)
ptnExpand.Expand
ptnExpand.Collapse
'コンボボックスの中身をセルA3に書き出す
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ListBoxItem")
Set elmsYukkuri = elmYukkuri.FindAll(TreeScope_Children, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "TextBlock")
For i = 0 To elmsYukkuri.Length - 1
Set elmYukkuri = elmsYukkuri.GetElement(i).FindFirst(TreeScope_Children, iCnd)
Cells(i + row_セリフ開始, 1).Value = i
Cells(i + row_セリフ開始, 2).Value = elmYukkuri.CurrentName
Next

281:デフォルトの名無しさん
21/04/18 09:49:47.16 AhVY6Zxk0.net


282:デフォルトの名無しさん
21/04/18 09:56:40.54 AhVY6Zxk0.net
Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("A1:A2")) Is Nothing Then
Exit Sub
End If
ClearDates
UpdateDates
End Sub
Sub ClearDates()
Range("A4:A999").Clear
End Sub
Sub UpdateDates()
If IsDate(Range("A1").Value) = False Or IsDate(Range("A2").Value) = False Then
MsgBox "日付を正しく入力してください"
Exit Sub
End If
Dim d As Date, endDate As Date
d = Range("A1").Value
endDate = Range("A2").Value
Dim y As Long
y = 4
Do While d <= Range("A2").Value
Cells(y, 1) = d
d = d + 1
y = y + 1
Loop
End Sub
日付間の日にちが自動で打ちあがるようにしたんですけど
めちゃくちゃ重くてパソコンが固まってしまいますご教授ください
素人みたいな質問ですいません。

283:デフォルトの名無しさん
21/04/18 10:09:03.12 CdbHG8Q+0.net
>>281
Changeイベントをする時は、
処理の前で
Application.EnableEvents=False
処理の後で
Application.EnableEvents=True
が動くようにしないと延々Changeイベントが動いて重くなる

284:デフォルトの名無しさん
21/04/18 10:09:19.29 a83COmqy0.net
>>281
むしろそれでプロだったらびびるけど・・・
Worksheet_Change()はワークシートの内容が変わった時に発火する
Worksheet_Change()→ClearDates()→Worksheet_Change()→UpdateDates()→Worksheet_Change()→・・・
多分無限ループになっている
こういう時はイベントを無効にしておけば無限ループにならない
Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
'内容
object.EnableEvents = true
endsub

285:デフォルトの名無しさん
21/04/18 10:09:41.04 a83COmqy0.net
すまん、Application.EnableEvents = Falseだった上に遅かった

286:デフォルトの名無しさん
21/04/18 10:53:16.67 AhVY6Zxk0.net
すばやい返答ありがとうございます
少し早くてびっくり
VBAははじめて2年ぐらいです
5年後ぐらいにプロになれたらいいな
Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
上記を先頭2行と置き換えて
object.EnableEvents = true
endsub
↑この2行は最終行に書けばいいのですか?
素人ですいません!

287:デフォルトの名無しさん
21/04/18 11:21:49.65 JCpiu5BAH.net
>>285
直す部分だけ書くと、こう
Private Sub Worksheet_Change(ByVal target As Range)
  Application.EnableEvents = False
  If Intersect(target, Range("A1:A2")) Is Nothing Then
    Exit Sub
  End If
  ClearDates
  UpdateDates
  Application.EnableEvents = True
End Sub

288:デフォルトの名無しさん
21/04/18 12:11:13.84 ORj5XeNB0.net
>>285
ごめーん、object.EnableEvents = false  は間違いです
>>286さんが正しいです

289:デフォルトの名無しさん
21/04/18 14:57:21.70 AhVY6Zxk0.net
先生たちありがとうございます!
新設丁寧頭もいい

290:デフォルトの名無しさん
21/04/18 14:58:49.68 AhVY6Zxk0.net
自分の力で解決できるようにがんばります!

291:デフォルトの名無しさん
21/04/18 16:07:16.06 c/Nu40gb0.net
>>281
それコピペして動かしてみたけど全然重くなかったよ
1900年から今日までにしても4秒くらい
これで固まるのは別の原因があると思う
その場所以外にとても複雑な計算式があって
Cells(y, 1) = d の度に計算して重くなってるとか
そうであれば計算を手動に変えて最後に自動にするとか
セルじゃなくて配列にdを入れて最後に一回だけ出力するとか
UpdateDates()を1行ずつ動かせばどの行で固まってるか分かると思うよ

292:デフォルトの名無しさん
21/04/18 16:21:48.14 n1x9QJALa.net
>>290
それはChangeイベントで検証しましたか?

293:デフォルトの名無しさん
21/04/18 19:37:56.63 Z7m7Dr1xd.net
>>261
ありがとうございます。試してみます。

294:デフォルトの名無しさん
21/04/18 20:47:27.38 c/Nu40gb0.net
>>291
検証しました。
対象セルの書き換えはないから普通は無限ループにならないと思うけど
環境によって何か違うのかな?
とにかく一行ずつ動かしてどこで固まるか調べた方がいいと思います。

295:デフォルトの名無しさん
21/04/18 23:15:06.97 FAQ+sCCd0.net
URLリンク(i.imgur.com)
B4:E6を画像として出力したいんだけど、Rangeの範囲指定をどういじっても、B3:E6が出力されてしまう。
B4:C6を指定してもB3:E6が出力されてしまう。
どうすればいいの?

296:デフォルトの名無しさん
21/04/19 00:55:03.43 BhG1xyLeH.net
>>294
CurrentRegionを使わない

297:デフォルトの名無しさん
21/04/19 01:56:46.57 /e3Iiylf0.net
>>295
thx
CurrentRegionとったらあっさり出来たわ。
たまたまググって出てきたサンプルが説明もなくCurrentRegionを使ってて、
それを参考にしたから数時間損したわ。

298:デフォルトの名無しさん
21/04/19 10:20:37.00 gkbaJTWH0.net
Name As でExcel以外のJpegファイル等のファイル名を変えることができると思いますが、そもそもなんでEXCELで他のソフトウェアのファイル名変えられるんでしょ?
便利だからいいんですけど

299:デフォルトの名無しさん
21/04/19 10:27:18.04 BhG1xyLeH.net
>>297
ファイル操作はOSの基本機能の一つだから
逆に制限する方が、作るのも使うのも面倒になってメリットがなさすぎるという設計上の理由

300:デフォルトの名無しさん
21/04/19 10:41:44.29 gkbaJTWH0.net
そっか、OSを操作してるんでしたね
EXCELもOSも同じメーカーだからこそできる技なんですな

301:デフォルトの名無しさん
21/04/19 21:03:08.15 K5RFczke0.net
>>299
馬鹿?

302:デフォルトの名無しさん
21/04/19 21:19:11.87 80cIHSk1M.net
>>299
知能に問題がある人かな

303:デフォルトの名無しさん
21/04/19 21:54:25.72 zOv5i/QS0.net
昔のExcelは非公開API使ってたとか噂を聞いたことがある

304:デフォルトの名無しさん
21/04/19 23:09:31.11 Qr9ctU7Wa.net
噂を信じるな

305:デフォルトの名無しさん
21/04/19 23:15:55.48 NSiRzHFAa.net
なつかしいなぁ 90年から2000年ぐらいの頃だな

306:デフォルトの名無しさん
21/04/20 00:42:55.05 LQ8i77JG0.net
あるシートをコピーした時、
「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’○○○’が含まれています。この名前を使用しますか?」
が延々と出てくるのがうざいので、
メッセージを出さないようにするマクロって作れますか?
事前に名前の定義から削除するのではなく、シートをコピーしたら、メッセージを出さずに名前の定義を削除したいです。
詳しい方、ご教示をよろしくお願いいたします。

307:デフォルトの名無しさん
21/04/20 01:37:22.55 ptbZPsIm0.net
書式設定をコピーしなくて良いなら配列に値を代入して新しいシートに貼り付けが楽じゃない?
書式もって言うなら出力後に書式だけコピーしてやるとか

308:デフォルトの名無しさん
21/04/20 07:08:37.93 j3U7nYtJ0.net
VBAで隠蔽使ってる人はどんな時に使ってますか?
ぶっちゃけPropertyGetだけでいい気がしてきてしまったので、適切な使い所を知りたいです

309:デフォルトの名無しさん
21/04/20 07:20:28.94 LQ8i77JG0.net
>>306
なるほどです!
やってみます、ありがとうございます!

310:デフォルトの名無しさん
21/04/20 07:26:26.47 sns0znWgd.net
>>307
二人以上で開発する時、または長期に渡るメンテが必要になりそうな時

311:デフォルトの名無しさん
21/04/20 07:29:11.43 aQV8TqKv0.net
>>307
基本privateにしておいたほうが色々とトラブルが少ないけど、
特に不満を感じてないならpublicでもどっちでも同じだと思う
privateで意味が出てくるのは大規模・多人数開発だ

312:デフォルトの名無しさん
21/04/20 12:11:30.20 fqIzsxE3p.net
>>307
メッセージングを行う際にて不必要と思われるメソッド(関数)や変数、プロパティは隠蔽する。

313:デフォルトの名無しさん
21/04/20 12:18:15.46 fqIzsxE3p.net
いや?
そもそも変数はプロパティかメソッド(関数)の引数や戻り値でしか受け渡ししないから変数は隠蔽しないことは無いか

314:デフォルトの名無しさん
21/04/20 12:27:20.11 WjARqIhg0.net
>>307
ぶっちゃけPropertyGetだけでいいです、他のことはやらなくていいです

315:デフォルトの名無しさん
21/04/20 18:45:51.60 aQV8TqKv0.net
変数を隠蔽しておけばgetter・setterを必ず通るからそこさえ監視しておけば後を追える
変数丸出しだとどこから触られるかわからないのでデバッグが死ぬほど大変になる

316:デフォルトの名無しさん
21/04/20 19:02:40.74 grfVULwwa.net
みんなが使うのはパブリック
自分だけで使いたいときはプライベート
XとかY,Zなんかはプライベートにしましょう

317:デフォルトの名無しさん
21/04/20 19:16:00.04 grfVULwwa.net
たんじゅんに
プライベートなら3文字以下
パブリックは5文字以上
そう決めておけばよいよ

318:デフォルトの名無しさん
21/04/20 20:06:43.69 f6iXtgoua.net
>>314
デバッグなんかやんないくせに

319:デフォルトの名無しさん
21/04/20 21:17:43.05 teqpRJSw0.net
人の書いたコードなんて読めない
自分で書いても1ヶ月後には読めない

320:デフォルトの名無しさん
21/04/20 21:32:16.88 N2s7rCY20.net
>>318
人が書いたコードは兎も角
自分の書いたコードが読めないのはちょっとね
上からつらつらと書くんじゃなくて
小さな部品から作って
組み合わせて大きな部品を作って
更に組み合わせて・・・みたいに書くと
分かり易いコードを書けるよ
逆に誰が読んでも分かり易いコードが
書けるようになったらもうすぐVBA卒業だよ

321:デフォルトの名無しさん
21/04/20 21:33:10.03 grfVULwwa.net
文章のきほんは5w1H

322:デフォルトの名無しさん
21/04/21 00:03:03.35 VYKRrHWq0.net
現場のためにマクロ作ってて
性能確認は現場に投げてるけど
どういう処理をしてるとか一切考慮してなくて正常な処理をバグ言われてちょっと辛い
わかる人いる?

323:デフォルトの名無しさん
21/04/21 00:28:41.53 mZ1GtAH60.net
わかる。仕様も確定できない馬鹿だと。

324:デフォルトの名無しさん
21/04/21 00:48:54.24 VYKRrHWq0.net
すごく突っ込みたいけどかなーり年上のおじいちゃんばっかでちょっと言いづらかったり
ありがとう、ちょっと楽になった
明日ガツンと言ってやる(笑)

325:デフォルトの名無しさん
21/04/21 02:31:17.44 QPNAyMuU0.net
>>321
わからんな
コミュニケーション不足なだけだろ

326:デフォルトの名無しさん
21/04/21 04:00:51.54 KhV9jsbh0.net
正常な処理なら伝えりゃいいだけだろ
MsgBox出すなり、シートに書いとくなり、口で言うなりして

327:デフォルトの名無しさん
21/04/21 11:09:16.06 aZ4kV5qwa.net
わからんものを説明するときは5w1hでよいから
聞いているほうも分かった気になる

328:デフォルトの名無しさん
21/04/21 12:00:56.40 TWzI1JIsM.net
エラーメッセージ出そうが絵本みたいなマニュアル作ろうが「ちゃんと動かないぞ!ポンコツめ!」って騒ぐオヤジがおる。んでよくよく聞いてみたらメッセージは読まずに閉じるわマニュアルは開くことすらしてねぇわ日付入力しろって書いてある項目に「多分5/10」とか書いてくれちゃうわであぁ何やっても無駄な時は無駄なんだなぁってなった事が何度もある

329:デフォルトの名無しさん
21/04/21 12:37:02.29 BXHy+8up0.net
>>327
直接お客さんとやり取りしてるの?
そうで無ければ上司か島のリーダーさんに
中間に入ってもらえば?
もし直接お客さんとやり取りしているなら
そもそもプログラマーとお客さんが
窓口も介さず直接やり取りを行う
形態自体に問題があると思うけど
リーダーさんとか上司に相談するべき
もっとも、自分がその窓口ですと言うのなら
最初っからどこをどうして欲しいか
よーく聞いてから作る方がいい。
どうせ用件定義書なんて存在して
いないんでしょ?

330:デフォルトの名無しさん
21/04/21 14:00:48.01 aZ4kV5qwa.net
おいおい、エクセルのマクロぐらいで定義書はつくらんだろ
ふつうはマクロができてからしようが決まるから

331:デフォルトの名無しさん
21/04/21 17:35:07.95 Gd/0Jck0M.net
>>327
さすがにIsDateくらい使おうぜ

332:デフォルトの名無しさん
21/04/21 17:53:28.95 k6MIIAN/r.net
年配のジジイ騙して金取れるなら今の体制維持も考慮すべき

333:デフォルトの名無しさん
21/04/21 18:25:58.81 2kwhHx0qM.net
>>328
上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ
今まで手書きでやってたのを電子化したかったんだと
要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した
まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが
>>330
流石に動作前に入力のエラーチェックはかけてるさ
それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ

334:デフォルトの名無しさん
21/04/21 19:16:43.30 aZ4kV5qwa.net
中抜きの現場をそのまま見ているような
人の入力チェックはけっこうノウハウいるのね

335:デフォルトの名無しさん
21/04/21 19:18:54.99 aZ4kV5qwa.net
進捗管理ツールてまともな奴はみたことがない

336:デフォルトの名無しさん
21/04/21 20:16:57.95 ukt/rEUCa.net
文句いわれた程度で逆ギレかやっぱゆとりだな

337:デフォルトの名無しさん
21/04/21 20:18:22.64 mZ1GtAH60.net
>>332
やっぱり馬鹿か

338:デフォルトの名無しさん
21/04/21 21:08:21.14 BXHy+8up0.net
>>332
なるほど大体状況は理解出来た
まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは
今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな?
下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて
君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。
そのおっちゃんはボロくそに言ったか�


339:熬mれないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。



340:デフォルトの名無しさん
21/04/22 07:33:17.38 7heM3Ej5M.net
まあVBAじゃなくとも自分が便利だと思っている価値観を人に理解してもらうのは難しい

341:デフォルトの名無しさん
21/04/22 09:34:46.13 gwtiqwMsM.net
>>329
仕様書はどういう形式で作るかによる
マクロも仕様書に載せるとルール付けしたら必要になる

342:デフォルトの名無しさん
21/04/22 12:44:53.98 hcaPQHcf0.net
自分の給料がどこから来るのかを考えれば適当な対応はできないとおもうが

343:デフォルトの名無しさん
21/04/22 17:31:38.77 voAAUW4i0.net
VBAでは非0は真として扱われるということでいいですか?

344:デフォルトの名無しさん
21/04/22 17:54:34.03 aG329xgw0.net
>>341
型による

345:デフォルトの名無しさん
21/04/22 18:05:18.29 voAAUW4i0.net
>>342
整数です

346:デフォルトの名無しさん
21/04/22 18:08:01.13 voAAUW4i0.net
あーけど
エラー値も判定の対象になるかもです

347:デフォルトの名無しさん
21/04/22 18:25:55.35 voAAUW4i0.net
ごめんなさい回りくどい質問せずに
直球で質問すると
if instr(str1,str2)>0 then
の>0って要らなくないか?ってことです

348:デフォルトの名無しさん
21/04/22 18:47:47.49 aG329xgw0.net
>>345
やめとけ。まずInstrで何が返ってくるのか確認するんだ
URLリンク(officetanaka.net)
NULLが入って来ることもあるからLEN関数で囲む感じになるのか?
どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい
そんなこと全般に渡ってやってたら
1月後には自分が作ったソースが読めなくなるぞ

349:デフォルトの名無しさん
21/04/22 19:10:26.59 +FKRqhM4a.net
うむ
理系のひとはなんでも yes/Noで考えががちだけと
そういう論理式はむつかしい
現実にはyes/No/無回答 /cancelの4値だから
それに否定<>もあまり多用しないほうがよい
A<>false or B<>false or C<>false
こういうのわけわからんから
IF A=true and B=true and C=true then
else
×××××××
ENDIF
こうしておく、終電に間に合うぞ

350:デフォルトの名無しさん
21/04/22 19:52:34.43 UidQzhn6H.net
>>347
演算子や論理式は、何を判定したいかに合わせて使い分けろ
そしてコメントを書け

351:デフォルトの名無しさん
21/04/22 21:01:52.31 hn+92ycNd.net
理系文系家系関係あるかそれ

352:デフォルトの名無しさん
21/04/22 23:02:56.56 vfns6Sdda.net
VBAでは問題ないのだろうけど、TRUE をイコールで判定するのはどうも…

353:デフォルトの名無しさん
21/04/22 23:11:41.16 voAAUW4i0.net
ありがとうございます
素直に省略せずに比較演算子を使うことにします

354:デフォルトの名無しさん
21/04/23 01:03:06.83 ftZ+9Vdga.net
>>349
体育会系もついか

355:デフォルトの名無しさん
21/04/23 04:16:22.24 IAv7U8Ah0.net
>>350
そうだね
まぁそういうときによく話に上がるコードだけども
Dim A As Boolean
Dim B As Boolean
Dim C As Boolean
A = False
B = False
C = False
A = B = C
こんなコードがあったとして
VBAではこれはエラーにならない
慣れてる人ならAにTrueが入ることが
すぐ分かるけど
慣れていない人はAにFalseが入ると
思ってしまうこともある
単純な式だから「そんなバカいねーよ」と
思うかも知れないけど
これを複雑な式に混ぜられた場合を考えると
結構キツいことになったりもするよ

356:デフォルトの名無しさん
21/04/23 05:12:18.96 Rqoeq7ma0.net
話の主旨が分からん
代入じゃないんだから「==」にしたいって話?
それならBooleanは関係ないよな…

357:デフォルトの名無しさん
21/04/23 05:41:22.55 IAv7U8Ah0.net
>>354
すまん。
最初Integerで書こうかなとも思ったんだけど
それだと本当にエラーにならないか自信がなかったんだ。

358:デフォルトの名無しさん
21/04/23 05:51:27.06 IAv7U8Ah0.net
手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと
A = B == C;
みたいな書き方になったりするのかな
ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね

359:デフォルトの名無しさん
21/04/23 06:24:58.47 TaQs1RgsH.net
それは文法の話であって論理(式)の話ではないな
途中で混ざってすり変わってる

360:デフォルトの名無しさん
21/04/23 06:27:12.51 P8K+Jhr50.net


361:デフォルトの名無しさん
21/04/23 06:40:22.74 TaQs1RgsH.net
a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど
手を抜かずに式を分けたりカッコを付ければいいだけ
コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務
すべて代入したい時
b=c
a=b
比較したい時
a=(b=c)

362:デフォルトの名無しさん
21/04/23 07:36:07.75 F+E5VVCoa.net
プログラム上の論理式は2値論理がほとんどだから
じっさいは仕様によっていくらでも沢山あるからあるから
そういうのは丁寧にコメントをいくしかない

363:350
21/04/23 09:30:59.30 fSz9RP/oa.net
僕が言ったのは次のようなことです
VBAでいうと、True は -1 だが
Dim i As Long
i = 123
If i = True Then
はイコールと評価される
内部的には CBool(i) = True と評価されているのだと思う
C言語では TRUE は 1 と定義されていて、
int i = 123:
if (i == TRUE) {
では i を暗黙裡に論理型に変換しないので、イコールと評価されない(非0が真である直感に反する)
ということでした(123 と 1 を愚直に比較する)
FALSE は 0 と定義されていて、これは比較に用いてもよい

364:デフォルトの名無しさん
21/04/23 09:32:37.82 ze7VlHimM.net
>>359
> 比較したい時
> a=(b=c)
それは…
> a=b=cがすべて代入になる言語
だと、結局代入になるからあまり意味はないよ

365:350
21/04/23 09:32:48.97 fSz9RP/oa.net
間違ってたらごめんなさい

366:350
21/04/23 09:35:24.69 fSz9RP/oa.net
a = b = c = 0
で、a、b、c すべてに 0 を代入したいとか

367:デフォルトの名無しさん
21/04/23 09:46:20.67 IAv7U8Ah0.net
>>363
それで合ってるよ
ちなみに-1なのは変数の内容を
ビットとして見たとき全て立っていると
言うことの名残りだって
昔このスレの誰かが言ってた
もっとも今内部的にPコードで
ビットがどれか立っていればって
判断しているかは知らんけど

368:デフォルトの名無しさん
21/04/23 09:48:01.57 TaQs1RgsH.net
VBやVBAだと0だけがfalse、それ以外はみんなtrueとみなされる
たとえば
a = 100
If a Then
だとaはtrueになってIfの中が実行される

369:デフォルトの名無しさん
21/04/23 12:40:15.83 F+E5VVCoa.net
2値論理はむかし60年から70年台のワイヤーロジック時代にもて囃されたけど
もう令和なんだし、古すぎるよね
80歳のおじいさんならともかく
若い人は使わないようにしましょ

370:デフォルトの名無しさん
21/04/23 12:45:24.75 F+E5VVCoa.net
リレーやSWを組み合わせてコンピュータをつくろう
そんなチャレンジャーはいるかな

371:デフォルトの名無しさん
21/04/23 14:08:52.13 tTrKrHtH0.net
Falseが0とかいうのは正確には正しくない
Falseを数値として評価すると0というのが正しくて
暗黙の変換を無視して話すとおかしなことになるぞ
Trueが0以外というのはもっと間違ってて
Trueは数値として評価すると-1



372:以外の数値をBooleanとして評価するとTrueというのが正しい 型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが まあ今更その仕様にどうこう言ってもなぁ



373:デフォルトの名無しさん
21/04/23 14:38:37.17 fkUQFj8fa.net
結局のところ3ヶ月後の自分がコードの理解ができるかどうかってところよね

374:デフォルトの名無しさん
21/04/23 19:44:06.36 8NALutx50.net
別の奴が新しいの作ってるに1ガバチョ

375:デフォルトの名無しさん
21/04/23 21:55:04.78 TCRfyG2B0.net
VBAで書くようなコードは変数名をちゃんと書いておけば大体問題ないよ
質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・
VBAってプログラミングの入口になる事が多いので、
妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、
バカみたいに基本に忠実かつ丁寧にするのがいいと思います。

376:デフォルトの名無しさん
21/04/23 21:58:49.34 g1z9C06A0.net
>>370
至言だよな。

377:デフォルトの名無しさん
21/04/23 22:02:08.91 g1z9C06A0.net
>>372

仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに
If c = r/2 then
cc = r/2
rr = r/4
End If
みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも
説明なくて読む気になれなかった。

378:デフォルトの名無しさん
21/04/23 22:29:27.77 lNHxMJRv0.net
色々なデータを引っ張ってきて、加工してピボット作って集計して・・・結局使ってねー!
ってコードを見た時はずっこけた
改修前になにかで使ってたのかもしれないけど

379:デフォルトの名無しさん
21/04/24 01:19:16.60 zm0BIqCc0.net
配列を引数にしたときに関数側でVariant()で受け取れないのは何故?
Variantカッコなしなら問題ないんだけど理屈が分からない

380:デフォルトの名無しさん
21/04/24 02:14:07.08 4BGM8nym0.net
>>294
カワいい~
どのコが好みなのよ?

381:デフォルトの名無しさん
21/04/24 08:12:03.15 nm6+mfpAa.net
>>370
いいね、
他人がつくったやつを動かんから直してくれ、のほうが多いもんな
でも、直してくれというのはユーザーが居るのだから需要は確実だよな

382:デフォルトの名無しさん
21/04/24 08:30:08.06 nm6+mfpAa.net
だから他人のつくったソフトを治すのがけっこう好き

383:デフォルトの名無しさん
21/04/24 08:59:02.95 hh64S9E70.net
俺は嫌い
大体人のもの直せって話が降ってくるときは
他の人が見た後で、ぐっちゃぐちゃで
どんだけスパゲティが好きなんだよ、
お前はこの関数に何をやらせたかったんだよ!
みたいのばっかり
そして大概作り直した方が早い

384:デフォルトの名無しさん
21/04/24 09:29:33.79 B50KhnoE0.net
早いというか素直に作れる

385:デフォルトの名無しさん
21/04/24 09:30:19.42 y3ko2vbIM.net
>>380
おバカ自慢は要らない

386:デフォルトの名無しさん
21/04/24 09:44:22.09 nm6+mfpAa.net
www
それをバージョンアップと言うんだよ

387:デフォルトの名無しさん
21/04/24 14:07:12.02 K1BlKgeMH.net
言わない、かな

388:デフォルトの名無しさん
21/04/24 16:44:37.66 0Etp2+DY0.net
>>380
スパゲティっていうのはあんたが思っているようなレベルじゃないよ。
GoTo文で前のループのif文の中に飛んだりするのがスパゲティで、いまの時代は解析困難なコードはほぼない。

389:デフォルトの名無しさん
21/04/24 16:54:39.75 hh64S9E70.net
後、稀にあるのが
頭にOption Scriptを書かずに変数宣言で型を付けない奴
はぁ?VBScriptですか?JavaScriptですか?
バカなの?死ぬの?
ってなるのもある
後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど
変数宣言をIfやFor文の中にその括りで書く人
ああ、何かのObject指向言語やってたのね
とはなるけど、その場合あまりスパゲティソースになっていることが少ないので
ある意味少し安心出来る。
後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴
これは比較的小さいし面白いことが多いから逆にウエルカムのパターン
まず変数名や関数名が日本語の場合が多い。
まぁこれは別にいい。いや、良くはないけど見てて分かるし。
ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると
え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる

390:デフォルトの名無しさん
21/04/24 17:10:21.36 hh64S9E70.net
>>385
そこは認識の違いだね
まぁ別の言語もやってるせいかも知れないけど
俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって
つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる
俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして
既に破綻していることを意味している。
その部分は完全に作り直しにするわ。

391:デフォルトの名無しさん
21/04/24 20:41:03.69 0Etp2+DY0.net
そんなレベルじゃ、仕事にならないだろ。

392:デフォルトの名無しさん
21/04/24 21:36:02.54 rN7nWBsMd.net
一身上の都合によりIfやForやGoto以下でワザとDimを書く場合もご察しください

393:デフォルトの名無しさん
21/04/24 22:10:18.46 S/MxMxKT0.net
vbaやり始めてから世界が変わった
正直関数じゃマジで簡単なの以外はどうにもならんし
下手に複雑な式作っても気まぐれですぐ消されるし

394:デフォルトの名無しさん
21/04/24 22:26:59.54 4BGM8nym0.net
そして嫌われるし

395:デフォルトの名無しさん
21/04/25 00:02:34.42 trooC9Gj0.net
特にすごいのが他のアプリの操作機能
今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む
その間することないからスマホいじるか昼食中に動かしても良い
エクセル神すぎん?

396:デフォルトの名無しさん
21/04/25 00:03:25.63 trooC9Gj0.net
ごめん誤字

今まで月に4時間へばりつかないといけなかった作業が40分で済む

397:デフォルトの名無しさん
21/04/25 01:50:00.98 RbwSHn/Ua.net
可読性ゼロの複雑な関数書いて悦に入ってるヤツは無能

398:デフォルトの名無しさん
21/04/25 06:48:34.57 rqvjO/ad0.net
本当の地獄はこれから

399:デフォルトの名無しさん
21/04/25 09:13:58.07 CqRWqB530.net
Sub 文字列から日付()
ThisWorkbook.Worksheets("1").Activate
With ActiveSheet
Dim yy As Integer, mm As Integer, dd As Integer
yy = Worksheets("1").Range("A1").Value
mm = Worksheets("1").Range("B1").Value
dd = Worksheets("1").Range("C1").Value
Worksheets("1").Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
End With
End Sub
自動でB2の日付が変更するようにしたいのですが
どうしたらいいかわかりません
ActivateではなくChangrイベントだと思いますが
どこにどのように記述したらいいのでしょうか?
ここの先生たちにいつもお世話になってます
初心者にご教授してください

400:デフォルトの名無しさん
21/04/25 09:26:59.35 4pLy3lS70.net
ワークシートのDATE関数が手っ取り早い

401:デフォルトの名無しさん
21/04/25 10:00:44.54 iVVOnnBO0.net
そもそも文字列を即日付に変換するぐらいなら最初から日付を入力するようにしてたほうが面倒くさくなくていいと思うが

402:デフォルトの名無しさん
21/04/25 10:04:58.97 CqRWqB530.net
DATE関数?
=DATE(A1,A2,A3)
↑これですか?
やってみたのですが、なぜか自動計算されないときがあったので
ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ
日付1から日付2までの期間のすべての日付をD1~D999に表示したいのですが
初心者過ぎてむずかしいです

403:デフォルトの名無しさん
21/04/25 10:15:36.34 eytlE9OXa.net
>>399
閏年が大変だな

404:デフォルトの名無しさん
21/04/25 10:23:41.87 CqRWqB530.net
D999としてますが実際はD7ぐらいしかつかわないので
閏年は考慮しなくても大丈夫です

405:デフォルトの名無しさん
21/04/25 10:27:00.72 trooC9Gj0.net
注意
標準モジュールではなくお目当てのシートモジュールに記載すること
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C1")) Is Nothing Or Target.Cells.Count > 3 Then Exit Sub
Application.EnableEvents = False
Dim yy As Integer, mm As Integer, dd As Integer
yy = Range("A1").Value
mm = Range("B1").Value
dd = Range("C1").Value
Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
Application.EnableEvents = True
End Sub

406:デフォルトの名無しさん
21/04/25 10:28:07.28 trooC9Gj0.net
あ、ごめんこれ違うわ

407:デフォルトの名無しさん
21/04/25 10:32:09.85 trooC9Gj0.net
ユーザーフォームは経由は処理が面倒だしエクセルいま手元にないから検証が俺には無理だわ
ただのシート経由ならまだ行けるけど

408:デフォルトの名無しさん
21/04/25 10:36:16.85 trooC9Gj0.net
あとB2への処理がすでに日付と月の入力で重複しとるやん
どうしろと
初心者ならユーザーフォームなんてクソ面倒なもの
使わないほうがいいと思うけど

409:デフォルトの名無しさん
21/04/25 10:39:05.26 4pLy3lS70.net
>>399
とりあえずこんな感じかなあ
変数宣言は省略
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d

410:デフォルトの名無しさん
21/04/25 10:40:46.57 4pLy3lS70.net

Next d ×
Next day ○

411:デフォルトの名無しさん
21/04/25 10:42:21.10 trooC9Gj0.net
For d = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = d
Next d

412:デフォルトの名無しさん
21/04/25 10:49:18.11 trooC9Gj0.net
修正
columns("d").clearcontents
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For d = 日付1 To 日付2
R = R + 1
Cells(R , "D").Value = d
Next d


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch