Excel VBA 質問スレ Part73at TECH
Excel VBA 質問スレ Part73 - 暇つぶし2ch262:デフォルトの名無しさん
21/10/02 06:08:02.24 g1EUYVpxM.net
>>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど

263:デフォルトの名無しさん
21/10/02 07:21:09.62 f83gGEH/0.net
VB7を待て!

264:デフォルトの名無しさん
21/10/02 07:44:35.99 PmOXqFk20.net
>>259
言ってる意味が分からない。
生成した後初期化用のメソッド呼ぶだけだろ?
なんでそんなのが面倒でバグの元になるんだ?
お前はそんな程度でバグを生むソースを書くのか?

265:デフォルトの名無しさん
21/10/02 07:49:32.43 i6pQYLUQ0.net
それ言い出すとどんな言語でも「だけ」になるぞ

266:デフォルトの名無しさん
21/10/02 07:52:52.17 PmOXqFk20.net
それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。

267:デフォルトの名無しさん
21/10/02 07:53:44.67 PmOXqFk20.net
>>262
例えば?

268:デフォルトの名無しさん
21/10/02 08:50:27.63 7sXji/t3M.net
むしろ>>263の方に例えば?って言いたいわw

269:デフォルトの名無しさん
21/10/02 09:59:20.90 PmOXqFk20.net
>>265
学生なのか?
社会人であるなら上司から
質問を質問で返すようなマネはするなと
教わらなかったのか?
まぁいい
答えてくれれば答えよう
それが順序というものだ

270:デフォルトの名無しさん
21/10/02 10:26:50.08 SSNRs28sM.net
>>266
バカなの?
別人だし>>263は質問じゃねーし
まあまともな答えは期待してないから答えなくてもいいぞw

271:デフォルトの名無しさん
21/10/02 10:45:25.61 l9bGJwl90.net
>>267
お前はまた勉強する機会を損失した
ただそれだけのこと

272:デフォルトの名無しさん
21/10/02 11:55:15.97 SSNRs28sM.net
勉強?
からかわれてることぐらいは理解した方がいいぞw

273:デフォルトの名無しさん
21/10/02 11:56:22.57 h3OHY9Ln0.net
まあまあ、通りがかりの者だけど、お前ら仲良くやれや

274:デフォルトの名無しさん
21/10/02 12:17:57.73 4Bm9Y75Jp.net
まったく最近のじじいは
マウントどうのとかほざくくせに
負けず嫌いで困る

275:デフォルトの名無しさん
21/10/02 12:26:19.80 s0PycLWJM.net
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。

276:デフォルトの名無しさん
21/10/02 17:44:59.50 i6pQYLUQ0.net
>>264
クラスにコンストラクタがない
→newの後にメソッドなりで中身かえればいい「だけ」
それを言い出すとクラスそのものもなくてもどうにでもできるだろって話になる
そうじゃなくて、そんなめんどくさいことを「今更」したくないって話なんだ
それが苦にならないor自分で既にそれらを自動化するライブラリがある!ってなら問題ないと思うよ
君の言ってる事は間違いではない。単に感覚の違いだ

ただ、俺はやだなぁ
ついでに言うとarrayにpushはマジで欲しい

277:デフォルトの名無しさん
21/10/02 17:50:29.29 ffSwt3TR0.net
>>273
したくないのは自由だが、いまさらVBAが更新されることはないから、諦めて他の言語に行ってくれ

278:デフォルトの名無しさん
21/10/02 18:23:04.84 xagjL2JO0.net
>>263
ちゃんとしたオブジェクト指向言語使えば減らせるってならともかく
VBAでオブジェクト指向でやってUTケース減らせると思えんが
ちょっとVBA関係ない話になるが
お前の思うポリモーフィズムと引数付きコンストラクタの使いどころ教えてくれ

279:デフォルトの名無しさん
21/10/02 18:24:23.99 yfSowQXWM.net
>>274
> いまさらVBAが更新されることはないから
みんなそんなことはわかってるけどいきなりどうしたw

280:デフォルトの名無しさん
21/10/02 18:35:12.83 ffSwt3TR0.net
>>276
無駄な議論する意味なしでしょ
VBAの質問スレだし

281:デフォルトの名無しさん
21/10/02 19:02:41.91 /B20gKTEM.net
ああ確かにそうだな
そりゃすまん

282:デフォルトの名無しさん
21/10/02 21:28:02.67 PmOXqFk20.net
>>275


283:> そうだな、ちょっとその前に 例えば一つの例としてゲームを作ったとしよう。 それは簡単なシューティングゲームだったとして、 キャラクターの中に自機、弾、敵、ヒットマークがあったとする。 キャラクター数の上限は考えないものとし、敵は幾つか種類がいるものとして、ひとつは地形判定を行う、一つは弾を打つ、等の違いがあった場合、 君ならどう作るか聞いてもいいかな? 質問を質問で返すようなことするなと言っておいて悪いが最初に認識を合わせるために聞いておきたい。



284:デフォルトの名無しさん
21/10/02 21:48:51.07 PmOXqFk20.net
>>273
そもそも論として、クラスを使わなければ何か出来ないことがあるかと言われれば、それはあまり思い付かない。
ただ、VBAでクラスのコンストラクタに引数を持ってないという程度であればそれで代用が効くだろうという話。
それも面倒だというのであれば、クラスを生成して初期化するメソッドを作ってそれに引数を持たせるようにして呼び出せばいくつそういう場所があっても一回書いておけばいいということになる。

285:デフォルトの名無しさん
21/10/03 05:20:08.91 fyf/YlYy0.net
>>279
認識あわせの例がシューティングゲームとかその時点でお前とは合わんわ
シューティングゲームとか作らんし、その想定でどう作るとか言われてもな
まあ一から全部作ることはないし、何らかのフレームワークに従って作るんじゃね
そんな細かい実装的な話を聞きたいんじゃないんだよ

286:デフォルトの名無しさん
21/10/03 07:39:28.72 8uofczFap.net
>>281
話が合わないというのには同意だ
新しい何かを作る際にその構成が考えられない人に説明しろと言われてもな。
VBAスレでフレームワークとかも持ち出す意味ないしな。

287:デフォルトの名無しさん
21/10/03 11:58:59.58 Lx3l1CXP0.net
ガンダムで例えてくれ

288:デフォルトの名無しさん
21/10/03 12:18:23.19 PztuncMq0.net
坊やだからさ

289:デフォルトの名無しさん
21/10/03 12:51:23.55 oCTMWA/sa.net
excel+vbaでマインスイーパーは造れますか?
どこかにソースありますか?

290:デフォルトの名無しさん
21/10/03 12:54:45.72 cPfMe0TfM.net
>>285
考えただけでも簡単そう
ソースはしらんけど

291:デフォルトの名無しさん
21/10/03 13:18:38.78 PZL9KPgcM.net
vba minesweeper code でググれ

292:デフォルトの名無しさん
21/10/03 22:35:03.42 x8fdTISD0.net
教えて下さい
ガンチャート形式の日程表で
日付の色塗りだけじゃなくて
タスク表示(その日の予定)もさせたいんだけど
どう関数組んだらいい?

293:デフォルトの名無しさん
21/10/03 23:22:18.21 VDfIFkhd0.net
>>288
ガントチャート形式の日程表とやらの構成はどうなっている?
日付の色塗りとは、何を指している?
タスク表示とは、タスク名?をどこに表示させることを言っている?
このへん予め提示しないと解決が長引くよ

294:デフォルトの名無しさん
21/10/04 00:04:37.41 j9cfwAH/0.net
>>288
セルサイズを大きくしてタスクを入力すればいい

295:デフォルトの名無しさん
21/10/04 01:17:19.95 BaE5qGe00.net
excel ガントチャート フリーで検索

296:デフォルトの名無しさん
21/10/04 09:25:56.63 dlhTdODc0.net
質問失礼します
タイマーで二つのマクロを順番に実行したいのですが
ひとつめのマクロ実行が長引いてしまい
マクロ実行中にApplication.OnTimeのcallで次のマクロが動くとエラーになってしまいます
Application.OnTimeの時間になっても前のマクロが終わるまで待つやぶつからなくする方法はあるでしょうか?

297:デフォルトの名無しさん
21/10/04 09:37:56.41 X/RNGavO0.net
>>292
へ?
ひとつ目の実行開始時に処理中フラグ立てて
実行終了時に倒すようにして
それ見て二つ目のマクロの処理を飛ばすか
待たせてまた実行するかすればいいんじゃないの?
聞いてる意味違う?

298:292
21/10/04 10:15:29.97 dlhTdODc0.net
>>293
はいあっています
処理中のフラグでぐぐると色々出てきました
困っていたので助かりました
ありがとうございます

299:デフォルトの名無しさん
21/10/04 10:57:06.41 JQlH+vDNM.net
ontimeの第3引数も調べてね

300:デフォルトの名無しさん
21/10/04 12:27:18.56 kyO84GtQa.net
関数に引数が七つも八つもあるとわかりにくくなるから、それならクラスにしておけば、可読性が良くなるのかな

301:デフォルトの名無しさん
21/10/04 12:54:51.17 X/RNGavO0.net
>>296
そうね。
ただVBAのクラスは1クラス1モジュール使ってしまうのと、クラスが格納されているフォルダが一階層しか使えないからネーミングに気を付けて後でそれがそういう意味を持つクラスだって分かるようにしておかないとね。
後、あれやこれやと引数のクラス作らなくても、引数として格納する変数が一意でいい場合は標準モジュールでも同じように作れば使えるよ。
ただしこの場合は引数として渡すんじゃなくてその標準モジュール側に作ったプロパティを直接読みに行くことになるけどね。まぁ使い分けだね。

302:デフォルトの名無しさん
21/10/04 13:39:00.82 1MgeDxIh0.net
マクロを実行させると、Excelが落ちてしまい、
ステップ実行させるとマクロが正常終了orExcelが落ちない
ていう事になってるんだが、
どこで異常終了してるか調べる方法ある?

303:デフォルトの名無しさん
21/10/04 13:41:09.43 X/RNGavO0.net
>>298
ブレイクポイント貼りまくりで
徐々に外して落ちてる範囲を狭めて
最終的ににどこで落ちてるか確定させる

304:デフォルトの名無しさん
21/10/04 13:54:27.50 X/RNGavO0.net
上記のやり方が大変だというのであれば
Logをどこかのtxtファイルにはく、という手もある。

305:デフォルトの名無しさん
21/10/04 14:13:00.80 1MgeDxIh0.net
>>299,300
ブレイクポイントを貼ると落ちない。
なんとなくやばい場所は分かってるんだけど、on errorでもcatchできないんだよな。
やってることは、 uiautomationを使ってコンボボックス叩く(Expand)てことやってるんだが、
おそらくその行で落ちるんだが、
落ちずに成功する場合もあるんだよな。

306:デフォルトの名無しさん
21/10/04 14:34:03.70 AbV0YbaI0.net
>>301
WinAPIで似たような事があった
本来待ち時間が必要な処理を待たずに次へ行くからブレイクポイント無しだと落ちるってケースね
怪しい所にSleep関数使って500ミリ秒待たせたら落ちなくなった事があるよ

307:デフォルトの名無しさん
21/10/04 15:02:49.67 1MgeDxIh0.net
298です。
いろいろ試してみると、マクロを実行じゃなくてステップインボタン押してF5で実行させると落ちない事がわかった。
ならば、待ち時間の問題かと思って、sleepとかDoEventsを入れてみても、落ちる。
今の所唯一の回避策がステップイン+F5だな。
ググるとステップインだとうまくいくていう記事は散見されるが、合理的な説明はない。

308:デフォルトの名無しさん
21/10/04 15:29:55.92 NBSFfuMDM.net
コンボボックスって表示したときにはテータは入ってなくて
クリックされたときにデータを読みに行くとかじゃなかったかな

309:デフォルトの名無しさん
21/10/04 18:42:56.09 CJXp4LD30.net
タイマーの間隔が短すぎなんじゃね

310:デフォルトの名無しさん
21/10/04 19:42:11.08 2sXWsmVMa.net
ワークブック開きすぎ(それも容量やシートが多すぎ)や、複数アプリケーション開きながらマクロ動かすと遅くなるからそういうところからも気をつけるといいかもしれない事例

311:デフォルトの名無しさん
21/10/04 20:35:24.21 X/RNGavO0.net
>>303
当たりをつけるというフィジカルな部分ももちろん大事だけれど、本当に自分が当たりをつけたところが原因なのか切り分けを行った方がいいね。
その為にもどこで落ちているかを確定するのが一番先にやることだよね。やっぱりLogをtxtファイルか何かに出力するのが遠回りになるようで一番近道かもしれないよ。
箇所箇所で吐き出すロジック組み込んで、毎回書き込んでセーブしておけばどこで途切れたかで分かると思うからそれで絞り込んでどの命令で落ちたかを確定出来れば儲けもの。
もっとも、都度落ちる箇所が違う場合もあるかもだろうけど、そうなったらそうなったでそれから当たりをつけて調べればいいのであって、まず落ちている箇所が特定出来れば原因もある程度絞れるよね。

312:デフォルトの名無しさん
21/10/04 20:43:05.82 TWw1hYLnM.net
>>296
たいていはユーザー定義型で十分

313:デフォルトの名無しさん
21/10/04 22:16:21.62 YLhov1R00.net
For i = 1 to 10
Call Sleep(200)
DoEvents
Next i

314:デフォルトの名無しさん
21/10/05 00:51:53.00 AqVIusQn0.net
>>296
お前の知能が足りなくてアウアウしてるだけだろ

315:デフォルトの名無しさん
21/10/05 15:40:04.36 dJ3N05Swa.net
ちょっと教えてください
コントロール上にマルチページ「Multipage1」があるとき、下を実行するとエラーが出るんですが、何故か分からんのです
Private Sub UserForm_Initialize()
Dim buf As String
buf = "D3"
Set MP = MultiPage1
MP.Pages.Add
MP.Pages("Page3").Name = buf
MP.Pages(buf).Name = "X3" ←ここ。「13:型が一致しません」
End Sub

316:デフォルトの名無しさん
21/10/05 15:45:39.37 dJ3N05Swa.net
補足ながら>>311はMPもマルチページとして宣言するか該当箇所をMP.Pages("D3").Name = "X3"に書き換えれば期待通り動くんですよね
どういう仕組みなのか

317:デフォルトの名無しさん
21/10/05 15:56:25.07 hS5WuwV9r.net
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ

318:デフォルトの名無しさん
21/10/05 15:56:31.46 hS5WuwV9r.net
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ

319:デフォルトの名無しさん
21/10/05 16:15:51.73 2oqKIsmm0.net
>>312
いや
普通に通るけど。ちな2016。

320:デフォルトの名無しさん
21/10/05 16:19:44.73 2oqKIsmm0.net
あ、でもこっちはOption Explicit 付けてたから
MPはキチンと型宣言してたな。
でもそこはあまり関係ないよね?

321:デフォルトの名無しさん
21/10/05 16:21:29.24 dJ3N05Swa.net
>>316
や、たぶん関係するっぽいですかね?
こちらオプション無し、宣言は無しまたはas objectだとダメでas multipageだと通った

322:デフォルトの名無しさん
21/10/05 16:29:34.84 2oqKIsmm0.net
>>317
ふーん
不思議だねぇ
ちなみに宣言しないで走らせたときの
MPの内部型ってどうなってる?
ごめん、もう走ったからこっちは
EXCELのブック消しちゃったんだ。

323:デフォルトの名無しさん
21/10/05 16:32:02.05 dJ3N05Swa.net
variant/object/multipageでした

324:デフォルトの名無しさん
21/10/05 16:36:45.31 2oqKIsmm0.net
>>319
やっぱり不思議だねぇ
その辺の内情は分からないな
一応片付いたことになるのかも知れないけど
誰かその辺知ってたらレスが付くんじゃないかな

325:デフォルトの名無しさん
21/10/05 16:39:04.47 dJ3N05Swa.net
そうですね、とりあえず急ぎとか困りではないので一旦これで…
ご回答ありがとうございました

326:デフォルトの名無しさん
21/10/05 18:26:27.16 jAVyPZWcM.net
型推論するのに失敗してるんじゃね

327:デフォルトの名無しさん
21/10/05 21:37:47.06 LdUtAYwX0.net
Pagesの引数に変数渡すと数字として解釈しようとしてるっぽいな
buf = "2" とかにするとIndex=2のページを参照してるようだ
文字列リテラルならちゃんと名称として解釈してるっぽい
ちな365の64ビット
これ以上はサポートにでも問い合わせるしかねぇんじゃね

328:デフォルトの名無しさん
21/10/07 18:28:58.89 p9itA/YXa.net
マクロの記録機能使ってマクロの作成したいんだがピボットテーブルのプルダウンから任意の値だけを抜き出すのってどうやってやればいいの?
毎回モジュール見直すとvisible farceになってて要するに抜き出したいもの以外を表示しないようにしてる構文て事だよね?
こうなると仮に次回このマクロを使う時にvisible farceになってない値が新しく出てくるとそれも表示されちゃうって事だよね?
じゃなくていくら値が増えても決められた値だけを抜き出すように作りたいんだ
どなたか教えて下さい

329:デフォルトの名無しさん
21/10/07 20:11:24.24 70iiidwq0.net
>>324
記録してみてどうなってるか見てみれば分かるじゃん

330:デフォルトの名無しさん
21/10/07 21:05:39.19 D5dO/oMJ0.net
>>324
Falseね
ピボット周りのフィルタはFor EachでTrueFalseを一つ一つやっていかないと無理な仕様
遅いしわかりにくいけど割り切って

331:デフォルトの名無しさん
21/10/07 21:29:48.70 AykPZAFh0.net
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").ClearAllFilters
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").PivotFilters.Add Type:=xlCaptionEquals, Value1:="表示したいもの"

332:デフォルトの名無しさん
21/10/07 23:55:42.12 P9pCLiyt0.net
VBAで最適化したら仕事増やされた話ってよく聞くけど
そいつが辞めたらそいつに回されてた膨大な仕事はどうなるん

333:デフォルトの名無しさん
21/10/08 00:17:45.54 sJT5Ti/qa.net
うちの職場は適当にvbaでつくったやつをちゃんとしたアプリに置き換えてるよ

334:デフォルトの名無しさん
21/10/08 00:31:33.80 GXvDbP/z0.net
アプリだろうがvbaだろうが作った人間がやめたらメンテできなくて終わるんじゃないの
開発者が大勢いるようなレアな職場ならともかく
vba使ってるところなんてたいてい事務で
エクセル職人が少数いるだけだろ

335:デフォルトの名無しさん
21/10/08 00:37:30.31 d3eTt0zpM.net
実際にはそういうときには業務そのものが消滅するケースも多いよ
そもそもVBAで簡単に自動化できるような業務はもともと無意味であるものが多いからな

336:デフォルトの名無しさん
21/10/08 02:32:08.41 KEaimES90.net
人がやめた後に職場がどうなるかはその職場の責任者が決めるんじゃね
下っ端が気にすることじゃない

337:デフォルトの名無しさん
21/10/08 04:11:36.40 vcejz6/Ud.net
市販アプリでも、天才的な開発者が辞めて、会社もろともアプリもダメになって終わったパターンをいくつも見てきた

338:デフォルトの名無しさん
21/10/08 07:11:46.26 GXvDbP/z0.net
>>331
>>333
なるほどねありがとう

339:デフォルトの名無しさん
21/10/08 08:09:49.53 Am1Ugnvua.net
>>326
>>327
丁寧にありがとう
色々試してみます

340:デフォルトの名無しさん
21/10/08 09:40:27.58 JQJjKarL0.net
CPU使用率が大きかったのでダメもとで開いて修復を実行したら
かなり軽くなるのな、知らんかった
これ定期的にやったほうがいいのか?
VBAのコードを一旦退避させるのが面倒だが...

341:デフォルトの名無しさん
21/10/08 17:00:42.44 EVmjGNOc0.net
>>336
詳しく

342:デフォルトの名無しさん
21/10/08 22:11:41.59 x7uCSItJ0.net
属人的にならない仕組みで効率化できればいいんだが、頭の中が古き良きな方々が幅を利かせる日本ではなかなか難しい

343:デフォルトの名無しさん
21/10/09 01:49:50.17 98oBjVW70.net
自分が初めてVBAを使って解決した時点で、他にVBAを使う人がいないんだから属人化しないわけがないと思うけどな
しかもVBAってプログラミング言語の中では非常に初心者向けなわけで、
誰もVBAで組めない=プログラミングに全員疎いのはほぼ決定なんだから尚更さ
VBAを共通知識にしたいっていうのは、
最初にプログラミングっていう一般的には取っ付き難い物に興味を持たせるっていう途轍もなく大きなハードルを超える必要があって、
それは「興味がある生徒に教える」プログラミング講師以上に難しいと思う
相当な根気が必要だと思うよ

344:デフォルトの名無しさん
21/10/09 02:16:01.12 2HXwYm4Z0.net
そもそも人に仕事が割り振られた段階で属人化されてるわけで
たんに次の人が困って終わりだよ

345:デフォルトの名無しさん
21/10/09 02:30:43.66 98oBjVW70.net
確かに。
レス漁ってみたが、
ここでいう「属人化で困る」は「他の人にはできないVBAというテクニックを持つオレスゲー」を単にオブラートに包んだだけっぽい感じがするな

346:デフォルトの名無しさん
21/10/09 02:49:32.47 0Qsp0NFP0.net
マクロの効率化ガン無視で社員の手が開いた分だけ仕事を割り振る上司がいるらしいけど
その時点である意味属人化してるよね
その仕事引き継ぐやつ
まずさばき切れないだろ

347:デフォルトの名無しさん
21/10/09 04:49:21.33 UCXjyRPA0.net
うちの職場ではほとんどの人がマクロできるけど、新人に自信持たせるためにわざわざ気を使って
「君マクロできるなんて凄いね~」っておだててるのに同調するのが正直めんどくさい

348:デフォルトの名無しさん
21/10/09 04:50:24.64 0Qsp0NFP0.net
そういうとこは給料高そうで羨ましい

349:デフォルトの名無しさん
21/10/09 05:01:41.26 UCXjyRPA0.net
>>344
給料は個人の能力に比例します

350:デフォルトの名無しさん
21/10/09 08:10:48.77 KDe6uexsd.net
新人の育成は面倒だけど将来的に必要なことだからなあ
褒めた方が上達が早いってのも科学的に証明されつつあるし、そういうもんだからあきらめろ

351:デフォルトの名無しさん
21/10/09 08:19:40.75 0Qsp0NFP0.net
全員VBAできるとか絶対給料高いとこだろ
うちのところなんて一人しかいないよ
しかも残りは関数すらまともにあつない

352:デフォルトの名無しさん
21/10/09 08:21:07.29 0Qsp0NFP0.net
おかげで効率がすげー悪い
基本は専用ソフト扱うからエクセルは必須ではないとはいえ
それでもエクセルやVBAやれるのとやれないのとでは効率が雲泥の差

353:デフォルトの名無しさん
21/10/09 08:31:06.39 HlWFX8NcM.net
選民思想ここに極まれり

354:デフォルトの名無しさん
21/10/09 08:33:14.89 qDyUb0P50.net
研修とか外部の自宅学習プログラムでもやったら?
費用は会社持ち、報奨金も少しは付けて

355:デフォルトの名無しさん
21/10/09 08:37:41.66 0Qsp0NFP0.net
そんな金あったら給料上げてレベルの高い人材雇うか
もうちょっとマシな専用ソフト使ってる
金をケチったせいでオンボロ専用ソフト使わせれて
専用ソフトじゃフォローしきれないのでエクセル活用しないと行けない羽目になってる

356:デフォルトの名無しさん
21/10/09 08:57:09.18 g5OHjBNSd.net
会社は社員に楽させたいと思ってるわけじゃない、という大前提
人材なんて時間いっぱい、めいっぱい働かせてナンボ
安いアプリを買って、あとは社員にやらせて、それで回ってるなら何も問題ないんだよ

357:デフォルトの名無しさん
21/10/09 09:27:27.16 0Qsp0NFP0.net
高い金出して高価な専用ソフト使うくらいなら
多少残業代だしてもいいからボロソフト使ったほうが安上がりだからな

358:デフォルトの名無しさん
21/10/09 09:42:15.79 58+qPlR+0.net
エクセルはマス目状に文章を入力できるソフトぐらいにしか思ってない人もいるしなあ

359:デフォルトの名無しさん
21/10/09 15:35:55.10 8vFa8kgUd.net
>>354
ウチの会社の事務方ほとんどそれだわ
セルの結合しまくって数値手入力とか当たり前

360:デフォルトの名無しさん
21/10/09 20:10:49.92 J89rndhPa.net
セル結合せずにせめて広げろや、とは思う

361:デフォルトの名無しさん
21/10/09 20:26:49.65 XLSjDb/pM.net
セル結合とvlookupをディスってようやくエクセル使いとして一人前

362:デフォルトの名無しさん
21/10/09 20:30:33.16 0Qsp0NFP0.net
べつにvlookupは悪くないだろ俺は使いたくないけど

363:デフォルトの名無しさん
21/10/09 20:58:23.98 ZXG2HktNM.net
>俺は使いたくないけど
さりげないアピール

364:デフォルトの名無しさん
21/10/09 20:59:19.46 ZXG2HktNM.net
>俺は使いたくないけど
さりげなさを装ったアピール

365:デフォルトの名無しさん
21/10/09 21:05:39.47 LYlfiTybM.net
VLOOKUPディスってるのは情弱だろ
2016からめっちゃ高速化されてるから数万行ぐらいなら普通に使える

366:デフォルトの名無しさん
21/10/09 21:11:18.66 0Qsp0NFP0.net
高速化とかどうでも良い
左端しかデータが使えないのが不便
無駄な検索用データが全部左端に固まる

367:デフォルトの名無しさん
21/10/10 06:43:03.77 LB6rENWtp.net
個人的に使いたい使いたくないは仕方がない
適材適所で最適解を出す手段に自ら縛りを掛けているだけだから
それで他の人に迷惑掛けている訳でなければとやかく言う筋合いでも無いしな

368:デフォルトの名無しさん
21/10/10 08:15:02.57 AQQzB40DM.net
>>362
XLOOKUP使え
うちの環境だとまだ使えないけど... orz

369:デフォルトの名無しさん
21/10/10 10:34:27.64 iKRuQHQv0.net
index matchでええやん

370:デフォルトの名無しさん
21/10/10 15:09:30.75 2USb7I2AM.net
MATCHはいちいちIFERROR組み込まなきゃいけないから式が冗長になりがちであんまり好きくない

371:デフォルトの名無しさん
21/10/10 15:39:33.06 wqZqaK12d.net
そもそもスピードは求めてない
元データを1日に何回もアップデートするわけじゃないし

372:デフォルトの名無しさん
21/10/10 15:46:10.06 iKRuQHQv0.net
>>366は何使ってんの?

373:デフォルトの名無しさん
21/10/10 16:04:08.10 2USb7I2AM.net
>>368
あんまり関数でデータベース検索かけたくないけどかけなきゃいけないならXLOOKUP、自分以外が使う可能性があるならVLOOKUPかHLOOKUPかなぁ
状況に合わないならMATCHも使うけど使用優先度は低め
VBAにやらせる時も中に確実に存在する場合でなければRange型にFind使って放り込む事が多いかも
Is Nothingで見つからない場合でも処理が止まらずに弾けるし

374:デフォルトの名無しさん
21/10/10 16:23:38.63 iKRuQHQv0.net
あごめん>>364かと思ってた
処理が止まらずにってのすごい大事だよなぁ

375:デフォルトの名無しさん
21/10/10 16:30:18.62 6uQRu7X1M.net
>>370
364だけどVLOOKUP使えるならVLOOKUP
そうでなきゃINDEX+MATCH
大抵そうじゃないの?

376:デフォルトの名無しさん
21/10/10 16:51:12.87 JSJMRLhD0.net
ある行を内容の変更は自由にできるけど削除できないようにすることはできますか?

377:デフォルトの名無しさん
21/10/10 17:26:53.27 rp73utgy0.net
それ、ここでする質問?

378:デフォルトの名無しさん
21/10/10 17:53:50.05 19DRUExW0.net
>>372
削除を感知して、
URLリンク(kirinote.com)
削除されていれば
appliction.undo
ってのはどうだろうか

379:デフォルトの名無しさん
21/10/10 18:04:32.90 u+pPz2Uo0.net
ゴミみたいな回答ばかり

380:デフォルトの名無しさん
21/10/10 19:05:42.11 eL4HRu610.net
じゃあ、ゴミじゃない回答よろ

381:デフォルトの名無しさん
21/10/10 19:35:34.55 rFwRYXWV0.net
「削除できないように」というのが:
・「セルや行の削除をできないようにしたい」→シートの保護で対処
・「値の変更はできるが消去(空欄に)できないようにしたい」→入力規則で対処

382:デフォルトの名無しさん
21/10/10 20:12:04.54 eL4HRu610.net
対処の方法がわからないのかと思ったら、対処する方法があるのかどうかの質問だったのかw

383:372
21/10/11 00:26:21.39 Z2LLk70Q0.net
>>377
シートの保護で削除不可を選んでも全ての行が削除不可になること,またセルの内容変更もできなくなるので希望に合いません.
374さんのやり方をVBA画面をで書くしか無いですかね

384:デフォルトの名無しさん
21/10/11 14:09:59.80 7nZn8gcC0.net
>>379
保護する前に行選択しておけばいいやん
任意の場所だけ編集不可にできるよ

385:デフォルトの名無しさん
21/10/11 14:59:32.76 Z2LLk70Q0.net
>>380

> 任意の場所だけ編集不可にできるよ
編集不可ではなくって、編集可で削除不可にしたいんです。

386:デフォルトの名無しさん
21/10/11 18:57:29.54 nQqo0+vnM.net
空白に編集する場合とかどう取り扱うつもりなんだろう

387:デフォルトの名無しさん
21/10/11 20:49:58.25 SLAXBehE0.net
クビか配置転換したほうがよいかと

388:デフォルトの名無しさん
21/10/11 21:18:23.92 oro4FUng0.net
馬鹿でもある程度作れてしまうからダメなんだよな

389:デフォルトの名無しさん
21/10/12 18:51:44.09 F8L1eENx0.net
それを求める環境が悪い

390:デフォルトの名無しさん
21/10/14 18:44:35.26 FbYeSmKT0.net
空白は削除じゃないんじゃね

391:デフォルトの名無しさん
21/10/14 19:05:30.78 DEjpZ/5cr.net
メーカー開発設計だけど実験データ処理とかで
なれないながら頑張ってvba使ってるけど
試行錯誤で調べながらだからあんまりシート使ってるときと比べて効率化できてる気がしない…
でもシートでチマチマするよりは知的労働してる気がするし
いつかのペイオフを期待するわ

392:デフォルトの名無しさん
21/10/14 20:42:17.77 BHqqoV+20.net
あるレベルを超えると突然やりたいことはこうやりゃいいじゃんってなってバリバリ書けるようになる

393:デフォルトの名無しさん
21/10/14 22:26:04.22 FxTzsGq40.net
set覚えてオブジェクトの概念覚えてイベントを理解してしばらくするとほぼ全ての場面で対応できるようになる

394:デフォルトの名無しさん
21/10/15 06:17:54.01 YCIon6in0.net
色々覚えて余計な知識が付いてきて、
これはもっと綺麗に書けるんじゃないか?っていう欲が出て進まなくなる事が増えたんだけどどうすりゃいいのか
今までは明らかに冗長で読みづらいコードが多かったけど、生産性で見れば高かったように思う
特にプログラミング自体に興味が出てきて他の言語の記事も見るようになって、
そこで得た知識をVBAで無理に再現しようとしてドツボに嵌る事態も多いように感じる

395:デフォルトの名無しさん
21/10/15 07:30:19.61 xvvRRo/+0.net
>>390
まず単一責任原則に沿って作るといいよ。
つらつらとコードを一直線に書くんじゃなくて、
役割に合わせてメソッドや関数を作って
それを部品として組み立てて行くイメージ。
後、他言語をやっていてクラスや
インターフェースの概念を理解しているなら
行き当たりばったりで最初からコードを
書くんじゃなくてどういう構成で組むかを
一度図に書いてイメージしてから作るといいよ。
そのためにもUMLとかもかじっておくと
いいんじゃないかな。
後は暇なときにデザインパターンの本でも
読んでおいて使えそうなのだけ
使えばいいんじゃないかな。
ただ、VBAでは自分一人で使うんであれば
それでいいけど、後々人が見たり手を入れたり
することを考えると、やり過ぎると
そもそもその辺の概念を理解していない
人が多いからね。自分以外誰も触れない
オナニーコードの完成だよ。
その辺は気を付けないとね。

396:デフォルトの名無しさん
21/10/15 07:53:52.36 i1GdH9Fr0.net
>>390
字の練習と同じ
納得できるまで、何度も綺麗に書き直せば良い
その内、早く綺麗に掛けるようになる
「もう少し綺麗に書けそうだけど時間かかるから諦めよう」の判断も出来るようになる
>>391とは逆だけど、vbaの場合は関数やモジュールはあまり分けなくても大丈夫だよ
他の言語だと10行超えたら別モジュール、なんて言われる事もあるけど
vbaだと単一モジュール・単一関数で終わる方が見やすい事も

397:デフォルトの名無しさん
21/10/15 08:56:32.98 Ob8xTIA6M.net
メソッドが3つ以上にできそうなときはクラスを検討する

398:デフォルトの名無しさん
21/10/15 09:22:10.96 Y66b/sjXM.net
美しさより速さだよ
最初の頃は両立するが(無駄なSelectなど)
次第によ醜くなっていく

399:デフォルトの名無しさん
21/10/15 10:10:42.08 Sjupi756F.net
もう3年くらいExcel使ってないけど全然困らないωωω

400:デフォルトの名無しさん
21/10/15 11:34:26.87 r1bpZsgJ0.net
ふーん

401:デフォルトの名無しさん
21/10/15 20:36:17.72 WLz9ti2OM.net
>>395
なんでこのスレに居るの?

402:デフォルトの名無しさん
21/10/15 21:42:47.27 YCIon6in0.net
>>391,392
ありがとう
分けた方がスッキリするんだけど、
分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる
そういう時に「どこまで分けるか」っていう塩梅はどういう基準で決めてる?

403:デフォルトの名無しさん
21/10/15 22:02:32.86 xvvRRo/+0.net
>>398
役割。
モジュールもメソッドも全てに役割分担を持たせてキチンと仕舞うべき場所に仕舞っておく。
だからその役割を行う為なら100行になろうが1000行になろうがそのメソッドに記載する。
何を持ってしてひとつの役割とするかは作る人のセンスに掛かってくるから場数をこなして慣れるしかないかな。

404:デフォルトの名無しさん
21/10/15 22:06:51.27 xdjJa8Ad0.net
>>398
変数や関数名や引数である程度分かるようにする
それでも迷うようならコメント付ける

405:デフォルトの名無しさん
21/10/16 13:55:14.29 Hx8OP0An0.net
>>398 > 分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる 関数にカーソル合わせて「Shift+F2」で定義箇所に飛べるよ https://www.wordvbalab.com/code/2925/ まあ言語自体も開発環境も貧弱すぎるからまとめたくなっちゃう感覚はわかるけど



407:デフォルトの名無しさん
21/10/16 16:39:05.71 EZGI4ZK10.net
調べてもわからないのでお聞きしたいです
下の処理でtest3まで処理は正常に行われるんですが
mainに戻ったときに型の不一致でエラーが出て止まってしまいます。
Dim WS As Worksheet
Sub main()
Call test3(TEMP_SHEET)
End Sub
Function TEMP_SHEET() As Worksheet
Set TEMP_SHEET = ThisWorkbook.Worksheets("temp")
Set WS = TEMP_SHEET
End Function
Function test3() As Variant
With WS
.Select
.Cells(1, 1) = "test"
End With
End Function

408:デフォルトの名無しさん
21/10/16 16:51:56.90 a6cW1Kja0.net
test3()なのにcallで引数渡そうとしてる

409:デフォルトの名無しさん
21/10/16 17:03:21.91 cq/EQnSr0.net
VariantにはArrayとかも入るから ()付けても書式エラーにはならないのかな

410:デフォルトの名無しさん
21/10/16 17:06:32.68 eJomN4xc0.net
>>402
test3()は引数がないのに引数をわたそうとしている。
test3()は関数なのにy=test3(x)という構文ではなくてcallでtest3()を呼び出しいる。

411:デフォルトの名無しさん
21/10/16 17:09:51.40 cq/EQnSr0.net
test3の実行後にエラーになるのがこの質問のミソだと思うよ

412:デフォルトの名無しさん
21/10/16 17:43:21.23 nAOL9IkjM.net
>>402
そもそも「test3までは正常」というのが間違い
これではまったく動かない
とりあえず動くようにするなら、たとえばこう書けばいい
ほかにも色々なパターンが考えられるけど、何がやりたいのかよくわからないので
Dim WS As Worksheet
Sub main()
  Call TEMP_SHEET
  Call test3
End Sub
Sub TEMP_SHEET()
  Set WS = ThisWorkbook.Worksheets("temp")
End Sub
Sub test3()
  With WS
    .Select
    .Cells(1, 1) = "test"
  End With
End Sub

413:デフォルトの名無しさん
21/10/16 18:35:14.73 Pp6vdwK70.net
確かにこれではtest3は動かない

414:デフォルトの名無しさん
21/10/16 18:36:14.79 njPM+lzE0.net
>>402
test3まで処理が正常に行われたなら気にしなくていいんじゃね

415:デフォルトの名無しさん
21/10/16 18:46:34.14 m1u7MgLp0.net
ステップ実行させたら確かにtest3実行するな
こんなのコンパイルエラーで良いと思うんだが、なかなか興味深い

416:デフォルトの名無しさん
21/10/16 18:57:45.79 EZGI4ZK10.net
ありがとうございます!
test3はsubでよかったんですね。
参考にしながらいろいろ試したらできました。
すごく助かりました。

417:デフォルトの名無しさん
21/10/16 19:30:00.02 m1u7MgLp0.net
いや、問題はSubかFunctionかじゃないんだが
FunctionをCallしても、戻り値が捨てられるだけで別に問題はないぞ
名前の付け方がまあアレだが
Dim WS As Worksheet の行消して
Function TEMP_SHEET() As Worksheet
Set TEMP_SHEET = ThisWorkbook.Worksheets("temp")
End Function
Function test3(WS As Worksheet) As Variant
With WS
.Select
.Cells(1, 1) = "test"
End With
End Function
とかで動くだろ

418:デフォルトの名無しさん
21/10/16 20:00:16.92 EZGI4ZK10.net
>>412
ありがとうございます。すごく勉強になりました。

419:デフォルトの名無しさん
21/10/16 21:23:47.08 aQ5UbG+6a.net
最終の答え得るためにいくつの関数に分けるか、というのはどうやったら身につくんでしょうか

420:デフォルトの名無しさん
21/10/16 21:32:26.89 a6cW1Kja0.net
分けたくなったら分ければいい
・朝起きる
・トイレ
・歯磨き
・食事
・デンタルフロス
・着替え
・家出る
寝起きのルーチンとしてトイレ歯磨きをセットとするとか
無い時もある食事デンタルフロスをセットとするとか
歯磨きが先なのは寝起きで飲み食いが嫌で個人的な事だから異論はあると思う

421:デフォルトの名無しさん
21/10/16 21:49:34.88 CDLajE+o0.net
>>414
欲しい答えじゃないかもしれないけど
同じような処理を何度か書くような場面ができたときに、一つの関数にまとめるべきか検討するといいよ
むやみに何でも関数にすればいいというものではない

422:デフォルトの名無しさん
21/10/17 09:01:15.98 MVHP31+Wa.net
>>415
>>416
ありがとうございます。
手続き型しか書けなくて、ダラダラ長くなってしまうのが少し気になり始めてしまって、見やすいシンプルなコード見ると、どうしたらこういう考え方できるのかなと。
実験的にもいろいろやってみます。

423:デフォルトの名無しさん
21/10/17 11:37:36.37 LVwZEVKT0.net
別スレから来ました
A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください

424:デフォルトの名無しさん
21/10/17 11:41:00.73 Vlp9RG+s0.net
余裕で可能

425:デフォルトの名無しさん
21/10/17 11:47:00.68 rQoWwir60.net
>>418
大分質問が上手くなったじゃないか。
ただ規定のファイルにはただ名前つけて保存するだけでいいのか?

426:デフォルトの名無しさん
21/10/17 12:11:29.02 ZLWKnlAP0.net
>>418
どこのスレから来たの?
Rubyスレかそうでないかで対応変わるんだけど

427:デフォルトの名無しさん
21/10/17 12:14:56.83 rQoWwir60.net
なんでExcelファイル操作するのにRubyスレから来るんだよ

428:デフォルトの名無しさん
21/10/17 12:16:45.71 LVwZEVKT0.net
別スレから来ました
A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください

429:デフォルトの名無しさん
21/10/17 12:18:39.23 rQoWwir60.net
頭おかしくなったのか?

430:デフォルトの名無しさん
21/10/17 12:19:45.69 LVwZEVKT0.net
ブラウザバックしたら投稿した
すまない
Excel質問スレから来た
>>420
名前をつけて保存の前にいろいろやろうとは思ってるけど、VBA素人だからとりあえず名前をつけて保存までにしようと
VBAで出来ることは�


431:墲ゥったのでダイマでもステマでもいいのでオススメの書籍を教えてください



432:デフォルトの名無しさん
21/10/17 12:22:55.44 Vlp9RG+s0.net
だってルビースレから来た時点で質問が目的じゃなくて
最終的にルビーコード貼り付けてどやーするのが目的の人だし

433:デフォルトの名無しさん
21/10/17 13:08:15.77 LVwZEVKT0.net
ルビースレってそもそもなんなのかって状態なんだが…
この板はブラウザバックで二重投稿した程度で中傷くらったりするのか?
エクセルのVBAについて質問してるのに全然違う答え返ってくるし

434:デフォルトの名無しさん
21/10/17 13:55:19.97 l76d9bPwM.net
ニヤニヤ

435:デフォルトの名無しさん
21/10/17 14:58:05.05 OE8yqt320.net
>>425
自分で本屋に行って内容を確認しようとは思わないのか?

436:デフォルトの名無しさん
21/10/17 15:24:33.87 rQoWwir60.net
>>425
B1の項目に従ってというのが謎なので気を利かせて絶対パスで指定のファイルを開くようにしたよ。
ちなみに5ちゃんに書くとファイルパスの¥マーク書けないから半角に直してね。
思ってた動きと違うと言うなら自分の質問200回音読してから書いてね。
動作が不足してるならちゃんと質問のここが出来てないって書いてね。
使い方
・データを打ち込んでるブックで、処理させたいデータの行のどの列でもいいから選択しておく
・マクロ実行
・指定したファイルに選択した行のA列+C列のデータの名前で名前をつけて保存される
───────────

Sub test()
Gyo = Selection.Row
Data0 = Cells(Gyo, 1).Value
Data1 = Format(Cells(Gyo, 3), "000")
Namae0 = ThisWorkbook.Path & "¥" & Data0 & Data1 & ".xlsx"
Namae1 = Data0 & Data1 & ".xlsx"
Workbooks.Open "C:\Users\*****.xlsx"
Workbooks("*****.xlsx").SaveAs Filename:=Namae0
Workbooks(Namae1).Close
End Sub

437:デフォルトの名無しさん
21/10/17 15:26:59.96 Vlp9RG+s0.net
あーあルビーキチガイに無駄なエネルギー使ってる

438:デフォルトの名無しさん
21/10/17 15:28:04.20 XdTFVkom0.net
ツンデレで草

439:デフォルトの名無しさん
21/10/17 16:11:59.85 lULOB+dMM.net
>>430
> Workbooks.Open "C:\Users\*****.xlsx"
> Workbooks("*****.xlsx").SaveAs Filename:=Namae0
> Workbooks(Namae1).Close
こんなふうに書く人いるけどなんで
Dim Book As Workbook
Set Book = Workbooks.Open("C:\Users\*****.xlsx")
Book.SaveAs Filename:=Namae0
Book.Close
って書かないのか不思議だ

440:デフォルトの名無しさん
21/10/17 19:08:06.14 F19IWtWk0.net
>>433
単に返り値がopenしたbookであることを知らないだけだと思う
俺も昔は前者みたいな書き方してたな

441:デフォルトの名無しさん
21/10/17 19:23:15.59 6d2YQk+QM.net
なるほど、結構基本的なことだと思ってたけどそうでもないんかな
シートでも Worksheets("sheet1").~ って書いてる人をよく見る

442:デフォルトの名無しさん
21/10/17 19:27:41.57 rQoWwir60.net
>>433
わたすもまだ今年から始めたド素人なもので…。参考になります。
>434の言うとおり戻り値がそんなだなんて知らなかったんだよう。

443:デフォルトの名無しさん
21/10/17 19:29:03.49 QrrwaG0ad.net
後続の処理でworkbookオブジェクトを使わないならWithで纏めちゃうな
With Workbooks.Open("C:\Users\*****.xlsx")
.SaveAs Filename:=Namae0
.Close
End With
こんな感じで

444:デフォルトの名無しさん
21/10/17 19:31:49.54 rQoWwir60.net
>>437
一行ごとに処理書いてる感なくてスマートでええな。

445:デフォルトの名無しさん
21/10/17 21:41:34.16 TEYo+ExJ0.net
Withは便利だけど積極的には使わない派
後で見返す時にわけわからなくなるから

446:デフォルトの名無しさん
21/10/17 21:43:33.55 80TNtCCb0.net
ネストしたwithを見たらエディタ閉じるわ

447:デフォルトの名無しさん
21/10/17 21:48:12.01 eFAt1kMMd.net
俺は>>437と同じ
オブジェクトを変数に入れずにWithに直接ぶっこむ派
DimとSetの行がなくなるから入力の手間も減るし狭い画面でソースが見やすくなる

448:デフォルトの名無しさん
21/10/17 21:51:58.87 W9ZcRzM1M.net
扱うオブジェクトが1つならいいけど複数あったりサブルーチンに渡したりする時もあるから

449:デフォルトの名無しさん
21/10/17 22:22:04.64 F19IWtWk0.net
withはネストするとトタンに見にくくなるよね
>>437ぐらいなら見やすいと思うけど、>>439と完全に同意見だわ

450:デフォルトの名無しさん
21/10/18 00:37:42.11 48un5MBo0.net
以前VB6スレでもWith Newを使ってる人がいて論議になったことがあったね。
俺はこの方法は有りだと思う。
ひとつしか使えないけど関数やメソッドの中で唯一ひと階層下のスコープを設定出来る方法だからそれを意識した使い方なら。
ただこの方法であまり長いロジックを組むのは確かに可読性に宜しくないのも同意。
だから使いどころに気をつけながら使う方法だと思うよ。

451:デフォルトの名無しさん
21/10/18 00:52:44.24 5AqMk2S7d.net
オブジェクトを抱えるWithはSubやFunctionとセットで使うんだよ
1つのSubには一つのWith
それ以上になる時は機能を詰め込みすぎだから分割すべき

452:デフォルトの名無しさん
21/10/18 01:37:56.48 Zxhiy8zv0.net
URLリンク(ro69-bucket.s3.amazonaws.com)

453:デフォルトの名無しさん
21/10/18 07:58:42.77 Xmojsja+0.net
複数のファイルじゃなくて複数のフォルダを選択する方法はありますか?

454:デフォルトの名無しさん
21/10/18 08:17:54.78 iA8avgoCM.net
>>447
vba 複数フォルダ選択
でググればいくらでも出てくる
URLリンク(stabucky.com)

455:デフォルトの名無しさん
21/10/19 05:36:51.83 s00hPK6/a.net
クリックする

456:デフォルトの名無しさん
21/10/19 13:51:25.65 DDPhMqNbr.net
パワポもvbaで操作している人はいますか?
また手っ取り早く時短できる部分はありますか?

457:デフォルトの名無しさん
21/10/19 14:28:41.78 P0vvwNoGM.net
>>450
Excel のデータを50枚ぐらいにスライドに整形して表示するって言うのをVBAでやったよ

458:デフォルトの名無しさん
21/10/19 16:06:34.91 DDPhMqNbr.net
>>448
リンクにあるのはフォルダじゃなくてファイルについてですね。。。
どうやらファイルは複数選択できるけどフォルダはできないっぽいですね。。。

459:デフォルトの名無しさん
21/10/19 16:21:20.09 4aO6vjST0.net
>>452
横槍だけどリンク先ちゃんと下まで読んだ?

460:デフォルトの名無しさん
21/10/19 16:32:01.94 wN2ah2c70.net
全くの初心者です
元エクセルファイルを、そのファイル内の特定のシートの特定のセルないの文字(名前)でフォルダを作成し(作成階層は元エクセルファイルがある場所)、そのフォルダ内にフォルダと同じ名前で元エクセルファイルを出力したいです
検索してみてそれっぽいコードを実行してみましたが上手く行かないか1004のエラーが出てしまうので、できれば教えていただきたいです

461:デフォルトの名無しさん
21/10/19 17:37:09.15 4z76YikWM.net
>>454
まずは自分で作ったプログラムをここに貼って

462:デフォルトの名無しさん
21/10/19 17:40:33.12 mCqSTcWyM.net
>>454
流石にエスパーじゃないからそれだけの情報じゃなんとも言えんが、
ファイルの指定が間違ってる可能性がありそう
エラーが出たときにデバッグってボタン押したらどんな命令文の背景が変わってる?
省略しないでその文を一字一句違わず書いてみ?

463:デフォルトの名無しさん
21/10/19 18:02:38.90 ukSaGu280.net
実行してるファイルと同じ名前はダメだろ

464:デフォルトの名無しさん
21/10/19 20:26:31.01 DOUatBbL0.net
>>457
元のファイルがあるフォルダーのサブフォルダーに格納されるんで同じ名前でも大丈夫だよ。

465:デフォルトの名無しさん
21/10/20 00:29:04.94 P5tYW80ga.net
質問者の勘違いとエスパー�


466:オたんじゃね



467:デフォルトの名無しさん
21/10/20 00:47:36.84 Xbyc9Pekd.net
わたしは、エスパー
今、質問者の脳内に、直接、回答を送っています
わたしは、エスパー

468:デフォルトの名無しさん
21/10/20 00:49:43.99 Xbyc9Pekd.net
残念です
夜中なので、質問者は、寝てました
残念です

469:デフォルトの名無しさん
21/10/20 00:53:24.04 VLQwVQRS0.net
なぜプログラム板でExcelVBAのスレが活発なのよ?
日本終わってんな

470:デフォルトの名無しさん
21/10/20 03:43:52.55 gq1XFNWx0.net
労働者の多くがExcel使ってんだから需要からしたら普通だろ

471:デフォルトの名無しさん
21/10/20 06:13:11.55 RXqG14DY0.net
まぁ年収ランキングとしてもそこそこ高い位置にいるし当然と言えば当然だな
URLリンク(xtech.nikkei.com)

472:デフォルトの名無しさん
21/10/20 10:35:33.40 Nii7YXA70.net
>>462
なんでRubyスレにいかないの?

473:デフォルトの名無しさん
21/10/20 10:37:34.01 cqpH7rMEd.net
プログラマーじゃない人もたくさん使ってるから
人が増えるのは必然

474:デフォルトの名無しさん
21/10/20 17:58:56.42 DdoeWcxm0.net
>>456
URLリンク(lilia-study.com)

Sub hozon()
Dim wb As Workbook
Dim ws As Worksheet
Dim hozonPath As String
Dim FolName As String
Dim FilName As String
Set wb = ThisWorkbook
Set ws = ActiveSheet
hozonPath = “K:\”
FolName = ws.Range(“A1”).Value
FilName = ws.Range(“A2”).Value
wb.SaveAs Filename:=hozonPath & FolName & “\” & FilName
End Sub
このvbaで
A1=A2にして、hozonPathをThisWorkbook.Pathにしたりすればできるかな?と思ったのですが上手く行かずです…

475:デフォルトの名無しさん
21/10/20 18:30:57.52 3UsBchoVM.net
ThisWorkbook.Pathにはケツの¥が付いてないから
ThisWorkbook.Path & ”¥” & FolName & “\” & FilName
に書き換えてみ

476:デフォルトの名無しさん
21/10/20 18:49:10.89 YqKlvam70.net
\
"
半角にしてね

477:デフォルトの名無しさん
21/10/20 20:45:15.20 Es2OjjC60.net
>>467
お前のPCにK:ドライブは存在するのか?
とりあえず
wb.SaveAs のまえに、
MsgBox hozonPath & FolName & “\” & FilName
いれて、表示された内容をかけ
個人名とか入ってたら適当に隠せよ

478:デフォルトの名無しさん
21/10/20 22:22:06.11 mCILNp7G0.net
超初心者です 
以下の対応をさせたいです
①シートを支店分だけ増やす
②シート名をそれぞれ「支店一覧」A2~A18の支店名にする
③作成したシートのB5に支店名を入れる
④作成したシートの表のA列が"0"になっている行を削除する
⑤作成したシートのオートフィルタを解除する
以下のものではエラーになりますが、どこが悪いのでしょうか
Sub シート作成
Dim 支店名 As Range
For Each 名前 In Worksheets("支店一覧").Range("A2:A18")
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 支店名.Value
.Range("B5") = 支店名.Value
End With
  Range("B3").AutoFilter 1, "0"
With Range("B3").CurrentRegion.Offset(1, 0)
.Resize(.Rows.Count - 1).EntireRow.Delete
  Range("B3").AutoFilter
End With
Next 支店名
End Sub

479:471
21/10/20 22:24:48.55 mCILNp7G0.net
④は「B列が"0"になっている行を削除する」の誤りでした

480:デフォルトの名無しさん
21/10/20 22:37:03.53 SCNNHF4n0.net
とりあえずここだと思う
下の方はサンプル作ってくれれば試すけど、手元にないからよくわkらん
Sub シート作成()
For Each 支店名 In Worksheets("支店一覧").Range("A2:A18")

481:471
21/10/20 22:41:41.27 mCILNp7G0.net
>>473
大変失礼いたしました
あるページからコードをコピーしてきたときに修正し忘れました
実際は名前→支店名にしていましたが、エラーとなっていました
エラーの内容の詳細が必要でしたら、明日投稿します
(現在手元にExcelファイルがなく、すみません)

482:デフォルトの名無しさん
21/10/20 23:13:32.77 dYcbK4WK0.net
安心して
手元にエクセルファイルが無いのに記憶だけでそこまで書ければ超初心者じゃないよ

483:デフォルトの名無しさん
21/10/21 05:25:42.24 wIUVM+qQM.net
>>474
> エラーの内容の詳細が必要でしたら、明日投稿します
なぜ最初から書かないの?

484:デフォルトの名無しさん
21/10/21 06:18:01.89 8cr/BFDG0.net
>>471
あと、
・どこで
・どんな
エラーになるのか書いて

485:デフォルトの名無しさん
21/10/21 06:54:51.77 MLEFHfinM.net
Select Caseにbreakがないのは何故なんでしょうか
beakがないから最初に一致した条件以降のCaseも
実行されると勘違いしやすい
仕事で大きなトラブルを起こしてしまった…

486:デフォルトの名無しさん
21/10/21 07:06:17.27 mcI3miqCM.net
Select Caseって上から順に見て真っ先に当てはまったCaseのみ実行じゃなかった?違うんだっけ?

487:デフォルトの名無しさん
21/10/21 07:46:09.23 Ue09v+2oM.net
>>478
> Select Caseにbreakがないのは何故なんでしょうか
そういう仕様だから
Pascal とかと同じ
> beakがないから最初に一致した条件以降のCaseも実行されると勘違いしやすい
むしろCとかでbreak忘れてトラブる奴の方が多いだろ
なのでC# はコンパイルエラーにするぐらいだし
> 仕事で大きなトラブルを起こしてしまった…
仕事で使うならちゃんとテストしろよ…

488:デフォルトの名無しさん
21/10/21 11:01:11.45 kxdLHT3P0.net
>>479
違うよ
Select Case の後にTrueとか書いて
Case の後にTrueとかFalseとか書くと
簡単に確認出来るよ

489:デフォルトの名無しさん
21/10/21 11:14:41.56 kxdLHT3P0.net
>>478
これはVBAとかCase文に限らず今自分がやってる言語→ 他言語に切り替える際には何か違う挙動するなー、て言うのはあるあるなことだからまぁいい勉強になったって思うべきだね。
>>480の人が言う通り仕事で使用するならキチンとテストするべきだったね。
UTとして証跡残すのがセオリーだけど、せめて一度走らせて挙動確認しておけば今回の件は防げたはず。
その言語仕様を嘆くよりそういったこともあるって次回に生かした方が幸せになれると思うよ。

490:デフォルトの名無しさん
21/10/21 12:11:34.23 8w0PnAXQ0.net
select case 普通に動作するんだが、どうやったらトラブル起こせるんだ?

491:デフォルトの名無しさん
21/10/21 17:55:34.88 88nPUo+s0.net
>>470
URLリンク(d.kuku.lu)

すみませんimgurが使えないのでよくわからんあぷろだですが…
やはりエラーが出ます、

492:デフォルトの名無しさん
21/10/21 18:43:47.31 mcI3miqCM.net
だからhozonPathとFoINameの間に¥を入れろって

493:デフォルトの名無しさん
21/10/21 21:55:14.75 fbrP1i9b0.net
>>484
お前みたいな馬鹿にはVBAは無理だと思うよ

494:デフォルトの名無しさん
21/10/21 22:14:08.48 8cr/BFDG0.net
>>484
最強料理はケバブ

495:デフォルトの名無しさん
21/10/21 22:16:16.48 8cr/BFDG0.net
コピペ間違えた
>>484
wb.SaveAs Filename:=hozonPath & "\" & FolName & “\” & FilName

あと
FolderName
を無理に
FolName
と変に略すと、あとで何書いてるかわからなくなるぞ。

496:デフォルトの名無しさん
21/10/21 23:15:26.60 5CobycYg0.net
パス区切りに、/ は使えないの?
例えば、Ruby なら、
glob_pattern = "C:/Users/Owner/Documents/*.txt"
p Dir.glob( glob_pattern )
出力
[ "C:/Users/Owner/Documents/a.txt",
"C:/Users/Owner/Documents/b.txt" ]

497:デフォルトの名無しさん
21/10/22 00:34:42.64 2cM8PEAKa.net
やってみればわかるんじゃないの?

498:デフォルトの名無しさん
21/10/22 00:44:00.08 1RQkewhE0.net
あまりに馬鹿過ぎると思ったらやっぱりruby馬鹿か

499:デフォルトの名無しさん
21/10/22 00:46:54.73 5YslU4UB0.net
>>484
何をやりたいのかよくわからんけど、連続して2回以上実行すると、実行回数分のネストしたフォルダが必要になるのでエラー吐く。
あと、コピー先のフォルダ/ファイル名はActiveSheetを参照しているので、複数ブック開いていたりするとおかしなことになる。

500:デフォルトの名無しさん
21/10/22 01:17:15.93 MBOrFbAX0.net
>>484
保存先のフォルダがないとそのエラーになるから、wb.SaveAsの直前にその確認を入れる
↓で動いたの確認した
'※hozonPathはあるのか
Dim ExistHozonPath As Boolean
ExistHozonPath = Len(Dir(hozonPath, vbDirectory))
If Not ExistHozonPath Then MsgBox hozonPath & "ドライブは存在しません。"
'※FolNameはあるのか
Dim FolFullName As String, ExistFol As Boolean
FolFullName = hozonPath & FolName
ExistFol = Len(Dir(FolFullName, vbDirectory))
If Not ExistFol Then
Dim Question As String
Question = "「" & FolFullName & "」フォルダが存在しません。作成しますか?"
Select Case MsgBox(Question, vbYesNo)
Case vbYes 'はい→作る
MkDir FolFullName
Case vbNo 'いいえ→終了
Exit Sub
End Select
End If
wb.SaveAs Filename:=hozonPath & FolName & "\" & FilName

501:デフォルトの名無しさん
21/10/22 01:25:21.34 MBOrFbAX0.net
>>493
ドライブない時に終了させるの忘れてた

502:デフォルトの名無しさん
21/10/22 07:57:46.72 uyzrt+dja.net
ユーザーフォーム自体(コードではなくてボタンとかが表示されている方)を印刷する時、
デフォルトで用紙が縦になるんですが、横に出力する方法はないでしょうか?

503:デフォルトの名無しさん
21/10/22 09:34:10.25 EjatPKif0.net
>>495
Windowsの設定(コンパネ)のプリンタで用紙設定しておく

504:デフォルトの名無しさん
21/10/22 12:17:25.64 uyzrt+dja.net
あー、あの縦か横かをオプションボタンで選ぶ画面ですね。
VBA以前の問題でした。失礼しました。
帰宅したら試します。

505:デフォルトの名無しさん
21/10/22 19:20:10.02 eWxCtPi7a.net
横1列に並んだセルを
A B C D E F
1 あああ いいい ううう 阿嗚呼 伊井伊 雨右鵜
2 かかか ききき くくく 可化歌 機器機 久々九
3

A B C
1 あああ いいい ううう
2 阿嗚呼 伊井伊 雨右鵜
3 かかか ききき くくく
4 可化歌 機器機 久々九
のように1行飛びに成形するにはどうしたら良いですか?

506:デフォルトの名無しさん
21/10/22 19:23:55.44 mTcFiW+U0.net
頑張ってコピペしろ

507:デフォルトの名無しさん
21/10/22 19:26:54.87 cisRZQTm0.net
>>498
一組が1行✕6列からなるセル範囲を別シートの
2行✕3列に出力するマクロでいいのでは?

508:デフォルトの名無しさん
21/10/22 20:37:51.08 pZfGL40n0.net
こういうの自力でできないようじゃ教わってもしょうがないんじゃね

509:デフォルトの名無しさん
21/10/22 20:47:03.46 Fa1Ohywp0.net
>>493
ありがとうございます。満足いく挙動になりました!

510:>>498
21/10/22 22:34:54.56 0NScRLlYa.net
>>499
現状頑張ってコピってます
>>500
ありがとうございます
もちろんDBから引っ張って来たシートとは
別の印刷用シートのセルに=で参照させるんですが・・
マクロの記録を頼りにしてみます
>>501
自力で・・

511:デフォルトの名無しさん
21/10/22 22:59:58.93 4e59Jt0n0.net
関数でできる
Sheet1のデータをSheet2に出力するとして、Sheet2のA1に次の式を入力してコピペ
「Sheet1!$A$1:$F$999」は範囲なので適当に直して
=INDEX(Sheet1!$A$1:$F$999,ROUNDUP(ROW()/2,0),IF(MOD(ROW(),2)=1,COLUMN(),COLUMN()+3))

512:デフォルトの名無しさん
21/10/22 23:08:32.12 Jvo+jO0O0.net
>>498
'標準モジュール側
Sub hoge()
Dim list As New Collection
Dim entity As Class1
Dim i As Integer
Dim j As Integer
For i = 1 To 3
For j = 1 To 4 Step 3
Set entity = New Class1
entity.value1 = Cells(i, j)
entity.value2 = Cells(i, j + 1)
entity.value3 = Cells(i, j + 1)
Call list.Add(entity)
Next
Next
Range("A1:F3").ClearContents
For i = 1 To 6
Cells(i, 1) = list(i).value1
Cells(i, 2) = list(i).value2
Cells(i, 3) = list(i).value3
Next
End Sub
'クラスモジュール側(Class1)
Public value1 As String
Public value2 As String
Public value3 As String

513:デフォルトの名無しさん
21/10/22 23:11:35.60 Jvo+jO0O0.net
おっと
ちょい間違い
どこ間違ってるか探してみて

514:デフォルトの名無しさん
21/10/22 23:21:55.85 MBOrFbAX0.net
>>503
というか、普通に手作業でやってる手順をVBAで書き下せばいいだけだよ
コピペ元の範囲の場所を示す
dim srcRow as long
dim srcCol as long
と、
コピペ先の範囲を示す
dim dstRow as long
dim dstCol as long
を作って、
1~3列目は同じ列、4~6列目は次の行にコピペ
っていう作業を繰り返せばいい。
ペアになる変数はユーザー定義型を使うと見易くなる
type MatrixIndex
Row as long
Col as long
end type
dim src as MatrixIndex,dst as MatrixIndex

515:デフォルトの名無しさん
21/10/22 23:34:57.82 MCKX1YxAa.net
>>504
偶数奇数の数列ですね!ありがたやー
>>505
んー データシートの消し込みって一般常識なんですかね?
まっコメントアウトするだけだし
 iとjが逆かな? でもなんとかなりそう!
ありがとうございましたア!

516:デフォルトの名無しさん
21/10/22 23:40:58.45 rmoybpwYa.net
>>507
プログラムは作業の手順書とはいえ
>>505さんのクラスモジュールを使うだとか
ユーザー定義型変数を使うという発想に至りませんで・・・
皆様ありがとうございました。

517:デフォルトの名無しさん
21/10/23 02:07:03.33 3lNDidpi0.net
いつものあいつ

518:デフォルトの名無しさん
21/10/24 01:40:51.53 BvAAjUlj0.net
>>498
G列に上から1,2と入れて、さらに下方のデータの無いG列に1,2とコピペする
表全体を選択してフィルターを適用。G列でソートする
以上で一行ごとに空行が挿入される
つづいてD1:F2を選択、コピー
A2に形式を選択して貼り付け(空白を無視する)
出来上がり

519:デフォルトの名無しさん
21/10/24 02:32:09.51 k5qcq0CGa.net
>>511
別解ありがとうございます
テンプレートファイルがあればそれで良いかもしれませんね

520:デフォルトの名無しさん
21/10/24 10:50:30.38 m64p+skw0.net
VBAで作ったプロシジャーにショートカットキーを割当てたのですがうまくいきません。
議論用に下のような簡単なプロシジャーをつくり(実際はもっと複雑です)
testShortCutKeyにはCtr+Shift+I
testShortCutKey02にはCtr+Shift+F
を割り当てました。
エクセルのウインドウをアクティブにした状態で
Ctr+Shift+Fを押すと別のアプリのEverNoteがアクティブになり
Ctr+Shift+Iを押すと別のアプリがアクティブになります。
ワードのVBAでも同じくショートカットキーを正しく設定しているのに使えません。
少なくとも今年前半はこんなことはなかったのですが…。
対策はあるでしょうか?
Sub testShortCutKey()
Stop
End Sub
Sub testShortCutKey02()
Stop
End Sub
URLリンク(imgur.com)

521:デフォルトの名無しさん
21/10/24 10:52:43.48 m64p+skw0.net
>>513
自己レスです。
スクリンショットのリンク先を間違えました。
URLリンク(imgur.com)
が正しいです。

522:デフォルトの名無しさん
21/10/24 12:20:50.22 LZG5kY/b0.net
普段よく使う色んな独自マクロ機能を右クリックメニューに登録して、
どんな時にも使えるようアドインファイル(.xlam)化して
XLSTARTフォルダにおいて使っています。
ThisWorkbookに下記コードで、登録と終了時の処理を書いているのですが、
Excelを起動終了するたびに、Excel15.xlbのファイルサイズが肥大化していく
現象で困っています。
Sub Workbook_Open()
Call AddRightClickMenu '右クリックメニュー追加
End Sub
Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Controls("xxxxx").Delete
End Sub
BeforeCloseの中にExcel15.xlbの強制削除を入れても、勝手にサイズUPした
ファイルが作成されてしまいます。
これを解決する方法があれば、教えてください。

523:デフォルトの名無しさん
21/10/24 14:29:28.09 phaY1aKk0.net
ひとつのシートボタンだけ
まとめたほうが楽じゃないの?

524:デフォルトの名無しさん
21/10/24 14:39:49.48 DK1tlC+k0.net
>>513
他ソフトのショートカットと干渉してる可能性がある
例えばalt+F11はGeforceとかぶって使えなかったりする。めんどい

525:デフォルトの名無しさん
21/10/24 14:40:27.40 DK1tlC+k0.net
>>513
問題の切り分けとして、
Ctr+Shift+F
をCtr+Shift+KなりCtr+Shift+Uなり、色々試してみて

526:デフォルトの名無しさん
21/10/25 13:04:03.44 wahm2g0s0.net
>>517,518
有難うございました。
Ctr+Shift+Uは干渉しませんでした。
Ctr+Shift+FとCtr+Shift+Iが他のアプリに割り振られているようです。
Ctr+Shift+Fはそのアプリの設定を外すことができました。
Ctr+Shift+Iは外す方法が見つかりませんので別の組み合わせに変更します。

527:デフォルトの名無しさん
21/10/25 21:49:13.26 YikV54AJ0.net
ショートカットに拘るのが
わからん

528:471
21/10/26 13:17:41.14 NeMLM07o0.net
>>471,472,474です。
間があいてしまい、申し訳ございません。
マクロを実施すると、「支店一覧」A2:A18のA2,A3,A4のシートまでは対応が完了するのですが、
その後A5名のシートが作成されず、「原本(2)」というシートが作成されたあと、以下エラーとなります。
「実行時エラー'1004':
この名前は既に使用されています。別の名前を入力してください。」
.Name = 支店名.Value
の部分が黄色くなっています。
こちらで「支店一覧」をみるかぎりではおかしなところはみあたりません
(もちろんA2:A18に重複もありません)

529:デフォルトの名無しさん
21/10/26 14:40:57.52 geAm6QgM0.net
「この名前は既に使用されています。」って言ってんだからそのシートが存在するんでしょ。見当たらないなら非表示になってるか

530:デフォルトの名無しさん
21/10/26 15:44:08.87 W8WFYMpad.net
以下の処理について質問です
「条件→A列に1行目から文字列が多数行入力されていて、文字列にはa、b、cのアルファベットのどれか一つのみが必ず含まれている。(例 ”15あうa” 例"7c8-of")
やりたいこと→B列に連番を振りたい。aを含む文字列だけで1,2,3,4... bを含む文字列だけで1,2,3,4...のような感じで振りたい。」
一応自分で次のようにやってみたら出来ました
セルC1 C2 C3に a b cと入力して、for eachでC1~C3を括る?
さらにfor eachでA列を括る。
そしてA列にて上のセルから順番にaを含むかif文で判断して連番を入力させる。
b,cについても同様に行うと

for とか ifしか使えないためこのようなやり方をしたのですが、もっと適切な方法があれば教えて頂きたいです。

531:471
21/10/26 15:50:27.98 NeMLM07o0.net
>>522
非表示でもないです
そもそも「原本(2)」という名前のシートがなぜ作成されるかも謎なんです
(「原本」があるので、「原本(2)」が作成されるときに記載のエラーになるのでは
と推測しています)

532:デフォルトの名無しさん
21/10/26 16:18:01.43 Uox0HVAS0.net
>>520
ショートカット以外だとリボンにカスタム登録するしかないけどいちいちマウスを使うと
キーボード操作の流れが途切れる。

533:デフォルトの名無しさん
21/10/26 16:35:47.94 cmR9o8NP0.net
そりゃ原本ってシートをコピーしたんだから原本(2)って名前のシートができるだろ

534:デフォルトの名無しさん
21/10/26 17:04:12.98 geAm6QgM0.net
>>523
連番をカウントする変数を3つ作ればいい

535:471
21/10/26 17:28:50.64 NeMLM07o0.net
ほんとバカですみません、、、
自分が嫌になります
それなのにみなさま返信有難うございます
追加ですみません
支店名シートのA2:A18の中で、★が支店名に含まれているものは
シートを作成しなくてよいという条件を組み込むことはできますか?
あと、各シートを作成したあとに、シートの数式をすべて値にしたいですが
できますか?
Sub シート作成
Dim 支店名 As Range
For Each 名前 In Worksheets("支店名").Range("A2:A18")
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 支店名.Value
.Range("B5") = 支店名.Value
End With
  Range("B3").AutoFilter 1, "0"
With Range("B3").CurrentRegion.Offset(1, 0)
.Resize(.Rows.Count - 1).EntireRow.Delete
  Range("B3").AutoFilter
End With
Next 支店名
End Sub

536:デフォルトの名無しさん
21/10/26 17:29:10.65 W8WFYMpad.net
>>527
分かりませんでした!もう少し詳しく教えていただけないでしょうか!

537:デフォルトの名無しさん
21/10/26 17:39:37.61 geAm6QgM0.net
a=1:b=1:c=1
for i=1 to 最後の行
if instr(cells(i,1),"a")>0 then
cells(i,2)=a
a=a+1
elseif instr(cells(i,1),"b")>0 then
cells(i,2)=b
b=b+1

end if
next i
みたいな

538:デフォルトの名無しさん
21/10/26 22:18:39.74 GuH7IxvP0.net
>>523
ここまでせんでもって思うけど
URLリンク(i.imgur.com)

Sub foo()
'準備
myarray = Array("aa", "bb", "cc")
'初期化
Set myDic = CreateObject("Scripting.Dictionary")
For Each x In myarray
myDic.Add x, 0
Next
'本体
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 最終行
For Each x In myarray
If InStr(Cells(i, 1), x) <> 0 Then
myDic(x) = myDic(x) + 1
Cells(i, 2).Value = myDic(x)
End If
Next
Next
End Sub

539:デフォルトの名無しさん
21/10/26 22:19:38.61 GuH7IxvP0.net
暇だから書いたけど、実際やるなら>>530みたいなので済ます戸思う

540:デフォルトの名無しさん
21/10/26 23:37:03.27 HhcOopAn0.net
D列のセルに文字を入力するとJ列のセルが塗りつぶされる処理をしたいのだがどうしたら良いものか
Sub Macro1()
If InStr(Range("D1").Value, "") > 0 Then
Range("D1").Offset(0,6).Interior.ColorIndex = 16
Else
Range("D1").Offset(0, 6).ClearFormats
End If
End Sub

541:デフォルトの名無しさん
21/10/27 00:02:27.06 d3yRZmnd0.net
条件付き書式でいいんじゃね

542:デフォルトの名無しさん
21/10/27 00:17:15.91 PN2o+9fe0.net
条件付き書式でいいが、どうせVBAでやるなら入力のたびに書式をクリアしてから再設定する方がいいよね

543:デフォルトの名無しさん
21/10/27 19:45:59.71 DgEx7n5q0.net
条件付き書式がいいんじゃないかなぁ

544:デフォルトの名無しさん
21/10/27 20:46:04.85 Pols7qyl0.net
>>533
If Range("D1").Value <> "" Then
あとはChangeイベントにする

