1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part69 https://mevius.5ch.net/test/read.cgi/tech/1607786543/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
106 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 21:32:16.81 ID:5T6IIfi20.net] >>95 配当なんてせいぜい数% そこから税金2割引かれる 値上がり益は株価が永遠に上がり続けない限り期待値はゼロで、儲かったら2割税金、損しても2割補填してもらえるなんてことはない つまり税金を考慮した期待値はマイナス
107 名前:デフォルトの名無しさん mailto:sage [2021/04/01(木) 23:13:35.12 ID:yB6nLlLi0.net] >損しても2割補填してもらえるなんてことはない 補填してもらえる。 何年か損失を繰り越ししていれば、儲かった時に相殺される 長年、銀行が税金を払わないのは繰越損失があるので、 その後、利益が出ても相殺されるから
108 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 20:32:20.64 ID:OjzTopDr0.net] >>107 永久保証ならな 3年でさようならなんだから期待値はマイナス
109 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:18:57.57 ID:0vCxCYiYa.net] 最近のはinternetexploreを許否するwebがあるからこまる スマホならともかくビジネスではまだ主流なのに
110 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:25:49.87 ID:RckTLwqyd.net] さすがワッチョイにIEを出す男は言うことが違う
111 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 10:59:03.48 ID:D2e+M4g2M.net] Web開発でIE対応が要件にないときにはむしろ意図的にIEで動かないようにするわ 勝手にIEで使われて文句言われるの最高にウザい
112 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:29:03.89 ID:XPTw6Pj4M.net] >>33 自己レスだがわかったわ WEBクエリでWEB内容をシートに書き出す その中から出来高とかのワードをfindで探して そのワードのn行後を取ってくる みたいな動作をしてるんだけど、 ヤフーファイナンスの仕様が変わって n行後の場所が変更になってた ETFだけは従来の場所だから 上記結果がゼロならば違う場所を 取ってくるようにした コピペプログラマだから 今回findとかOffsetを強制的に 学ばされて勉強になった
113 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 13:43:31.82 ID:LoNYZ+kpF.net] >>110 IEが拒否されるときは こっそりExcelシートでhtml をつくるだよ htmlならまず拒否されないから そーして、いつの間にかフォルダーが開いてる フォルダー御開帳よ
114 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 02:10:27.86 ID:7SFCjwlv0.net] ListViewのすべての項目を一発で削除する方法はありませんか? ListBoxならClearメソッドが使えるようなのですが
115 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 03:01:59.01 ID:OlWsfN+XM.net] >>114 ListView.ListItems.Clear
116 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 04:07:16.17 ID:hsI5tKvB0.net] 別ブックから別ブックへ値を持ってきたいときって、コピーか配列使うしかないですか? コピーペーストは処理重そうでスマートっぽくないし、配列は張り付ける範囲をちゃんと指定しなきゃダメなのがめんどくさそうなんですけど、いい方法ないですか?
117 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 06:20:04.03 ID:5jDGrLPha.net] コピーでいいやん
118 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:08:15.45 ID:X/c7fPAEM.net] >>116 コピー先ブック.コピー先シート.Range().Value = コピー元ブック.コピー元シート.Range().Value カッコ内はテキトーに
119 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 13:44:02.06 ID:7SFCjwlv0.net] >>115 ありがとうございます!うまくいきました すみませんがListViewについてもう一つ教えていただけないでしょうか MultiSelect=Trueのときの選択項目数をラベルに表示させたいと思っています リストが選択されるたびに表示を更新したいのですが、なにかいい方法はないでしょうか ItemClickイベントで項目数を数えようとしましたが、選択数分イベントが発生するため項目数が増えると重くなってしまいます ListBoxのChangeイベントのように複数選択しても一度しか発生しないイベントがあるといいのですが、無さそうなので困っています
120 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 17:46:13.14 ID:JgvM3WMx0.net] >>116 コピー元もコピー先もシートを変数に入れておけば変数シート.セルで指定は少しスマートにできる
121 名前:デフォルトの名無しさん mailto:sage [2021/04/04(日) 18:49:59.93 ID:hsI5tKvB0.net] >>116 です >>118 さんのいった通りrangeにvalueをつけてあげればrange.value =range.valueでうまく値をいれることができました まだオブジェクトがうまく理解できていなかったです もっと勉強したいと思います ありがとうございました!
122 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 04:34:52.29 ID:3N8BM4zS0.net] セルには0.9って入力してあるのに VBAのcellsでそれを取得すると1と認識されるんですが 勝手に小数点以下を切り捨てないようにするにはどうしたらいいですか?
123 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 07:04:34.80 ID:FxhyQ6l10.net] Currency型の変数に代入する
124 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 07:43:12.07 ID:CnxjloBy0.net] >>123 そだね ただCurrency型は小数点4桁までしか扱えないから 上記みたいに小数点1桁だったらいいけど 5桁以上扱ったり
125 名前:掛けたり割ったりする場合はDoubleの方がいいかな ただ、Double型の場合は 浮動小数点あつかいでIEEE754規格だから 変に丸められちゃうことがあるんでかけ算割り算行う時は 一度整数にして計算してやる必要があるけど まぁ使い所でどの型使うのか分けて使うのがいいかもね [] [ここ壊れてます]
126 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 12:36:23.48 ID:3N8BM4zS0.net] >>123 >>124 ありがとうございます。integer型にしてました
127 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 17:42:39.68 ID:GNHugBRe0.net] >>122 0.9の小数点以下を切り捨てたら 0 じゃね
128 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 18:04:06.91 ID:34gLfvfqa.net] 別にInteger使う理由もないしlongにしちゃえばとも思う
129 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 19:09:20.57 ID:IFZcDQ1J0.net] >>126 たしかに
130 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 06:08:10.23 ID:KMOOpCjWa.net] 型を指定すると遅くなるから できるだけ指定なしがよいよ マクロらしさを生かそう
131 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 07:02:52.46 ID:Au4GybQm0.net] >>129 メンテが遅くなるからだめ
132 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 10:21:14.29 ID:e+L9SfjT0.net] >>129 おいおいw いくら質問スレで初心者だらけだからって 適当なことを教えてはいけない 指定しなかった型には自動的にVariant型が割り当てられて 本来Integer型だったりLong型で済むものに莫大なメモリを割り当てるし当然処理速度も遅くなる VBAは比較的型の扱いが雑でも何とかなる方ではあるが 頭にプログラムの頭にOption Explicit付けといて型は明示的に設定する癖をつけておいた方がいい
133 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 11:09:39.71 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 12:45:54.77 ID:e+L9SfjT0.net] >>132 うん、まあ 引数の型をVariantにしているからでしょうなぁ 何故Variantにすると値渡しになるのかは分からんけど ちゃんと変数宣言のところで StringとかIntegerとかの配列型宣言をして 呼び出される関数の引数にも それに見合った型にすれば参照渡しされるんじゃない? 試してみて
135 名前:132 mailto:sage [2021/04/06(火) 14:36:15.96 ID:jDDsYkyr0.net] >133 知らなかったです。ありがとうございます
136 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 14:39:05.93 ID: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 mailto:sage [2021/04/06(火) 19:30:17.02 ID:jDDsYkyr0.net] >>135 最初はそれでやっていたのですが、同じくスルーされてました このサブプロシージャ内でブレークポイントを設定しても止まらなかったので、サブプロシージャがスルーされていると思っていたのですが、 サブプロシージャを外しても止まらず、別のファイルに書き換えたら動くようになりました。
138 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 19:51:59.72 ID:JmeclF78d.net] ブレークポイントで止まらないのはおかしい 根本的に別のとこで間違ってる
139 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:36:50.07 ID:DMwNdxSba.net] うむ、おかしい
140 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 22:23:14.18 ID: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 名前:デフォルトの名無しさん [2021/04/07(水) 19:30:33.27 ID:aMJgToSe0.net] 全部省略すれば勝手にByRefだと思ってけど違うの? SheetCreate ara, arb, arc Sub SheetCreate(ara, arb, arc) End Sub
142 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 20:03:43.34 ID:rHsSD320H.net] >>140 その認識は半分正しいけど半分は場合によるので間違い とくに配列を渡す場合はややこしい
143 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 20:42:25.04 ID:Vn8Hoh2Q0.net] 配列・オブ・カリビアン
144 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 20:47:54.61 ID:nkaFkhSP0.net] >>141 不思議なんだよねー 配列変数だとByrefにしてもVariantで渡すと値渡しになることがある よしんばVariantが値型だとしても値型の参照渡しで渡るのは参照渡しになるはずなのに何で?
145 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 15:04:36.48 ID:6DaO6dJm0.net] 色々しらべたよ まず、VBAやってる人はByValとByRefくらいしか気にしない人多いけど、 そもそも変数には参照型と値型というのがあって値型は値そのものが変数に入っているけど 参照型というのは実体が入っているんじゃなくて実体の入っている場所の情報が入っているんだよ。 オブジェクトの類が参照型で、StringやIntegerなんかが値型。 参照渡し、値渡しとこの参照型、値型という組み合わせで何が渡るか決まるんだけど 参照型の参照渡し; 引数の入っているアドレス(場所)を見に行って、その引数の中に入っているアドレスに入っているものを見に行くから、 内容を変更すると関数で呼ぶ前のものも変更されるよ 値型の参照渡し; 引数の入っているアドレスをコピーしてそのアドレスが指してるところの値を見に行くから、 内容を変更すると関数で呼ぶ前のものも変更されるよ 参照型の値渡し: 引数の入ってる値をコピーするけど、その引数の中には実体の入ってるアドレスが入ってて、そっちを見に行くから 内容を変更すると関数で呼ぶ前のものも変更されるよ 値型の値渡し 引数の入ってる値をコピーして、そのコピーした値の内容も値そのものが入っているから 内容を変更しても関数を呼ぶ前のものは変更されないよ まずこれが大前提ね
146 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 15:20:56.67 ID:6DaO6dJm0.net] 本題に入るね。 配列変数でもその辺は基本変わらないけど、 何故か値渡しにしようとすると構文エラーになるんだ そんなときは呼び出し先の引数をVariant型に変えてあげればいいって話だけど、 Variant型にしても参照型のものは参照が見られるから内容を変えれば関数を呼び出す前の内容も変わるんだよね。 variant型の配列を作って値型のものと参照型のものを違う要素に入れてそれを引き数に値渡しで設定してあげると 参照型のものを入れた部分は変更すると関数呼び出す前のものにも反映され、値型の部分は変更が反映されない。 思ったよりお利口さんだったよ。 結論を言うと 何で配列でキチンと型設定して値渡ししようとすると構文エラーで落ちるんじゃマイクロソフトのボケが!! と言うところに落ち着いたよ
147 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 17:10:39.89 ID:OX80XKzVM.net] うろ覚えで申し訳ないんだけど、引数をByVal TestAry() As Longとかにすれば値渡し出来なかったっけ?
148 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 17:27:48.87 ID:6DaO6dJm0.net] >>146 呼び出し元に設定した変数もしくはリテラル値が型的にあっている、 もしくは暗黙の変換が行われる型ならそもそも設定しているものが値型。 そうでなければエラーになると思う。
149 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 17:47:34.27 ID:vZ3ddDF70.net] 質問場所間違ってたら言ってください iPhone用Excelで仕事の日報を書いてるのですが 時間を書き込んで→を押して数字を書き込むと 前のセルに書き込んだ数字 例えば8:00と書き込んで→を、次に16:00と記入しようと1を押すと8:00:001ってなってしまいます これってならなくする方法ありますか?
150 名前:デフォルトの名無しさん [2021/04/08(木) 18:07:25.00 ID:BiHFumMw0.net] >>148 死ね
151 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 18:07:51.70 ID:6DaO6dJm0.net] >>148 iPhoneは持ってるんだけどPC側しか365のアカウント持ってないんだ。ごめんね。 だけどググってみたら書式設定は出来るみたいだから数字にしたいセルの部分をそう書式設定すればいいんじゃないかな? あと、一応EXCEL関連のスレはここに有ったけど Excel友の会 https://egg.5ch.net/test/read.cgi/software/1223040168/ 何か過疎ってるどころか最後の書き込みが去年の10月だから機能していないね。ここのスレでEXCELのこと聞くのは ここのスレの住人がみんなOKすれば大丈夫だと思うけど 今まで随分色んなことあったから難しいかも知れないよ。
152 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 19:22:03.89 ID:wZLPNhcm0.net] こんなマクロの使い方もあるようで。 https://anond.hatelabo.jp/20210408000218
153 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 20:16:35.28 ID:JmFnD0edM.net] 要素数の限界ってどれくらいなの? 多次元配列で一次元あたり数千とかにしたらメモリ不足のエラーになった
154 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 20:37:06.14 ID:eomKGQCU0.net] 多次元はめっちゃメモリ食うからなるべくやるなと言われている
155 名前:デフォルトの名無しさん [2021/04/08(木) 22:20:43.27 ID:xay8Megr0.net] タスクマネージャでも眺めながら色々試してみては 物理メモリだけじゃないだろうけど、なんぼか目安にはなるだろう
156 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 23:36:50.07 ID:zGFXp+zdH.net] 64bit版なら配列変数1個あたり4GBまで 32bit版は2GBまで つまりデータの型によって要素数の上限は違う
157 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 00:36:31.60 ID:J+L5UjPE0.net] >>153-155 ありがとう タスクマネージャ見ても余裕だったんで理由を知りたかった 次元数2次元までにしといた方が無難だね
158 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 17:10:54.57 ID:v0s3XxNT0.net] >>156 そうだね あくまで俺の経験則だけど 2次元から3次元にしたとき何でも一挙に難しくなる気がする 元々簡単な作りのものしか扱わないならいいけど VBAではないけど以前東大生が3次元で配列の制御を行うロジックを作って 自分でもよく分からなくなってしまったというのを見たことがあるし ゲーム作るときも画面表示するだけで 三角関数はもとより行列やアフィン変換とか 理解してないとまともに出来ない メモリ食うのも理由のひとつかも知れないけど 3次元には出来れば手を出さない方がいいと思う
159 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 19:26:47.90 ID:o5ukQupNM.net] >>157 ちなみに今回使おうとしたのは3次元配列なんだけど、3次元配列にした理由は同じような2次元配列に順番にアクセスしたかったから こういう場合は2次元配列を複数用意すればいいのかな? 3次元配列にした方がスマートに記述できると思ったんだけど
160 名前:デフォルトの名無しさん [2021/04/09(金) 19:41:20.17 ID:H0DC02Cp0.net] 行、列、シートで、3次元 配列で重くなるならセルに入れてしまうという手も
161 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:04:50.47 ID:v0s3XxNT0.net] >>159 シートを余計に食うけど場合によってはそれもひとつの有効手段だよね。 あまり見せたくなければVerryHiddenとかにしてしまえばいい訳だし。 >>158 使い処によると思うよ。使い方が単純でスピードが速い方がいいならそれでいいと思う。 ただ、これはあくまで「俺が」なんだけど実はあまり配列が好きじゃないんだ。 だからと言うわけでもないんだけどある程度大きなプログラムを組むときは 配列を使うこともあるにはあるけど、2次元配列の代わりにプロパティだけのエンティティクラス作って それをコレクションやディクショナリに詰め込んで使ったり、 レコードセットを使ったりすることもあるし、 3次元では上記したような仕組みのものやそういった仕組みを持つクラスを作って、 それをまたコレクションやディクショナリにいれたりするように作ったりとか。 何でこんなまどろっこしいことするのかと言えば、要素と言うか項目やレコードの追加や データ抽出が楽なんだよね。 シート足していいと言うなら先程の>>159 の人の案も有りだと思う。 削除系は使えないけどシートにはその気になればSQLが投げられるから 抽出や計算、変換、加工とかする必要があるならかなり楽に作れることもあるからね。
162 名前:デフォルトの名無しさん [2021/04/09(金) 21:29:44.17 ID:H0DC02Cp0.net] 三次元配列は単純に頭がしんどい 三次元空間の様にそれぞれの次元が同じ重みを持っているなら仕方ないけど、 それ意外なら行列の二次元+シート一次元、のように分けたほうがスッキリすると思う
163 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:34:45.69 ID:VGCoQhdKa.net] 省略したら値渡しでしよ 再帰かけるときには値渡しにしないと、いろいろ都合がある
164 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:37:45.95 ID:VGCoQhdKa.net] >>161 賛成、エクセルのシート使うよね
165 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:50:51.12 ID:v0s3XxNT0.net] >>162 これな 実はVB.Netの場合は省略するとByVal(値渡し)で 旧VB6やVBAの場合は省略するとByRef(参照渡し)で 両方やってる人はよく間違えるんだよね。 再起の場合は確かにどれを反映させてどれを反映させないか結構大事になるけど、 まぁ基本デフォルト使わないで明示的に書くだろうからあまり気にしなくてもいいかもね。
166 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 00:28:07.23 ID:xAikY8XJ0.net] みんなありがとう >>160 VBAは基本の参考書を読んで一通り分かったつもり でもクラスは上級者すぎて分からないや 一応自作のオブジェクトという理解でいる 色々案を考えてくれてありがとう、もう少し勉強してからそのあたりも試してみる
167 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 06:57:57.98 ID:+Fv9eRvVa.net] シートに書き出すととピポットにできるから ピポットなら何重にも次元が増やせるし 処理もはやい ピポットとvbaを組み合わせると、 けっこうはやい
168 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 08:02:59.36 ID:GLiDRYw80.net] >>165 頑張って クラスはObject指向言語だと必須だけどVBAでは無理して知ってる必要もないから気が向いたときに覚えればいいと思うよ とは言ってもクラス自体はそんなに難しいものじゃないんだけどね。よく、ひとつの纏まった機能を他のモジュールに書くよね。 あれを標準モジュールの変わりにクラスモジュールに書けばクラスの出来上がり。 後は他のオブジェクト使うときと同じようにNewして変数に入れて、変数名.メソッド名、変数名.プロパティ名とか書けば使えるよ。 どっちかっていうと考え方と使いどころに慣れるまでがちょっと大変かもね。 それ以上の多態性とかデザインパターンとかの知識を身につけるころには他の言語やってるだろうから 今そんなに深く考えることもないと思うよ。
169 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 09:30:59.12 ID:ASUPMck3M.net] >>165 VBAの範疇ならクラスは忘れてもいいと思う コンストラクタに引数も持てないし継承もできないから普通にユーザー定義型と操作ルーチンをモジュールにまとめるのとたいして変わらんし
170 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 10:08:24.05 ID:+Fv9eRvVa.net] エクセルというクラスを使いこなせば ビジネスなら十分 エクセル以上のobject作るのは無理だから なんつてセカンドオニオンでした
171 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 15:51:59.07 ID:duTza7EGd.net] 自分もクラスで挫折して今はユーザー定義型で幸せです
172 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 16:02:42.86 ID:4ha6UGTxp.net] 自分もユーザー定義にした途端お金が入って彼女が出来ました。今ではとっても幸せです。
173 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 17:05:30.13 ID:eY7Q/L5k0.net] そうかい
174 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 20:22:47.19 ID:mgDf3XRg0.net] >>170 プロパティとかコンストラクタとかあとは鯛焼きの型とかいきなり説明しだすから分かりにくいんだよな
175 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 20:23:09.87 ID:mgDf3XRg0.net] 最初はクラス内の変数と関数だけでプロシージャ内のコードがこれだけ簡潔書けるようになります程度でいいのに
176 名前:デフォルトの名無しさん [2021/04/10(土) 20:31:08.56 ID:u4vdYafN0.net] EXCELvbaで、クラスってどういう時に使うのでしょうか ゲームのように細かいオブジェクトが多数ある状態なら分かりますが、 表の状態になったデータだと、今ひとつピント来ないです 社員classや顧客classを作るのでしょうか
177 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 20:42:21.31 ID:r9QO1mE4M.net] 無理に使う必要は無い。 「使わなくては!」と閃く状況が来るときまで。
178 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 21:10:26.00 ID:2jN52YXT0.net] >>175 よく使うけど毎回書くのが面倒な処理がある時 DB接続とかUIAutomationとか長げぇよってやつ
179 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 21:22:16.81 ID:GLiDRYw80.net] >>175 どう使うかを決めるのも自分。 だからクラスそのものより 考え方や使いどころに慣れるまで そっちの方が大変だって言ったんだよ。 まぁ表であればあくまで俺であれば、 項目をプロパティにして 1レコードをクラスにして、 それをコレクションやディクショナリに 登録して使うよ。前記したけどね。
180 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 22:23:34.34 ID:duTza7EGd.net] オレ知ってる! クラスってニューして使うんだよな!
181 名前:デフォルトの名無しさん [2021/04/10(土) 23:22:47.33 ID:kj/emQZa0.net] エクセルでガントチャートを作りたく極力簡単な方法を探しています。 (手順が少なく、エクセル苦手でも理解しやすい) 自力で探したところ ttps://excel-master.net/cells-worksheets-control/gantt-chart-3/ の「条件付き書式でガントチャートをつくる」が一番簡単な気がしましたが より簡単な方法があったらご教授いただきたく。 windows板で尋ねようかと思いましたがエクセル専用スレが無いため 詳しい人が多そうなこのスレにお邪魔しました。
182 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 23:41:30.33 ID:KgXo78Rva.net] 要望は何回もやり直したほうがよいよ さいしょは相手も自分もよくわかってないから Ver3ぐらいでようやく完成する
183 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 00:00:57.05 ID:0+LhiyyI0.net] >>180 あ、これ、俺は苦手だわ WBS作ろうとするとどうしても 簡単に作ることより分かり易くする方に 力入れちゃうから多分そのリンク先に 載ってることよりややこしい数式にしてしまう ま、WBSなんて基本、予定線と実績線、 あと遅れそうになった時のワーニング色と 遅れた時のアラート色、 あと遅延リカバリ用の枠付けとくくらいだから 大したもんじゃないからまぁ頑張って。 こういうの作るときにもっと大事なのは 見積もりとそれに対するする人員と期間の 配分だから、そっちも任されているなら そっちに作業の80%くらい割り振って 考えた方がいいよ。
184 名前:デフォルトの名無しさん [2021/04/11(日) 02:17:20.23 ID:x6o0gjqGd.net] 馬鹿ばっかのスレ
185 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 02:27:18.88 ID:C7VIYXjZa.net] ガントチャートだとあんまり工程管理にならないんだよ やってみるとわかるけど 8割がた遅延する、というか遅れてないと進捗がわからないだよ 1、そもそもスタートしていなかった? これがいちばんおおい 2、深刻で致命的なもんだいが、見つかるとはいちばん最後 だから
186 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 10:19:59.88 ID:Gib6KHmfM.net] >>180 そのガントチャートで問題ないならそれが一番簡単だと思う ただ>>184 が言うような日程管理をしたいならもうちょい作り込むなり専用アプリを使ったほうがいい
187 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 11:13:40.17 ID:udnt6yH0p.net] 質問です 今後このスレ こう言ったEXCELのとか 旧VB6とか許容すんの? 古参なら今までどういったことが 有ったか覚えていると思うけど
188 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 11:43:22.55 ID:TwIBijR2M.net] 質問者はワークシートでの作り方はある程度想像がつくけどVBAの知識がある人ならよりスマートな方法を知っているかもしれないと考えてここで聞いたんだろうし、 それに対してワークシートの機能でできることはVBA使うよりワークシートの機能でやった方がいいってのは極めて妥当で健全な回答だろう そんなことでいちいちスレ違い警察さんが出動しなくていいよ
189 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 12:04:02.09 ID:0+LhiyyI0.net] >>187 そう 許容するのね?
190 名前:デフォルトの名無しさん [2021/04/11(日) 12:41:42.70 ID:WBicdlML0.net] excelのOnTime関数をPowerPointで使うこと出来ないよね?同じ機能を持った関数ってある?
191 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 12:55:23.83 ID:0+LhiyyI0.net] >>189 無いからAPIで行うらしい https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1396587403
192 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 13:01:24.60 ID:J2w1eWX20.net] Excelから呼び出せないのか 起動中のソフトを検索するワード関数をExcelから呼び出してるの見かけたことあるけど
193 名前:デフォルトの名無しさん [2021/04/11(日) 14:13:05.18 ID:WBicdlML0.net] >>190 ありがとう まったく理解できないけど、もっと楽な方法ないのかなー
194 名前:デフォルトの名無しさん [2021/04/11(日) 15:30:39.63 ID:VuRQUus/0.net] vb.netでdllとか作った方が早いような
195 名前:デフォルトの名無しさん [2021/04/11(日) 20:16:20.16 ID:MoadxaFG0.net] >>180 スレ作ればいいだろ 厚かましいにも程がある
196 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 21:10:22.11 ID:LXnW0jT40.net] Python, Julia, Ruby などで使う、Jupyter Lab に、ガントチャートは無いのか?
197 名前:デフォルトの名無しさん [2021/04/11(日) 21:40:30.24 ID:VuRQUus/0.net] >>196 あることはある https://cafe-mickey.com/python/plotly-tutorial-6/ でも結局死ぬほどカスタマイズすることになるから、EXCELで作るのが一番マシ
198 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 23:13:09.15 ID:rV+Er0Dj0.net] 業務とはかけ離れた腕自慢スレになりつつあるなここは
199 名前:デフォルトの名無しさん [2021/04/11(日) 23:26:48.43 ID:ZRspFCij0.net] >>180 です。スレ違いな質問に回答くださってありがとうございました。 >>187 さんのご推察どおりここの先生方を最も頼りにしております! 残念ながら任されているのはエクセル上の作業のみであり 人員期間の配分は担当外ですが コレが一番スマートだと確信できました。 これで安心して作業に入れます。感謝します。
200 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 23:52:08.05 ID:Omw3/P/WH.net] >>197 昔から、質問の答えが出た後に別の方法を書き込む競争はやってた
201 名前:デフォルトの名無しさん [2021/04/12(月) 00:09:38.61 ID:zgwaoc/v0.net] いつものあいつだな
202 名前:デフォルトの名無しさん [2021/04/12(月) 02:49:52.91 ID:Bvz5U6oCM.net] まだ引っ掛かる馬鹿がいるのか
203 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 09:23:22.30 ID:H+Y94TUB0.net] 回答者さん同士で競争とか知恵袋と同じじゃんか 無駄にスレの無駄遣い
204 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 10:17:02.71 ID:5VvoR6W20.net] 無駄な書き込みを無駄にスレに書き込んでスレを無駄に使うことはスレの無駄遣いだと書き込むことはスレの無駄遣いかもしれない
205 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 10:35:19.07 ID:0gH2bD5Aa.net] 無駄な努力が、むくわれるのさ
206 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 10:49:33.17 ID:0gH2bD5Aa.net] VLookupをつかったのは無駄な努力だったな やめときゃよかった
207 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 10:56:04.87 ID:0gH2bD5Aa.net] これをマクロでどうにかなりませんか そういってわたされたのがVLookupが山のように貼り付けられた エクセルシートだった うまくと動くけと突然とまるw けっきょくforループの検索に代えた とここまで書いておもいだしたが 去年、メンタル悪化で退職した同僚がいたけど のこしていってのはやはりVLookupの山だったな 動かないVLookupで退職するまえに本スレにご相談ください
208 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 12:12:04.06 ID:8dcLaG4EM.net] Excel初心者はVLookupしか知らないから 何でもこれでやろうとして自爆する傾向があるね
209 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 12:24:31.30 ID:H+Y94TUB0.net] そのVlook関数はマクロ経由なのかが気になる
210 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 12:42:14.50 ID:HPbAbv3kH.net] 池の女神は言いました あなたが落としたのはVLOOKUPですか、HLOOKUPですか いいえ私が落としたのはXLOOKUPです
211 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:02:43.22 ID:A3OoULtt0.net] 質問です >>209 の言う VlookupとHlookupの頭文字は バーティカル(垂直)とホライズン(水平) なのは分かるんですがXlookupの頭文字の Xってなんですか? EXCELの質問でスレ違いなのは 重々承知していますが このスレにいる方々の知識の豊富さに縋らせてください 考えると夜も眠れない有様です
212 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:25:12.45 ID:QkakYyyta.net] >>210 クロス
213 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:30:51.45 ID:A3OoULtt0.net] >>211 クロスのスペルってCROSSではないんですか? それともX_JAPANの「エーックス」のクロスですか? 分かりません><
214 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:34:07.13 ID:X9TSjYQR0.net] XmasのX
215 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:36:54.52 ID:MyLZJXYdp.net] 向こうではCrossとかChristmasをXで省略するから、だと思う
216 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:41:07.52 ID:A3OoULtt0.net] >>213 >>214 やっと分かりました 今日からぐっすりと眠れそうです ありがとうございました
217 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 15:02:08.77 ID:3rdXwFWw0.net] >>215 死ねよ
218 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 17:28:11.89 ID:H+Y94TUB0.net] バツルックアップじゃないの?? 事務のオバチャンにそう聞いたけど
219 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:56:57.26 ID:UqVxKohHa.net] とんこつととんかつの違いはなんですか そういう質問をうけたときがあったなぁ
220 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 20:02:02.68 ID:HPbAbv3kH.net] とんかつ とんかち
221 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 22:40:18.25 ID:6cC4Cv/z0.net] マジレスするとExtraやExtendのX
222 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:25:16.60 ID:XNPY+hAHa.net] ガントチャートの欠点は 遅れの検出がおそいだよね 期限が過ぎないと遅れることがわからない これでは手遅れですよ
223 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:40:10.17 ID:5GJi7nDK0.net] >>221 あ、そうなんだ EXCELの数式だったら予定線より実績線が 二日くらい前になったらワーニングで黄色、 予定線以降になったら赤とかにしとけば ワーニングに入った時点でリカバリ案とか 会議で話し合えるのにね。
224 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 12:54:32.74 ID:mzxN/X4qM.net] 期限過ぎる前に進捗率がヤバくなればリスケで仕切り直し いつまで経っても期限が過ぎることは無い
225 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 13:24:50.99 ID:5GJi7nDK0.net] >>223 本当にありそうで怖いわ!
226 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 17:28:26.59 ID:XNPY+hAHa.net] 開始日でだいたいわかる おおくのばあいはまともにスタート出来てないからw 人がいない、資料がそろってない、仕様がきまってない だも スタートできなきゃゴールするわけがない
227 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:57:49.87 ID:5GJi7nDK0.net] >>225 開発あるあるだなw そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。 他のある程度大きいシステムになると ・客先から上がって来ない要件定義 ・客先だから強く言えないチームのリーダー ・差し迫る納期 ・焦りが出てきてイラつく俺ら。それを宥めるリーダー この辺からが違うところかな ・システム間の連携や他システムとの連携のため伸ばせない納期 ・更に焦る俺ら。宥めきれなくなるリーダー ・上がって来る要件定義、血眼で設計書を作る俺ら ・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書 ・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら ・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間 ・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人 ・何とかSTまで終了。飛ばされるリーダー、バグだらけの成果物、昇天する俺ら 最悪こんな感じかな。
228 名前:デフォルトの名無しさん [2021/04/13(火) 21:11:48.26 ID:QqfAiqTvM.net] >>225 開発あるあるだなw そうか、確かにVBAだと後ろが伸びるだけになるかも知れないね。 他のある程度大きいシステムになると ・客先から上がって来ない要件定義 ・客先だから強く言えないチームのリーダー ・差し迫る納期 ・焦りが出てきてイラつく俺ら。それを宥めるリーダー この辺からが違うところかな ・システム間の連携や他システムとの連携のため伸ばせない納期 ・更に焦る俺ら。宥めきれなくなるリーダー ・上がって来る要件定義、血眼で設計書を作る俺ら ・時間がなくて客先との対面レビューのはずが回覧レビューになる設計書 ・PGしながら単体テストケース作りながら単位テストしながらエビデンス取る俺ら ・超える納期、無くなる休日、伸びまくる勤務時間、倒れる仲間 ・覆る要件定義、設計種ミス発覚、他の嶋から助っ人入るも焼石に水、発狂する助っ人 ・何とかSTまで終了。飛ばされるリーダー、ハゲだらけの社員、昇天する俺ら 最悪こんな感じかな。
229 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:15:01.18 ID:5GJi7nDK0.net] うーん、何か接続がおかしいのかな 他のスレに誤爆になってこのスレでも2回載ってしまった すまんこ
230 名前:デフォルトの名無しさん [2021/04/13(火) 21:34:03.40 ID:QqfAiqTvM.net] うーん、何か接続がおかしいのかな 他のスレに誤爆になってこのスレでも2回載ってしまった おまんこ
231 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:38:41.78 ID:5GJi7nDK0.net] >>229 おいw
232 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:51:01.50 ID:EILUghab0.net] ウンコマクロ
233 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:17:03.44 ID:hXL/FQf4a.net] まあ。そんなんだ
234 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:29:05.82 ID:jCprHRHj0.net] EXCEL VBAは好きだし凄く肌に合ってると思うけど、案件単価がちょっとなぁ
235 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:47:31.92 ID:kMGrei9fM.net] EXCEL VBAが肌に合う様な奴が案件単価とか生意気。
236 名前:デフォルトの名無しさん [2021/04/14(水) 20:39:37.17 ID:E4KyUeCU0.net] 一般事務が仕事中に覚える→結婚・退職→主婦の傍ら有り余る時間で糞みたいな単価で受注 まぁ、悪い事でもなんでもないんだけどね、うん
237 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:45:27.19 ID:ijCB3EYv0.net] あたまが鉛のようにおもい
238 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:47:48.07 ID:cTgQ8ZPt0.net] 1時間で作れるような案件が高いわけない
239 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 20:52:06.82 ID:ijCB3EYv0.net] 冷戦時代日本がロケットのことでロシアに教えをこうたとき 一言ジャイロに問題があるといって 100億ぐらいもって去っていったそうな
240 名前:デフォルトの名無しさん [2021/04/14(水) 21:21:01.64 ID:tTtaKpUk0.net] VBA Seleniumdriveで driver.ExecuteScript ("XXXX") でonclickをクリックするとモーダルコンテンツが表示されます。 コンテンツ内のXpathをクリックしてもボタンを押すことが出来ないんですが、 SendKeys "{TAB}", Trueで該当のボタンをクリックする以外に 要素を指定してクリックする方法ってありますか?
241 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:43:58.06 ID:bsTwIiw80.net] 下記「やりたいこと」のようにhtmlから抽出したいのですが、 下記「前提」があって、どうしたらいいのか分かりません。 なにか方法ありますでしょうか? --- やりたいこと --- 下記htmlにおいて、"ヘッダ"のすぐ次に存在しているtableタグ内の項目1,2、要素1,2を取得したい --- 前提 --- @"ヘッダ"は特定できる Atableは特定できない ・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 "***" 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 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 23:08:27.54 ID:mIFbuL/UH.net] >>240 <HTML>タグか<BODY>タグで全体のソースを取り込んで、あとは文字列として処理
243 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 01:36:52.92 ID:E+h/Uieza.net] VBAでやる意味あんの?
244 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 02:03:12.55 ID:Un6DIa9Z0.net] >>241 >>242 ありがとうです。 もう少し考えます。。
245 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 06:20:29.14 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 06:53:10.31 ID:r2UxJQfIM.net] >>244 VBAの構文に変換してくれ
247 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 11:25:51.10 ID:c60l0/FJ0.net] >>244 VBAに対してHTMLの集約やメソッドチェーンが使える言語をぶつけてくるのは卑怯だと思うの
248 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 12:05:58.59 ID:nvZZu+k0a.net] スクリプトぐらいなら良くねの
249 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 12:18:14.12 ID:ivOr0/mk0.net] >>244 結局総当りか まあそうだよね
250 名前:デフォルトの名無しさん [2021/04/15(木) 16:07:09.80 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:29:43.21 ID:c2wrGnlaM.net] >>249 vlookup部分もVBA化して組入れれば一つのJOBに出来るよ
252 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:46:43.97 ID:BAka9uDVM.net] >>249 3つぐらいなら請求書シートを必要分コピーして各々値を入れて複数シートを一気に印刷するしか思い付かない
253 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 17:53:55.45 ID:c2wrGnlaM.net] 請求書シートも複数有るなら、それをFor Nextで繰り返すぐらいだろうね
254 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 19:09:26.62 ID: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 名前:デフォルトの名無しさん [2021/04/15(木) 21:08:32.60 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 22:20:13.95 ID:8+4wzY1VH.net] 直接印刷せずPDFにすればいいじゃん PDFなら大量のファイルを1回のジョブで一気に印刷できるぞ
257 名前:デフォルトの名無しさん [2021/04/15(木) 22:56:26.48 ID:fGNDJEoP0.net] >255 PDFに出力する時はvbaで制御できないんじゃ
258 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 23:42:15.25 ID:rzqCvIH40.net] >>253 ここで良いけど、 UIAutomationとムービーメーカー4両方知ってるレアな人じゃないとわからないと思うぞ。 俺は前者しかわからんからあてずっぽうで言うけど、 FindFirstじゃなくてFindAllして中身を調べれば良いんじゃないの?
259 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 04:48:18.88 ID:aO0hqHGi0.net] >>257 とりあえずごまかしながら作ったのがこんなやつ https://youtu.be/3RApNTTEkIs ソースとかほしい?
260 名前:249 mailto:sage [2021/04/16(金) 19:03:44.09 ID:yYdNvwCc0.net] 様々なご提案ありがとうございます。 シートを増やして行くやり方にしようと思います。
261 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 04:28:55.40 ID:aiLxsK7Md.net] 質問です。変更したセルに色をつけたいと思っており、調べたところ変更履歴の使用や色を変更するマクロ(private sub〜)は出てきました。 それに加えて、その色変更をその日だけ有効にすることは可能ですか? 例えば、 4/17 A1の値 1 1→2に変更すると色も変更 4/18 A1の値 2 白に戻っている 2→3に変更すると色も変更… といった感じなんですが。。。
262 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 04:47:34.80 ID:5JzvmzAs0.net] If Today()="2021/04/17" Then Range("A1").Interior.Color = 256 〜とか条件加えればいいんじゃね
263 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 05:37:32.98 ID:HGZEZM9x0.net] こんなこと出来ますか? https://i.imgur.com/ypZck9P.png A列に予め色の見本が、C列に数値を代入していく。 C列に数値を代入したら、そのセルの背景色をA列の色の見本と同じ色にしたい。 A列め色の見本は20色ぐらいを想定。 条件付き書式を使おうと思ったけど、20色も増えたらルールも20個書かないといけないので、ちょっとなえた。
264 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:27:08.23 ID:fydw5HpOa.net] >>261 これを、ワークブックオープンにいれておけばよいよ
265 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:33:53.75 ID:fydw5HpOa.net] >>262 セルに入力されたらシートチェンジというモジュールがあるはずなので それをさがしてその中でいろいろな処理をすればよいよ
266 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:44:21.86 ID:iZq5P4oj0.net] >>262 出来る出来ないで聞かれたら出来ると答えるよ。 方法は?と聞かれたらワークシートチェンジイベントをシートモジュールに付け足して、引数にはRangeが入ってくるから その範囲にC列が被っていたらそこの数字みてA列の該当する数字の色拾って来て着色する。 イベントの範囲とC列が被っているかどうかは計算でも求められるけど、今回はセル値も見ることになるからFor Each でイベントでとったRangeを ぐーるぐる回してC列かどうかを見ればいいと思うよ。 その際、イベントの引数の範囲もRangeだけど Eachの後に書くCellに該当する変数の型もRangeになることに気をつけて。 実はCellって型はRangeなんだよ。
267 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:03:20.22 ID:jQb3oNGZ0.net] >>265 こういう回答する人って知識ひけらかしたいだけに見える 簡潔答えられないのかね
268 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:05:28.63 ID:gHXBJYD60.net] まあ条件付き書式のほうがスッキリしていいと思うけどな
269 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:19:08.72 ID:iZq5P4oj0.net] >>266 そうなんだ 最近ヒマしててちょっとひけらかしたい部分もあったんだ。 でも作る時のポイントになること押さえてるからいいだろ? 本当は手元に環境があればソース貼りゃいいんだけど。
270 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:26:58.07 ID:fydw5HpOa.net] ふつうはシート・チェンジのモジュールのなかで target.アドレスやtarget.valueで値を取り出すのじゃないのか なにをやってるのかよくわからんぞ、
271 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:28:09.89 ID:5JzvmzAs0.net] >>262 どういうシステムにしたいかがいまいち分からん まずC列の複数のセルに0〜5の整数をまとめていくつも代入して、 その後に数字入れたセルの背景色をまとめて変えたい?
272 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:30:13.57 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:46:50.44 ID:fydw5HpOa.net] >>262 てさあ、なかなか賢いとうか 赤や黄色のセルを取り出す、⬅これできないだよな どこかのセルと同じ色にするならできるだけど
274 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:47:30.68 ID:IoVEY+h40.net] >>271 素晴らしいです。 やりたいことが出来ました。 コメントくれた人にも感謝します。
275 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:50:15.05 ID:xdZBdiobH.net] >>271 いま見返したらAreaがAleaになってるな
276 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:56:18.27 ID:fydw5HpOa.net] エクセルは1600万色もあるからどれが赤で黄色なのかわからない 262のように色見本があって、これが赤です。と決めてくれないと
277 名前:デフォルトの名無しさん [2021/04/17(土) 09:08:47.12 ID:lNzUtf8u0.net] >275 EXCEL関係ない
278 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 12:35:40.75 .net] >>102 ,103 返信ありがとうございます。 input_str =〜 の()内にB2の文字列を貼付して出来ましたが、 input_str =〜 input_str =〜 と複数行にして試しましたが、複数行は出来ませんでした、どうすれば複数行処理可能になりますでしょうか?
279 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:38:15.19 ID:A+RmKR4F0.net] >>258 いや、ムービーメーカー4がわからないから、貰ってもわからないし。 コンボボックスって未選択の所? UIAutomationじゃなくてもSendMessageで行けそうな気がするけど・・。 ▼が何の文字を指定すればいいのかわからないって意味なら、 やっぱりFindAllで取得して、配列の何番目にそれっぽいのが入ってるか調べればいいと思うな。
280 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:55:43.60 ID: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 名前:デフォルトの名無しさん [2021/04/18(日) 09:49:47.16 ID:AhVY6Zxk0.net] し
282 名前:デフォルトの名無しさん [2021/04/18(日) 09:56:40.54 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 10:09:03.12 ID:CdbHG8Q+0.net] >>281 Changeイベントをする時は、 処理の前で Application.EnableEvents=False 処理の後で Application.EnableEvents=True が動くようにしないと延々Changeイベントが動いて重くなる
284 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:19.29 ID: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 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:41.04 ID:a83COmqy0.net] すまん、Application.EnableEvents = Falseだった上に遅かった
286 名前:デフォルトの名無しさん [2021/04/18(日) 10:53:16.67 ID:AhVY6Zxk0.net] すばやい返答ありがとうございます 少し早くてびっくり VBAははじめて2年ぐらいです 5年後ぐらいにプロになれたらいいな Private Sub Worksheet_Change(ByVal target As Range) object.EnableEvents = false 上記を先頭2行と置き換えて object.EnableEvents = true endsub ↑この2行は最終行に書けばいいのですか? 素人ですいません!
287 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 11:21:49.65 ID: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 名前:デフォルトの名無しさん [2021/04/18(日) 12:11:13.84 ID:ORj5XeNB0.net] >>285 ごめーん、object.EnableEvents = false は間違いです >>286 さんが正しいです
289 名前:デフォルトの名無しさん [2021/04/18(日) 14:57:21.70 ID:AhVY6Zxk0.net] 先生たちありがとうございます! 新設丁寧頭もいい
290 名前:デフォルトの名無しさん [2021/04/18(日) 14:58:49.68 ID:AhVY6Zxk0.net] 自分の力で解決できるようにがんばります!
291 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:07:16.06 ID:c/Nu40gb0.net] >>281 それコピペして動かしてみたけど全然重くなかったよ 1900年から今日までにしても4秒くらい これで固まるのは別の原因があると思う その場所以外にとても複雑な計算式があって Cells(y, 1) = d の度に計算して重くなってるとか そうであれば計算を手動に変えて最後に自動にするとか セルじゃなくて配列にdを入れて最後に一回だけ出力するとか UpdateDates()を1行ずつ動かせばどの行で固まってるか分かると思うよ
292 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:21:48.14 ID:n1x9QJALa.net] >>290 それはChangeイベントで検証しましたか?
293 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 19:37:56.63 ID:Z7m7Dr1xd.net] >>261 ありがとうございます。試してみます。
294 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 20:47:27.38 ID:c/Nu40gb0.net] >>291 検証しました。 対象セルの書き換えはないから普通は無限ループにならないと思うけど 環境によって何か違うのかな? とにかく一行ずつ動かしてどこで固まるか調べた方がいいと思います。
295 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 23:15:06.97 ID:FAQ+sCCd0.net] https://i.imgur.com/8OFf7Pv.jpg B4:E6を画像として出力したいんだけど、Rangeの範囲指定をどういじっても、B3:E6が出力されてしまう。 B4:C6を指定してもB3:E6が出力されてしまう。 どうすればいいの?
296 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 00:55:03.43 ID:BhG1xyLeH.net] >>294 CurrentRegionを使わない
297 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 01:56:46.57 ID:/e3Iiylf0.net] >>295 thx CurrentRegionとったらあっさり出来たわ。 たまたまググって出てきたサンプルが説明もなくCurrentRegionを使ってて、 それを参考にしたから数時間損したわ。
298 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:20:37.00 ID:gkbaJTWH0.net] Name As でExcel以外のJpegファイル等のファイル名を変えることができると思いますが、そもそもなんでEXCELで他のソフトウェアのファイル名変えられるんでしょ? 便利だからいいんですけど
299 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:27:18.04 ID:BhG1xyLeH.net] >>297 ファイル操作はOSの基本機能の一つだから 逆に制限する方が、作るのも使うのも面倒になってメリットがなさすぎるという設計上の理由
300 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:41:44.29 ID:gkbaJTWH0.net] そっか、OSを操作してるんでしたね EXCELもOSも同じメーカーだからこそできる技なんですな
301 名前:デフォルトの名無しさん [2021/04/19(月) 21:03:08.15 ID:K5RFczke0.net] >>299 馬鹿?
302 名前:デフォルトの名無しさん [2021/04/19(月) 21:19:11.87 ID:80cIHSk1M.net] >>299 知能に問題がある人かな
303 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 21:54:25.72 ID:zOv5i/QS0.net] 昔のExcelは非公開API使ってたとか噂を聞いたことがある
304 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:09:31.11 ID:Qr9ctU7Wa.net] 噂を信じるな
305 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:15:55.48 ID:NSiRzHFAa.net] なつかしいなぁ 90年から2000年ぐらいの頃だな
306 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 00:42:55.05 ID:LQ8i77JG0.net] あるシートをコピーした時、 「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’○○○’が含まれています。この名前を使用しますか?」 が延々と出てくるのがうざいので、 メッセージを出さないようにするマクロって作れますか? 事前に名前の定義から削除するのではなく、シートをコピーしたら、メッセージを出さずに名前の定義を削除したいです。 詳しい方、ご教示をよろしくお願いいたします。
307 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 01:37:22.55 ID:ptbZPsIm0.net] 書式設定をコピーしなくて良いなら配列に値を代入して新しいシートに貼り付けが楽じゃない? 書式もって言うなら出力後に書式だけコピーしてやるとか
308 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:08:37.93 ID:j3U7nYtJ0.net] VBAで隠蔽使ってる人はどんな時に使ってますか? ぶっちゃけPropertyGetだけでいい気がしてきてしまったので、適切な使い所を知りたいです
309 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:20:28.94 ID:LQ8i77JG0.net] >>306 なるほどです! やってみます、ありがとうございます!
310 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:26:26.47 ID:sns0znWgd.net] >>307 二人以上で開発する時、または長期に渡るメンテが必要になりそうな時
311 名前:デフォルトの名無しさん [2021/04/20(火) 07:29:11.43 ID:aQV8TqKv0.net] >>307 基本privateにしておいたほうが色々とトラブルが少ないけど、 特に不満を感じてないならpublicでもどっちでも同じだと思う privateで意味が出てくるのは大規模・多人数開発だ
312 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:11:30.20 ID:fqIzsxE3p.net] >>307 メッセージングを行う際にて不必要と思われるメソッド(関数)や変数、プロパティは隠蔽する。
313 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:18:15.46 ID:fqIzsxE3p.net] いや? そもそも変数はプロパティかメソッド(関数)の引数や戻り値でしか受け渡ししないから変数は隠蔽しないことは無いか
314 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:27:20.11 ID:WjARqIhg0.net] >>307 ぶっちゃけPropertyGetだけでいいです、他のことはやらなくていいです
315 名前:デフォルトの名無しさん [2021/04/20(火) 18:45:51.60 ID:aQV8TqKv0.net] 変数を隠蔽しておけばgetter・setterを必ず通るからそこさえ監視しておけば後を追える 変数丸出しだとどこから触られるかわからないのでデバッグが死ぬほど大変になる
316 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:02:40.74 ID:grfVULwwa.net] みんなが使うのはパブリック 自分だけで使いたいときはプライベート XとかY,Zなんかはプライベートにしましょう
317 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:16:00.04 ID:grfVULwwa.net] たんじゅんに プライベートなら3文字以下 パブリックは5文字以上 そう決めておけばよいよ
318 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 20:06:43.69 ID:f6iXtgoua.net] >>314 デバッグなんかやんないくせに
319 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:17:43.05 ID:teqpRJSw0.net] 人の書いたコードなんて読めない 自分で書いても1ヶ月後には読めない
320 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:32:16.88 ID:N2s7rCY20.net] >>318 人が書いたコードは兎も角 自分の書いたコードが読めないのはちょっとね 上からつらつらと書くんじゃなくて 小さな部品から作って 組み合わせて大きな部品を作って 更に組み合わせて・・・みたいに書くと 分かり易いコードを書けるよ 逆に誰が読んでも分かり易いコードが 書けるようになったらもうすぐVBA卒業だよ
321 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:33:10.03 ID:grfVULwwa.net] 文章のきほんは5w1H
322 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:03:03.35 ID:VYKRrHWq0.net] 現場のためにマクロ作ってて 性能確認は現場に投げてるけど どういう処理をしてるとか一切考慮してなくて正常な処理をバグ言われてちょっと辛い わかる人いる?
323 名前:デフォルトの名無しさん [2021/04/21(水) 00:28:41.53 ID:mZ1GtAH60.net] わかる。仕様も確定できない馬鹿だと。
324 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:48:54.24 ID:VYKRrHWq0.net] すごく突っ込みたいけどかなーり年上のおじいちゃんばっかでちょっと言いづらかったり ありがとう、ちょっと楽になった 明日ガツンと言ってやる(笑)
325 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 02:31:17.44 ID:QPNAyMuU0.net] >>321 わからんな コミュニケーション不足なだけだろ
326 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 04:00:51.54 ID:KhV9jsbh0.net] 正常な処理なら伝えりゃいいだけだろ MsgBox出すなり、シートに書いとくなり、口で言うなりして
327 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 11:09:16.06 ID:aZ4kV5qwa.net] わからんものを説明するときは5w1hでよいから 聞いているほうも分かった気になる
328 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:00:56.40 ID:TWzI1JIsM.net] エラーメッセージ出そうが絵本みたいなマニュアル作ろうが「ちゃんと動かないぞ!ポンコツめ!」って騒ぐオヤジがおる。んでよくよく聞いてみたらメッセージは読まずに閉じるわマニュアルは開くことすらしてねぇわ日付入力しろって書いてある項目に「多分5/10」とか書いてくれちゃうわであぁ何やっても無駄な時は無駄なんだなぁってなった事が何度もある
329 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:37:02.29 ID:BXHy+8up0.net] >>327 直接お客さんとやり取りしてるの? そうで無ければ上司か島のリーダーさんに 中間に入ってもらえば? もし直接お客さんとやり取りしているなら そもそもプログラマーとお客さんが 窓口も介さず直接やり取りを行う 形態自体に問題があると思うけど リーダーさんとか上司に相談するべき もっとも、自分がその窓口ですと言うのなら 最初っからどこをどうして欲しいか よーく聞いてから作る方がいい。 どうせ用件定義書なんて存在して いないんでしょ?
330 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 14:00:48.01 ID:aZ4kV5qwa.net] おいおい、エクセルのマクロぐらいで定義書はつくらんだろ ふつうはマクロができてからしようが決まるから
331 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:35:07.95 ID:Gd/0Jck0M.net] >>327 さすがにIsDateくらい使おうぜ
332 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:53:28.95 ID:k6MIIAN/r.net] 年配のジジイ騙して金取れるなら今の体制維持も考慮すべき
333 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 18:25:58.81 ID:2kwhHx0qM.net] >>328 上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ 今まで手書きでやってたのを電子化したかったんだと 要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが >>330 流石に動作前に入力のエラーチェックはかけてるさ それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ
334 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:16:43.30 ID:aZ4kV5qwa.net] 中抜きの現場をそのまま見ているような 人の入力チェックはけっこうノウハウいるのね
335 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:18:54.99 ID:aZ4kV5qwa.net] 進捗管理ツールてまともな奴はみたことがない
336 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 20:16:57.95 ID:ukt/rEUCa.net] 文句いわれた程度で逆ギレかやっぱゆとりだな
337 名前:デフォルトの名無しさん [2021/04/21(水) 20:18:22.64 ID:mZ1GtAH60.net] >>332 やっぱり馬鹿か
338 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 21:08:21.14 ID:BXHy+8up0.net] >>332 なるほど大体状況は理解出来た まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは 今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな? 下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて 君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。 そのおっちゃんはボロくそに言ったかも知れないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。
339 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 07:33:17.38 ID:7heM3Ej5M.net] まあVBAじゃなくとも自分が便利だと思っている価値観を人に理解してもらうのは難しい
340 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 09:34:46.13 ID:gwtiqwMsM.net] >>329 仕様書はどういう形式で作るかによる マクロも仕様書に載せるとルール付けしたら必要になる
341 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 12:44:53.98 ID:hcaPQHcf0.net] 自分の給料がどこから来るのかを考えれば適当な対応はできないとおもうが
342 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:31:38.77 ID:voAAUW4i0.net] VBAでは非0は真として扱われるということでいいですか?
343 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:54:34.03 ID:aG329xgw0.net] >>341 型による
344 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:05:18.29 ID:voAAUW4i0.net] >>342 整数です
345 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:08:01.13 ID:voAAUW4i0.net] あーけど エラー値も判定の対象になるかもです
346 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:25:55.35 ID:voAAUW4i0.net] ごめんなさい回りくどい質問せずに 直球で質問すると if instr(str1,str2)>0 then の>0って要らなくないか?ってことです
347 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:47:47.49 ID:aG329xgw0.net] >>345 やめとけ。まずInstrで何が返ってくるのか確認するんだ officetanaka.net/excel/vba/function/instr.htm NULLが入って来ることもあるからLEN関数で囲む感じになるのか? どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい そんなこと全般に渡ってやってたら 1月後には自分が作ったソースが読めなくなるぞ
348 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:10:26.59 ID:+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 こうしておく、終電に間に合うぞ
349 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:52:34.43 ID:UidQzhn6H.net] >>347 演算子や論理式は、何を判定したいかに合わせて使い分けろ そしてコメントを書け
350 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 21:01:52.31 ID:hn+92ycNd.net] 理系文系家系関係あるかそれ
351 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:02:56.56 ID:vfns6Sdda.net] VBAでは問題ないのだろうけど、TRUE をイコールで判定するのはどうも…
352 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:11:41.16 ID:voAAUW4i0.net] ありがとうございます 素直に省略せずに比較演算子を使うことにします
353 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 01:03:06.83 ID:ftZ+9Vdga.net] >>349 体育会
354 名前:系もついか [] [ここ壊れてます]
355 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 04:16:22.24 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:12:18.96 ID:Rqoeq7ma0.net] 話の主旨が分からん 代入じゃないんだから「==」にしたいって話? それならBooleanは関係ないよな…
357 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:41:22.55 ID:IAv7U8Ah0.net] >>354 すまん。 最初Integerで書こうかなとも思ったんだけど それだと本当にエラーにならないか自信がなかったんだ。
358 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:51:27.06 ID:IAv7U8Ah0.net] 手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと A = B == C; みたいな書き方になったりするのかな ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね
359 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:24:58.47 ID:TaQs1RgsH.net] それは文法の話であって論理(式)の話ではないな 途中で混ざってすり変わってる
360 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:27:12.51 ID:P8K+Jhr50.net] 5
361 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:40:22.74 ID:TaQs1RgsH.net] a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど 手を抜かずに式を分けたりカッコを付ければいいだけ コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務 すべて代入したい時 b=c a=b 比較したい時 a=(b=c)
362 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 07:36:07.75 ID:F+E5VVCoa.net] プログラム上の論理式は2値論理がほとんどだから じっさいは仕様によっていくらでも沢山あるからあるから そういうのは丁寧にコメントをいくしかない
363 名前:350 mailto:sage [2021/04/23(金) 09:30:59.30 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:32:37.82 ID:ze7VlHimM.net] >>359 > 比較したい時 > a=(b=c) それは… > a=b=cがすべて代入になる言語 だと、結局代入になるからあまり意味はないよ
365 名前:350 mailto:sage [2021/04/23(金) 09:32:48.97 ID:fSz9RP/oa.net] 間違ってたらごめんなさい
366 名前:350 mailto:sage [2021/04/23(金) 09:35:24.69 ID:fSz9RP/oa.net] a = b = c = 0 で、a、b、c すべてに 0 を代入したいとか
367 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:46:20.67 ID:IAv7U8Ah0.net] >>363 それで合ってるよ ちなみに-1なのは変数の内容を ビットとして見たとき全て立っていると 言うことの名残りだって 昔このスレの誰かが言ってた もっとも今内部的にPコードで ビットがどれか立っていればって 判断しているかは知らんけど
368 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:48:01.57 ID:TaQs1RgsH.net] VBやVBAだと0だけがfalse、それ以外はみんなtrueとみなされる たとえば a = 100 If a Then だとaはtrueになってIfの中が実行される
369 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:40:15.83 ID:F+E5VVCoa.net] 2値論理はむかし60年から70年台のワイヤーロジック時代にもて囃されたけど もう令和なんだし、古すぎるよね 80歳のおじいさんならともかく 若い人は使わないようにしましょ
370 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:45:24.75 ID:F+E5VVCoa.net] リレーやSWを組み合わせてコンピュータをつくろう そんなチャレンジャーはいるかな
371 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 14:08:52.13 ID:tTrKrHtH0.net] Falseが0とかいうのは正確には正しくない Falseを数値として評価すると0というのが正しくて 暗黙の変換を無視して話すとおかしなことになるぞ Trueが0以外というのはもっと間違ってて Trueは数値として評価すると-1 0以外の数値をBooleanとして評価するとTrueというのが正しい 型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが まあ今更その仕様にどうこう言ってもなぁ
372 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 14:38:37.17 ID:fkUQFj8fa.net] 結局のところ3ヶ月後の自分がコードの理解ができるかどうかってところよね
373 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 19:44:06.36 ID:8NALutx50.net] 別の奴が新しいの作ってるに1ガバチョ
374 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 21:55:04.78 ID:TCRfyG2B0.net] VBAで書くようなコードは変数名をちゃんと書いておけば大体問題ないよ 質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・ VBAってプログラミングの入口になる事が多いので、 妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、 バカみたいに基本に忠実かつ丁寧にするのがいいと思います。
375 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 21:58:49.34 ID:g1z9C06A0.net] >>370 至言だよな。
376 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 22:02:08.91 ID:g1z9C06A0.net] >>372 w 仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに If c = r/2 then cc = r/2 rr = r/4 End If みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも 説明なくて読む気になれなかった。
377 名前:デフォルトの名無しさん [2021/04/23(金) 22:29:27.77 ID:lNHxMJRv0.net] 色々なデータを引っ張ってきて、加工してピボット作って集計して・・・結局使ってねー! ってコードを見た時はずっこけた 改修前になにかで使ってたのかもしれないけど
378 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 01:19:16.60 ID:zm0BIqCc0.net] 配列を引数にしたときに関数側でVariant()で受け取れないのは何故? Variantカッコなしなら問題ないんだけど理屈が分からない
379 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 02:14:07.08 ID:4BGM8nym0.net] >>294 カワいい〜 どのコが好みなのよ?
380 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:12:03.15 ID:nm6+mfpAa.net] >>370 いいね、 他人がつくったやつを動かんから直してくれ、のほうが多いもんな でも、直してくれというのはユーザーが居るのだから需要は確実だよな
381 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:30:08.06 ID:nm6+mfpAa.net] だから他人のつくったソフトを治すのがけっこう好き
382 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:59:02.95 ID:hh64S9E70.net] 俺は嫌い 大体人のもの直せって話が降ってくるときは 他の人が見た後で、ぐっちゃぐちゃで どんだけスパゲティが好きなんだよ、 お前はこの関数に何をやらせたかったんだよ! みたいのばっかり そして大概作り直した方が早い
383 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:29:33.79 ID:B50KhnoE0.net] 早いというか素直に作れる
384 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:30:19.42 ID:y3ko2vbIM.net] >>380 おバカ自慢は要らない
385 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:44:22.09 ID:nm6+mfpAa.net] www それをバージョンアップと言うんだよ
386 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 14:07:12.02 ID:K1BlKgeMH.net] 言わない、かな
387 名前:デフォルトの名無しさん [2021/04/24(土) 16:44:37.66 ID:0Etp2+DY0.net] >>380 スパゲティっていうのはあんたが思っているようなレベルじゃないよ。 GoTo文で前のループのif文の中に飛んだりするのがスパゲティで、いまの時代は解析困難なコードはほぼない。
388 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 16:54:39.75 ID:hh64S9E70.net] 後、稀にあるのが 頭にOption Scriptを書かずに変数宣言で型を付けない奴 はぁ?VBScriptですか?JavaScriptですか? バカなの?死ぬの? ってなるのもある 後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど 変数宣言をIfやFor文の中にその括りで書く人 ああ、何かのObject指向言語やってたのね とはなるけど、その場合あまりスパゲティソースになっていることが少ないので ある意味少し安心出来る。 後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴 これは比較的小さいし面白いことが多いから逆にウエルカムのパターン まず変数名や関数名が日本語の場合が多い。 まぁこれは別にいい。いや、良くはないけど見てて分かるし。 ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる
389 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 17:10:21.36 ID:hh64S9E70.net] >>385 そこは認識の違いだね まぁ別の言語もやってるせいかも知れないけど 俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる 俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして 既に破綻していることを意味している。 その部分は完全に作り直しにするわ。
390 名前:デフォルトの名無しさん [2021/04/24(土) 20:41:03.69 ID:0Etp2+DY0.net] そんなレベルじゃ、仕事にならないだろ。
391 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 21:36:02.54 ID:rN7nWBsMd.net] 一身上の都合によりIfやForやGoto以下でワザとDimを書く場合もご察しください
392 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:10:18.46 ID:S/MxMxKT0.net] vbaやり始めてから世界が変わった 正直関数じゃマジで簡単なの以外はどうにもならんし 下手に複雑な式作っても気まぐれですぐ消されるし
393 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:26:59.54 ID:4BGM8nym0.net] そして嫌われるし
394 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 00:02:34.42 ID:trooC9Gj0.net] 特にすごいのが他のアプリの操作機能 今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む その間することないからスマホいじるか昼食中に動かしても良い エクセル神すぎん?
395 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 00:03:25.63 ID:trooC9Gj0.net] ごめん誤字 今まで月に4時間へばりつかないといけなかった作業が40分で済む
396 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 01:50:00.98 ID:RbwSHn/Ua.net] 可読性ゼロの複雑な関数書いて悦に入ってるヤツは無能
397 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 06:48:34.57 ID:rqvjO/ad0.net] 本当の地獄はこれから
398 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 09:13:58.07 ID: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
399 名前:, Month:=mm, Day:=dd) End With End Sub 自動でB2の日付が変更するようにしたいのですが どうしたらいいかわかりません ActivateではなくChangrイベントだと思いますが どこにどのように記述したらいいのでしょうか? ここの先生たちにいつもお世話になってます 初心者にご教授してください [] [ここ壊れてます]
400 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 09:26:59.35 ID:4pLy3lS70.net] ワークシートのDATE関数が手っ取り早い
401 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:00:44.54 ID:iVVOnnBO0.net] そもそも文字列を即日付に変換するぐらいなら最初から日付を入力するようにしてたほうが面倒くさくなくていいと思うが
402 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:04:58.97 ID:CqRWqB530.net] DATE関数? =DATE(A1,A2,A3) ↑これですか? やってみたのですが、なぜか自動計算されないときがあったので ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ 日付1から日付2までの期間のすべての日付をD1〜D999に表示したいのですが 初心者過ぎてむずかしいです
403 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:15:36.34 ID:eytlE9OXa.net] >>399 閏年が大変だな
404 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:23:41.87 ID:CqRWqB530.net] D999としてますが実際はD7ぐらいしかつかわないので 閏年は考慮しなくても大丈夫です
405 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:27:00.72 ID: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 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:28:07.28 ID:trooC9Gj0.net] あ、ごめんこれ違うわ
407 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:32:09.85 ID:trooC9Gj0.net] ユーザーフォームは経由は処理が面倒だしエクセルいま手元にないから検証が俺には無理だわ ただのシート経由ならまだ行けるけど
408 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:36:16.85 ID:trooC9Gj0.net] あとB2への処理がすでに日付と月の入力で重複しとるやん どうしろと 初心者ならユーザーフォームなんてクソ面倒なもの 使わないほうがいいと思うけど
409 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:39:05.26 ID:4pLy3lS70.net] >>399 とりあえずこんな感じかなあ 変数宣言は省略 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For day = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = day Next d
410 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:40:46.57 ID:4pLy3lS70.net] ↑ Next d × Next day ○
411 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:42:21.10 ID:trooC9Gj0.net] For d = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = d Next d
412 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:49:18.11 ID:trooC9Gj0.net] 修正 columns("d").clearcontents 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For d = 日付1 To 日付2 R = R + 1 Cells(R , "D").Value = d Next d
413 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:58:25.82 ID:CqRWqB530.net] >>406 アドバイスありがとうございます! 初心者なのですが業務上ユーザーフォームを使わなければならなくて(泣 Private Sub Worksheet_Change(ByVal Target As Range) Dim 日付1 As Integer, 日付2 As Integer 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For day = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = day Next d End Sub ↑こんな感じでしょうか?初心者すぎて変数宣言とかむずかしいです
414 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:09:05.98 ID:trooC9Gj0.net] まずあの上の命令はWorksheet changeじゃなくてユーザーフォームに書き込む ユーザーフォームを作らないといけないけど、適当に欄作って その空欄へ a1からc2の内容をすべて転記しないといせない ユーザーフォームの変更があったら逆にa1-c2へ反映 その上で入力用のユーザーフォームをどうにかして表示するところからスタートだね 絶対面倒くさい
415 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:14:02.50 ID:CqRWqB530.net] ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ 日付1から日付2までの期間のすべての日付をD1〜D7に表示したいのですが 初心者過ぎてむずかしいです ↑ユーザーフォーム経由じゃなくても 上記のようなエクセル表を作りたいのですが 簡単な方法ありますか?
416 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:14:40.82 ID:4pLy3lS70.net] >>410 全部Long型で宣言しないと あとはこれも宣言する Dim day As Long Dim R As Long そしてNext dayに直す
417 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:16:40.69 ID:trooC9Gj0.net] 変数名がdayだとvbaの標準命令のday(シリアル値)とかぶるからエラー起こさない?
418 名前:350 mailto:sage [2021/04/25(日) 11:25:35.70 ID:kagSPvTda.net] 予約語じゃなく関数名だから大丈夫じゃないかな ただ、関数を書いたときに頭文字が小文字になったり嫌だから避けるかな
419 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:39:20.76 ID:4pLy3lS70.net] >>414 あーそういう心配もあるのね 分かりやすく書いたつもりなんだけど
420 名前:350 mailto:sage [2021/04/25(日) 11:40:49.20 ID:kagSPvTda.net] 試してみると、同一スコープ内だと Dim day As Long day = VBA.day(Now()) Debug.Print day のように関数名を修飾しないとでした 当たり前か
421 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:09:23.12 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) Dim 日付1 As Long Integer, 日付2 As Integer 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For day = 日付1 To 日付2 Dim R As Long R = R + 1 Cell(R , "D").Value = day Next day End Sub こんな感じでしょうか?
422 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:12:35.21 ID:eytlE9OXa.net] 変数に日付1とかやるならdayも日付でよくね
423 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:36:35.37 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) Dim 日付1 As Long Integer, 日付2 As Integer 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For day = 日付1 To 日付2 Dim R As Long R = R + 1 Cell(R , "D").Value = day Next day End Sub Changeしたいシートに記述してみたんですけど構文エラーになりました
424 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:41:57.46 ID:trooC9Gj0.net] 適当にってのは自分で好きな変数に書き換えろってことだぞ… あとapplication.enableevents=falseにしないと無限ループになるぞ 処理後はtrue あとdimをループの中に入れないで 詳しくはググって
425 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:43:38.04 ID:trooC9Gj0.net] あと If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub こういうようなのを冒頭に入れないと、どこに何を入れても命令が実行されるから遅くなる
426 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:59:50.89 ID:kagSPvTda.net] 結果として上手くいっているのかもしれないけど、 R がループ内で宣言されていると、毎回初期化を期待しているみたいでイヤですね この場合、R の宣言はプロシジャの先頭にあるものとみなされるのだろうけど
427 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:05:39.55 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) application.enableevents=false If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub Dim 日付1 As Long Integer, 日付2 As Integer 日付1 = Datesirial(Long) 日付2 = Datesirial(Long) For day = 日付1 To 日付2 Dim R As Long R = R + 1 Cell(R , "D").Value = day Next day End Sub ↑こんな感じでしょうか? 初心者すぎてすいません(汗
428 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:12:30.82 ID:trooC9Gj0.net] エナブルイベントの場所が違う exti subのあとにエナブル入れるべきだし 命令終了後にエナブルイベントをtrueにしないとチェンジイベントが実行されなくなる dateserialの構文はそもそも(変数年、変数月、変数日) ロングとかいう変数型をぶちこまれても困っちゃうのでは いっそダイレクトに日付1=(range("a1"),range("b1"),range("c1")) とかにしてもいいかもね とりあえず命令一個一個を自分で調べてから実行しないと身にならないよ
429 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:16:06.52 ID:trooC9Gj0.net] 間違えた 日付1=dateserial(range("a1"),range("b1"),range("c1")) そもそもcellはスペルミスだからcellsじゃないと実行されないと思う Cellsなどの命令は頭文字が大文字、残りは少文字になるはずだから、そうならないならスペルミスを疑ったほうが良い
430 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:37:02.20 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub application.enableevents=false Dim 日付1 As Long Integer, 日付2 As Integer 日付1 = dateserial(range("a1"),range("b1"),range("c1")) 日付2 = dateserial(range("a2"),range("b2"),range("c2")) For day = 日付1 To 日付2 Dim R As Long R = R + 1 Cell(R , "D").Value = day Next day End Sub こんな感じでしょうか? エナブルイベントについてググってみます
431 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:39:40.44 ID:trooC9Gj0.net] application.enableevents=trueをさいごにつけてくれ あとdim r as longの宣言は日付と一緒におこなって
432 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:44:43.40 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub application.enableevents=false Dim 日付1 As Long Integer, 日付2 As Integer 日付1 = dateserial(range("a1"),range("b1"),range("c1")) 日付2 = dateserial(range("a2"),range("b2"),range("c2")) For day = 日付1 To 日付2 Dim R As Long R = R + 1 Cell(R , "D").Value = day Next day application.enableevents=true End Sub >>あとdim r as longの宣言は日付と一緒におこなって ↑まったくわかりません(泣
433 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 14:00:05.29 ID:trooC9Gj0.net] 変数宣言の意味がわからないなら dim系の命令はいっそ全部消しても良いかもね よくみたら Dim 日付1 As Long Integer, 日付2 As Integer ロングインテガーとかいうわけわからん型にしてるし
434 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 14:15:56.57 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub application.enableevents=false Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1")) Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2")) End Sub こんな感じでしょうか?
435 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 14:43:47.53 ID:trooC9Gj0.net] なんでループまで消した!
436 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 14:48:07.76 ID:CqRWqB530.net] Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub application.enableevents=false Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1")) Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2")) R = R + 1 Cell(R , "D").Value = day Next day End Sub こんな感じでしょうか?
437 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:14:07.43 ID:c8qfwm7na.net] どうせカッコが全角とかじゃね
438 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:22:01.39 ID:trooC9Gj0.net] あーもう Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub application.enableevents=false 日付1 = dateserial(range("a1"),range("b1"),range("c1")) 日付2 = dateserial(range("a2"),range("b2"),range("c2")) For 日付 = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = 日付 Next application.enableevents=true End Sub
439 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:24:13.50 ID:trooC9Gj0.net] 間違えた Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub columns("d").clearcontents application.enableevents=false 日付1 = dateserial(range("a1"),range("b1"),range("c1")) 日付2 = dateserial(range("a2"),range("b2"),range("c2")) For 日付 = 日付1 To 日付2 R = R + 1 Cells(R , "D") = 日付 Next application.enableevents=true End Sub
440 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:32:25.96 ID:CqRWqB530.net] >>436 すごい!! できました! コードを見て 私がが2ヶ月かかっても出来ないわけですね こんなむずかしいことに挑戦していたなんて・・・ これからも勉強していつかは人に教えれるようになりたいです。 感謝!!
441 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:36:23.25 ID:xxLFjq7K0.net] いつかじゃなくて今すぐ人に教えられるように理解しろ
442 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:37:54.87 ID:CqRWqB530.net] >>438 > いつかじゃなくて今すぐ人に教えられるように理解しろ ↑無理
443 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:53:19.26 ID:K6WUBqIf0.net] なんでいつもそんなに上から目線でマウント取ってくるの? 人格破綻者なの??
444 名前:デフォルトの名無しさん [2021/04/25(日) 18:16:22.33 ID:vAt0cvBk0.net] いつものあいつだろ
445 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 18:20:31.60 ID:nATm0Zraa.net] なになに役人のつくる書類よりはよほどまし 18ページ手前に書き込む内容が 3ページ後にアドレスをみなから手計算しなければならん おなじページに書けないのか こんなのが延々 50ページぐらい続く ひどいスパゲッテイだよ
446 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 18:33:35.35 ID:nATm0Zraa.net] 確定申告がこんなひといスパゲッテイだったとは
447 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 18:36:11.53 ID:rqvjO/ad0.net] 上から目線でマウントとる人は人格破綻者なのかw
448 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 21:25:32.74 ID:n+Zq8N/Kd.net] >>386 流石に多少やってる奴なら頭に書くのがそれじゃないと知ってる筈だが。
449 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 23:44:44.33 ID:B0d72kDU0.net] >>445 すまない 良く読んだら Option Scriptになってるな Option Explicitの間違いだ
450 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 01:31:30.42 ID:0lQeMWYV0.net] 牧野ここにも出没してんか? 暇なのか?あ?
451 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 06:59:23.61 ID:lovLRBcK0.net] だっさw
452 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 16:06:49.39 ID:0lQeMWYV0.net] 牧野の人気に嫉妬してるからよ
453 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 16:38:43.84 ID:g9sbyhzRa.net] どなたかGetOpenFilenameでカレントディレクトリが変更されるの何とかできませんか? 構造体はさっぱり分からんのです
454 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 17:20:54.81 ID:z51HLtPU0.net] 元のアクティブブックを変数にして 戻せばいいだけだろう どうせブック複数いじるなら変数のが便利だし
455 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 17:49:31.38 ID:g9sbyhzRa.net] >>450 ? なら戻しても間に合わんのです ダイアログの初期フォルダを指定したいのに、なぜかカレントディレクトリが勝手に変更されるみたいなんですね すみません舌ったらずでした
456 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 17:52:36.88 ID:Fs15ZcA/0.net] これ追加すりゃいいんじゃないの? ChDir ThisWorkbook.Path 自ブックのパスがいやなら 設定用シートでも作っといて そこに参照したいパス書いといて それをChDirに設定しとけば?
457 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 18:05:41.03 ID:g9sbyhzRa.net] いや、それがダメなんですよね chdirで設定したあとGetOpenFilenameを実行するとカレントディレクトリが変わって、で初期フォルダがあらぬ所に設定される 直前直後でdebug.print curdir入れて確認してるから、間違いなくGetOpenFilenameの段階で変更されてる……と思う? ユーザーフォーム上に置いて繰り返し実行してるけど、どうやら1回目に開いたダイアログを変更すると、変更先のディレクトリを覚えて、次から勝手にそこに変えてくれているみたい
458 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 18:10:37.42 ID:qBKi4u1A0.net] それネットワークドライブ?
459 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 18:15:43.70 ID:g9sbyhzRa.net] いや、Cです
460 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 18:27:36.92 ID:QRSOMQKpa.net] chdirは古いコマンドだから、なにかエラー出しているのかも
461 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 18:58:56.85 ID:+pOfqz7u0.net] カレントディレクトリを復元する際は、ChDriveとChDirをちゃんと両方やれよ
462 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 19:19:25.15 ID:/WVOYzSd0.net] 問題がよくわからん GetOpenFilename実行後にカレントディレクトリが変更されるって話なのか? だったら実行後に戻せって話 GetOpenFilenameでカレントが変更されるのはヘルプにも明示された仕様だからどうしようもない GetOpenFilenameの初期値がカレントディレクトリにならんって話なのか? だったらまずコード曝せ
463 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 21:18:48.90 ID:Qb9oKWtLd.net] ステップ実行でChDirとかGetOpenFilenameの引数を全部チェックしたか?
464 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 22:36:46.66 ID:lovLRBcK0.net] 今の子はもうカレントディレクトリ自体が謎仕様なのか
465 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 23:20:39.12 ID:xr7wJCbA0.net] >>376 だけど実引数がVariant型の参照渡しなら仮引数はカッコ付きのVariant型にできるのね 理由がよく分からないけど 配列のVariant型を引数にしたときの指定方法をパターン化したいんだけど全くわからん
466 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 23:57:08.69 ID:+pOfqz7u0.net] >>462 配列は配列の参照で受け渡すことが基本で、それはVariant型も同じ。 ただしVariant型は配列を格納できる。 Variant型の配列という意味ではなく、ひとつのVariant型の変数の中に 配列を格納できる。そこから考えてみたらいいと思うよ。
467 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 00:36:34.29 ID:9wjO2iUR0.net] >>463 >Variant型の配列という意味ではなく、ひとつのVariant型の変数の中に >配列を格納できる。 この発想は無かった、もう少し考えてみます ありがとう
468 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 01:04:32.91 ID:mgRy5CVU0.net] 中身のない()つけたら動的と勘違いするだろ
469 名前:デフォルトの名無しさん mailto:Sage [2021/04/27(火) 10:18:38.80 ID:5d+cCuuaa.net] >>459 2つ目と3つ目 ごめんなさい色々やって自決しました。変更先のフォルダ名にセミコロンが入ってたのがまずかったみたい。 どうしようもないので今回は諦めて違うことをします。お手数おかけしました。
470 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 10:32:17.76 ID:KMwaQK/30.net] >466 自決ってお前w
471 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 10:51:44.25 ID:KMwaQK/30.net] >>466 ちょっと試したけど、たしかにカレントディレクトリにセミコロンとか入ってると そこが初期位置にならんな カレントディレクトリを8.3形式で指定したらイケルっぽいぞ いまさら直る気がせんが気になるならマイクロソフトに報告してみ
472 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 19:06:09.30 ID:Xk0sjNEua.net] ここではもうとっくにエラー429については議論され尽くしましたか? 初心者なのですが、file system objectを読もうとしたらアクティブXがそれはできませんと出て、どうしてよいやら
473 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 19:49:18.21 ID:vIQbS3UC0.net] そんな用語使う初心者がいるか!
474 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 20:05:11.09 ID:Xk0sjNEua.net] え?
475 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 20:33:52.91 ID:Fi83YJTP0.net] な?
476 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 20:40:43.33 ID:ecHnxSib0.net] り?
477 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 20:45:59.35 ID:UpvbOzN+0.net] ほんぎゅろげええええええええ
478 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 23:48:49.38 ID:9wjO2iURH.net] 通常の=での代入でもVariantの()で宣言した変数には配列が入らないんだね Range型の複数セルが代入できるので勘違いしてた Range型が返す配列はVariant型だからできるっぽい? Variant型の()付き変数は配列じゃなければどんな意味があるのか?
479 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 00:12:42.15 ID:wZLkUEzX0.net] どんだけこだわるのよ
480 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 00:34:41.28 ID:oMne/ugv0.net] 自分は好き勝手やってるのに俺らだけ奴隷労働しろと ちょっとでも目立つのが気に入らんと
481 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 02:49:41.12 ID:R/cV679Q0.net] 他人の事情なんか配慮しないのがデキるプログラマー
482 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 03:25:04.10 ID:yYRagbWx0.net] >>475 Variantの()で宣言した変数はVariant配列型の変数で、Valueの戻り値もちゃんと代入できるよ ただし複数セルを参照しててValueが二次元配列を返すときに限る 一つのセルだけしか参照してない場合は配列を返さないので型不一致になる
483 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 05:59:25.47 ID:OKDjIMLh0.net] そういやvbaの配列は、 ・配列じゃない値 ・countが1の配列 これが微妙に違っていた気がする
484 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 07:14:02.38 ID:X/WADpVMH.net] >>480 何が言いたいのかわからん ほかの言語でも単純な変数と要素が1個の配列変数は厳密に区別されるのが普通だし
485 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 12:09:24.67 ID:Jq2bf8XLa.net] 配列にはいれっ
486 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 13:41:38.64 ID:K3oXR9qNa.net] 変数を反芻
487 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 14:02:46.34 ID:GqNxFOs40.net] Excelのオブジェクトを操作したときの動きからVBAの仕様を推測して 混乱してるように見えるな。質問スレじゃなくて、VBAについて教えて くれる人や本やサイトを探した方がいいんじゃないか。
488 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:07:20.75 ID:fsi6lQwja.net] ベテランの初心者がきました よろぴく
489 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:31:32.06 ID:xYFjFFNHa.net] エラー429は自力で解決したのでもういいです。
490 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:41:38.21 ID:xYFjFFNHa.net] 理由はただの書き間違いでした。
491 名前:デフォルトの名無しさん [2021/04/28(水) 19:45:56.67 ID:Sz6ocakQM.net] 429 = 死肉
492 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 23:01:14.39 ID:gO4+NyeW0.net] >>479 Variant型の配列っていうのがあるんだね 配列でないVariant型ならデータが入っていればVariant型ではない(代入した型に変換される) だからデータが入っているVariant型の配列って無いと思ってた これ以上は切りが無くなりそうなので止めます ありがとう
493 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 02:21:41.91 ID:EFUE1W1F0.net] 最初から配列であることを宣言した場合と、 Variantに配列をぶっこんだ場合は、 区別しないといけない
494 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 03:35:54.80 ID:xPFf86S80.net] Variant型は調べれば調べるほど「???」ってなるから気をつけて VB.Netでは廃止されたくらいの型だから 俺も最初調べててVariant型って内部型とか持ってるし 代入したものの参照でも抱えているだけのものと高を括ってたけど Variant型の配列を作ってある要素には値型、ある要素には参照型を設定して関数の引数に値渡しで渡すと きちんと値型の部分は値が、参照型の部分は参照が渡されるのは少し前にレスした通り そもそも何で配列の値渡しは出来ないのにVariant型に入れると値渡しが出来るような思想で作られているのかも謎。そういうものだと思う他ない。 VBAがObject指向に片足を突っ込んでいるところで止まっているせいか、Objectでもそうでないものも代入出来る型として存在していて使い勝手が良い反面、 コンパイル時に内部型が違う場合でもエラーにならないから実行時に初めてエラーとなって気がついたり、 違う型のものを上書いてしまってエラーとならずに期待した挙動と変わってしまう場合が出て来る恐ろしい型でもある。 Variant型を使うなとは言えないけど 使う際にはその特性と挙動を十分把握していないと、ちょっと何か変わったことをしただけで期待した結果が得られないことになり得るから十分気をつけてね。
495 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 03:54:38.48 ID:xPFf86S80.net] 余談だけど他の言語にも 例えばJavaScriptやC#には変数宣言する際に、型にvarって宣言することがあるけど、これはVariableと言って全然別物で 最初に代入した値の型をJavaScriptでは暗黙的に、C#では型推論で持ち回るものだから、もし、今後そう言った別言語を扱うことがあれば そういうものだと覚えておけば勘違いしなくて済むよ。
496 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:09:50.46 ID:S4zpEuOGH.net] Variant型っていうのはVBAやVBのために作られたわけじゃない もともとWindowクラスが持ってる機能に対して、演算子をオーバーロードした物
497 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:17:04.92 ID:K+5EoiH2M.net] >>491 > VB.Netでは廃止されたくらいの型だから 単にObject型になっただけ 使い勝手が違うのはVB.NETの方が方に厳しいから暗黙の型変換をしなかったりするため
498 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 06:50:30.24 ID:S4zpEuOGH.net] >>494 VariantとObjectは同じような物とか代替品として紹介してるサイトとかあるけど、これはあくまでも初心者向けの説明 実際はまったく違う物なので、個人的にはこうやって説明するのも反対したいところ
499 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:11:32.09 ID:uNZAJPBsM.net] >>495 はあ? 違うと言うならどう違うのか書いてみなよ まさかと思うけどVBAのObjectの話じゃないよな?
500 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:11:42.35 ID:xPFf86S80.net] >>495 そうなんだよね Variantの代わりがObjectだと言われると うーん、まぁ間違っていないとは思うけど 物凄い違和感を感じるよね。 同じものかと言われれば絶対別物と はっきり言うことが出来るけど。
501 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:17:49.07 ID:xPFf86S80.net] >>496 そうだねぇ とりあえずこんなところかねぇ ちなみに、何でも入る魔法の型といえば、C#ではobject型がそれに当たる。しかし、object型とVariant型は同じではない。object型は参照型であり、値型の値を扱うにはボックス化という手順が必要になる。また、参照型である以上、メモリの確保と破棄というオーバーヘッドが必ず付いて回る。しかし、Variant型は整数のような値であっても、オブジェクトへの参照であっても、それをそのまま格納できる。ボックス化やメモリの確保、解放のオーバーヘッドもない。まさに万能の魔法の箱である。 https://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_12/extremecs_12_02.html
502 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:22:43.60 ID:r4t8KOvl0.net] >>493 >演算子をオーバーロードした物 どの演算子? >>498 これってヒープ領域に全部突っ込んでるってこと?
503 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:23:03.00 ID:r4t8KOvl0.net] なわけないか
504 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:25:47.75 ID:iJcHPvsoa.net] VBAとVB.netはまったく別物で比較しようなんて思わない 標準がバリアントなんだからできるだけバリアントを使うべきだし 値渡しの件も、VBAでは値渡しのが原則なんだから 値渡しのオンリーにすべきとおもうけど どうしても参照渡したいならパブリックにするだけ
505 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:36:18.54 ID:xmHZYPrVM.net] >>498 そこまで言うならStructureでVariant相当のものを作ればいいかと >>499 > これってヒープ領域に全部突っ込んでるってこと? そう言うこと
506 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:48:54.45 ID:S4zpEuOGH.net] >>499 算術演算子などで文字列を自動的に数値に変換する部分 >>501 厳密な説明をするなら、Variantは暗黙ではあるけど標準ではない 納得いかない人もいるだろうけど、強いて言うなら標準に近いのはObject型の方 Variant型はWindowクラスからの継承だから、VBでもVBAでも、もっと別の言語でも内部ではまったく同じ物で同じ処理が動いてる 何を使う「べき」かはケースバイケース
507 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 07:55:26.52 ID:r4t8KOvl0.net] >>502 冗談で言ったらマジか まぁオブジェクトは参照になるなら、ヒープ領域云々はそこまで考えなくてもいいか vbaの文字列は文字の配列じゃなく単に値だったから、variantで文字列使いまくると良くない? ※そもそも値じゃなかったらごめん
508 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:01:54.76 ID:xPFf86S80.net] >>503 へぇ VBAやVB6みたいにVariant型みたいなもの 持ってる言語って他にもあるんだ まだ当たったことないなぁ
509 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:12:11.05 ID:iJcHPvsoa.net] VBのときに他の言語がどうこうと長話はじめるのは老害みたいなもの 気をつけたほうがよい
510 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:17:52.33 ID:xPFf86S80.net] 老害だもの みつを
511 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 08:45:33.51 ID:530kL6INd.net] >>505 VBS もしかして知っててわざと試してる?
512 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 09:13:27.94 ID:xPFf86S80.net] >>508 そうかVBSは明示的に型宣言することないから忘れてた
513 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 09:39:50.72 ID:S4zpEuOGH.net] Visual StudioのC++のVariantクラスも構造体の中身はまったく同じ
514 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 12:13:26.48 ID:iJcHPvsoa.net] そうなると VBSにてintの宣言をしたいときはどうなるの
515 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 12:38:49.55 ID:q/beK7t50.net] その辺考慮することでExcelのマクロとしてどんなメリットがあるの?
516 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:12:06.33 ID:KFW9RSkud.net] >>511 不可能
517 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:13:04.28 ID:Z9k/ziJ20.net] よくわからんけど一般的な仕事に使うのに知る必要のある情報じゃなさそう
518 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:16:00.97 ID:KFW9RSkud.net] >>512 Variantは多機能だからプログラミングの負担を減らすことができるけど、メモリ食いだから、たとえば大きい配列が宣言できなかったりする
519 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 16:00:22.26 ID:EFUE1W1F0.net] AccessVBAエキスパートの試験では扱う範囲 ExcelVBAエキスパートでは気にしたくていい 試験はAccessVBAの方が2段くらい難しい もちろんスタンダードの話な
520 名前:デフォルトの名無しさん [2021/04/29(木) 16:53:35.51 ID:aGUEXGqc0.net] エクセルで組んだ表や数式を いつパソコンが壊れても すぐ復元できるよう メモに残しておきたいんですが すでにある内容を HTML文書みたいに文字だけに変換できたりってするんですか?
521 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 17:08:19.64 ID:Z9k/ziJ20.net] 素直にバックアップとるかクラウドで良くないですか
522 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 18:10:50.49 ID:MWXZTeF3a.net] >>517 壊れたパソコンには復元できないよ
523 名前:デフォルトの名無しさん [2021/04/29(木) 18:18:45.59 ID:aGUEXGqc0.net] 再現っていえばいいのかなんといえばいいのか… とりあえずもしもの時のためにレシピ?を残しておきたい
524 名前:デフォルトの名無しさん [2021/04/29(木) 18:24:10.96 ID:aTZmoNVK0.net] .slk マルチプラン形式ならテキストとして読めるぞ
525 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 19:07:29.38 ID:k0BuRVHXa.net] >>515 大きい配列 エクセルのマクロで画像処理している人だよな 1セル1ドットにして輪郭をさがしてる ちょっと感動
526 名前:デフォルトの名無しさん [2021/04/29(木) 19:41:36.50 ID:gMCbhKMx0.net] >>520 バックアップしろよ 馬鹿は帰れ
527 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 19:42:12.84 ID:I+JPieVz0.net] >>517 俺、自分宛にメールしてるわ。 Sub Test() : End Sub って
528 名前:デフォルトの名無しさん [2021/04/29(木) 19:53:50.93 ID:aGUEXGqc0.net] フラッシュメモリーに保存してるけどそれも壊れるかもしれないし
529 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 20:04:58.52 ID:Z9k/ziJ20.net] だからグーグルのクラウドにでも保存しとけよ
530 名前:デフォルトの名無しさん [2021/04/29(木) 21:46:03.77 ID:gMCbhKMx0.net] >>525 馬鹿は帰れ
531 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 21:47:52.03 ID:qBmeMAVZa.net] >>525 VBAより先に勉強すべきことがある
532 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 21:57:15.15 ID:r4t8KOvl0.net] >>514 こういう罠みたいな仕様を事前に目を通しておくと躓く事が少なくなる 一生役に立たん可能性も割とあるけどな
533 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:10:52.82 ID:G7lq05sG0.net] これを短く書きたいのですが、どう書けばいいですか? Range(Cells(r, 1),Cells(r, 10)).Select Range(Selection, Selection.End(xlDown)).Select Selection.CurrentRegion.Borders.LineStyle = xlContinuous
534 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:13:18.87 ID:1H39I5ca0.net] >>520 カセットテープに保存しとけよ
535 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 00:38:44.27 ID:XMOC9xEV0.net] >>530 やりたいことは Range(Cells(r, 1),Cells(r, 10)) ・・・ Range(Cells(r, 11),Cells(r, 20) みたいなこと? 全容を見せてくれたほうが早いと思う。
536 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 02:19:19.76 ID:zq+mlYyf0.net] >>530 やりたいことを言葉で説明した方が速そう
537 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 02:34:26.19 ID:zq+mlYyf0.net] >>493 >もともとWindowクラスが持ってる機能に対して、 これ気になるんですが、何かソースありますか?
538 名前:デフォルトの名無しさん [2021/04/30(金) 02:53:52.43 ID:sRtBXBMU0.net] Excelのマクロをエクセル環境なしに実行したいのですが、 vbsをつかえばExcelは不要ですか?
539 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:01:21.54 ID:XMOC9xEV0.net] variantって共用体なのね データタイプを示すヘッダがあってその後に実体がある https://excel-ubara.com/excelvba4/EXCEL_VBA_422.html
540 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:02:27.11 ID:XMOC9xEV0.net] >>535 vbsってのもある。ファイルの名前の一括変換、辺りならvbsで可能 EXCELのa1セルをb1セルにコピー〜みたいなのはEXCELが必要
541 名前:デフォルトの名無しさん [2021/04/30(金) 03:04:35.08 ID:sRtBXBMU0.net] >>537 すでにあるマクロ名を実行することは vbsだけで、実行する側にExcelがなくても可能ですか?
542 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:23:39.09 ID:zq+mlYyf0.net] vbsは型宣言が出来ない、 VBAで可能なライブラリ参照が出来ない、 暗黙の参照先等の違いがる それらを使用していないコードなら実行出来る可能性がある (要するに簡単にはいかない) 正直「みんな入れてるであろうエクセルで実行できる」っていうただ一つのメリットのみを目的ににして わざわざ使いにくいVBAを仕方なしに許容してるのであって、 エクセル不要ならPythonなりJSなりC#で書くべき
543 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:29:54.28 ID:XMOC9xEV0.net] >>538 内容による vbsとvbaは似て非なるもの、だけど互換性はまぁまぁある vbaをまるっとvbsにコピペして動くものもあれば、手直ししないと動かないもの、絶対に無理なものもある まぁコピーペーストだけで一発で動くのは稀だとは思う。大体動かないだろう また、vbsは無料でwindowsに標準でついているので、あーだこーだ言うよりはやったほうが早い
544 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 03:37:12.82 ID:zq+mlYyf0.net] >>536 貼ってくれたURLのページにある >String型変数のメモリアドレス これ、要するにString型変数の値は参照値って事? 察してはいたけどByval xxx$って嘘じゃん 調べれば調べるほど無茶苦茶な言語だなw ただ先頭に配列長が入ってるのは嬉しいな LEN関数が高速だって事だし、実際に検証したらそうだった これからは文字列の有無はLEN関数を使おう
545 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 04:58:51.13 ID:VHqB9FfdH.net] >>534 MSDNのWin32APIのリファレンス https://docs.microsoft.com/en-us/windows/win32/api/oaidl/ns-oaidl-variant これを見れば、Valiant構造体は共用体の入った構造体が共用体になってることが一目瞭然 VBAからは、初期化の手順を省略(自動化)したりして簡単に使えるようにしてある
546 名前:デフォルトの名無しさん [2021/04/30(金) 06:01:15.47 ID:w8M9C8im0.net] Dim abc As Variant, maxVal Variant abc = Range("A1:A100") ・ ・ ・ maxVal = WorksheetFunction.Max(abc(50 To 80, 1)) これはabc(50 To 80, 1)の部分でコンパイルエラーになりますが、 このように一発で配列内の特定の範囲の値を取得することはできますか? やはりFor〜Nextで回してやらないと駄目でしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 06:19:01.47 ID:VHqB9FfdH.net] >>543 配列のままだとループして調べるしかない 作業用のワークシートに入れてからMAX関数を使えば一発
548 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 07:04:01.89 ID:M0On9wgSM.net] >>541 > 察してはいたけどByval xxx$って嘘じゃん 噓じゃねーよ、Byvalならちゃんとコピーされる(内部的には新規領域確保して内容コピー) > 調べれば調べるほど無茶苦茶な言語だなw お前さんの理解力が足らんだけ
549 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 07:57:01.95 ID:VHqB9FfdH.net] メモリ上で文字列領域の先頭に長さが入ってるのはMicrosoft BASICの伝統 C言語などで使われる\x00で区切る方式だと文字列の中にChr$(&h00)を入れられなくなるので地味に面倒だった
550 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 09:18:44.82 ID:XMOC9xEV0.net] だから、有限なんですね
551 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 09:53:25.08 ID:JEk9gHJMa.net] 改行しろよ、読みにくいだろ
552 名前:デフォルトの名無しさん [2021/04/30(金) 10:28:11.61 ID:8Lrh8uSx0.net] >>544 やはりループで調べるしかないんですね >作業用のワークシート なるほど、アクセスで言うところのワークテーブル的な考えですね ありがとうございました。
553 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 10:56:55.90 ID:S41gzW82a.net] WorksheetFunctionってその名の通りワークシート上の計算をするためのものだから仕方ないわな
554 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:14:51.01 ID:lXELEtlJ0.net] >>543 それはabc(50 To 80, 1)なんていうのがおかしくて maxVal = WorksheetFunction.Max(abc) ならちゃんと動く >>550 WorksheetFunctionは実は配列受け取るものが結構あるんだぜ
555 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:46:28.53 ID:VHqB9FfdH.net] >>551 質問者は配列全体じゃなくて調べる範囲を指定したいんだよ 目的と違う回答してどうすんの
556 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 13:52:18.51 ID:4gSq67JmM.net] 質問者を納得させるのではなく 自分の知識をドヤ顔で披露する場がこのスレ
557 名前:デフォルトの名無しさん [2021/04/30(金) 13:55:12.85 ID:clFaH4DRM.net] 古代BASIC語の使えるやつには想像すらできない構文だな ナウい言語から入るとこんな発想が出来るのか Enumeraterとか作ってもコールバック関数書くのが面倒くさいからどうしようもないよね
558 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 14:11:06.28 ID:lUzIA11U0.net] 10 CONSOLE 0,25,0,1 20 SCRERN 0,0
559 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 14:13:33.94 ID:1H39I5ca0.net] >>552 それはいいすぎ いろんな考えがあって質問者がいろんな回答から判断すればいいだけのこと
560 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 16:19:17.86 ID:W9vsivKyd.net] sheet1のB1が整数ならSheet2のC1 にSheet1のB1の整数をSheet2のC1に 表示し Sheet1のB1が整数でない場合は Sheet2のC1にSheet1のA1の整数を表示 させたいのですが、インデックス範囲エラーになったりして困ってます Numeric関数なのはわかるんですが 標準モジュールに書くのか Sheet1に書くのかわかりません ご教授ください Private Sub Worksheet_Change(ByVal Taget as Range) If IsNumeric(Worksheets("1").Range)
561 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 16:51:06.75 ID:S41gzW82a.net] >>557 シート名(worksheet.name)はどっち? ・sheet1 ・1 それとも1番目のシート?それなら Worksheets(1) だけど
562 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 17:19:44.60 ID:W9vsivKyd.net] Sheet1にコードを書いてます
563 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:10:46.17 ID:qIU2nW870.net] そもそもnumericって整数かどうかじゃなくて 数字かどうかの判定じゃなかったか?
564 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:11:19.57 ID:qIU2nW870.net] あとrangeじゃなくてtargetやろ
565 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:12:09.12 ID:qIU2nW870.net] あっrangeであってたわ range(target.address)かな
566 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:13:35.28 ID:1H39I5ca0.net] >>557 Worksheet_Change これはワークシートに変更があったときに実行する内容を書くので 実行したいワークシートに書くのと、書いたワークシート以外のワークシートの変更は無視する
567 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 19:48:53.26 ID:W9vsivKyd.net] Sheet1のB1の値が変化したらSheet2のC1が変化させたいのでSheet1にコードを書いてチェンジイベントでいいのかな? むずかしいですね
568 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:15:34.30 ID:zq+mlYyf0.net] >>545 値渡しは参照値が渡されるって挙動と矛盾してるだろ その辺の矛盾の解決のためか、 実際に配列は値渡ししかできないように強制されてる
569 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:20:31.83 ID:zq+mlYyf0.net] >>565 値渡しは参照値が渡される ↓ 値渡しは、変数に格納されてるのが参照値(メモリアドレス)なら参照値が渡される
570 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:52:12.56 ID:BfTXTUZEM.net] >>565 元々文字列は内容変わったら領域確保し直したりするから内部的に参照持つのが普通 ByVal は文字列を複製して渡すしByRefは内部的な参照への参照を渡す 何の矛盾もないよ 中途半端に内部的な参照を気にしてもしょうがないよ
571 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:55:44.24 ID:lUzIA11U0.net] >>565 え?そうだっけ? 確か配列は参照渡ししか出来ないから Variant型に突っ込んで渡して 値型のものを渡すようにするんじゃなかったっけ? もっともそれでも参照型のものは参照が渡されるけど。
572 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 22:00:13.74 ID:HAcSh5oY0.net] 誰か教えてほしいんですが、 数字を単純に足すんじゃなくて=+100+200というふうに増えた数字を全部数式に残していくように一つのセルに入れていくやり方ってありますか? 例えば別のシートに100 200 350とあったら 記録用のシートのセルに=100+200+350と飛ばしたいです。 セルの中身見た時に650となってるのではなくて=100+200+350と表示されてほしい
573 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 22:02:58.83 ID:lUzIA11U0.net] >>569 単純にCStrで数字を文字列に変換して繋げばいいだけと思うけどそういう意味じゃない?
574 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:05:04.91 ID:ftoQG8Lta.net] >>564 ふつうに関数でよくないの =IF(B2=int(B2),A2,B2) みたいなの
575 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:07:22.57 ID:ftoQG8Lta.net] >>569 これも式を表示するモードがあったはず
576 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:09:00.86 ID:XMOC9xEV0.net] >>557 sheet1モジュールに書く シート名はs1とs2にしてるのでテキトーに変えて Private Sub Worksheet_Change(ByVal Target As Range) If _ Target.Address <> "$B$1" _ Or Not (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 2).Value main2 = Cells(1, 1).Value If (Int(main) - (main)) = 0 Then Sheets("s2").Cells(1, 3) = main Else Sheets("s2").Cells(1, 3) = Int(main2) End If End Sub
577 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:13:44.15 ID:XMOC9xEV0.net] >>569 地味にやるしかない Sub foo() Cells(3, 1).Formula = "=" & Cells(1, 1).Value & "+" & Cells(2, 1) End Sub 量が多いならfornextかなんかで処理すると良い
578 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:13:57.10 ID:XMOC9xEV0.net] joinほしい
579 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:21:20.34 ID:W9vsivKyd.net] >>573 ありがとうございます! 今外にいるのでお家に帰ったら試して見ます
580 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 23:40:08.54 ID:HAcSh5oY0.net] >>570 そんな感じで大丈夫です >>574 数がかなりあるんでループさせて特定の月の数字を拾うところまではできてたんで、そのやり方試してみます。
581 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 00:46:43.32 ID:zFFwGDhV0.net] CONCATがある
582 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 05:48:25.12 ID:1uksgnWZM.net] >>575 Joinあるやろ 手元にExcelないから試してないけど Cells(3, 1).Formula = "=" & Join(Application.Transpose(Range("A1:C1" ).Value), "+") でいけないかな
583 名前:579 mailto:sage [2021/05/01(土) 06:04:07.19 ID:jbHbRAMYM.net] よく見たら行/列間違えてるわ Cells(3, 1).Formula = "=" & Join(Application.Transpose(Range("A1:A3" ).Value), "+") だな Excel 2019ならVBA使わずに C1: =TEXTJOIN("+", TRUE, "=", A1:A3) でいけるかも
584 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 10:06:17.84 ID:v351dbwI0.net] >>580 例えば元表 コード 200 金額 200 5月 コード 150 金額 300 4月 コード 200 金額 500 5月 コード 150 金額 400 6月 コード 200 金額 50 5月 と並んでたとして、飛ばしたい表に コード200に一致した場合は=200+500+50 コード150 の4月は=300 みたいな感じで月が同じでコードが一致してる場合だけ積み立てていくことってできますか? うまくいかなくて、、
585 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 10:22:39.67 ID:orU8r25h0.net] >>580 別の質問だけど、 Application.Transpose って WorksheetFunction.Transpose の事? ApplicationってついてたらWorksheetFunctionは省略できるの?
586 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:16:18.88 ID:eT9ez6fta.net] こういう処理はピボットの得意分野だとおもう ピボットスレにも聞いてみたらとうかな
587 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:18:22.06 ID:+awRLs9V0.net] ピボットスレってあったっけ?
588 名前:デフォルトの名無しさん [2021/05/01(土) 13:20:57.76 ID:GvoaCTGBM.net] >>582 互換、環境の違い……
589 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 13:30:58.50 ID:eT9ez6fta.net] ピボットを設定して たて列を月 よこ列を単価 合計は "値で合計"にする <はじめは個数で合計>になってる いちばん間違えやすいところ
590 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 14:28:03.48 ID:FxNutXRP0.net] >>573 > >>557 > sheet1モジュールに書く > シート名はs1とs2にしてるのでテキトーに変えて > > > Private Sub Worksheet_Change(ByVal Target As Range) > > If _ > Target.Address <> "$B$1" _ > Or Not (IsNumeric(Target)) _ > Then > Exit Sub > End If > > main = Cells(1, 2).Value > main2 = Cells(1, 1).Value > > If (Int(main) - (main)) = 0 Then > Sheets("s2").Cells(1, 3) = main > Else > Sheets("s2").Cells(1, 3) = Int(main2) > End If > > End Sub あらためて ありがとうございます。 整数なら無視できるようになりました! あとは Sheets("s2").Cells(1, 3) にSheets("s1").Cells(1, 2).Valueが整数じゃなければSheets("s1").Cells(1, 1).Valueが入れば完璧です ちょっと自分でググってみます!もしできないようならまた質問させてください
591 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:00:22.43 ID:FcpS+0KE0.net] >>584 誰か建ててくれると期待してはや数年。。。
592 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:05:23.71 ID:+awRLs9V0.net] PowerQueryスレは建ったんだけど、 https://mevius.5ch.net/test/read.cgi/bsoft/1571540368/ ピボットスレ、建ててみる? 先日、総合相談スレでPowerPivot絡みの質問はあったが。
593 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 15:15:39.62 ID:v351dbwI0.net] >>586 ピボットだと=で積み立てで足していくようにできなくね? 合計しか出てこない
594 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 16:16:38.30 ID:eT9ez6fta.net] あーそうかも やはりピボットスレが立つまで待ちますか
595 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 16:42:05.48 ID:AMC1YaHy0.net] >>581 それは、たとえば、元表にB1&countif(B$1:B1,B1)みたいな作業列を作って 飛ばしたい表に、iferror(index(D:D,match(作業列,コード&column()+1,0)),"") みたいな数式を貼り付けるのではだめですか? 1つのセルに、数式として入っている必要性が、あるのですか?
596 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:05:58.85 ID:AMC1YaHy0.net] >>592 修正、matchの書式も違うし 月も必要なので、B1&E1 を作業列Fに、count(F$1:F1,F1)を作業列Gに入れて 飛ばしたい表のA列はコード、B列は月、C列以降にiferror(index(元表!$D:$D,match($A1&$B1&column()-2,元表!$F:$F,0)),"") こんな感じではだめですか?
597 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:25:51.43 ID:v351dbwI0.net] >>592 合計なら楽なんですが、どうしても=+で数字を積み立てないとダメなんですよね、、 だから数式では解決できない気がします vbaでやるなら配列に詰め込んで最後に結合させるのかなあとか思ってるんですがなかなかいいコードが思い浮かばない、、
598 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:29:33.26 ID:v351dbwI0.net] >>593 ちなみに飛ばしたい表のB列は月というか 月 コード 〜 みたいな形になってて、月は横軸の大項目としてしか存在してないんですよね 色々厄介な作りになってまして、、
599 名前:デフォルトの名無しさん [2021/05/01(土) 17:33:09.92 ID:d9MtRRCh0.net] 知能に障害がある人ばかり質問するようになった感じ
600 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:49:10.58 ID:MA8kI4AW0.net] コロナ自粛でGW中だから暇なんだよ 暇な人に相手して欲しいんだよ
601 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:04:53.11 ID:QtACG4Vk0.net] 知恵袋でやれば良いと思う
602 名前:579 mailto:sage [2021/05/01(土) 18:07:44.96 ID:4GddeLjJM.net] >>581 > みたいな感じで月が同じでコードが一致してる場合だけ積み立てていくことってできますか? 月が同じってどこと同じなの? コードのようにどこかで指定するってこと? とりあえずコードがA列、金額がB列、月がC列に入っているとして Dim 元表 As Sheet: Set 元表 = Range("A1:C10") Dim 金額() As String: ReDim 金額(元表.Row To 元表.Row + 元表.Rows.Count - 1) Dim 書込行 As Long: 書込行 = LBound(金額) Dim 行 As Long For 行 = LBound(金額) To UBound(金額) If Cells(行, "A").Value = コード And Cells(行, "C").Value = 月 Then 金額(書込行) = Cells(行, "B").Value 書込行 = 書込行 + 1 End If Next ReDim Preserve 金額(LBound(金額) To 書込行 - 1) Range("D1").Formula = "=" & Join("+", 金額) みたいな感じでいけると思う >582 ごめん、テキトーにググって書いてるから間違えてるみたいやな Application.WorksheetFunction.Transpose にしといて
603 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:46:01.00 ID:z941MlAe0.net] >>599 最初の型はSheetじゃなくてRangeじゃね あとこの人の言ってるのは普通に文字列としてValueプロパティに式を書き込めばいいような気がするけど 上で語ってる人ってあんま教えに来ないよな
604 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 18:57:24.37 ID:v351dbwI0.net] >>599 試しにやろうとしたら最終行が型不一致でエラーになりました・・
605 名前:579 mailto:sage [2021/05/01(土) 19:57:34.66 ID:jFabojDWM.net] >>600 > 最初の型はSheetじゃなくてRangeじゃね すまん、そうだわ > あとこの人の言ってるのは普通に文字列としてValueプロパティに式を書き込めばいいような気がするけど ちょっと今試せないからやってみてくれ >>601 すまん Range("D1").Formula = "=" & Join(金額, "+") だったわ
606 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 20:06:26.75 ID:v351dbwI0.net] >>602 ありがとうございます。 今度は下から二行目でインデックスの範囲外エラーになりました、、 書込行が1行目だとredim〜のところの書込行-1が0になるからですかね?
607 名前:デフォルトの名無しさん [2021/05/01(土) 22:02:09.39 ID:ueS9oUA3M.net] >>603 自分で考えることくらいしろや、ゆとり
608 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:18:52.25 ID:T1b9C9NF0.net] dim hako() as variant redim hako(ここはデータ数を格納) for i = 0 to 回数 hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value next こんな感じで配列の中にセルの文字入れて行こうとするとエラーになるんですが原因分かる人居たら教えてください 便宜上cellの位置は1,1にしてますけど実際は縦が動いていきます
609 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:41:00.37 ID:/V6pM9G50.net] >>541 > これ、要するにString型変数の値は参照値って事? > 察してはいたけどByval xxx$って嘘じゃん 逆にC知ってると、文字列がプリミティブってのにものすごい 違和感があるよ。「ああ、内部で変換してんだな。そういうものだと 思っておこう」と、自分を納得させる。
610 名前:579 mailto:sage [2021/05/01(土) 22:45:28.00 ID:4GddeLjJM.net] >>603 条件に合うものがないと ReDim 金額(1 To 0) の様になってエラーになる VBAではReDimで空の配列は作れないので条件に合うものがない場合を場合分けして処理するしかない 例えば条件に合うものがない場合はD1を空にするなら最後の2行を Dim 式 As String If LBound(金額) < 書込行 <= Then ReDim Preserve 金額(LBound(金額) To 書込行 - 1) 式 = Join("+", 金額) Else 式 = """""" End If Range("D1").Formula = "=" & 式 とかにすればいい
611 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 22:53:14.11 ID:1m8BqwmN0.net] >>605 >hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value の、 Worksheets("Sheet1").Cells(1,1)が指してる先が数字でないなんてオチはないよね?
612 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:00:47.42 ID:T1b9C9NF0.net] >>608 今見てみたんですが ちゃんと数字を指してました
613 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:06:25.35 ID:v351dbwI0.net] >>607 すごい! ちょっと動くようになりました。 二行目のif文の<=って消していいですかね? 消さないとエラーになってしまったので ただ、式=join("+",金額)のところで型が一致しないエラーになりました
614 名前:デフォルトの名無しさん [2021/05/01(土) 23:16:54.43 ID:d9MtRRCh0.net] いつものあいつ確定
615 名前:579 mailto:sage [2021/05/01(土) 23:44:05.17 ID:ll+wAnFJM.net] >>610 > 二行目のif文の<=って消していいですかね? 消し忘れだ、すまん > ただ、式=join("+",金額)のところで型が一致しないエラーになりました デグレードしてる俺が悪いんだが、>>601 からの話と同じ
616 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 23:54:50.36 ID:v351dbwI0.net] >>612 凄いです!! 出来ました!! ちょっと実際の表でも細かい数字入れてみて検証してみます。 GW潰してずーっとこの問題を考えてました。 一筋の光が見えた気がします!!ありがとうございます。
617 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:42:00.36 ID:1V5M4ibt0.net] >>590 PowerPivotでDAX関数使えば出来るかも。
618 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:58:00.77 ID:1V5M4ibt0.net] で、建ててみた Excel ピボット Power Pivot DAX関数 質問スレ https://mevius.5ch.net/test/read.cgi/tech/1619916663/
619 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 10:03:52.79 ID:uM4tl5TR0.net] いきなり宣伝てアンタ
620 名前:579 mailto:sage [2021/05/02(日) 10:19:11.69 ID:72ULtZJbM.net] >>605 > エラーになるんですが なぜエラーメッセージを書かないの? >>608 数字でもダメでしょ hako(i) = Worksheets("Sheet1").Range(1, 1).Value になるだけだし
621 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 10:26:38.41 ID:GQme+tVN0.net] >>617 アプリケーション定義エラーまたはオブジェクトの定義エラーですってなります
622 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 11:31:48.49 ID:1V5M4ibt0.net] 2スレ目に何か書いとこうと思って、 とりあえず考えついたのがこれくらいしかなかった。 スンマセン
623 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 11:41:15.21 ID:nZ1YzZjsM.net] >>618 >>617 で頓珍漢なこと書いてたわスマン、数値かどうかは関係ないわ > hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value でエラーになるのか > 実際は縦が動いていきます の方でエラーになるのかどっち? 上でエラーになるなら1回目なのか何回かやったらエラーになるのかのどっち? 下でエラーになるならエラーになった時のセルの指定がおかしくないかを確認 あとシートの指定は変数に入れるかWithを使った方が楽だよ With Worksheets("Sheet1") For i = 0 to 回数 hako(i) = .Range(.Cells(1,1), .Cells(1,1)).Value Next End With
624 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:12:35.89 ID:GQme+tVN0.net] >>620 独学でやってたのでその辺の知識がなくてw withで指定するといちいち書かなくて済むんですね エラーになるのはもう1度目からです > hako(i) = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value ここの時点でエラーになります。
625 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:42:32.96 ID:72ULtZJbM.net] >>621 切り分けとしてエラーになった時にイミディエイトウィンドウで hako(i) = Worksheets("Sheet1").Range("A1").Value Debug.Print Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,1)).Value Debug.Print Worksheets("Sheet1").Cells(1,1).Address を実行してみて
626 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 13:21:44.18 ID:GQme+tVN0.net] >>622 あまり使ったことがない機能で分からないんですが 試しにA1に1という数字を置いて実行したら1という結果が出ました エラーは出なかったです
627 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 13:32:29.72 ID:MDNwXGbEd.net] エラーが出なくなったらよかった。 他に問題は? 解決?
628 名前:デフォルトの名無しさん [2021/05/02(日) 18:51:27.95 ID:U5GvC0it0.net] こういう人って文法は理解できないけど 自然言語みたいに丸暗記で覚えていくのかな?
629 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 19:13:05.11 ID:uM4tl5TR0.net] 〜10年後〜 「あ、ちゃんと覚えたほうが早かったんだ」 と、表面をなぞりまくる内に本質まで見えてきて最後に気づく人もいる 本業じゃないからね。仕方ないね。
630 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 19:18:03.74 ID:o6kkyx/e0.net] 類型から共通点を見出して次第にルールを覚えるのは自然界の学習形態に沿っている
631 名前:デフォルトの名無しさん [2021/05/02(日) 19:36:47.01 ID:U5GvC0it0.net] 古いBASICの構文が難しいからそこだけはしっかりと覚えたほうが早いんだけどね
632 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 02:05:26.31 ID:q65flA4Da.net] 10年後もこんなことやってるとかw
633 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 03:55:18.41 ID:xnojJk7TH.net] 一度普及した物は、減り続けても簡単にはなくならんよ PC-9801だっていまだに現役で使ってる工場とかあるし サポートがなくなって10年後でもVBAを使う職場は間違いなく世界中のどこかに残ってる
634 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 04:12:16.92 ID:mvyi8XcRa.net] 10年たってもエラーが直んないとかやっているのかと言う意味だ
635 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 07:31:09.68 ID:o8xt4Q4Ca.net] >>618 このエラーがでるとお手上げ さっぱりわからない
636 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 10:36:54.14 ID:lox1tlFa0.net] >>605 「回数」で動くわけないだろw 数字入れろつーの
637 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 10:55:13.04 ID:xPMfOD2I0.net] もはや社会人いないな
638 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 11:10:44.37 ID:l6TI+yt9M.net] >>633 > 「回数」で動くわけないだろw 普通に変数なり定数なりを定義したら動くだろ ツッコミならもっとおもしろいやつにしてくれ
639 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 12:03:06.50 ID:DAKb1uRk0.net] 0から始まるときは 回数-1 じゃね
640 名前:デフォルトの名無しさん [2021/05/03(月) 14:59:49.63 ID:po5ohrNh0.net] ttps://pastebin.pl/view/3a98fdc0 サムネイル画像の1番をクリックして表示された画像を順々にダウンロードするクローラみたいなものを作ろうとしてるのですが、 どうやったらサムネイル画像の1番めをクリックして表示された画像のURLを取得できるでしょうか?
641 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 18:17:11.84 ID:iRbOallH0.net] HTML の中には、サムネイル画像をクリックした時の、飛び先のリンクが書いてある。 (ただし、下には、@の文字を追加した) 最初の画像なら、 <a href="http@s://e-hentai.org/s/78a8543e34/1727798-1"> うまくスクレイピングすれば、このURL を抜き出せるのでは?
642 名前:デフォルトの名無しさん [2021/05/03(月) 20:20:21.53 ID:BZOTVT3k0.net] シート上の複数のリストボックスの選択済みをボタンを押すと 一括クリアしたいと思っています。 For i = 0 To ActiveSheet.OLEObjects("ListBox1").ListCount - 1 If ActiveSheet.OLEObjects("ListBox1").Selected(i) = True Then ActiveSheet.OLEObjects("ListBox1").Selected(i) = False End If Next i このコードではオブジェクトがないとエラーになります。 どなたかご教授ください。
643 名前:デフォルトの名無しさん [2021/05/03(月) 22:04:23.29 ID:0Wb20ZWw0.net] いつものあいつ
644 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 22:25:43.32 ID:iSjmevx80.net] そりゃオブジェクト指定してるのにオブジェクトなかったらエラーになる
645 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 23:09:22.50 ID:Z9IP11pi0.net] アクティブやセレクトの多用はエラー処理が面倒くさくなる場合が多い 根本的なトコロから考え直すヨロシ
646 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 00:04:08.03 ID:ZMKTnAbRH.net] >>639 ボックスが複数あるのか、選択肢が複数あるのか、どっち?
647 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 00:21:07.48 ID:YgbBuLel0.net] >>635 どっちもしてないじゃん
648 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 19:03:55.38 ID:19cryuYQa.net] なるほど "sheet1"が有りません的なエラーなんだ これは勉強になった
649 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 23:49:30.76 ID:uwH+LPLT0.net] 一生懸命マクロを組んだのに実は標準機能で実現できると知ったときのガッカリ感
650 名前:デフォルトの名無しさん [2021/05/05(水) 00:05:02.26 ID:6kHGIPV/M.net] 何を作ったかは知らんけど付加価値を追加すればええやん 俺はカラーパレットと並び替えを付加価値を付けて作って使っているけどな
651 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 01:59:04.74 ID:OXlCsy+h0.net] ショートカットキー押したらアクティブセルのフォントや背景の色番号が クリップボードにコピーされるちょいマクロを作ってる マクロ作るときに欲しい色番号をすぐ書けるので便利
652 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 09:07:35.23 ID:LGgg24P3M.net] >>648 VBA初学者の誰もが通る道だな
653 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 09:17:08.30 ID:4t234ePa0.net] 人の作ったデータベースでIDと商品名がひとつのセルに入力されてるから個別にクリップボードにコピーするマクロを作ったな
654 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 09:38:04.66 ID:CaKZkb7J0.net] >>646 レベルアップしたよ。その経験は無駄にはなってないよ
655 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:04:42.11 ID:nWfClEZV0.net] Private Sub Worksheet_Change(ByVal Target As Range) If _ Target.Address <> "$C$2" _ Or (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 3).Value main2 = Cells(2, 3).Value If (Int(main) - (main)) = 0 Then Sheets("DB").Cells(2, 3) = main Else Sheets("DB").Cells(2, 3) = Int(main2) End If End Sub
656 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:54:54.17 ID:nWfClEZV0.net] Private Sub Worksheet_Change(ByVal Target As Range) 1つ目 If _ Target.Address <> "$C$2" _ Or (IsNumeric(Target)) _ Then Exit Sub End If main = Cells(1, 3).Value main2 = Cells(2, 3).Value If (Int(main) - (main)) = 0 Then Sheets("DB").Cells(2, 3) = main Else Sheets("DB").Cells(2, 3) = Int(main2) End If End Sub 2つ目 If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub Columns("d").ClearContents Application.EnableEvents = False 日付1 = DateSerial(Range("A1"), Range("B1"), Range("C1")) 日付2 = DateSerial(Range("A2"), Range("B2"), Range("C2")) For 日付 = 日付1 To 日付2 r = r + 1 Cells(r, "D") = 日付 Next Application.EnableEvents = True End Sub 一つ目と二つ目を合わせるにはどうしたらいいでしょうか? 前にも質問してググってみたのですが今の私のレベルでは手に負えなくて困ってます ご教授ください
657 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 10:58:18.12 ID:CaKZkb7J0.net] >>653 前も見た気がするけど、結局何をやりたいのか分からん 最初から最後までやりたいことを通して書いてくれ
658 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:08:55.56 ID:4t234ePa0.net] この人教えるには金貰わなきゃ割に合わないくらいめんどい
659 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:10:46.24 ID:nWfClEZV0.net] すみません! A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら
660 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:12:17.39 ID:nWfClEZV0.net] すみません! A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら2/4、2/5、2/6を
661 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:15:04.54 ID:nWfClEZV0.net] A B C D 1 2021 1 1 1/1 2 2021 1 5 1/2 1/3 1/4 1/5 ↑のようにDateが入った表で 1/1と1/5までの日付をD列に表示したいです もし2/4から2/6なら2/4、2/5、2/6をD列に表示したいです もしC2に数字以外の文字等が入った場合はC1の数字をC2に来るように出来るでしょうか?
662 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:16:11.30 ID:nWfClEZV0.net] 間違えて 何回も連投してしまいました すみません
663 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 11:31:02.17 ID:nWfClEZV0.net] >>655 わたしみたいな初心者にはレベル高すぎですよね もう少しググって勉強してみます
664 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 13:52:36.59 ID:DQe3j4Yqa.net] うむ 他人に説明するときは5w1hがきほん だいぶよくなったよな
665 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:24:16.43 ID:zgzGcqkdH.net] 質問とソースの両方見ても判定条件がよくわからん 超エスパーすると、数字が5個か6個入ってたらスタートか?
666 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:29:49.98 ID:CaKZkb7J0.net] >>656 数式じゃダメなの? 数式だと3分で出来たけど D1=DATE(A1,B1,C1) D2=IF(DATE($A$2,$B$2,$C$2)<($D1+1),"",$D1+1) D2を下にオートフィル
667 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:33:33.57 ID:Dw+PnwkB0.net] Ruby なら、 require 'csv' require 'date' input = <<"EOT" year,month,day 2021,5,31 2021,6,2 EOT options = { :headers => true } # ヘッダー有り csv_ary = CSV.parse( input, options ) tmp_from = csv_ary[ 0 ] tmp_to = csv_ary[ 1 ] from_day = Date.new( tmp_from[ 0 ].to_i, tmp_from[ 1 ].to_i, tmp_from[ 2 ].to_i ) to_day = Date.new( tmp_to[ 0 ].to_i, tmp_to[ 1 ].to_i, tmp_to[ 2 ].to_i ) Range.new( from_day, to_day ).each{ |day| puts day } 出力 2021-05-31 2021-06-01 2021-06-02
668 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:39:31.63 ID:Peytj0fp0.net] >>664 スレ違い
669 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:45:18.78 ID:CaKZkb7J0.net] >>664 Rubyとか消滅しそうな言語で書いてどうしたいの? https://s3-ap-northeast-1.amazonaws.com/samurai-blog-media/blog/wp-content/uploads/2019/05/66e291d220430021c308db2399680990.jpg
670 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:50:07.30 ID:tepg5eqrM.net] >>666 プログラム板に常駐してるキチガイ知らないの?
671 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:52:08.71 ID:CaKZkb7J0.net] >>667 知らないわ 別言語のスレとかそんなに見ない
672 名前:デフォルトの名無しさん [2021/05/05(水) 15:01:03.66 ID:CAyVZDxB0.net] そもそもいつものあいつだし
673 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:38:09.75 ID:nWfClEZV0.net] みなさんを混乱させてしまいまして もうしわけありません
674 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 20:02:01.88 ID:mEvPZJoP0.net] VB6やVB.NetでVBA用のDLLビルドしてるんだけど、 DLL側のクラスのメンバ構成に変更加えてリビルドしたら、それを参照しているVBAのプロジェクト側で、いちいちDLL参照解除→DLL再参照を手作業でやらんとアカンの? 面倒くさいんやけど。 って、これまでの流れ見たら、スレチな質問になるんかな。
675 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:06:37.83 ID:XLRqwo1W0.net] DLLてデルルでいいの?
676 名前:デフォルトの名無しさん [2021/05/05(水) 22:10:12.24 ID:TYeLzB6b0.net] ダリラ
677 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:14:38.02 ID:CaKZkb7J0.net] >>672 「ダイナミックリンクライブラリ」 昔はドゥルルって勝手に読んでたな
678 名前: mailto:sage [2021/05/05(水) 22:15:56.49 ID:tRoHSHAj0.net] ドロロ
679 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:23:14.23 ID:mEvPZJoP0.net] 質問した俺が間違っていた。
680 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:29:51.86 ID:XLRqwo1W0.net] 「質問した俺が間違っていた」 つまりこれをSOM、読み方はデルル
681 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 23:07:25.23 ID:gm6jmmXW0.net] >>671 VB6とかしらんが COMだよな?ID変わらん限り参照設定変える必要ないと思ったが ちゃんとレジストリに登録されてないんじゃね
682 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 06:00:24.75 ID:fowE0ZYM0.net] >>678 レジストリには間違いなく登録してる。 例えばVB.Netで実装するDLL側で、公開するクラスのメンバ関数を一つ増やしてリビルドすると、それを参照しているVBA(Excel)実行時にエラーが出る。VBAプロジェクトのコンパイルもできなくなる。 この時、DLL参照設定解除→DLL再参照をやると正常に読み込まれる。 なお上の例では、VB.Net実装のDLL側で増やしたクラスのメンバ関数を消去して元に戻した上で再リビルドすると、DLL参照設定解除→DLL再参照をしなくても、再びDLLが正常に読み込まれる模様w。
683 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 12:12:28.40 ID:EE3pjJQ7a.net] >>663 おー、美しいな Rubyの人は>>665-666 みたいな声に全く耳を貸さずに延々と書いてる方で、このスレでもたまに見るのよ ほとんど荒らしだから話しかけても無駄。丁重に無視して差し上げるのを推奨します
684 名前:デフォルトの名無しさん [2021/05/06(木) 17:15:18.35 ID:YSpOci5b0.net] 質問です 下記のように重複している項目を除いて合計値を算出するコードを教えてください。 調べたところ連想配列?を使えば良いと書いておりましたが、難しくて使い方がよくわかりませんでした・・・ 素人すぎて申し訳ないですが、宜しくお願いします。 https://i.imgur.com/xJ71PFz.png
685 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 17:31:33.29 ID:5qdpVrsh0.net] >>679 軽く試したけど再現しない たぶん、タイプライブラリの変えてはいけない何か(DispIdが怪しい)が変わってると思われ これ以上はVB.Netのスレ行け
686 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 18:29:38.21 ID:jNBg/veuM.net] >>681 SUMIFで良いじゃんと思ったけど重複は除くのか面倒くせぇな 配列にA〜Cのデータを代入するだろ? 4列目にりんごなら1、みかんなら2を頭に付けてCのデータを連結した上で数値化して放り込むだろ? そしたら For RowCnt = LBound(TgtAry, 1) to UBound(TgtAry, 1) For RowCtR = Ubound(TgTAry, 1) to RowCnt If TgtAry(RowCnt, UBound(TgtAry, 2)) > TgtAry(RowCtR, UBound(TgtAry, 2)) Then SavAry([略]) = TgtAry(RowCnt, [略]) TgtAry(RowCnt, [略]) = TgtAry(RowCtR, [略]) TgtAry(RowCtR,[略]) = SavAry([略]) [省略] End If Next Next みたいな事をやって配列をソートしてやるだろ? あとは上から順に見ていけば4列目を無視しても重複が弾けるんじゃねぇかな?
687 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 18:48:02.86 ID:2oPZ0CXkF.net] 連想配列だと練習問題みたいな課題やね set ## = createobject("scripting.dictionary") set @@ = createobject("scripting.dictionary") for r = 2 to cells(rows.count, 1).end(xlup).row if not ##.exists(cells(r, 1).value & cells(r, 2).value) then ##.add cells(r, 1).value & cells(r, 2).value @@(cells(r, 1).value) = @@(cells(r, 1).value) + cells(r, 3).value end if next r for each key in @@ rr = rr + 1 cells(rr + 1 , 5) = key cells(rr + 1, 6) = @@(key) next key 今スマホだから試せてないけど、こんな感じでどうだべ?
688 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:08:24.28 ID:fowE0ZYM0.net] >>682 検証、ありがと。しかし、再現ならずか。 >>679 の書き込みは、一応、直前に確認してから書き込んだ。 こちらでは、管理者権限でVB.Netを立ち上げて、ビルド時にDLL登録してる。 あと>>679 で試しに追加するメンバ関数は最後じゃなく、真ん中あたり(property getブロックとsubブロックの間)に追加している。 ところで、みんな、汎用の俺俺ライブラリをDLL化しないのか。
689 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:14:13.18 ID:95uMi6p80.net] >>681 俺ならわざわざVBA書かずに関数追加してピボットテーブルで集計するけど。 https://i.imgur.com/LwvzJns.png
690 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 19:40:05.49 ID:VTnVqyux0.net] キーは若干不安なので =A2&"_"&B2&"_"&C2 ぐらいにはした方が良いと思う
691 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 20:15:22.86 ID:b7Mkjg0R0.net] >>681 Ruby では、 require 'csv' input = <<"EOT" りんご,A,2 りんご,B,4 みかん,D,1 りんご,B,100 EOT input_ary = CSV.parse( input ) # 2次元配列 # 0/1列目が同じものを排除する。先に現れた行が使われる。「りんご,B,100」は使われない input_ary.uniq! { |row| [ row[ 0 ], row[ 1 ] ] } # [["りんご", "A", "2"], ["りんご", "B", "4"], ["みかん", "D", "1"]] result = [ ] # フルーツ名でグループ化する input_ary.group_by { |row| row[ 0 ] }.each do |row| sum = row[ 1 ].sum{ |row| row[ 2 ].to_i } # 合計 result.push [ row[ 0 ], sum ] end pp result #=> [ ["りんご", 6], ["みかん", 1] ]
692 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 20:23:53.60 ID:95uMi6p80.net] >>687 なるべく簡潔に書きたくて、そのリスクは無視したw 実際は間に何か挟んだほうがいいね。
693 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 21:11:34.82 ID:VTnVqyux0.net] >>681 元データいじっていいなら重複の削除が超早い(ダメでもコピーすればいいだけだけど) ってかSQLのサブクエリなら一行で行けそうだ Sub Macro5() Range("a:c").RemoveDuplicates Array(1, 2), xlYes ActiveWorkbook.PivotCaches.Create(xlDatabase, Range("a:c")).CreatePivotTable Range("e1"), "p1" Set p1 = ActiveSheet.PivotTables("p1") p1.PivotFields("com").Orientation = xlRowField p1.PivotFields("com").Position = 1 p1.AddDataField p1.PivotFields("v"), "合計 / v", xlSum End Sub
694 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 21:12:21.95 ID:VTnVqyux0.net] すまん、"com"は"会社名"、"v"は"値段"などに適宜書き換えてくれ
695 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 22:14:14.24 ID:zoaLFLbx0.net] D列に =COUNTIF(B$2:B2,B2) 数値合計に =SUMIFS($C$2:$C$9,$A$2:$A$9,"=" & E2,$D$2:$D$9,"=1")
696 名前:デフォルトの名無しさん [2021/05/06(木) 23:20:33.75 ID:srB+AETb0.net] >>681 しつこい
697 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 04:04:27.47 ID:UcyGqCZa0.net] いまだにIFとISERROR組み合わせてエラー回避やってる人いるんだ。。。??
698 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 04:24:40.54 ID:f/k3XSIv0.net] 流石にいまだにVBA使ってるニキの煽りは違うなw
699 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 06:55:01.06 ID:sJ3lVRb90.net]
700 名前:iferrorはエラーの場合の値の置き換えでは? [] [ここ壊れてます]
701 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 07:20:54.57 ID:tuSKe1qQ0.net] booleanで取りたい場合はIFとISERROR組み合わせた方が早い
702 名前:デフォルトの名無しさん [2021/05/07(金) 07:26:43.31 ID:DloXWpsH0.net] Excelのセルって、Accessで言うところのコントロールの OldValue プロパティってないの? Application.Undo以外で更新前の値に戻すときに使いたいんだけど
703 名前:デフォルトの名無しさん [2021/05/07(金) 08:26:31.62 ID:EfOHcgmKM.net] 見りゃわかることをいちいち聞くな
704 名前:デフォルトの名無しさん [2021/05/07(金) 09:36:16.79 ID:dif1qALr0.net] 教えてください データベースから取得した大量のデータを、他のシートに簡潔集計したいです。 生データシートには 文字列としてyy(2021)mm(03)をはじめ、メーカ、注文番号、数量、ナンバー、大分類、中分類、小分類など68列に渡ってあります。 理想としては別シートに月別に メーカ、大分類、中分類、小分類(ピポット的配置のイメージ)で購入金額、数量を降順で出したいです。 メーカや分類名は多く、都度新しいのが出たりするので、メンテナンスなくして自動で出せるようにしたいです。 どうすればいいでしょうか。
705 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 09:51:31.13 ID:/bDSijiLM.net] >>700 DBに入ってるんだったらSQLで最初からgroup byしたらいいだけ
706 名前:デフォルトの名無しさん [2021/05/07(金) 10:21:13.76 ID:dif1qALr0.net] >>701 すみません、>>700 が最終形態ではなく、これができたら私のイメージのモノができるのでお聞きしました。 なのでvbaで回答頂けたら助かります<(_ _)>
707 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 10:44:31.42 ID:uFptLScD0.net] >>702 VBAの中でシートに対してSQL投げて 結果のRecordsetをシートに貼り付けるだけでは?
708 名前:デフォルトの名無しさん [2021/05/07(金) 10:49:59.41 ID:dif1qALr0.net] >>703 すみません。 私がSQLを理解していないので、正直わかりません。 何か分かりやすいサイト等あったら教えてもらえますか?
709 名前:デフォルトの名無しさん [2021/05/07(金) 11:55:04.67 ID:Uq/dH8v/M.net] またいつものあいつか
710 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:02:29.78 ID:W+W51fKCa.net] ここの諸先輩方にとってSQLってどういう位置付け? 常識レベル?
711 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:10:39.55 ID:Gobk7VPl0.net] 手足と同じレベル
712 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 12:13:21.02 ID:/bDSijiLM.net] >>704 DBがあるんだったらそれをメンテしてる人間もいるだろ? そいつに聞け
713 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 15:40:07.47 ID:1tkbLq7p0.net] DeBu
714 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 19:08:51.24 ID:uFptLScD0.net] >>704 EXCELでどういうObject使ってシートにSQLを投げるかはVBA シート Sql 辺りでググればいくらでも出てくるけどとりあえず一例としてここかな www7b.biglobe.ne.jp/~whitetiger/ex/ex2002088.html SQLがどういうものかは流石に SQL 入門 辺りでググってくれ 今は使ってないとしても本来VBAと同等かそれ以上の優先順位で覚えるべきものだから絶対覚えておいた方がいい。
715 名前:デフォルトの名無しさん [2021/05/07(金) 20:08:21.87 ID:xGNvq5Jp0.net] なぜインプロセスだかアウトプロレスだかの話を入れたのかがわからないな
716 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 21:41:30.83 ID:Z7WMK8Ny0.net] Ruby on Rails は、MVC(model/view/controller)モデルだから、 最初から、3大データベース(SQLite/MySQL/PostgreSQL)を使う 入門レベル
717 名前:デフォルトの名無しさん [2021/05/07(金) 22:30:42.79 ID:hSzgOaHp0.net] >>712 MVCだから?馬鹿は黙ってろよ
718 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:33:08.33 ID:H8oTRyi2d.net] >>712 ちょっと何言ってるのかわからない
719 名前:デフォルトの名無しさん [2021/05/08(土) 00:50:58.02 ID:9rj5+JrYM.net] オワコンRubyにしがみつくのはこういう馬鹿ばっか
720 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:57:21.53 ID:PaQQNn710.net] 言語の終わりを実体験するとかなかなか稀有な例だと思う
721 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:59:37.62 ID:xzBPi/0q0.net] VBA使っておいて他の言語をオワコン呼ばわりする権利はないと思うが Ruby荒らしは前からいるキチだからNGしよう
722 名前:デフォルトの名無しさん [2021/05/08(土) 01:17:43.20 ID:xwL6HEYY0.net] >>716 は?馬鹿なの? DelphiとかADAとかSmallTalkとかたくさんあるだろ
723 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 01:46:00.09 ID:PaQQNn710.net] >>718 どれもこう、誰も使わなくなってから「あ、そういやなくなってたんだ〜。D言語(だぶりゅー)なんてあったな〜」程度だけど、 rubyに関してはこの狂信者だか超アンチが一強で荒らし回っていて強制終了させている 終わり目の言語に止めをさすとか、こんなん後にも先にもないだろうw
724 名前:デフォルトの名無しさん [2021/05/08(土) 05:21:49.11 ID:xwL6HEYY0.net] >>719 そういう意味なら納得
725 名前:デフォルトの名無しさん [2021/05/08(土) 08:40:58.17 ID:Wz5DhM+2F.net] >>710 ありがとうございます。 ふとした疑問なんですが、基本データベースからの 処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。 今vbaを一生懸命勉強している最中ですが、効率の悪いのかなって思ってしまって
726 名前:デフォルトの名無しさん [2021/05/08(土) 08:47:24.17 ID:YWSmrfQq0.net] Excel Access使うならVBAは必須 データベース使うならSQLは必須 当たり前のことですね
727 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 09:07:14.40 ID:L4NnuIXtM.net] 何するにしてもVBAは別に必須ではない データ処理やプログラミングをするほぼ全ての人にとってSQLは必須
728 名前:デフォルトの名無しさん [2021/05/08(土) 09:40:04.43 ID:Wz5DhM+2F.net] 初歩的な質問ばかりですみませんでした(-_-;) 私自身パソコンが苦手なので、せめてvbaを身に着けようと思いましたが・・・ vba sql どちらも難しそうですネ
729 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 09:58:17.60 ID:Z/jAVLJW0.net] >>721 >ふとした疑問なんですが、基本データベースからの >処理が多い場合は、vbaよりもsql勉強した方がいいのでしょうか。 それはそうなんだけど あくまで俺の場合はだけど SQLをまともに勉強した記憶がない。 まぁ必要にかられたとき 必要な分だけ調べて覚えれば 基本部分は十分追いつけるものって ことなんだろうな
730 名前:デフォルトの名無しさん [2021/05/08(土) 10:18:13.28 ID:Wz5DhM+2F.net] vbaってどれくらいできたら、まあまあ使える人になりますか"(-""-)" 私は下のやつでもう混乱しています・・・これは基本なんですかね? Sub () Dim i As Long Dim ixR As Long Dim ixC As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("練習15") Set ws2 = Worksheets("練習15_回答") ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents With ws1 For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row ixC = 2 Do Until ws2.Cells(1, ixC) = .Cells(i, 1) ixC = ixC + 1 Loop ixR = 2 Do Until ws2.Cells(ixR, 1) = .Cells(i, 2) ixR = ixR + 1 Loop ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3) Next End With End Sub
731 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:19:00.10 ID:PaQQNn710.net] >>724 事務作業で死ぬほど役に立つのはvba。事務だけじゃなく営業でもちょっとした所で使えるなら、事務作業はほぼゼロになるだろう sqlは使うべき時が来れば、その時に勉強すれば良い。その時に使うのはselectとjoinのはずだ
732 名前:デフォルトの名無しさん [2021/05/08(土) 10:23:23.79 ID:Wz5DhM+2F.net] >>727 なりほど( *´艸`) 私は事務ですけど、正直vbaもsqlも使わなくても力技でどうにかなってきました。 関数とピポットで・・・ でも時短でvbaしようと思ってやってるんですが、どっちがいいか正直よくわかってません。 勉強しないと
733 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:23:26.16 ID:PaQQNn710.net] >>726 読みづらいし色々詰め込みすぎ。個人的にも使わないものが多い ・宣言(dim〜) ・with ・do until はそうそう使わない >For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row も >最終行=Cells(.Rows.Count, 1).End(xlUp).Row >For i = 2 To .最終行 と分けたほうが読みやすい for、if、setが使えれば大体良いと思う
734 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:25:26.96 ID:PaQQNn710.net] >>728 毎回同じピボットを作っているなら、ピボットをvbaでボタン一つで作ってみるとか 普段やってることを自動化するとすぐに覚えられるよ ※ただ、ピボットマクロはかなり大変なのマクロの記録を全力で使ったほうが良い
735 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:25:49.52 ID:7sae8zS6M.net] 質問者は現に今使うべき時に来ているのに何を言っているのか 実際SQLで一瞬でできることを知らないままVBAで>>726 みたいな暗号を延々血反吐吐きながら垂れ流してる可哀想なVBAerは多いし、質問者もここでSQLを使えと言われていなければそうなっていただろう SQLはVBAよりずっと簡単だから、あまりVBAを使い込む前にSQLは一通りやった方がいい
736 名前:デフォルトの名無しさん [2021/05/08(土) 10:26:05.17 ID:Wz5DhM+2F.net] >>729 そうなんですか!? 私が使ってるサイトdimは全部に使ってました・・・ すごいショック😢
737 名前:デフォルトの名無しさん [2021/05/08(土) 10:29:56.46 ID:Wz5DhM+2F.net] >>731 vbaを反吐がでるまで打とうと思ってました 私文系で詳しくないから、みなさん数を打って覚えているのかと・・・ 一度sqlについて調べてみます。ありがとうございます。
738 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:30:50.49 ID:PaQQNn710.net] あぁ、確かに一回は触っておいた方がいいか >>732 どっちでもいいよ 宣言なんて間違えないため+メモリ節約のためだけど、 今はメモリが潤沢にあるし宣言を書きに頭に戻るとかアホらしいし余計に間違うわ
739 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:21:40.14 ID:SHLAkmOY0.net] 前から気になっていたんだけどセルを1つ選んで右クリックして挿入や削除するときのメニューで セルの削除なのに「ファイルの削除」って表示されるの俺だけ?
740 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:36:39.10 ID:PaQQNn710.net] >>735 yes
741 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:50:01.75 ID:zkiV4DEW0.net] >>732 > 私が使ってるサイトdimは全部に使ってました・・・ それで正しい 今時コードの先頭にOption Explicitが入ってないサイトは無視していいレベル ID:PaQQNn710はレベルの低いドヤ顔爺だから話半分に受け流しておけばいい
742 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 12:39:16.21 ID:wIqzNMvOM.net] ここはドヤ顔爺の巣窟ですよ。 子供は他所で遊んだ方が良いですよ。
743 名前:デフォルトの名無しさん [2021/05/08(土) 13:17:27.11 ID:SUb7u/UA0.net] 私の勉強方法が合っているのか分からなくなってきました( *´艸`)
744 名前:デフォルトの名無しさん [2021/05/08(土) 13:18:27.12 ID:SUb7u/UA0.net] ID変わっちゃったけどdimのモノです・・・
745 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 13:36:12.98 ID:75Tkj6otd.net] >>740 dimもwithもdo untilも安心して使っていいよ ただ必ずしも関数の最初にdimをまとめておく必要はないのでiとかは必要になったときに宣言するのでも大丈夫 あとws1みたいな連番の変数よりは目的を具体的に表した変数名の方が良い
746 名前:デフォルトの名無しさん [2021/05/08(土) 13:49:53.06 ID:SUb7u/UA0.net] >>741 ありがとうございます。 粛々とがんばります・・・ 実際>>726 は綺麗ではないんですかね?
747 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:01:23.31 ID:75Tkj6otd.net] >>742 綺麗か綺麗でないかって尺度だとなんともだけど丁寧に書こうとしてるのは伝わるので応援したい パフォーマンスとか考えるともう少し良くできそうなのと、個人的には関数を小さく分けた方が見通しが良くなるかもしれない(ちょっと曖昧な表現になってすまない)
748 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:50:38.57 ID:PaQQNn710.net] 俺ならこうなるかなぁ ただ書いてて思ったけど、index(match(),match())で済むような? Sub () foo Set 元シート = Worksheets("練習15") Set 転記先シート = Worksheets("練習15_回答") 転記先シート.Range("A1:B2").ClearContents For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row 転記列 = 2 Do Until 転記先シート.Cells(1, 転記列) = 元シート.Cells(i, 1) 転記列 = 転記列 + 1 Loop 転記行 = 2 Do Until 転記先シート.Cells(転記行, 1) = 元シート.Cells(i, 2) 転記行 = 転記行 + 1 Loop 転記先シート.Cells(転記行, 転記列) = 転記先シート.Cells(転記行, 転記列) + 元シート.Cells(i, 3) Next End Sub
749 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:53:21.72 ID:PaQQNn710.net] 間違えた、こうか Sub () foo Set 元シート = Worksheets("練習15") Set 転記先シート = Worksheets("練習15_回答") 転記先シート.Range("A1:B2").ClearContents For i = 2 To 元シート.Cells(元シート.Rows.Count, 1).End(xlUp).Row 列 = 2 Do Until 転記先シート.Cells(1, 列) = 元シート.Cells(i, 1) 列 = 列 + 1 Loop 行 = 2 Do Until 転記先シート.Cells(行, 1) = 元シート.Cells(i, 2) 行 = 行 + 1 Loop 転記先シート.Cells(行, 列) = 転記先シート.Cells(行, 列) + 元シート.Cells(i, 3) Next End Sub >742 慣れてない感じは凄い伝わる コードは後で見直してすぐに内容が分かるように書いたほうが良い。コメントを入れまくるんだ
750 名前:デフォルトの名無しさん [2021/05/08(土) 15:03:51.26 ID:SUb7u/UA0.net] みなさんご丁寧にありがとうございます_(._.)_ vbaを使う人はみなさん頭がいいですね・・・自信ないなーww sql含めてやってみます。。
751 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 15:07:11.21 ID:zkiV4DEW0.net] >>742 Do Until 〜 Loop は他の言語だとあまり見ないから条件逆にして While 〜 WEnd の方が馴染みのある人が多いっていうぐらいの話 あとコメント入れまくれとか言う老害は無視していい >>745 そこまでやるなら i じゃ無くて 転記元行 とかにしろよ
752 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 15:13:57.96 ID:75Tkj6otd.net] 入れまくれってのは程度にもよるけど読み返すときの手がかりとしてのコメントは残しておいた方がいい
753 名前:デフォルトの名無しさん [2021/05/08(土) 15:16:34.30 ID:xwL6HEYY0.net] ID変える、しつこく何度も質問する、わざとらしいへりくだり いつものあいつだろうが
754 名前:デフォルトの名無しさん [2021/05/08(土) 15:26:39.50 ID:SUb7u/UA0.net] >>749 すみません、誰のことを指しているか分かりませんが、私はあなたの想像している人ではありませんよ。 vbaで悩んでて、質問掲示板ってあったので使わせてもらっただけです。
755 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:03:41.13 ID:6tENHryO0.net] >>729 VB6の開発プロジェクトやってたけど どのソースコードでもdimもwithもdo untilも当然のように使ってたぞ お前が使わないってだけじゃないの? あとOption Explicitつけないのはバグの原因になるから推奨できない。
756 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:11:49.59 ID:jYvDj1vcd.net] VBScript(WSH)はDimないし使わないのも自然だけどVBAはありがたくOption ExplicitもDimも使うな
757 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:14:06.32 ID:IhtMBIEH0.net] 俺は変数宣言するけどoption付けない事も多いな 自分だけのちょんプロとか
758 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 19:23:35.24 ID:vdqKmiMMd.net] >>750 この文章でモロバレ
759 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:01:04.28 ID:+76Iryda0.net] With使わないのは、C#に採用されなかったように最近の流れだからまあいい Doも、ループはWhileに統一しろってルールならまあいい Dim使わんってどういうことだ? まさか変数の宣言しないってことじゃないよな Option Explicitなんて自分で書くことまずないが、真っ先に変更するオプションじゃないのか
760 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:07:27.25 ID:cJeFkg/00.net] 変数の宣言しないと型違いのエラーとか検知しづらくなるし、 コードの中で比較が出てきた時に自作関数の結果か変数の値かどっちと比較してるのかわかりづらくなったり… とにかく色々エラー回避とかメンテナンス性とか考えて変数宣言しないのはナシよりのナシかと
761 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:35:45.94 ID:QG+os5rrH.net] 基礎ができてなくて、型の使い分けがわからなくて全部Variantで書いてる人
762 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:04:16.49 ID:PaQQNn710.net] >>755 しない 以下でエラーが起きないって時点で俺はアホらしくなって宣言をやめた Sub foo() Dim a As String Dim b As Long a = "1" b = 2 Debug.Print a + b '3が出るぞ良かったな End Sub
763 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:06:38.67 ID:PaQQNn710.net] 宣言しないと何ができなくなるのか、何を間違えるのかが分からん
764 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:30:00.76 ID:6tENHryO0.net] >>758 それは暗黙の型変換が行われるから。 変数の宣言をしたほうがいいのは以下のような場合にエラーにできるから。 public sub foo() hensu = 1 Debug.Print hansu + 1 end sub 2が出力されることを期待しているが、この場合1が出力される。(変数名の打ち間違い)
765 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:36:40.65 ID:6tENHryO0.net] VB6やVBAは型が弱いので、変数名の先頭にintやlng、str等をつけてデータ型がわかるようにするのが一般的だと思ってる。 この場合だと Dim intHensu As Integer の宣言を入れておくべき。
766 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:37:56.47 ID:PaQQNn710.net] >>760 なるほど そういう意味では型をつけずに全部variantで宣言はアリなのか dim a,b,c ってな感じで
767 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:39:48.07 ID:PaQQNn710.net] >>761 変数名見れば何入ってるか分からないか?
768 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:43:37.13 ID:6tENHryO0.net] >>763 ごめん一般的といったのは、自分がそう思ってただけなので、実際はそうじゃないかも。
769 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:45:17.15 ID:jYvDj1vcd.net] 何でもかんでもVariant型だと余計にメモリ食ったり速度面で劣るんじゃなかったっけか
770 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:52:57.44 ID:QG+os5rrH.net] 簡単なマクロならメモリも速度もほとんど気にしなくていい そういうのが気になってきてから速くする方法を勉強してもいいと思う
771 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:55:44.85 ID:cJeFkg/00.net] 文字列 String 整数 Long 小数以下も必要 Single 日付 Date Setが必要なもの Object なんでも Variant 初心者ならこれくらいの使い分け出来てたら十分だから宣言はして
772 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:57:26.01 ID:L/dDaofga.net] 大量のデータをがばっと取るときはsql とってきたデータをチマチマ加工したいときはVBA 二刀流がべだー
773 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:02:54.21 ID:L/dDaofga.net] 変数宣言でいちばん重要なのは パブリック変数なのか プライベート変数なのかだよ 型はそんなに気にしなくてよいから 3文字以下ならプライベート、パブリックなら5文字以上にする
774 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:18:22.12 ID:Z/jAVLJW0.net] >>769 いや、そもそも 外部とのやり取りはプロパティで行わないと ブレイクポイント等仕掛けて どこから呼ばれたか分かり辛くなることを考えると 変数をPublicで宣言する機会はまず無くなるだろう。 もちろんこのプロパティと言うのは概念的なものを含めて Javaの様に関数と同じ様に設定することも含めるけど。 そうすればパブリック、プライベートの 判断のために変数名の考慮を行う必要も無くなる。 良かったな。
775 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:31:52.03 ID:PaQQNn710.net] >>765 variantはかなり遅い longをvariantにすると 0.001秒の処理が0.01と、処理時間が10倍近くになることも >>769 vbaのグローバル変数はマジでやめたほうが良い。大体良くない事が起こる グローバル変数使うなら作業シートに書いたほうがよっぽどマシ 逆にシートにないデータをconst staticみたいに使うならアリ
776 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 23:54:10.02 ID:+76Iryda0.net] >>758 そもそもそのコードで3を期待しないのがおかしいとしか思えんのだが "12"を期待するなら+じゃなくて&使えよ
777 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 00:48:39.55 ID:vQpWnC+C0.net] >>761 ハンガリアンなついな VBAあたりを最近書いてないからか
778 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 01:41:49.82 ID:SiihAWPs0.net] variantにすると型間違いでエラーがでないので やはり推奨できない
779 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 02:15:37.67 ID:vzYu7ze/0.net] 知恵を貸してください ある可変長2次元配列のデータについて 各列のデータから1つずつ抽出した文字列の組み合わせを出力したいと考えています 例えばArray(2,2)のデータが以下だとします Array(0,0)="いちご" Array(0,1)="みかん" Array(0,2)="" Array(1,0)="あまい" Array(1,1)="すっぱい" Array(1,2)="にがい" Array(2,0)="100円" Array(2,1)="200円" Array(2,2)="" この場合 「いちご,あまい,100円」「いちご,あまい,200円」「みかん,すっぱい,100円」 などの 空白を除く2*3*2=12通りの組み合わせ全てを抽出したいのです (抽出先はシートでも配列でも何でも良いです) そして実際にはこの配列をArray(x,y)とすると xとyは1以上の自然数で不定です 配列の行数が固定長であれば各行において行の数だけFor文でループの中にループを入れれば良いのでしょうが 配列の行数が1以上の不定数の場合にどうすれば良いか思い付きません vbaというよりアルゴリズムの問題かも知れませんが 良い方法はあるのでしょうか
780 名前:デフォルトの名無しさん [2021/05/09(日) 02:26:22.29 ID:qbmXU1K50.net] はい、いつものあいつ
781 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 04:53:38.03 ID:yBvaHslb0.net] >>724 はい、難しいです。簡単なら今頃VBマスターで溢れ帰ってます! 日々の努力あるのみです!
782 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 06:11:50.07 ID:Gu7b6Am40.net] 相手しない相手しない
783 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 08:20:21.39 ID:nRlrfZeFa.net] ワークシートをグローバル変数みたいなつかい方をする うむ、よくある
784 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:19:54.62 ID:TBZcO69u0.net] uboundで現在の配列の最大要素番号調べて、そこまでループとかじゃないの? そもそも配列なんて自分はあんまり使わない。redim preserveって確かかなり遅かった気がする。
785 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:44:03.47 ID:1mWvM4p1M.net] ReDim Preserveは1番ケツの次元しか可変に出来ねぇのがとても残念
786 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:48:20.73 ID:HdQWbOvH0.net] >>775 Sub foo() Dim array1() As String ReDim Preserve array1(3, 3) array1(0, 0) = "いちご" array1(0, 1) = "みかん" array1(0, 2) = "" array1(1, 0) = "あまい" array1(1, 1) = "すっぱい" array1(1, 2) = "にがい" array1(2, 0) = "100円" array1(2, 1) = "200円" array1(2, 2) = "" For Each dim1 In array1 If dim1 <> "" Then Debug.Print dim1 End If Next End Sub vbaの動的配列は本当にめんどくさいな
787 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:05:56.73 ID:Nzaho5/SH.net] 行数、列数はUBound関数で調べられる 2次元配列の場合は UBound(array1, 1) UBound(array1, 2) で、それぞれの次元の大きさが取得できる 2番目のパラメータが対象となる次元 あと、多次元配列に一気に代入するにはarray関数を次元と同じ数だけ入れ子にする方法がある array1 = Array( _ Array("いちご", "みかん", ""), _ Array("あまい", "すっぱい", "にがい"), _ Array("100円", "200円", ""))
788 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:13:55.83 ID:vzYu7ze/0.net] ありがとうございます ReDim Preserveの配列再定義は知っているのですが 例えば>>782 のようだと 「いちご」 「みかん」 「あまい」 …… 「200円」 のような2+3+2の7個出力されるだけですよね 「いちご,あまい,100円」 「いちご,あまい,200円」 「いちご,すっぱい,100円」 …… 「みかん,にがい,200円」 のような2*3*2の12個を出力したいのです 行数が固定なら例えばArray(2,x)のように列数が不定でも For i=0 To UBound Array(0,x) For j=0 To UBound Array(1,x) For k=0 To UBound Array(2,x) Debug.Print Array(0,i)& "," & Array(1,i)& "," & Array(2,i) Next Next Next のようにして空白部分の例外処理を適当に入れれば良いのは分かりますが 行数が不定なので分からないというお話です
789 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:14:00.97 ID:Nzaho5/SH.net] >>775 2次元配列の要素数が不明の場合こういう書き方もできる For i = 0 To UBound(array1) For j = 0 To UBound(array1(i)) Debug.Print array1(i)(j) Next j Next i
790 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:14:31.62 ID:HdQWbOvH0.net] >>782 は全然違うわ、スマン
791 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:50:20.26 ID:Nzaho5/SH.net] >>784 とりあえず、Array関数というのが存在するから、変数名にArrayは使っちゃだめ ArrとかMyArrayとか何か別の名前に変えないと
792 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:38:04.63 ID:TBZcO69u0.net] 自分で書くならこうかな? 再帰処理使わないでスッキリ書く方法は思いつかなかった。 https://i.imgur.com/noQC9bg.png これでだめ?
793 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:47:23.05 ID:Nzaho5/SH.net] とりあえずもう一つ突っ込みたい Preserveは不要だしパラメータも(3, 3)じゃない ReDim array1(2, 2) が正解 >>788 ネストの深さが不定の時は再帰でやるのが一番自然だと思うよ
794 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:59:36.87 ID:TBZcO69u0.net] ごめんちょっと動作検証してたら、Uboundのとこxとyが逆だった。 Ifの中に書いてるのが、Ubound(ary1) でForの中に書いてるのが Ubound(ary1, 2) ですね。
795 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:09:11.80 ID:TBZcO69u0.net] >>789 おっしゃるとおりですm(_ _)m せっかくご指摘いただいたので、直したものを上げ直します。 https://i.imgur.com/ykrQPY4.png
796 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:10:40.52 ID:Nzaho5/SH.net] やってることは同じだけど画像だと入力が面倒だろうし、俺もほとんど同時に作っちゃってたんで貼らして Option Explicit Sub foo() Dim array1() As String ReDim array1(2, 2) array1(0, 0) = "いちご" array1(0, 1) = "みかん" array1(0, 2) = "" array1(1, 0) = "あまい" array1(1, 1) = "すっぱい" array1(1, 2) = "にがい" array1(2, 0) = "100円" array1(2, 1) = "200円" array1(2, 2) = "" Call recloop(array1, 0, "") End Sub Sub recloop(array1, row1, str) Dim col1 If row1 < UBound(array1, 2) Then For col1 = 0 To UBound(array1, 2) If array1(row1, col1) <> "" Then Call recloop(array1, row1 + 1, str & array1(row1, col1) & ",") Next Else For col1 = 0 To UBound(array1, 2) If array1(row1, col1) <> "" Then Debug.Print str & array1(row1, col1) Next End If End Sub
797 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:23:48.39 ID:vzYu7ze/0.net] ありがとうございます 再帰関数の知識は持っていたのですが 自身で再帰関数を使用したことは無かったため盲点でした このように使用するのですね 助かりました参考にさせて頂きます
798 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 13:41:59.08 ID:WHUEfE6G0.net] >>779 グローバル変数と言うよりストレージみたいなもんだと思ってる
799 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 21:06:29.88 ID:o10D8BaNM.net] ReDim使うのって要素数に変数使うときじゃなかった? 数が決まってるならDim array(0 to 2, 0 to 2) As Stringで良いんだよね?
800 名前:デフォルトの名無しさん [2021/05/09(日) 21:07:35.90 ID:OCR3m9+L0.net] >>737 あなたに禿同!
801 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 21:47:13.65 ID:HdQWbOvH0.net] >795 動的配列と静的配列の違いだよ 「変数」でもなければ「数が決まってる」でもなく、「後で変更するかどうか」が違う所
802 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 01:12:41.56 ID:8FNokcfwd.net] 再帰を使わない方法でやってみた 「r行c列」の配列を「c桁のr進数」とみなしてる。とりあえず動いたけどバグあるかも Sub Macro5() Dim array1() As String ReDim array1(2, 2) array1(0, 0) = "いちご" array1(0, 1) = "みかん" array1(1, 0) = "あまい" array1(1, 1) = "すっぱい" array1(1, 2) = "にがい" array1(2, 0) = "100円" array1(2, 1) = "200円" row0 = UBound(array1, 1) col0 = UBound(array1, 2) + 1 For n = 0 To (row0 + 1) ^ col0 - 1 nn = n s = "" For row1 = row0 To 0 Step -1 col1 = nn Mod (row0 + 1) nn = nn \ (row0 + 1) If array1(row1, col1) = "" Then s = "" Exit For Else s = array1(row1, col1) & s If row1 Then s = "," & s End If Next If s <> "" Then Debug.Print s Next End Sub
803 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:50:28.57 ID:6x/72ii/a.net] そもそもの疑問で、なぜVBAは初心者向けとか言われるのでしょうか。 こんなに小難しいチマチマしたこも書かなきゃいけないのに。 全然わからん。
804 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:50:49.81 ID:GwFlyMni0.net] >>761 俺もハンガリアン使ってるわ
805 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:53:01.66 ID:2ArSfNqX0.net] >>775 総当りってよく考えればパワークエリでクロス結合すれば一発だろって思ったら、パワークエリにクロス結合が無かった・・・ https://www.shegolab.jp/entry/excel-macro-cross-join accessだとアホみたいなクエリで即完成 https://i.imgur.com/moHa3bx.png
806 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:55:51.32 ID:/NuMOBBIM.net] >>799 昔はプログラミングはもっと敷居が高かったんだよ その中では、Excelさえあれば使えてUIはExcelのワークシートをそのまま利用できるという手軽さは初心者には魅力的だった その頃の名残だね 今ではPowerAppsとかGASとかSalesforceとかもっと簡単で強力な選択肢は色々あるし、 プログラミングの勉強ならPythonとかJavaScriptの方が初学者には敷居が低い
807 名前:デフォルトの名無しさん [2021/05/10(月) 20:57:55.19 ID:vb1TGTCB0.net] ハンガリアンより#%&$の方が分かりやすいよな
808 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:06:13.53 ID:6x/72ii/a.net] >>802 レスありがとうございます。 今、流行りの言語に比べてなぜこんなに、と思っていました。 もっと難しかったのですね。 理解しました。 パソコン仕事を楽に短縮できるよう頑張ります。
809 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:09:38.66 ID:2ArSfNqX0.net] vbaは本当に楽。forとif覚えるだけで仕事がはかどりまくり Cはメモリの知識やらヘッダやら本当に覚える事が多かった上に超便利なワークシートってもんもない
810 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:10:42.65 ID:aMiH/GVN0.net] まったくな
811 名前:デフォルトの名無しさん [2021/05/10(月) 21:13:02.21 ID:vb1TGTCB0.net] 沢山の似たようなライブラリが公開されていて いろいろな方法でやりたいことが実現できる それはそれはいい時代になりました でも、コレがやりたければコウ書け! まどろっこしいが他に道は無い! ってのも初心者にはいいものですよ
812 名前:デフォルトの名無しさん [2021/05/10(月) 21:46:59.07 ID:WQl4RFpm0.net] 条件付き書式や文字の縮小機能まであって、CopyFromRecordsetの異様な速さ (もちろんシート関数やオートフィルタの速さも異様でしょう) VSでは無理だし、自作も当然無理 Excel部署の人だって、1人では無理でしょう
813 名前:デフォルトの名無しさん [2021/05/10(月) 21:59:47.57 ID:WQl4RFpm0.net] でも.NETに比べれば、メモリを意識するよ 参照渡しとかMidで打刻とか 結果、値渡しの.NETの方が速いけどw(初期の.NETはVBAの方が速かったが)
814 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 22:34:57.25 ID:ViCp850r0.net] VBA は、シェルスクリプトと同じ。 ちょっとした事しかできない それを知らない香具師が、複雑なプログラミング用途に使って、 結局保守できなくて、Ruby の10倍ぐらいのコストが掛かる ちょっとしたナイフで、マグロをさばいたりするのと同じ。 道具・用途のミスマッチ だから、ウェブ系の会社は、プログラミング言語は適材適所で選択しますって言う。 道具・用途を合わせる。 言語を固定化しない 頭が柔軟。 先に道具を選択しない。 用途から道具を選ぶ 実社会では、ほとんどこればっかり
815 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 23:04:34.19 ID:E9+bgpxg0.net] ExcelのAPIが優秀なのであってVBA自体は微塵も良くない
816 名前:デフォルトの名無しさん [2021/05/10(月) 23:09:51.84 ID:W7s1RH430.net] >>810 で、終わったRubyしか使えず>>712 みたいな嘘を書き散らすようになると
817 名前:デフォルトの名無しさん [2021/05/11(火) 00:42:36.92 ID:OkNnulfr0.net] 先に道具を選択しないと言いながら、道具ありきの叩きw オープン系は外から機能を持って来るのが特徴なので、言語自体の機能は不要 なんでも呼べるシンプルなシェルのようなもの、オープン系の起点としてふさわしい 大量データの組合せならSQL ServerにBULK INSERTしてCROSS JOINするのが最速のはず でもそのクエリを投げるのはVBAで十分で、結果の表示はExcelのCopyFromRecordsetが最速のはず
818 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 01:44:32.13 ID:hzo0csgz0.net] >>801 それじゃ希望した動作にならないのでは? テーブルの数が不定なのだから。 集計するごとにクエリを作り直すことになる。
819 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 05:27:49.58 ID:/SA0DWk40.net] >>814 クエリってAccess VBAで動的に生成できるんだぜ
820 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 07:53:09.78 ID:FeyzCVkSd.net] >>815 そんなん知ってるが、結局VBAかよw
821 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 09:04:47.57 ID:/SA0DWk40.net] >>816 適材適所だろ 全部VBAで組むより全然楽だし分かりやすいよ
822 名前:デフォルトの名無しさん [2021/05/11(火) 11:31:41.06 ID:OkNnulfr0.net] 無償のSQL Serverがあるのに、わざわざ有償で低性能のAccessを使う理由は、初級者であること以外にないですよ でもExcelはいろんな点で他では追い付けない性能があるので、初級者でなくても使う理由がある AccessのグリッドもVS等の普通のグリッドとは違い、非同期のリピーターコントロールでできていて、 大量件数でも先頭から順次描画し、全行をメモリに持たないため、高速になるとのこと その点では、VSより性能がいい(あと子要素の帳票フォームの簡潔さ) そのかわり常に大量のイベントが走るため、不安定になりやすい (DBとしてはなんちゃってなので、業者はADP等でSQL Serverと連携して使う) その速度をさらに超えるのがExcel(特定の使い方で) イベントが少ないので、不安定になりにくい(Delphiもその点が良かった) イベントはブック単位で代表できるため、ソースも統合管理しやすい
823 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 11:39:24.42 ID:UIB0JMdPa.net] ユーザーフォームのマルチページ、タブ自体のBackColorプロパティってありますか? なければ代替手段を教えてください
824 名前:デフォルトの名無しさん [2021/05/11(火) 14:43:21.70 ID:0OaQcACpM.net] Excelフォームが中途半端な出来損ないだから ここを最新のユーザーエクスペリエンス()で作り直せばAccessなんかすぐに駆逐できる
825 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 18:04:28.65 ID:ZT0Qqj13a.net] そうだね 大規模なのはSQL 小回りをきかせたいときはエクセル 事務屋ならこれで8割できてしまうだろうね
826 名前:デフォルトの名無しさん [2021/05/11(火) 19:06:43.69 ID:YSh4nGIkM.net] ただ、VBAはヤメテ
827 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 12:57:12.16 ID:mV8qcvY8a.net] フォームがもう少し何とかなればとは思うよ >>819 然り、痒いところまであとちょっとって感じることがしばしば
828 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:18:28.53 ID:BdPBmasF0.net] >>822 アホか ここは何のスレだと思ってるんだ? VBA書くのがイヤなら SQLSERVERのスレ立てて そこでSQLでもストアドプロシージャでも 関数でも好きな話題してれば良かろう
829 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:47:57.27 ID:MQbyKY6x0.net] なんだ?喧嘩勃発か?
830 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:55:47.07 ID:bNkKHmITM.net] ちょこちょこ書く分には十分なものだと思うよ
831 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 12:11:34.16 ID:RAFicIoxa.net] そうかな
832 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 16:10:32.92 ID:yc7BZe0Ia.net] ビジネスやってる人じゃないとわからないと思うよ
833 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 17:14:21.80 ID:4K+rsr0c0.net] 確かに。趣味レベルの自分じゃ縁のない話すぎるわ
834 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:39:49.87 ID:BPKFCkYp0.net] なんのビジネスだよ・・・
835 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:43:26.98 ID:nlP9UXqMd.net] 普通の仕事で書くコードってことじゃないの
836 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:48:35.69 ID:a3vkA3q7a.net] ビジネスってよりワークで使うかな ワークマンってよりはビジネスマンか…
837 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:50:41.60 ID:a3vkA3q7a.net] 使いどころはビジネスってよりワークかな でもワークマンってよりはビジネスマンか…
838 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:12:55.35 ID:HJ1eRgpP0.net] ワークってよりビジネスな場合もあるかな でもワークマンってよりはビジネスマンか…
839 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:19:10.07 ID:BPKFCkYp0.net] なんでvbs採用したんだろう jscriptならもっと未来あっただろうに tsへの移行も自然だっと思う
840 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:27:44.43 ID:HJ1eRgpP0.net] >>835 そらもうvbaの登場時期が早かったからとしか言いようがない vba開発チームが頑張ったんだろう 30年ぐらい前はBかCが当たり前で、インターネットもロクにないのに謎のjscriptなんて言語が勝つのは無理がある
841 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:17:06.17 ID:NU+NRHZVd.net] >>818 www 初級者まる出しの文章で笑えるw
842 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:20:10.01 ID:NU+NRHZVd.net] >>819 普通じゃ無理。 無理矢理タブもどきをつくるか、頑張ってWin32APIでやるか。 Win32APIでやるのは、まあ辞めとけ。
843 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:39:26.02 ID:q7wj393Za.net] タブを切り替えた瞬間にバックカラーも切り替えれば良いだけ
844 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 09:49:10.63 ID:rbrSxZ/Wa.net] 勝手に見出しの色のことだと思ってた エクセルのシートにやるみたいなやつ
845 名前:681 mailto:sage [2021/05/14(金) 10:40:26.20 ID:f8pG7pdca.net] 681です 皆さんのおかげで無事目的のコードが作れました あと1つ質問なのですが… 画像のように重複した数値を除く総計を算出したいと思っています 会社名毎の数値を合計すればいいだけだと思ったのですが、 どうしても重複のものも一緒に合算してしまいお手上げ状態です 因みに元データは都合によりいじれないため、合算前に重複部分を削除等はできません 恐れ入りますが、宜しくお願いします
846 名前:681 mailto:sage [2021/05/14(金) 10:41:19.08 ID:f8pG7pdca.net] 画像を貼り忘れておりました https://i.imgur.com/HLZYwhr.png
847 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 11:33:58.88 ID:+U8xhPuO0.net] 会社ごとの重複を除く合計が出たんだからそれを足
848 名前:すだけだろ 逆に何をやったらまた重複したものも合算するのか理解できない [] [ここ壊れてます]
849 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 11:38:54.22 ID:usYNgZ690.net] いつものあいつだぞ
850 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 12:11:07.63 ID:mu0LH/UJa.net] >>841 もとデータをいじらないでも、もとデータを別のシートにコピーすればいじれるんじゃね
851 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 12:24:14.75 ID:Vktv5FHm0.net] >>841 重複除けてるのなら、結果をSUM関数で合算するだけじゃん。 >>686 で上げたように、そもそもVBAすら使う必要ない。
852 名前:デフォルトの名無しさん [2021/05/14(金) 13:02:54.78 ID:kX62fe1ba.net] 君らも構うねー >>681 への数多の回答を経て「皆さんのおかげで」としか言及しない礼儀知らずなんぞ俺なら2度と助けようと思えないけどな
853 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 14:11:01.00 ID:C4z8VNUC0.net] >>841 SQLでやってるの? VBAでやってるの? SQLなら会社、氏名、数値でグルーピングしてから合計求めりゃいいだろうし VBAでやってるなら上からループして会社、氏名、数値をコレクションかディクショナリーに登録しておいて 同じ組み合わせのものが登録されてたら飛ばせばいいだけじゃないの?
854 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 16:00:12.91 ID:bBl2sxC0r.net] ほんとに、よう構うわ
855 名前:デフォルトの名無しさん [2021/05/14(金) 16:15:08.56 ID:N2rlLeCr0.net] 暇人しかレスしない そりゃ高齢化する罠
856 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 17:11:44.35 ID:C4z8VNUC0.net] 暇と時間は自分で作るもの
857 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 17:53:42.33 ID:usYNgZ690.net] この「いつものあいつ」はperlスレで釣りしてたあいつだろ 回答がないと別ID自分に回答するクズだぞ IDをコロコロ変えていることで気付け
858 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 18:02:17.06 ID:9jitt6PZ0.net] ここに若い人はいないと思われ 定年退職した60〜70のジジババ様がメインの予想
859 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 19:35:21.69 ID:EALw/Xv8a.net] いちゃ悪いか?
860 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 19:38:49.82 ID:b+Ipd3IB0.net] >>854 煽り体制なさ杉 ゴミは無視して自分のやりたいことをしておけば良い
861 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 19:53:03.83 ID:FyOJKl4nM.net] アラサーのおっさんですわ
862 名前:デフォルトの名無しさん [2021/05/14(金) 20:06:30.42 ID:M77EX5P+0.net] 平成生まれのおっさんかよ
863 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 20:10:13.25 ID:b+Ipd3IB0.net] 令和生まれの赤子が常駐してたらマジでびびるしこんな言語をやるべきじゃないと諭すレベル
864 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 23:02:24.08 ID:eHp6F4GU0.net] 答えたい人は答えて無視したい人は無視すればいいのに 「俺が気にくわないからお前らも答えるな!」ってガキ大将かなんか?
865 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 23:04:28.38 ID:b+Ipd3IB0.net] >>859 支え合ってる人たちが気に入らない という社会に馴染めない方の怨嗟 vbaという単語を知ってるだけでも見込みはあるのに、どうしてそうなったのか
866 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 01:26:37.20 ID:FnRhwbWQ0.net] 定年したジジババだらけだったら異常だろ 多分30〜50代あたりのPC世代だね
867 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 10:20:07.29 ID:sw5CYKBX0.net] ウィンドウズ95を25で迎えた人間は50歳行ってるよ
868 名前:デフォルトの名無しさん [2021/05/15(土) 11:32:20.38 ID:ULjvOOdJ0.net] >>859 そんな奴おらんやろ〜
869 名前:デフォルトの名無しさん [2021/05/15(土) 12:01:56.35 ID:eYtIld1hF.net] memo https://www.mhlw.go.jp/toukei/list/dl/maikin-teisei-20210406.pdf https://www.hello-pc.net/howto-excel/shisyagonyu/ www.excel.studio-kazu.jp/kw/20131108152616.html https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12216877167 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1314241033 https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_windows8-mso_2013_release/excel%E3%81%AE%E5%8D%98%E7%B4%94%E3%81%AA%E8%A8%88/e5421c34-8053-4132-a0a6-14729e505376
870 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 12:25:50.26 ID:vXVB+fnY0.net] >>863 チッチキチー
871 名前:デフォルトの名無しさん [2021/05/15(土) 13:49:58.81 ID:YDtAUn460.net] Lbound関数がどうもうまく出来ないのでお知恵を拝借させてください。 -------------------------------------------------------------------- 【VBA標準モジュール】 Option Explicit Function F_Test(wRange As Range) As Integer F_Test = LBound(wRange) End Function -------------------------------------------------------------------- 【ワークシート】 A列は別に何でも良くて,例えば以下のとおり。 A1セル 10 A2セル 11 A3セル 12 A4セル 13 -------------------------------------------------------------------- B1に =F_Test(A1:A3) の数式で「3」という答えが欲しい。 その他,A1:A4なら「4」,A2:A3なら「2」という感じ。 要は引数の配列の添字の数が欲しい。 Functionの引数部分をVariantに変えて Function F_Test(wRange As Variant) As Integer にしてもうまく行きませぬ。
872 名前:デフォルトの名無しさん [2021/05/15(土) 13:54:19.11 ID:YDtAUn460.net] すみません。 LとUを間違えました。 × LBound ○ UBound 配列がありません とか #VALUE! になってしまいます。
873 名前:デフォルトの名無しさん [2021/05/15(土) 13:55:24.28 ID:Q8PHpDoBM.net] wRange.rows.Count
874 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 14:02:11.21 ID:ur6+LZEp0.net] >>867 F_Test = wRange.Count >>868 横長だとアレでソレ そういや関数には単純にセルの数を返す方法ってないんかね
875 名前:デフォルトの名無しさん [2021/05/15(土) 14:10:21.57 ID:YDtAUn460.net] >>868 >>869 なんと! ありがとうございます。 配列 サイズ で検索すると Ubound関数を紹介するサイトばかりで,何のことはない count でOKとは!
876 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 14:13:32.27 ID:zrs2Seg4H.net] >>869 セル数は一発では求まらないね WorksheetFunction.COUNTA + WorksheetFunction.COUNTBLANK とか、 UBound(1) * UBound(2) とか工夫が必要
877 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 14:15:26.88 ID:q5D0BLy0a.net] 自分がわかっている事を、相手に伝えられない 、いっしゅの病気だと思っておいてね
878 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 14:17:09.49 ID:ur6+LZEp0.net] >>870 ウォッチ式に「wRange」入れると中が見れる 「+」押してそれっぽい奴探せばok めんどい事しなくても、大体は元々用意されている >>871 ありがとう まぁ今まで気づかなかったぐらいだし、まぁ無くてもいいっちゃいいんだけど
879 名前:デフォルトの名無しさん [2021/05/16(日) 15:00:47.34 ID:fN3wEca+0.net] Sub Func() Dim objIE As InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True objIE.Navigate "https://www.aguse.jp/" Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop objIE.Document.getElementById("url").Value = "99.9.9.9" objIE.Document.getElementsByClassName("btn1").Click End Sub なぜ、クリック処理の所でエラー発生するのでしょうか?
880 名前:デフォルトの名無しさん mailto:sage [2021/05/16(日) 15:15:41.45 ID:cdV5xYRld.net] >>874 getElementsByClassNameは配列を返すから(同じクラスを持つ要素の配列が返る)
881 名前:デフォルトの名無しさん mailto:sage [2021/05/16(日) 15:32:17.72 ID:T2VZn2Kl0.net] IDがあるならgetElementByIDの方が良いぞ classのまま一つ目をclickするなら objIE.Document.getElementsByClassName("btn1")(0).Click
882 名前:デフォルトの名無しさん mailto:sage [2021/05/16(日) 15:39:13.46 ID:cdV5xYRld.net] CSSっぽく指定できて最初の要素を返してくれるquerySelectorもオヌヌメ
883 名前:デフォルトの名無しさん [2021/05/16(日) 16:10:27.36 ID:fN3wEca+0.net] >>875 ~877 ありがとうございます。 クリックできました
884 名前:デフォルトの名無しさん mailto:sage [2021/05/16(日) 17:21:27.26 ID:ak429d4ca.net] クリックのことかー!
885 名前:デフォルトの名無しさん mailto:sage [2021/05/16(日) 18:59:49.40 ID:uzBgfuya0.net] ダブルクイック
886 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 02:01:26.83 ID:BeO0jfUB0.net] >>870 だって配列じゃないからな 変に用語使わず素直に range 個数 とかでググった方がいいよ 上のレスにあるgetelemetsby系のメソッドも返すのは配列じゃなくてコレクション
887 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 06:19:11.84 ID:Z0RWJbQc0.net] MapだのArrayだの機能入れりゃいいだけなのに入れない どういうつもりだこいつら
888 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 08:15:11.48 ID:8cwZKDcEM.net] VBAは既に終わった過去の技術 移行を促すために意図的に使いづらくされることはあっても、改善されることはない
889 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 08:58:47.08 ID:Z0RWJbQc0.net] そこにある幸せを制限されてる 上から目線で苦しめられてる 悔しくて泣く
890 名前:デフォルトの名無しさん [2021/05/18(火) 11:12:26.25 ID:9uIGZAIgM.net] Office365でしか動かないVBAV2作るぐらいなら他の言語使うわな
891 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 12:10:40.31 ID:sRK+fHDU0.net] だったらそうすればいい
892 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 14:24:29.88 ID:Xi/08Sqba.net] だったらそうすればって別に俺たちはマイクロソフトじゃねえけど
893 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 14:42:19.77 ID:KlG9vmA0M.net] Office365には既にOffice Scriptsがあるからそこはとっくに解決済み あとはVBAを弾圧していくだけや
894 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 14:48:17.90 ID:R43akpHGM.net] Power FX https://docs.microsoft.com/ja-jp/power-platform/power-fx/overview
895 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 16:33:00.45 ID:5G0DWm0g0.net] VBAからJavaScript書くと 予約語は[]で括らなければいけなかったり Callbynameで指定しなければいけなかったり 色々めんどくさい Jqueryだって使えるか分からない そもそもJavaScriptなんてWebで クライアント周りで使うもんだから わざわざEXCELの言語で使う用途が よく分からない まだクラッシックASP辺りで VBSと組み合わせて使うなら納得もいくけど そんな難しいもんじゃないから 必要に駆られたときに覚えれば十分だろう
896 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 18:00:53.92 ID:sY2jShf/0.net] だから若者はVBに興味示さない VB=高齢者のプログラミングだからでしょ?
897 名前:デフォルトの名無しさん [2021/05/18(火) 18:48:43.65 ID:ljRiA37AM.net] jqueryでExcel.Applicationを操作出来るように拡張するのか 夢が広がるね
898 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 18:49:34.47 ID:5G0DWm0g0.net] EXCELで簡単にプログラム組むことが出来るからな VBと言うのをVBSのこと言ってるのかVB.Netのこと言ってるのかVBAのこと言ってるのか知らんが EXCELで楽したくてVBAから入る若い人は多い。 VBA覚えた人がVB.NetやってC#やってそこからWeb系に入って初めてJavaScriptをHTMLやCSSと一緒に覚える人なんてザラ。
899 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 19:43:19.02 ID:LbhgO8Sf0.net] >>893 完全に俺 経理だけど、vbaで楽してC#でゲーム作って、 jsでクラウドツールのサイト自体書き換えて勝手に機能追加したりphpでスクレイピングしたり 年中プログラム書いてるわ。楽しい
900 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 19:49:05.74 ID:LbhgO8Sf0.net] >>890 VBAでjs使うのは、一つは動的なサイトのスクレイピングする時 htmlだけの操作でしんどい時は、jsでclick辺りさせるだけでサクサク進む事がある ってかこれ以外でjs書くことはほぼ無いと思う。 jquery使えない時は無理やりappendかなんかしてたけど、もうやり方も忘れたな 色々試している内にchromeのコンソールにぶっこむのが一番楽って結論にたどり着いた
901 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 20:48:35.33 ID:Y1RJXdtP0.net] Ruby で、Selenium Webdriver, Nokogiri で、 スクレイピング・ブラウザの自動操作する時にも、 JavaScript, jQuery を使える 埋め込みRuby・ERB を使えば、どんなファイルにも、 <%= 式 %>, <% 式 %> で、Rubyの式を埋め込める a.html.erb, b.js.erb みたいに、 HTML, JavaScript ファイル内に、Rubyの式を埋め込める
902 名前:デフォルトの名無しさん [2021/05/18(火) 20:57:22.08 ID:dFlzu8QN0.net] >>896 Ruby馬鹿は>>712 のような嘘を書いて逃げる馬鹿
903 名前:デフォルトの名無しさん mailto:sage [2021/05/18(火) 23:24:28.39 ID:sY2jShf/0.net] そんな事よりさ、おぢーさん達は加齢臭の処理ちゃんとしてくれよ 若者に失礼だと思わね?プンプンプンプンさ
904 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 00:19:04.29 ID:GKVmaO5T0.net] >>896 何でEXCELの利点であるシートやフォームを使わないの? バカなの?死ぬの?
905 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 00:20:19.16 ID:GKVmaO5T0.net] >>898 ジジイであってクレクレw
906 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 01:20:40.10 ID:ZD8mpcBW0.net] くっせぇーなマジで パソコンまで加齢臭プンプンなんじゃねーのか爺さん達よ?
907 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 07:45:42.64 ID:WworO/MIM.net] 5chは加齢臭ジジイの巣窟ですよ。 子供は他所で遊んだ方が良いですよ。
908 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 14:08:44.86 ID:IrWk1Moq0.net] >>870 それはVariantの2次元配列にRange.Valueを代入して高速化を行う場合の話で、単に行数求める場合に使うのは筋が違う。 Dim varRng As Variant varRng=wRange.Value F_TEST=Ubound(varRng,1) というか、Ubound使うなら引数をRangeにするのが間違い。 Function F_Test(wRange As Variant) As Integer F_Test = UBound(wRange,1) End Function として、呼び出す時に Debug.Print F_TEST(sht.Range("A1:A3").Value) とする。
909 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 18:26:06.40 ID:Vg/vRgKrd.net] 標準モジュールにcsvFile関連に関わるコードをまとめようと思ってます。 フォームABCと3つありそれぞれのTextBoxの文字列を使用するのですが、引数にフォームを渡すと後でモジュールの引数?を見た時にどのフォーム?ってなるんですが、なんか分かりやすい方法ありますか?
910 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 18:34:23.71 ID:/q2TOFSQ0.net] 変数名に書けばいい
911 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 20:30:25.56 ID:GKVmaO5T0.net] >>904 あれ? EXCELのFormってNameプロパティ持って無かったっけ?
912 名前:デフォルトの名無しさん [2021/05/19(水) 22:00:48.31 ID:+ffuEuggp.net] みんな、どうやってVBA覚えた?必要に迫られて?
913 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 22:12:24.80 ID:jE/FqELl0.net] >>907 まだ覚えられないの?
914 名前:デフォルトの名無しさん [2021/05/19(水) 23:13:26.00 ID:GsBTRjrb0.net] あわしろ氏は、Microsoft固有の言語は覚えないほうが良いと言ってた。
915 名前:デフォルトの名無しさん [2021/05/19(水) 23:17:32.49 ID:cF8YUUzA0.net] 馬鹿の記憶キャパシティは限られるからな
916 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 23:22:58.20 ID:mqMv5E730.net] 覚えるとかそういうものではない
917 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 23:42:58.43 ID:ZD8mpcBW0.net] >>907 必要に迫られて覚えたもなにも、中学か高校で習うだろ普通。
918 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 00:07:22.00 ID:6elix0QCH.net] >>909 .netもMS固有の言語みたいなもんだが、普通に色んな職場で使われとるやん
919 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 01:22:13.99 ID:BLOb04120.net] 学習しなくても最初からできる天才タイプもたまにいるよマジで
920 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 01:56:26.37 ID:6elix0QCH.net] そもそもマイクロソフト固有の言語ってなんやねん みんな既成の言語や他社製品を買収して、それを手直しした物ばっかやん
921 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 03:27:31.15 ID:sxWNX54s0.net] microsoft固有の言語って今どきある? VBAとかBATとか、失われゆくものだけでしょ。 そりゃ今から時間をかけて覚えるのはもったいないわ。 他の言語使える人なら、VBAなんてわざわざ学習する時間をかける必要もなく、それなりのマクロは組めると思うけど。
922 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 04:02:59.34 ID:BLOb04120.net] あまいわ、Excel独自のルール知らないとまともなVBA組めんわ 表示形式とかその辺もそうだし。
923 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 04:05:55.57 ID:dmfe27mta.net] 覚えるんじゃなくて調べればいいだけだし
924 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 05:01:49.61 ID:sxWNX54s0.net] >>917 それは言語の問題ではなくAPIの問題かと
925 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 07:32:27.21 ID:z6ttNILB0.net] 調べるのも学習コストだと思うがね 言葉遊びだな
926 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 08:16:14.68 ID:6elix0QCH.net] 環境に左右されないコード書く仕事なんてそうそうないだろ 何やるにしても調査と学習は必要だわ
927 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 09:53:49.41 ID:3grODMDb0.net] VBAは覚えてからでなければ組めないほど難しいとも思えん 目的の動作に必要な部分だけを検索すれば初心者でもすぐ出きるとおもう 自分で考えないで質問ばっかりすりから覚えられないんじゃねーの
928 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 09:59:01.67 ID:QrP75Wi10.net] A:まず顧客名XXの行、商品とかいてある列のデータをとります B:() このざま けしてとっつきやすくはない
929 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 10:03:51.70 ID:XA+o92qv0.net] みんなすまん 最近Ruby信者やあわしろ教信者がこのスレに多発するようになったのはひょっとすると俺のせいかも知れない ぶっちゃけ始めるのにいい言語て何 part4 https://mevius.5ch.net/test/read.cgi/tech/1615612545/ このスレでVBA推ししてたから 変な狂信者達がこのスレにうろつき出すようになったのかも知れない そうだとしたらマジですまんかった
930 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 13:25:45.32 ID:8sYLIX1sM.net] 宣伝すんな糞が
931 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 17:45:33.93 ID:Gd/4i8WIM.net] ユーザーフォームで行の選択位置を変えるボタン▲▼がクリック数と一致しない問題があったんだけど あんまり早くクリックするとダブルクリックイベントに持って行かれるという記事見て目から鱗だったわ
932 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 17:46:49.15 ID:Gd/4i8WIM.net] ↑ボタンの動作
933 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 17:51:20.11 ID:3grODMDb0.net] 目から鱗、鼻から牛乳
934 名前:デフォルトの名無しさん [2021/05/20(木) 18:31:11.76 ID:A6q2Mdlm0.net] >>926 当たり前だろ 頭は大丈夫か?
935 名前:デフォルトの名無しさん [2021/05/20(木) 18:32:38.54 ID:PnXLQc6v0.net] はい、頭大丈夫か、いただきました〜。 ごっつあんです。
936 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 18:39:24.43 ID:zC/KxF8YM.net] >>929 理由を知ってるからそう思えるのであって意外と分からんもんよ
937 名前:デフォルトの名無しさん [2021/05/20(木) 18:51:23.66 ID:A6q2Mdlm0.net] >>931 常識だろ コピペしかしない頭が弱い奴にはわからんだけ そういう頭の弱い奴はWindowsの仕組みすらろくに把握していない アイコンをダブルクリックする操作から類推する頭がない
938 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 22:09:53.73 ID:6elix0QCH.net] 目からビーム
939 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 22:29:51.31 ID:3grODMDb0.net] 喉から手
940 名前:デフォルトの名無しさん [2021/05/20(木) 23:27:14.65 ID:PnXLQc6v0.net] はい、常識だろ、いただきました〜。 ごっつあんです。
941 名前:デフォルトの名無しさん mailto:sage [2021/05/20(木) 23:59:48.81 ID:BLOb04120.net] 良く考えてよ、そんなにVBAが楽だったらそこらじゅうでエキスパートが溢れ帰ってるわ
942 名前:デフォルトの名無しさん [2021/05/21(金) 00:49:19.69 ID:59CyTM7+0.net] >>936 そもそも世の中馬鹿だらけ
943 名前:デフォルトの名無しさん [2021/05/21(金) 01:00:38.44 ID:QTMvWd2k0.net] >>937 おまえそれ、あわしろ氏にも言えるの?
944 名前:デフォルトの名無しさん [2021/05/21(金) 01:32:27.01 ID:59CyTM7+0.net] >>938 言えるぞ そいつは世の中馬鹿だらけという当たり前のことを知らん馬鹿なのか?
945 名前:デフォルトの名無しさん [2021/05/21(金) 02:15:25.58 ID:QTMvWd2k0.net] あわしろ氏から見たらお前もバカの一人にすぎないのだが。
946 名前:デフォルトの名無しさん [2021/05/21(金) 02:19:49.30 ID:59CyTM7+0.net] >>940 悔しかったか?
947 名前:デフォルトの名無しさん [2021/05/21(金) 02:25:12.36 ID:7tu/wNc+0.net] ttps://ja.asuka.io/whois/126.31.241.3 の”SoftbankBB ABUSE”を取得したいと思っているのですが、どのようにすればいいのでしょうか? Dim objIE As InternetExplorer Set objIE = New InternetExplorer --省略-- objIE.Document.getElementsByClassName("whois-result")
948 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 05:43:15.48 ID:BTMhnzWw0.net] >>937 そんな。。。いきなしベストアンサー出さなくても。 みんなさ、もうちょいもて遊んでよ(笑)
949 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 05:57:52.66 ID:fpWGW1ET0.net] Ruby のnokogiri でスクレイピングして、 CSS セレクター・正規表現で、2つマッチした require 'open-uri' require 'nokogiri' url = "そのURL" doc = Nokogiri::HTML( open( url ) ) element = doc.at_css( '#result-126_31_241_3 > span' ) # id の直下のspan re = /^role:/ # 行頭から element.content.each_line do | line | # 1行ずつ処理する line.chomp! # 末尾の改行を削除する line.match( re ) { |matched| puts line } end 出力 role: ABUSE SOFTBANKJP role: SoftbankBB ABUSE
950 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 08:28:08.99 ID:QhlqoCTd0.net] Rubyなんてカーバンクルの頭にめり込んでいるような気持ち悪い名前の言語使うくらいなら JavascriptとCSSとJQueryの組み合わせでいいと思うの
951 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 08:48:15.27 ID:gnmVjeq7H.net] >>942 roleが2つ以上あった時、どうやって選ぶの?
952 名前:デフォルトの名無しさん [2021/05/21(金) 15:24:51.08 ID:xTrBkQ+z0.net] Ruby馬鹿は>>712 のような嘘を書いて逃げる馬鹿
953 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 15:33:03.33 ID:BTMhnzWw0.net] 知ったかばっか
954 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 16:32:03.60 ID:CZi3W7Lh0.net] 知ったかばっかだと知った
955 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 17:10:27.15 ID:IWCymVKS0.net] VBAを覚え始めて2週間だけど まだこのスレに書かれているコードの意味が全くわからないwww でもコード書くの楽しいなって思ってやってます
956 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 19:05:32.27 ID:ggQpFO18d.net] 同じだ 自分はVBAエキスパートの勉強してるよ
957 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 19:59:51.31 ID:IWCymVKS0.net] 自分も来月ベーシックうけまーす!
958 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:18:27.47 ID:BTMhnzWw0.net] 人によってはワークシート関数よりマクロの方が難しいっていう人もいるからね。逆もいるしね。
959 名前: mailto:sage [2021/05/21(金) 20:35:13.20 ID:XRGlJQOp0.net] >>940 誰?
960 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:42:52.48 ID:bfSFy0HM0.net] ぼく
961 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 20:43:08.07 ID:bfSFy0HM0.net] うそです
962 名前:デフォルトの名無しさん [2021/05/21(金) 20:43:58.66 ID:7tu/wNc+0.net] perlなどがない環境もあるので、出来ればすべてVBAで出来ないかと考えています。 >>946 roleが2つ以上の場合は一番最後のroleにある値を取得したと考えております。
963 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 22:35:02.45 ID:Yczu/9Oq0.net] 左手に電卓を持ち、右手は交互に電卓、マウス、テンキーを使い分ける上司とお局様とその下僕達 その下僕の後輩が自分 これが日本の一部上場企業なのか?
964 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 00:10:21.12 ID:UfMUNU1m0.net] うん。だってエクセルが計算間違えたらどうすんの? 電卓で計算した数字をパソコンに打ち込むのは昔からの伝統だよ
965 名前:デフォルトの名無しさん [2021/05/22(土) 00:36:58.31 ID:mcqOhXTe0.net] 馬鹿が作った変な式やマクロのせいで合わないなんてこともある
966 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 00:40:22.69 ID:Oef+89DPd.net] 2進数は変な誤差が出るから信用できないってさ
967 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 01:34:41.39 ID:S7UeFiS10.net] 初心者がつくったマクロのほうが信用できない
968 名前:デフォルトの名無しさん [2021/05/22(土) 01:44:44.93 ID:mcqOhXTe0.net] >>962 初心者というより、ここで質問しなきゃいけないような馬鹿のことだな
969 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 02:41:18.25 ID:S7UeFiS10.net] あと、悪意のある熟練者が作ったマクロも信用できないけどな
970 名前:デフォルトの名無しさん [2021/05/22(土) 02:56:17.42 ID:vJuB/ZK60.net] >>964 正しいが悪意を言いだしたらキリがない 馬鹿のくせにで自分には作れると勘違いしている馬鹿も悪意のうちに含めるのならばわからんでもない 無自覚の悪意というこという意味で
971 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 05:49:02.27 ID:Tpb6ZbgH0.net] >>961 Doubleとかの浮動小数点を使う型の場合、IEEE754準拠のために起こるやつのことだね それは例えば小数点以下4桁までなら通貨型が固定小数点型だから使えるとか 一度割ったときの値が丸めを行うところまで10の倍数掛けて整数桁にしてから計算して、 その後最初に掛けた分で割ってやれば解決するようなことを知らない人が組むとそうなるわけで 別にEXCEL VBAに限ったことじゃないし、組む人の問題だよ JavaみたいにbigDecimal型とか持ってる言語もあるにはあるけどね 後、VBAでは四捨五入も銀行丸めになるから それがイヤならWorksheetFunctionでRound使うとかね。
972 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 07:10:12.96 ID:UfMUNU1m0.net] 回答者が雑な回答で悪い風潮あるみたいだけど、質問してくる初級者にも問題あるって話 なんでそんな質問してるのだろ?ってのが多いから
973 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 07:51:26.87 ID:qSrTa/6NM.net] 分からないことが何か分からないぐらい分からないとそういう質問になるのはよくあることだと思うよ だから何が分からなくて悩んでいるのかを想像して答えられる範囲で答えるのがベターじゃないかな それが回答者にとって勉強になる事だってあるだろうし 質問者も答えを咀嚼した上で追加で疑問点が出るなら質問してもらって構わないし、答えを理解できなかったらどの部分が分かりづらかったか聞けばいい 質問スレで何か質問するとバカだのアホだの言われるような質問しづらい雰囲気なのは本末転倒でしょう
974 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 08:18:29.11 ID:Tpb6ZbgH0.net] >>951 昔は仕事でVBAやってれば あんちょこ本屋で立ち読みして 傾向だけ把握してれば大体受かる 感じだったけど今はどうなの?
975 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 08:18:32.56 ID:6qbME2XxH.net] 直接の会話だと不明点を確認しながら進めるのが普通なのに、掲示板だと後出しと言われる風潮はいいかげん頭が固すぎると思うなの
976 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 08:20:17.81 ID:GrewoE1S0.net] そういう奴はかまってちゃん 人を煽ってレスが欲しくてしょうがないんだろうな
977 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 09:04:45.45 ID:UfMUNU1m0.net] 文句があるならヤフー知恵袋でやりとりしてください。 絶対答えなきゃいけないなんていう義理は存在しないし
978 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 12:27:49.41 ID:S7UeFiS10.net] >>970 回答してもらっておいて文句いうような奴には教えんよ
979 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 12:43:21.86 ID:0H5cNeIlM.net] >>970 程度問題だろ ちゃぶ台返しになるような前提を後出しされても困る
980 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 13:15:35.23 ID:UfMUNU1m0.net] 文句あるなら他所の質問掲示板へ
981 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 15:54:43.50 ID:idCJV0DjM.net] 直接の会話じゃないので
982 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 15:58:35.26 ID:idCJV0DjM.net] 何がしたくて何をして何を期待して何が起きたかぐらいは誰でも手間かければ書けるのにその手間を質問者側に押し付けるな
983 名前:デフォルトの名無しさん [2021/05/22(土) 18:31:31.81 ID:Lbh7lRt50.net] 質問者あっての質問スレですからなあ。 もう少し気を使っていただかないと。
984 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 21:20:31.42 ID:UfMUNU1m0.net] 自助努力してください
985 名前:デフォルトの名無しさん [2021/05/24(月) 01:46:42.03 ID:SKWG4E+9p.net] 在庫管理でクロス集計表を使ってるんだけど 配列で取り込んだデータをデータがあったセル位置に戻す時って どう指定してあげればいいの? 【用途】 納期毎に設定される納品数を在庫から引いて いつ欠品になるか知りたい 伝わるか分からないけど↓ 使ってるフォーマット形式 縦列 部品名 在庫 横 納期 納品数
986 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 04:35:06.28 ID:nupyrRyu0.net] 他人に伝わる表現方法を考えたほうがいいと思う。いやまじで。
987 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 10:56:44.51 ID:ERBOMeaq0.net] >>980 配列で取り込んだデータをデータがあったセル位置に戻すことが必要な理由とは?
988 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 12:46:37.40 ID:ipl2L3KHd.net] >>980 配列に取り込んだ時と逆のことをするだけでは Cells(2, 3) = 配列(2, 3) みたいに
989 名前:デフォルトの名無しさん [2021/05/24(月) 14:13:14.63 ID:NNOyF0WeM.net] 違うよ クロス集計表の元データの位置に書き戻してやらないとクロス集計表が壊れるじゃないか そんなの質問者は望んでいないよ。たぶん
990 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 14:19:09.76 ID:LTdpDg+b0.net] 誰か質問を説明的に翻訳してくれ
991 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 14:44:27.07 ID:ircPqyoF0.net] 元データが変化するわけじゃないならセルに返す必要ないんじゃないの
992 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 14:44:58.38 ID:I5I449Rl0.net] 結局こうなるわ コミュニケーションから勉強だな
993 名前:デフォルトの名無しさん [2021/05/24(月) 14:55:47.77 ID:MUcNJueI0.net] Cellの値の変更時の処理を記述する為に、WorkSheet_Change イベントを使ってるのですが、 監視対象の Cell をダブルクリックして入力カーソル「|」表示状態になっただけで(値を変更せずに Cell がフォーカスを失っても)、イベントが発生してしまいます。 本当に値が変更された時だけ、WorkSheet_Change イベントが発生するようにするにはどうすればいいでしょうか。
994 名前:デフォルトの名無しさん [2021/05/24(月) 14:55:59.69 ID:MUcNJueI0.net] Cellの値の変更時の処理を記述する為に、WorkSheet_Change イベントを使ってるのですが、 監視対象の Cell をダブルクリックして入力カーソル「|」表示状態になっただけで(値を変更せずに Cell がフォーカスを失っても)、イベントが発生してしまいます。 本当に値が変更された時だけ、WorkSheet_Change イベントが発生するようにするにはどうすればいいでしょうか。
995 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 14:57:27.80 ID:LTdpDg+b0.net] エスパー 福井県立図書館 覚え違いタイトル集 www.library-archives.pref.fukui.lg.jp/tosyo/category/shiraberu/368.html
996 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 14:57:57.69 ID:uCaZzUhZ0.net] そもそも在庫管理なんてexcelでやる内容じゃないしな 外部にdb用意して excelはそこから参照して クロスなりなんなり汁
997 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 16:02:34.89 ID:SNshkRQxd.net] お前らノーパソ?デスクトップ? MyPCはどっちでプログラミングしてる?
998 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 16:10:42.22 ID:aftRNFP10.net] そもそもクロス集計をピボットで行ってるのか SQLでCROSS JOIN使ってるかで 答えが変わるしな
999 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 16:12:48.27 ID:pNkn+mP6M.net] >>992 MacBook Windowsはもう持ってないしExcelも一切使わない
1000 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 16:19:31.03 ID:aftRNFP10.net] >>989 本当に値が変わったときのみ Worksheet_Changeイベントを拾うのは恐らく無理。 元々のセル値をとっておき、Worksheet_Changeイベントの処理の中で対象セルの値が変わったを判定して、違っていれば処理を行うようにする。
1001 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 20:24:23.56 ID:m/UNwUrga.net] 編集時に同じ値を入力した場合も 変更扱いじゃね
1002 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 21:45:40.40 ID:aftRNFP10.net] >>996 それって何か意味あるの?
1003 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 22:50:52.89 ID:ooplu3lnd.net] 紙の表を目で追いながら画面を見ずにどんどん入力するとか普通にある 以前と同じかいちいち確認しながらより能率がいいから
1004 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 01:55:38.61 ID:HvNz/zzH0.net] 質問いいですか?
1005 名前:デフォルトの名無しさん [2021/05/25(火) 02:04:56.40 ID:tL58A71i0.net] お断りします
1006 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 67日 3時間 56分 13秒
1007 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています