Excel VBA 質問スレ P ..
[2ch|▼Menu]
254:デフォルトの名無しさん
19/05/14 22:31:09.98 a29jNOd40.net
>社内システムなので
多分、このスレ見てる全員ズコーだわ、そのオチ。
システム部門の人に聞いちゃダメなんかい。

255:デフォルトの名無しさん
19/05/14 22:36:33.89 s0Vi/y5R0.net
CreateObject("Shell.Application").Windows() から探す

256:デフォルトの名無しさん
19/05/16 11:39:56.68 a1IyAHl+r.net
excelマクロでのバージョン管理てどうすればいいん
言われるがままに集計マクロ作ったら担当者毎に持ってるマクロのバージョン違ってあの機能が無いとか特殊な状況でエラー出る→それ先月直しましたよ
が頻発してる

257:デフォルトの名無しさん
19/05/16 12:20:32.52 5BGNguvP0.net
>>256
サーバー上にマクロ専用のエクセルファイルを置いて、
個々に配っているファイルからはそのマクロを参照させる

258:デフォルトの名無しさん
19/05/16 12:51:40.47 YRbGgWK/M.net
>>257
基本それだが、ずっと掴んでるやつがいるとバグ修正や機能追加のときに困る

259:デフォルトの名無しさん
19/05/16 14:16:39.46 5BGNguvP0.net
>>258
読み取り専用にしてもダメか?

260:デフォルトの名無しさん
19/05/16 14:16:55.41 5BGNguvP0.net
もちろん自分が編集する時は読み取り専用解除ね

261:デフォルトの名無しさん
19/05/16 14:43:29.72 wWtnEH3A0.net
コード書く画面を
背景は黒に、文字は白に、する方法を教えれ

262:デフォルトの名無しさん
19/05/16 15:42:20.38 Z2BhGmok0.net
ツール -> オプション -> エディターの設定

263:デフォルトの名無しさん
19/05/16 16:12:18.52 BYfNVo3YM.net
>>256
OS起動したら、サーバからコピーしてくるバッチ等を走らせる
小さいならいちいちバージョン確認しなくてもよい

264:デフォルトの名無しさん
19/05/16 18:04:23.53 rNkkKl6PM.net
みんな一々シャットダウンするのか?
スケジュールでコピーだろ

265:デフォルトの名無しさん
19/05/16 18:58:39.63 5BGNguvP0.net
>>>261
これ
URLリンク(tonari-it.com)
ちなみに書くとこはVBEって言うから覚えておくと検索できて便利

266:デフォルトの名無しさん
19/05/16 19:18:23.52 UtWIeHx/p.net
マクロ終了時にマクロ開始から終了までにかかった時間が秒までメッセージボックスに表示するってできる?

267:デフォルトの名無しさん
19/05/16 19:18:36.52 rD+4K505M.net
>>264
個々人のローカルフォルダにxlam があってそれが定期的に書き換えられるって事?
他のブックがxlamを掴んでる最中でもできる?

268:デフォルトの名無しさん
19/05/16 19:23:31.84 UPwRXvuL0.net
>>266
できる

269:デフォルトの名無しさん
19/05/16 19:26:21.47 5BGNguvP0.net
>>266
楽勝
Sub foo()
開始 = Now
'処理
終了 = Now
MsgBox Format(終了 - 開始, "hh:mm:ss")
End Sub

270:デフォルトの名無しさん
19/05/16 19:26:44.10 5BGNguvP0.net
>>268
URL春だけでもいいから教えてあげたらw

271:デフォルトの名無しさん
19/05/16 19:31:25.53 UtWIeHx/p.net
>>268はなんとかookスレで最近流行りの流れだよw
>>269ありがとう!

272:デフォルトの名無しさん
19/05/16 20:10:17.30 rNkkKl6PM.net
>>267
掴んでたらスルー

273:デフォルトの名無しさん
19/05/16 22:17:19.76 aE3zz80C0.net
>>256
起動時に何らかのファイルを参照するようにしておいて、
参照出来たらそのままOK。
出来なかったら、新たにファイルをDLする仕組みにする。
で、更新させたい時は、わざと参照用ファイルを消しておく。

274:デフォルトの名無しさん
19/05/16 22:24:00.58 yzKWQsxd0.net
>>273
xlamを共有するならそこのWorkbook_Open にそういう処理を入れておけばいいでしょうね

275:デフォルトの名無しさん
19/05/16 23:04:51.54 kfbhC4dW0.net
>>256
最新バージョン書いたテキストかなんかを共有に置いといて、起動時に見に行ってそれより古かったら更新促す警告出すとか

276:デフォルトの名無しさん
19/05/17 02:52:09.97 gYF5enuVM.net
Excelの起動時、マクロを実行させる:Excel(エクセル)マクロ
URLリンク(www.excel.usefulhp.com)
で良いだろ

277:デフォルトの名無しさん
19/05/17 09:22:35.60 YDbG3YPmr.net
共有パス見て実行とか大変そう面倒そうて主観があったけども
Application.Run "共有のパス!マクロ名 "
の1行でいけちゃうもんなのか…?
とりあえず試してみる
すでに誰かが開いてる?とか参照できないときの対処も色々試してみるありがとう

278:デフォルトの名無しさん
19/05/17 09:26:03.52 PC2o5teB0.net
>>277
そっちは使わないかな
俺はボタンにマクロの場所を登録する

279:デフォルトの名無しさん
19/05/17 09:26:30.66 PC2o5teB0.net
なんか日本語変だ
まぁいいか

280:デフォルトの名無しさん
19/05/17 12:25:15.46 cM5KCNydp.net
ちょっと筋外れるかもしれないけどvbeに行間なく詰めて書いたコードの選択範囲に1行ずつ改行入れるいい方法ない?

281:デフォルトの名無しさん
19/05/17 12:28:45.29 gxvYGXpT0.net
そんなのできない。サクラエディタで置換して貼り付けろ

282:デフォルトの名無しさん
19/05/17 22:00:27.88 BHkVW2uG0.net
>>280
VBEを操作すればできると思う。面倒だけど
まあ>>281の方法が合理的だろうな

283:デフォルトの名無しさん
19/05/18 00:21:37.50 qrQ2t1Xp0.net
>>280
改行コードを改行コード+改行コードで置換

284:デフォルトの名無しさん
19/05/18 00:55:20.52 pDLl57eM0.net
コードウィンドウ内の改行はCRLFじゃなくてLFだった筈。
そんなに難しくない。
でもこれが動く設定はマクロウィルスも動くから危険だよ。
Sub test()
Dim strCode As String
Dim stRW As Long
Dim stCL As Long
Dim edRW As Long
Dim edCL As Long
With Application.VBE.ActiveCodePane
.GetSelection stRW, stCL, edRW, edCL
strCode = .CodeModule.Lines(stRW, edRW - stRW + 1)
.CodeModule.DeleteLines stRW, edRW - stRW + 1
.CodeModule.InsertLines stRW, Replace(strCode, vbLf, vbLf & vbLf)
End With
End Sub

285:デフォルトの名無しさん
19/05/18 19:27:39.15 4RzeW/b40.net
専用のメソッドがあるのが凄いわ。
何を想定して用意してあるんだろう?
プログラムがプログラムを書き直すAIにでも使うのか?

286:デフォルトの名無しさん
19/05/18 20:16:07.59 8gQadrhx0.net
Application.VBE.ActiveCodePane
こんなの合ったのか
PaneはPanelかと思ったら、ペインの事なのね

287:デフォルトの名無しさん
19/05/18 20:29:02.38 P5JmHxRDM.net
VBEを拡張するためのオブジェクト群が用意されてるんだよね

288:デフォルトの名無しさん
19/05/19 09:22:38.02 MCPGuHEx0.net
Excel4マクロは自己書き換え自由だったから
機能的に負けるわけにはいかなかったんじゃね?

289:デフォルトの名無しさん
19/05/19 11:43:42.11 1xMNIuy/x.net
配布済マクロの修正パッチとかで大量のファイルや行を一括修正したいときは便利

290:デフォルトの名無しさん
19/05/19 12:03:05.34 igxNvdy7a.net
単価の低そうな涙ぐましい仕事だな

291:デフォルトの名無しさん
19/05/19 12:39:30.70 gILK5dpZ0.net
マクロ4はできる人がいない+やりたくないから単価超高いぞ
で、単価高くしても足が出る・・・

292:デフォルトの名無しさん
19/05/21 19:13:05.44 7gg6L6p3p.net
実行から終了まで数分かかるマクロを途中で止める方法ないですか?f4押したら「処理を止めました」のメッセージボックスとともに停止するとか。

293:デフォルトの名無しさん
19/05/21 19:31:11.94 OX+uPiO40.net
Break
ESC

294:デフォルトの名無しさん
19/05/21 19:37:07.71 K+4dE9j10.net
ループが長いならDoEvent入れておいて
msgbox "終了します"とendだけ書いたのを起動できるボタンどっかに置いとけばいい

295:284
19/05/21 20:04:23.19 MD1oUmkY0.net
ESCやBreakで止まるなら良いけど、それで止まらない処理ならウィンドウESC押しながらタスクバー上でマウスでウィンドウの切り替えをすると止まる。
どっかのブログで見て知ったけど役に立ってる。

296:デフォルトの名無しさん
19/05/21 21:15:28.57 QvaiZxJv0.net
こうする
URLリンク(youtu.be)

297:デフォルトの名無しさん
19/05/21 21:30:20.69 7gg6L6p3p.net
ほー
明日試してみます

298:デフォルトの名無しさん
19/05/21 22:08:13.75 R92gi7e40.net
2009/12/16に公開って何だよ。
20年くらい前に見たぞそれ。

299:デフォルトの名無しさん
19/05/22 06:58:44.20 SD95iW5CM.net
>>298
映像はどうみても20年以上前だな
的確な対応で現在も使える

300:デフォルトの名無しさん
19/05/22 09:27:28.15 ztZYN21m0.net
セルの値を数式に代入って無理でしょうか?
たとえばA1セルに乱数が入ってた場合に
どっかのセルに =A2-乱数 という数式を代入したい感じです

301:デフォルトの名無しさん
19/05/22 09:41:17.90 5+y7OppMM.net
=A2-A1

302:デフォルトの名無しさん
19/05/22 09:43:43.65 ogyeLG/uM.net
演算あり値コピーの話?

303:デフォルトの名無しさん
19/05/22 09:52:11.18 AHnUJ8Jk0.net
いやセル番地じゃなくて値を数式に代入したい感じです
たとえばA1セルに2,134という数字が入ってた場合に
=A2-2,134 という数式をどっかのセルに代入
A1セルが387だとしたら
=A2-387
説明下手糞で申し訳ないです

304:デフォルトの名無しさん
19/05/22 09:54:20.78 hC9fKDDe0.net
>>300
書いている意味がよくわからんど
セルに式でも値でも代入できる
ただ、乱数は曲者で常に変わるから
もう少しやりたいことを具体的に書き込もう

305:デフォルトの名無しさん
19/05/22 10:00:56.85 hC9fKDDe0.net
>>303
乱数は曲者で
A1セルが387だとしたら
=A2-387
ほかのセルに「=A2-387」を入れた時点でA1セルは変わるから
もう少し何をしたいのか書くように

306:デフォルトの名無しさん
19/05/22 11:59:27.46 zi+TqRd2r.net
そもそも数式はスレ違いだろ
VBA関係ないならどっかエクセルの使い方の板かスレかさがせ

307:デフォルトの名無しさん
19/05/22 13:17:58.06 /GezpU1zp.net
>>305
A1セルの乱数結果が現時点で387だとしたら
変数(仮にrとする)に、387を格納して
ほかのセル(仮にB1とする)に"=A2-r(中身387)"を入力したいって事?
それなら確かに関数じゃできないよね

308:284
19/05/22 13:58:22.19 WDej9GuM0.net
>>303
Range("C3").Value="=A2-" & Range("A1").Value
じゃ駄目?

309:デフォルトの名無しさん
19/05/22 16:05:46.41 hC9fKDDe0.net
>>307
それに意味あると思えない、乱数なんてふつうは仕事に使わない
例えば、学校の先生あたりが、引き算足し算などの問題を自動的に作りたいとか
であれば、A列に乱数1の結果をB列に乱数2の結果を
C列に計算式を、D列に回答をで別シートなどで問題文を作る
このぐらいだな

310:デフォルトの名無しさん
19/05/22 18:12:45.70 j7jZt3jJM.net
説明下手糞ってレベルじゃねぇぞ…

311:デフォルトの名無しさん
19/05/22 18:48:51.39 RRuRLAJCM.net
>>309
ちょっとしたシミュレーションで使うかもしれない。(Excelでやるとは言ってない)
>>302じゃダメなの?

312:デフォルトの名無しさん
19/05/22 19:16:53.47 CZzIGWUTM.net
>>311
ちょっとしたシミュレーション・・無いだろ
この文書力だとセルに入れたい式って
計算式の文字列かもしれん

313:デフォルトの名無しさん
19/05/22 22:59:24.50 bxcYYOqD0.net
もうあれだ。
ここは、何の用途に使うのか当たられたやつが優勝スレにしよう。

314:デフォルトの名無しさん
19/05/22 23:13:17.16 K7mhmRd90.net
完全乱数を使って円周率の計算をする

315:デフォルトの名無しさん
19/05/23 07:43:57.81 mLR+BkfhM.net
別に用途は何でもいいさ
興味ゼロってわけじゃないけど

316:デフォルトの名無しさん
19/05/23 10:22:05.81 WDXUv9KM0.net
こっちで作って欲しいと言われたものをつくってると
そんなもの作られたら困る
楽になって人が減らされると困る、と古参がちくちく
この古参、自分の作業を楽にしたい時には
これがもう偉そうな態度で、「作らせてやる」とでも言わんばかりに頼んでくる
どうしたいんよもう
っていうことないっすか
もう面倒なんで職場で作るのやめようかな
すんません落書きしちゃって

317:デフォルトの名無しさん
19/05/23 10:56:07.55 cSCM+dO10.net
厚労省で配布されている
URLリンク(www.mhlw.go.jp)
にある
URLリンク(www.mhlw.go.jp)
なんだけど、内容は単純で
1件いくらの検査があって、件数を入力すれば請求書が作成されるというもの
1シート=1自治体なので、複数の自治体へ請求する場合は、ユーザーがシートコピーして作る
VBAで各シートを集計して総括表に転写する
なんだけど、VBAみて
変数が多すぎてコーディング中に間違えても気づかんだろってのと
引っ張ってくるセルをConstで決め打ちしてるけど
これ後のメンテナンスでセル一個挿入することになったら修正大変やん と思いました。
というか、エラーメッセージの所で間違えて
行を表示すべきところを列表示しているけど
これこそ変数多すぎて分かりにくくした事が原因だと思います。
じゃあどうする、と言われたらみなさんならどうしますか?
同じ形の複数の2次元の表を合計するだけなんだから
スタート地点とゴール地点決めてやって
後はずらしていけばいいやんと思うのですが
後、小数とか負の値ぶっこんでも動作するのはモヤモヤするんだけど
まぁこの辺やりだしたらキリがないので使わせる相手によってどうするかは変えますかね

318:デフォルトの名無しさん
19/05/23 11:43:15.47 mLR+BkfhM.net
>>316
義務教育でプログラミングを扱うようになって、自分の仕事くらい自分でプログラミングできないようでは大変な事になるよ、
と教えてやればいい。
もしかしたら「手下にプログラミングさせればいい」と勘違いするかも知れないが、
それでは通用しないよと言ってやろう。
こういう話もあるし
URLリンク(lite.blogos.com)

319:デフォルトの名無しさん
19/05/23 16:11:36.77 hFcQqqxb0.net
>>316
ただ単純に業務全体を見ずに作るから役に立たないんだよ
業務に対して目的と効果を文書ではっきり示せば古参の意見を聞かなくていい

320:デフォルトの名無しさん
19/05/23 16:13:59.49 X/3FpVKz0.net
>>316
その古参の上司に報告しろ

321:デフォルトの名無しさん
19/05/23 16:14:38.98 hFcQqqxb0.net
>>317
すまん、リンク先を読む気もしない

322:デフォルトの名無しさん
19/05/23 17:56:30.55 pyUsEGpsM.net
>>317
べき論の先には「VBAを使うのをやめるべき」という結論しかないから不毛よ
俺ならどうするか?下請けに丸投げして終わりだよ

323:
19/05/23 19:35:05.76 QGT5qlDg0.net
>>318
>義務教育でプログラミングを扱うようになって、自分の仕事くらい自分でプログラミングできないようでは大変な事になるよ
脅かすことでプログラミングができるようになるとはおもいませんが…
プログラミングって極めて創造的な作業ではないでしょうか、似たようなものは数学の証明問題だと思いますが証明問題を脅かして解けるようになるとは思えません

324:デフォルトの名無しさん
19/05/23 20:39:50.63 X/3FpVKz0.net
機械学習やweb系ならともかく、
VBAレベルなら極めて事務的な仕事だろう。どこにも創造性なんて無いよ
ルーチンワークを自動化させてるだけ

325:
19/05/23 20:58:31.34 QGT5qlDg0.net
>>324
でもそのルーチンワークを実際に記述するとなると一本道というわけにはいかないでしょう?
論理的な一貫性を維持しながらしたいことを記述するのは、いわれているほどやさしい仕事ではない

326:デフォルトの名無しさん
19/05/23 21:06:10.14 X/3FpVKz0.net
>>325
一本道だよ、全然難しくない
強いて言えば例外を先に全部列挙した上でシステムに放り込むという順序の変更がある程度
面倒なのは仕様変更と、使いにくいというオバハンの嬌声。オバハンにalt+F8は覚えさせたけど、まぁそれぐらい

327:デフォルトの名無しさん
19/05/23 22:12:48.96 0Fgm70+GM.net
まあ、自己満足で終わるなら簡単だな
おばはんにも満足いくように作るんだよ

328:デフォルトの名無しさん
19/05/23 22:27:50.56 49rcJhkB0.net
>>317
コンスト過ぎてワロタ。

329:デフォルトの名無しさん
19/05/23 22:55:08.55 EGX4zlJj0.net
>>323
それもそうだが、その老害を大人しく
させることができれば上出来と考えた

330:デフォルトの名無しさん
19/05/24 01:42:55.95 9kKOGm+S0.net
Excel2016にてpersonal.xlsbに「保存せず閉じて開き直すマクロ」を作ったところ挙動が変です
Sub ReOpen()
  Dim wb As Workbook
  Dim path As String
  Set wb = ActiveWorkbook
  path = wb.fullName
  '※1
  If MsgBox("本当に変更を取り消しますか?", vbYesNo) <> vbYes
    Exit Sub
  End If
  wb.Close(False)
  Application.Wait([Now() + "00:00:01"])
  '※2
  Workbooks.Open(path)
End Sub
このマクロ自体は動くのですが、※1のIf〜EndIfを消すと※2のOpen実行直後にExcelが通知無く落ちます
また、※1※2を両方消してマクロ実行した後、手動でブックを開き直すとやっぱりExcelが落ちます
対象のブックはフォームやマクロを含んだ3MB程度のxlsmファイルです
MsgBox出さないだけでなぜ不安定になるのか、思いつく原因を教えて頂けると幸いです

331:デフォルトの名無しさん
19/05/24 01:44:27.87 9kKOGm+S0.net
あ、Ifの末尾のThen忘れたので脳内で補完してください

332:デフォルトの名無しさん
19/05/24 06:40:29.33 /lvzTPqGM.net
>>331
ハイ イイエ が逆なのも利用者が自動変換するんですね

333:デフォルトの名無しさん
19/05/24 06:54:20.73 /lvzTPqGM.net
>>332
すまん、継続がキャンセルか

334:デフォルトの名無しさん
19/05/24 09:59:52.88 RAYiE+wA0.net
>>330
2019で試したけど落ちなかった
> Application.Wait([Now() + "00:00:01"])
これを抜いても同じ
カンで答えると、再計算が邪魔してるような気がする
・一度再計算や描画、イベントを切ってみてはどうかな
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
・あとはこの部分のウェイトをもう少し長くする
>Application.Wait([Now() + "00:00:01"])
・まっさらなブックで試してみる

335:デフォルトの名無しさん
19/05/25 07:54:51.56 TRopVMeK0.net
アドインって、ファイルを閉じたら、
一緒に閉じられるものだと思ってたけど、
VBA実行中は残るということか。
一緒に閉じられたら、途中で止まっちゃうからな。

336:デフォルトの名無しさん
19/05/25 08:55:38.15 nkVbmNSl0.net
vba実行中というかずっと残るっぽい

337:デフォルトの名無しさん
19/05/25 09:55:42.63 wPp02VNQ0.net
エクセルの機能に追加してるからな
アドイン使ったファイルをアドインがないエクセルで編集すると壊れるよね

338:デフォルトの名無しさん
19/05/25 10:07:50.37 wPp02VNQ0.net
>>330
経験上納得できない動作をするときは何か見落としているところがある
step実行で場所特定して、各変数の値が壊れてないか確認
イミディエイト画面で入力してみるなど

339:デフォルトの名無しさん
19/05/25 10:14:01.11 D2XIJyZK0.net
Excelに限って言えば、Excel自体に変な仕様が多い
これが男を惑わせる

340:デフォルトの名無しさん
19/05/26 04:10:46.96 xQGdFtWrM.net
>>334
元に戻さないアホがいると大迷惑になるな
>>335
アドインはExcelに組み込むよね
>>339
配列数式なんか使うとブーイングになるよな

341:デフォルトの名無しさん
19/05/26 15:23:19.13 /taseRUt0.net
以下の状態だとB1〜B3は全て1:1048576と表示されてしまいます
Cells.SpecialCellsをRange("A1").SpecialCellsに変更した場合はB1〜B3は全てA1と表示されます
Ctrl + Endで選択されるセルの番地を文字列として取得するにはどうすればいいですか?
  A    B
1 Sheet1 =fn(A1)
2 Sheet2 =fn(A2)
3 Sheet3 =fn(A3)
Public Function fn(sSheetName As String) As String
fn = ActiveWorkbook.Worksheets(sSheetName).Cells.SpecialCells(xlCellTypeLastCell).Address(False, False)
End Function

342:デフォルトの名無しさん
19/05/26 15:41:58.63 /taseRUt0.net
関数呼び出しではなくマクロやボタンクリックでなら問題なかったので
そっちの方法に切り替えますすみません

343:デフォルトの名無しさん
19/05/27 06:52:50.90 lha2yOvQp.net
入力項目を複数用意したinputboxって作れますか?

344:デフォルトの名無しさん
19/05/27 07:55:59.33 6csejWaN0.net
>>343
どんなものを考えているんだ

345:デフォルトの名無しさん
19/05/27 08:12:50.88 lha2yOvQp.net
>>343
ごめん入力フォームじゃなくていいかも
最終的にやりたいことは、以下のボタン等が設置されたユーザーフォームを作ることです(他の要素も考えたら普通にinput boxでは無理と気づきました)
・AUTO openで開く
・押すと特定セルに文字が入力されるボタンを複数設置する
・カレンダーを設置する
・押すと印刷処理を行いつつファイルを上書き保存し閉じるボタンを設置する

346:デフォルトの名無しさん
19/05/27 08:30:52.72 jh6nOFVKM.net
>>345
こんな特殊なものAUTO openでやるって非常識だな
シートのマクロで十分だろてかマクロは印刷して保存だけでいいだろ
それも自動記録でも十分

347:デフォルトの名無しさん
19/05/27 08:37:02.21 jh6nOFVKM.net
Excelの勉強不足だろ

348:デフォルトの名無しさん
19/05/27 08:47:00.50 6csejWaN0.net
>>345
それユーザーフォームにする必要がないような
ユーザーフォーム超めんどいから止めたほうがいいよ
あと、カレンダーはデイトピッカーと言う

349:デフォルトの名無しさん
19/05/27 09:45:56.73 W0zr6KdF0.net
この程度の理解力だとカレンダーが必要かもわからない
カレンダーなんか別にシートでもできるけど、どこまで使うかがわからないから
最適な解もわからない
入力をシートに反映するなんて普通にセルを参照すればいいだけ
ExcelもVBAも1%以下の理解で動作仕様を描くのではなく結果で何をしたいかを描くべき
これでも少しおだててるが

350:デフォルトの名無しさん
19/05/27 10:37:56.08 6csejWaN0.net
おだてるの意味間違えてるよ。

351:デフォルトの名無しさん
19/05/27 10:41:41.92 W0zr6KdF0.net
>>350
いや〜そうでもないよ
理解力は両方とも0.1%〜0.01%程度と思ってたから

352:デフォルトの名無しさん
19/05/27 11:25:38.71 bVlhmZqp0.net
てか、みんなが
>>345←この説明で全容を理解できてるのがすごいとおもったけど
いろんな意味に解釈できそうで、おれにはそのうちの一つには絞りきれないんだけど

353:デフォルトの名無しさん
19/05/27 11:44:36.09 dknccbkiM.net
>>352
教えたい人種の大半は問題の表層を自分の得意分野に転換して持論を得意気に展開してるだけ。
質問者の問題の背景に寄り添って解決を計ろうとする者は僅か。

354:デフォルトの名無しさん
19/05/27 13:50:33.03 6csejWaN0.net
>>352
どういうパターンであれ、大体ロクでも無い物だという判定ぐらいなら可能

355:デフォルトの名無しさん
19/05/27 14:00:43.29 zUYqf9yC0.net
>>345
ここの人達はマウント取りたいだけで実際はあまりスキルが無い人が大半なので程々に聞いていた方が良い。
あなたの要望については疑問が1つ、可能だけどあなたのスキルから考えて技術的に難しい点が1つある。
疑問は、AutoOpenで開いて、閉じるボタンで保存終了するのならExcelで作る必要は無いのでは?という疑問。
普通にC#辺りで作った方が適してると思う。この後に述べるけど、カレンダーの件もC#等の方が簡単。
技術的に難しいのはカレンダーの実現。
サブクラスとWin32の知識が無いと難しい。
後々を考えると汎用的にクラス作った方が良いからそういう技術も必要。
もっとも、ファイル追加とか自作するとかで良ければスキルが無くても出来るともいえる。

356:デフォルトの名無しさん
19/05/27 14:36:42.16 dknccbkiM.net
>>355
この人はマウント取りたいだけで実際はあまりスキルが無い人なので程々に聞いていた方が良い。

357:デフォルトの名無しさん
19/05/27 14:38:46.48 YnNlAtYud.net
>>356
そうくると思ったw

358:デフォルトの名無しさん
19/05/27 14:55:28.65 W0zr6KdF0.net
>>355
具体的に簡単にできる方法を説明してやれよ

359:デフォルトの名無しさん
19/05/27 14:59:26.84 6csejWaN0.net
>>358
まだ出せない
要件定義ができていないので、そもそもどういう設計が最適かも分からない
現状のまま作るのはめんどくさすぎる
具体的に言うとデイトピッカー、お前だ

360:デフォルトの名無しさん
19/05/27 15:11:18.55 W0zr6KdF0.net
>>359
要件定義・・?この理解力だと
当然仕事に対する理解力もないってことだよ

361:デフォルトの名無しさん
19/05/27 15:14:09.75 6csejWaN0.net
>>360
そこを何とかするのが面白いんじゃないの
マウント取りたいならハエやカエル相手にしてればいいだけだしね

362:デフォルトの名無しさん
19/05/27 15:29:12.90 W0zr6KdF0.net
>>361
だったら適当にすれば(笑)
出来ることを安易に提案することの影響を考えろよ
例えば、自動計算を止める
こんなのそのままにされたら困るほかの人いるだろ
でも単にONとOFFじゃあだめなんだよ、直前を記録して戻す
また、エラーや中止でも戻さないとな

363:デフォルトの名無しさん
19/05/27 15:39:29.96 W0zr6KdF0.net
>>361
きみはハエやカエル相手にして面白がってる
引きこもりさんってことね

364:デフォルトの名無しさん
19/05/27 15:42:22.97 6csejWaN0.net
>>362>>363
韓国人?

365:デフォルトの名無しさん
19/05/27 15:42:59.47 6csejWaN0.net
おだてるの意味もわかってないみたいだし、韓国の方でしたか
そりゃ話も合わないな

366:デフォルトの名無しさん
19/05/27 15:44:13.29 W0zr6KdF0.net
>>364
きみはハエかカエル?

367:デフォルトの名無しさん
19/05/27 15:45:54.11 W0zr6KdF0.net
>>365
ハエかカエル?
しかたないな

368:デフォルトの名無しさん
19/05/27 15:53:54.48 6csejWaN0.net
おだてる・・・w

369:デフォルトの名無しさん
19/05/27 16:04:29.34 6csejWaN0.net
これ以外の高速化ってありますか?
URLリンク(15g.jp)

370:デフォルトの名無しさん
19/05/27 16:27:23.36 aE9KPqY2M.net
>>369
これで問題ある場合はループしてるロジックが悪いか
ネットアクセスではありませんか?

371:デフォルトの名無しさん
19/05/27 16:42:48.59 6csejWaN0.net
>>370
運用方法が急に変わりまして・・
毎日 100ループ→毎時間 20000ループ
他の高速化が無いものかな、と
特になければ諦めてロジック組み直します

372:デフォルトの名無しさん
19/05/27 16:43:14.09 2J++TcAHM.net
再描画を止めるのは好かんな

373:デフォルトの名無しさん
19/05/27 17:19:36.20 aE9KPqY2M.net
>>371
セルへのアクセスを減らし
変数テーブルで処理をするぐらいかな簡単なのは

374:デフォルトの名無しさん
19/05/27 17:53:10.57 aE9KPqY2M.net
変更のないセルはかきかえない
変数の型をこていするかな

375:デフォルトの名無しさん
19/05/27 20:18:12.39 28fQIolrF.net
>>369
完全に嘘。
そもそも、それなりに書ける奴ならこの手法では速くならない。

376:デフォルトの名無しさん
19/05/27 20:19:14.57 28fQIolrF.net
逆に、これで格段に速くなったら恥ずかしいと思うべきだ。

377:デフォルトの名無しさん
19/05/27 20:29:10.36 eWpgS1rnF.net
高速化については下記が参考になる。
URLリンク(excel-ubara.com)

378:デフォルトの名無しさん
19/05/27 21:03:48.67 TIEuQB3m0.net
>>345
できるけど、一番最後の処理が事故を起こしそうだから1クッション置いた方がいいかも

379:デフォルトの名無しさん
19/05/27 21:13:42.01 Soi68xiZ0.net
セルというかシートは使わない
データ保存には外部バイナリファイルを読み書きする

380:デフォルトの名無しさん
19/05/27 21:16:23.22 TIEuQB3m0.net
>>369
これは描画を抑制するからその分の時間がかからなくなるというだけなので、表示に因らない処理の速度アップはまた別だよ

381:デフォルトの名無しさん
19/05/27 22:07:18.66 9GzIJnKt0.net
何でユーザーフォームを使うのかって?
シートに書くより格好いいからに決まってるじゃんwwwww
いや、わりとマジでそんなもんだと思いますけど。
だって、ユーザーフォームじゃなきゃ再現できないようなものって、
普通の事務処理でそんなに無いでしょ。

382:デフォルトの名無しさん
19/05/28 01:04:45.98 Rr62XR8Vx.net
ワークシートのイベントに重めの処理を書いている場合、シート側のイベントを避けるためユーザーフォームで出入力制御や演算を処理させることはある

383:デフォルトの名無しさん
19/05/28 08:43:02.61 8P1bQTIM0.net
入力のしやすさとかフォームの方が良い場合もあるし、ユーザーインターフェイスとしてはフォームの方が優れている。
Excel使わずにメモ帳とCSVで事足りるってのと同じような考えの人がいるな。

384:デフォルトの名無しさん
19/05/28 09:44:28.89 CE2aKfrCH.net
初心者レベルの知識で長いことVBAいじってる者なんだが、
functionプロシージャって使わなくない?
普通のsubしか使ったことない
どんな時に便利なの?

385:デフォルトの名無しさん
19/05/28 09:47:42.25 rhAlx8Ij0.net
>>384
値を返す時。便利というか必須。=sum()で値が返らなかった時の事を考えてみると良い
むしろfunctionが普通なのだ
vbaの場合、ワークシート変更しておしまいってパターンが多いから恩恵を得にくいけどね

386:デフォルトの名無しさん
19/05/28 09:55:56.33 JWvhlEsx0.net
Findを利用したコードについて教えて下さい。
書籍、サイトで掲載されていたコードを利用し、少し変えたものです。
Findメソッドを使ってC列の”たろう”を検索します。
探し出したら、A〜C列の文字列をE列に結果を返すように作り替えてみましたが、結果がE1〜G1に上書きされてしまいます。
Cells(Rows,count を理解しきれていない、11行目のCells(i,”E”)の部分も理解していないと感じます。
どのように違うのか、ご指導お願いします。

ワークシートはこんなかんじ E列からG列は実行後の結果をイメージしたものです
  A  B   C   D  E    F  G
1 日付 売上 担当者    000  AAA たろう
2 000 AAA たろう     333  DDD たろう
3 111 BBB はなこ
4 222 CCC たかし
5 333 DDD たろう
6 444 EEE はなこ
7 555 FFF くみこ

387:デフォルトの名無しさん
19/05/28 09:56:25.54 JWvhlEsx0.net
386のつづき

Sub Find()
Dim temp As Range, tempAddress As String, i As Long
With Range("A1").CurrentRegion.Resize(, 1).Offset(, 2)
Set temp = .Find(what:=“たろう”)
If Not temp Is Nothing Then
tempAddress = temp.Address
i = Cells(Rows.Count, "E").End(xlUp).Row
Do
temp.Offset(columnoffset:=-2).Resize(, 3).copy Cells(i, "E")
Set temp = .FindNext(temp)
Loop While temp.Address <> tempAddress
End If
End With
End Sub
Sub copy()
Range("A:G").Clear
Worksheets("template").Range("A1:C7").copy Destination:=Worksheets("Sheet1").Range("A1")
End Sub

388:デフォルトの名無しさん
19/05/28 10:10:54.71 CE2aKfrCH.net
>>385
うーん、値を返すのは分かるんだけど、わざわざsubから取り出す意味が分からんのよ
subの中に入れちゃえば良くない?
コードが長くなる時とか、他のプロシージャにも流用したい場合なんかにfunctionで別プロシージャにしとくと分かりやすいってこと?
そういやfunctionを関数みたいに使う場合もあると聞いたな

389:デフォルトの名無しさん
19/05/28 10:32:00.95 P/fMeUQp0.net
>>384
>>385意見に賛成だが少し付け加えます。
基本的にsubにしろfunctionにしろ長くだらだら作らない
出来るだけ意味のある汎用性のある処理はそのルーチンを呼び出すようにする
その時に値を返せるfunctionの方が圧倒的に有利
初心者は同じようなルーチンをコピペで増殖させるが、後々メンテナンスに困る
それらをライブラリーとして持つと自分の資産になるんだけどね、それが重要なんだよ

390:デフォルトの名無しさん
19/05/28 11:24:47.87 aRCJr/ZnM.net
>>384
ネタでしょ?
モドリッチがない方が便利だなんて、そんな訳ないじゃん

391:デフォルトの名無しさん
19/05/28 11:26:30.05 CE2aKfrCH.net
>>389
あーその説明で分かった ありがとう
たしかに今までは、動けばいいやで作ってたからコードが長くなってた
顧客コードから各データを検索する時なんか、
Cells(i,2).value=Range(Z:Z).Find(Cells(i,1)).Offset(0,5).Value
みたいなコードを10行とか書いてたわ

392:デフォルトの名無しさん
19/05/28 12:23:13.41 1q3vxt7ga.net
OutlookのVBAもここで可でしょうか?
違ったら誘導お願いします
上司へ「承認お願いします」と言った趣旨のメールを送った際、上司がボタン1つで承認する旨のメールが送れるようにしたいです
しかし複数いる上司全員にマクロの設定方法を教えるのは面倒です
私から送信するメール本文にマクロを組み込み、上司が受け取った際に本文にあるリンクを押せば(マクロを自分で設定していなくても)返信メールが自動作成されるような手法が取れればベストなのですが、そういったことは可能なのでしょうか?

393:デフォルトの名無しさん
19/05/28 12:47:38.41 i1bbppKtM.net
>>392
ウィルスメールの作成方法きいてる様なもんだなw

394:デフォルトの名無しさん
19/05/28 12:51:48.37 Z4r31YmpM.net
>>392
まずは社内でOLのセキュリティ設定がどうなのか。
ザルならやりようはいくつもあるが、ガチガチなら選択肢は少ない

395:デフォルトの名無しさん
19/05/28 13:44:15.47 P/fMeUQp0.net
>>392
まあ、バカ上司をサポートするのと
バカ上司の影響をサポートするのと
どちっがしたいんだ?

396:デフォルトの名無しさん
19/05/28 13:45:21.90 8P1bQTIM0.net
>>388
VBA初心者にありがちな意見だね。
プログラムを組む時の考え方が全く違う。
組める奴なら最初から構造的に考える。
動きゃ良いなどと考える奴はいない。

397:デフォルトの名無しさん
19/05/28 13:48:09.91 8P1bQTIM0.net
>>392
マクロでやらなくても承認ボタンを追加する機能があった筈だが。

398:デフォルトの名無しさん
19/05/28 13:50:35.37 i1bbppKtM.net
> VBA初心者にありがちな意見だね。
はい、きょうもマウント取りたい人が来ましたよ

399:デフォルトの名無しさん
19/05/28 14:01:27.19 8P1bQTIM0.net
>>391
>>389の言ってることは全くその通りなんだが、FunctionにしろSubにしろ、内容が汎用的なものをまとめる、同じような処理を纏める考え方をするようになると最初から構造的に組むようになる。
その方が圧倒的に楽だから。
あと、例に挙げてるコードは良くない。
ブックやシートの省略はバグの元。

400:デフォルトの名無しさん
19/05/28 14:03:33.28 8P1bQTIM0.net
>>398
マウントも何も、明らかに初心者なんだから仕方ないだろ

401:デフォルトの名無しさん
19/05/28 14:18:44.11 rhAlx8Ij0.net
> VBA初心者にありがちな意見だね。
この部分は必要なかったんだよなぁ

402:デフォルトの名無しさん
19/05/28 14:34:43.00 8P1bQTIM0.net
>>401
必要なんだが。

403:デフォルトの名無しさん
19/05/28 15:27:43.49 m2eXkVaQM.net
初心者お断りな質問スレが存在した…?

404:デフォルトの名無しさん
19/05/28 15:33:18.00 rhAlx8Ij0.net
>>402
君はそう書かないと回答できないのか、なるほど
興味深い

405:デフォルトの名無しさん
19/05/28 15:57:40.29 JWvhlEsx0.net
>>386
>>387
話題を気にせずに、切り込んだ形で質問をしてしまいました。
ホントに困ってしまったのでココで質問をしてみましたが、割り込んだ形でご迷惑をおかけしました。
VBAなんでも質問スレで聞いてみます。
お邪魔しましたm( _ _ )m

406:デフォルトの名無しさん
19/05/28 15:58:05.43 8ZgSX7bEF.net
>>404
構造的に考えるべきという意味付けの為に必要。
初心者にありがちだということで、初心者からレベルアップした方が良いということになる。

407:デフォルトの名無しさん
19/05/28 16:01:17.83 8ZgSX7bEF.net
>>405
別に迷惑でも何でも無い。
元々、初心者の質問に難癖を付けた奴が悪いと思ったから>>355を書いたんだが、内容を見ずに変に絡んでくる奴が出てきただけのこと。


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

2370日前に更新/181 KB
担当:undef