545:デフォルトの名無しさん
21/10/28 11:45:30.63 WDBBEMQR0.net
コードを一括エクスポートするアドインでおすすめのってないですか?
Windows10のMicrosoft 365を使っていますが、下記は動作しませんでした。
URLリンク(moondoldo.com)
ExcelVBAExport2007_xlam_20100321.ZIP → ExcelVBAExport2007.xlam

546:デフォルトの名無しさん
21/10/28 11:50:21.99 WDBBEMQR0.net
>>538
できた!これから手順を書いていく。

547:デフォルトの名無しさん
21/10/28 12:12:13.13 WDBBEMQR0.net
>>538
上記サイトに記載されているとおり、
アドインフォルダに.xlamファイルをコピーし、アドイン登録を済ませて、
[Visual Basic プロジェクトへのアクセスを信頼する]のチェックボックスをオンにした状態でも、
[開発]タブに[エクスポート][選択エクスポート]が表示されなかったので、
最新のExcelでは使えないと勘違いしていたが、下記の手順で使えるようになった。
①エクスポート対象のxlsmファイルを開く。
②[開発]-[Excelアドイン]をクリックする。
③有効なアドイン一覧に、既に登録済みのExcelvbaexport2007がある。
④既にチェックボックスはオンになっているが、そのまま[参照]ボタンを押す。
⑤アドインフォルダ(~Roaming\Microsoft\AddIns)が開く。その中のExcelVBAExport2007.xlamを選択する。
⑥「この場所に'~Roaming\Microsoft\AddIns\ExcelVBAExport2007.xlam'という名前のファイルが既にあります。置き換えますか?」と聞かれる。
⑦[はい]を選択する。
⑧[OK]ボタンを押してアドインウィンドウを閉じる。
[開発]タブ内の右端に[エクスポート][選択エクスポート]が現れる。

548:デフォルトの名無しさん
21/10/28 16:45:24.43 IU5+Uq0S0.net
Excel 2019
「オプション」-「詳細設定」の「グラフィックアクセラレータを無効にする」のチェックを
VBAで設定するにはどうすればいいでしょうか?
AccessだとApplicationのSetOptionやGetOptionでできるんだけど、
Excelには見当たらないのでよろしくお願いします。

549:デフォルトの名無しさん
21/10/28 19:13:26.37 t5V0CZ4Da.net
URLリンク(ja.play-and-more.com)
ハードウェア アクセラレータ―の設定については、
Excel と Word の設定が連動しているので、
Excel のオプションから設定を変更することで
Word 側にも設定を反映することはできます。

550:デフォルトの名無しさん
21/10/28 20:43:34.51 rkEXdrl2d.net
>>530
>>531
ありがとうございます!
別のケースに応用できるのでありがたいです!

551:デフォルトの名無しさん
21/10/29 13:13:50.85 A+QIge6G0.net
同じpersonal..xlsbを複数の端末で使いたいので xlstart フォルダーから同期フォルダーに移動し
xlstart フォルダーではかわりに同期フォルダー内のpersonal.xlsb へのショートカットを置きました。
期待通り起動時にpersonal.xlsbを読み込みますが毎回マクロの実行許可を求めるので面倒です。
マクロ有効ファイル一般の仕様であることは理解しておりますが、特定のマクロファイルのみ確認を省略するか、
またはxlstart内にpersonal..xlsbにおいたまま同期する方法はないでしょうか。
xlstartフォルダー自身を同期フォルダーに設定することも検討しましたが、
googlドライブの場合は同期フォルダーは全てGドライブに移動するので
xlstartフォルダ自体が自動実行できなくこと、またpersonal.xlsb起動時にマクロを有効にするか確認
がはいり解決になりません。

552:デフォルトの名無しさん
21/10/30 12:52:49.36 MclRPTdP0.net
>544
信頼できる場所に追加するとか、デジタル署名付けるとかしたら行けるんじゃ?
しらんけど

553:デフォルトの名無しさん
21/10/30 15:59:41.68 jbS9woJL0.net
>>545
知らんのかい

554:546
21/10/30 16:14:32.06 jbS9woJL0.net
>>545
personal.xlsbを信頼できるドキュメンに設定したらできました.
無礼な物言いごめんなさい.

555:デフォルトの名無しさん
21/10/30 16:52:18.20 u+oDsXHga.net
ゆるさん、打ち首じゃ

556:デフォルトの名無しさん
21/10/30 18:39:08.12 jbS9woJL0.net
めんご

557:デフォルトの名無しさん
21/10/30 18:39:42.42 q


558:+2005If0.net



559:デフォルトの名無しさん
21/10/30 18:44:01.08 8M2WunKL0.net
マンゴ

560:デフォルトの名無しさん
21/10/30 22:30:09.59 hcWJ/Uj70.net
三兄弟

561:デフォルトの名無しさん
21/11/04 12:18:24.94 onPWkBOz0.net
for i = 1 to 100 step 1
  '最終行は処理中に変動するため栗けしの都度最終行を取得する
  Worksheets(OutputSheetName).Cells(1000, 1).Select
  Selection.End(xlUp).Select
  iRastrow = Selection.Row
  for j =2 to iLastrow step 1
   何らかの処理
  next j
next i
上記のようなプログラムがあったとして j=2、iLastrow=1のように最初から子ループの終了条件を満たしているようなケースで
子ループの j が 2でクリアされず親ループの繰り返しの都度 3,4...と加算されていくケースがあるんだけどさ
最初からループの終了条件を満たしている場合は、for j=2 … の部分の変数値のクリアはされないものなの?
終了条件を満たしているか満たしていないかに限らず、この行にきたら j=2 でクリアしてくれると思ってたんだが…

562:デフォルトの名無しさん
21/11/04 12:30:43.13 h43gOvN2a.net
LとRはいいの?

563:デフォルトの名無しさん
21/11/04 12:43:19.95 onPWkBOz0.net
ごめん、そこは単なる書き間違い
実際のコードはLで統一されとります

564:デフォルトの名無しさん
21/11/04 13:10:37.18 5T7tzysMd.net
--ここから読む--

565:デフォルトの名無しさん
21/11/04 16:49:49.42 or1HotUn0.net
コボル、フォートラン、LISP、VBA、、、

566:デフォルトの名無しさん
21/11/04 19:17:22.94 hoh+rIGN0.net
>>557
色々行ったけど一つとしてものにならなかった…?

567:デフォルトの名無しさん
21/11/04 19:43:59.36 ipFD2P4r0.net
エクセルでチェック表作った
職員に入力してもらって月一で提出してもらってrpaツールに流し込んで専用ソフトに入力してるけど
バージョンアップしたファイル渡したのに
無視して古いファイル使ってきたり
様式ぶち壊してめちゃくちゃなファイルを提出してきて
まともなデータに成形するのに死ぬほど苦労した
ゴミ職員にたいしてブチ切れそうなんだけど
どうしたらいいですか

568:デフォルトの名無しさん
21/11/04 19:49:57.71 q8Oivabh0.net
新しいファイル以外の提出は受け付けなければいい

569:デフォルトの名無しさん
21/11/04 19:53:35.21 ipFD2P4r0.net
なるほどありがとう
このゴミ職員エクセルを魔法か何かと勘違いしてるわ
あまりに適当な仕事に腸煮えくり返る

570:デフォルトの名無しさん
21/11/04 20:01:42.86 Ghcai/Mm0.net
>>553
jの値はどこでどうやって確認したんだ?

571:デフォルトの名無しさん
21/11/04 20:21:03.55 BJCJqERO0.net
>>561
お前みたいな馬鹿が作っているからそうなる

572:デフォルトの名無しさん
21/11/04 20:33:51.75 ipFD2P4r0.net
どういう状況のファイルかもわからんで煽るバカに言われてもな

573:デフォルトの名無しさん
21/11/04 20:44:25.67 BJCJqERO0.net
>>564
壊されるような造りになってるのが馬鹿の証だぞ

574:デフォルトの名無しさん
21/11/04 20:47:33.02 q8Oivabh0.net
>>561
妥協点として下位互換は残しておいて
それでも成形の必要があるやつはお断りかな
成形はあなたの仕事では無いよ
ただ提出者が楽なようにしてるだけだと思う
それは提出者が仕事してないって事だな

575:デフォルトの名無しさん
21/11/04 20:49:27.77 ipFD2P4r0.net
仕方ないね。元は別の人が勝手に作った表で
おれのはその表をコピーして○がつけられるようにしたものだから
人のファイルを保護かけてガチガチに固めて私物化するわけにも行かないし
お前みたいな後先考えられないバカは
他所のファイルをガチガチに固めて属人化して批判されるんだろうけど

576:デフォルトの名無しさん
21/11/04 20:51:12.58 BJCJqERO0.net
>>567
典型的な馬鹿の言い訳

577:デフォルトの名無しさん
21/11/04 20:53:21.15 ipFD2P4r0.net
もう反論終わって罵倒で誤魔化すタイムか
知能指数低すぎるわ

578:デフォルトの名無しさん
21/11/04 20:58:17.15 xnqGDt6JM.net
と、バカが申しております。

579:デフォルトの名無しさん
21/11/05 05:16:46.04 UB8UVAT80.net
>>553
そもそも
>> 子ループの j が 2でクリアされず親ループの繰り返しの都度 3,4...と加算されていくケースがある
が起きてるとどうやって判断したのかが分からない。
例えば実行できるコードにdebug.printを挿入しておいて、
「これを実行するとこんな出力されます、実際にはこうなって欲しいです」
みたいな具体的な質問してくれた方がいいと思う。
そういう分かりやすい質問文書くと、その過程で自己解決できたりするし。

580:デフォルトの名無しさん
21/11/05 06:16:51.41 7Ov3I8ut0.net
>>567
とは言え上でも言われている通り
違うフォーマットのものは受け付けないようにするか
触られたくないところは保護掛けるくらいしか現実的な解決策はないだろうね
形式の違うもの送られて来たからこちらで手で直す、というのは基本的に違う気がする。
フォーマットチェックを行うツールを作ってそのゴミ職員とやらに「これでOKとならないものは受け付けません」とやる手もあるけど、そのツール作るのにも工数は掛かるからね。

581:デフォルトの名無しさん
21/11/05 06:56:51.17 UB8UVAT80.net
>>559
>無視して古いファイル使ってきたり
1,共有サーバーに置いてショートカットから起動させる
2,実際の処理はサーバーにやらせる。
3,VBA諦めてWebアプリにする
>様式ぶち壊してめちゃくちゃなファイルを提出してきて
そういうのは警告メッセージだして拒否するもの。
これまで未対応の様式のファイルも修正するおせっかいをしておきながら、
「めんどくさい」と突然キレるのは最悪。
やるならやりきる、やらないなら最初からやらない。中途半端は一番ダメだからね。
もしくはVBA諦めてテキスト関連のライブラリ豊富な使いやすい言語にする。


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