[過去ログ]
VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
VBAなんでも質問スレ Part2 [転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1432173164/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
15: デフォルトの名無しさん [sage] 2015/06/30(火) 16:46:45.95 ID:ybpzKx4V Detaが気になる・・・ http://mevius.5ch.net/test/read.cgi/tech/1432173164/15
16: デフォルトの名無しさん [] 2015/06/30(火) 18:04:04.25 ID:RGb3IB+F >>14 セル番地の固定文字列については改めて見るとすごくおかしいと思いました。 修正したいですが、皆さんワークシートやセル番地の定数はどのようにされているのでしょうか。 検索はするものの、なかなか見つけられず困っています。 >>15 気づきませんでした、すみませんありがとうございます。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/16
17: デフォルトの名無しさん [sage] 2015/06/30(火) 19:44:23.68 ID:4fqzjiG2 セル番地はセルに名前を付ける 列番号はenumにまとめる シート名はconst 基本適当 http://mevius.5ch.net/test/read.cgi/tech/1432173164/17
18: デフォルトの名無しさん [] 2015/07/01(水) 22:28:04.95 ID:DXkWToqb 一日20項目ほどの数値データが入力されている月報の表を 月末にデータを全て消去して、同じWS上で次月の日付、曜日 の書き込まれた新しいフォームに更新したいのですが、 マクロで実現可能でしょうか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/18
19: デフォルトの名無しさん [sage] 2015/07/01(水) 22:31:39.26 ID:jU+pvdKi 手動でやれることはたいがいマクロ化できる。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/19
20: デフォルトの名無しさん [] 2015/07/01(水) 23:04:39.40 ID:DXkWToqb やってみたけど30日までの月や31までの月などがあって 上手く行かないのです。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/20
21: デフォルトの名無しさん [] 2015/07/01(水) 23:05:37.19 ID:DXkWToqb どこかにサンプルコードでも落ちてないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/21
22: デフォルトの名無しさん [sage] 2015/07/02(木) 02:39:59.24 ID:9jOibGQm 翌日の日付が「1」だったらコードを実行するようにしたらいいんでない? http://mevius.5ch.net/test/read.cgi/tech/1432173164/22
23: デフォルトの名無しさん [sage] 2015/07/02(木) 11:43:59.86 ID:mBr3NkR3 >>18 年と月が指定されればその月の日数は求められるよ (月だけだとうるう年があるから2月に対応出来ない) 具体的やり方は複数あるだろうけど 例えばDateserial関数で指定月の翌月のゼロ日(ツイタチの前日)を求めれば出る 2015年7月の日数を求めたらこんな感じ Sub Test() Dim 年指定 As Long Dim 月指定 As Long Dim 日数 As Long 年指定 = 2015 月指定 = 7 日数 = Day(DateSerial(年指定, 月指定 + 1, 0)) End Sub http://mevius.5ch.net/test/read.cgi/tech/1432173164/23
24: デフォルトの名無しさん [sage] 2015/07/02(木) 13:00:55.32 ID:ww5oQ+GG >>18 フォーム更新のタイミングは? ファイルを開いたときに自動で更新するの? http://mevius.5ch.net/test/read.cgi/tech/1432173164/24
25: デフォルトの名無しさん [] 2015/07/02(木) 14:46:01.74 ID:AbwDTtrn 年月は、ボックスからプルダウンリストで指定 するだけです。ただ、指定年月の1〜月末までの日付、曜日を月報の1.2行目に縦に列記するコードが出来ないのです。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/25
26: デフォルトの名無しさん [sage] 2015/07/02(木) 16:13:54.40 ID:mBr3NkR3 >>25 こんなんでどう? 対象のワークシートと年、月、を引数に指定してコールすれば 対象のシートのA列に日付、B列に曜日を書き込むよ 年と月は省略可能で、省略すると当日の年・月を指定したとみなして処理を実行するよ Sub test(sh As Worksheet, Optional ByVal yr As Long = 0, Optional ByVal mo As Long = 0) Dim i As Long Dim cnt As Long If yr = 0 Or mo = 0 Then yr = Year(Date) mo = Month(Date) End If cnt = Day(DateSerial(yr, mo + 1, 0)) With sh .Cells.ClearContents .Columns(2).NumberFormatLocal = "aaa" For i = 1 To cnt .Cells(i, 1) = i .Cells(i, 2) = Weekday(DateSerial(yr, mo, i)) Next i End With End Sub http://mevius.5ch.net/test/read.cgi/tech/1432173164/26
27: デフォルトの名無しさん [] 2015/07/02(木) 19:18:37.45 ID:zxCnKqA7 何とかできそうです。ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/27
28: デフォルトの名無しさん [sage] 2015/07/02(木) 20:29:21.19 ID:Mdba4OI7 >>14 なんやわからん英語で書かれている方がよっぽど分かりずらいので、 あくまでもEXCELマクロで使用するスクリプトなのでコメントに書いている そのコードを外人に見せるなら英語が望ましいけど、 漢字をそのまま使えばいいかと。 工事名称等は重複してるので、設定_工事名称とかになるんでしょうかねー。 セル番地の固定値を変数で持っているのが引っかかっているみたいですけど、 メンテするときはコードのメンテも込みになるでしょうから、 変数に代入して整理してるし良いのでは? というか、そういう風にルールを敷けばいいとおもうの。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/28
29: デフォルトの名無しさん [sage] 2015/07/03(金) 08:49:41.34 ID:IELcwsmr >>28 全体を一行下にずらす、とかするとき数十個ある変数を個々にメンテするの? 工事_A = "AO1" → 工事_A = "AO2" 工事_B = "AP1" → 工事_B = "AP2" ・・・ http://mevius.5ch.net/test/read.cgi/tech/1432173164/29
30: デフォルトの名無しさん [sage] 2015/07/03(金) 14:52:04.92 ID:aFtg1Cyl >>29 それでいいと思うよ どうやろうとしてるのか知らんけど、この手の奴は分かりやすいのが一番だと思う http://mevius.5ch.net/test/read.cgi/tech/1432173164/30
31: デフォルトの名無しさん [sage] 2015/07/03(金) 16:20:33.62 ID:L435uo00 分りやすいっていうか、直接的だから理解はしやすいけど 修正が面倒で間違いも起きやすいね レイアウト自体の変更ではなく、全体を一気に動かすなら 最初の一要素だけ絶対アドレスで指定して あとはそこからの相対参照(要するにオフセット)にしておくというのもひとつの手だと思う それなら1個いじれば全部まとめて直せる http://mevius.5ch.net/test/read.cgi/tech/1432173164/31
32: デフォルトの名無しさん [sage] 2015/07/06(月) 05:20:54.03 ID:UMBaWGrv >>31 数十行にわたるコードのメンテぐらいで不満がある程度なら、 プログラム書くのは向いていないので、長いコードは書かないほうがいいと思う。 あと、ただ一つ変えれば全部まとめて直せるコードでも、 そのコードを知らない他人から見れば、結局全部見ることになると思うよ。 本当にそれでいいのかという部分も含めてテストすることになるから。 で、結局のところ別にどっちでもいいとなる。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/32
33: デフォルトの名無しさん [sage] 2015/07/06(月) 08:42:45.53 ID:fhp0P+BJ >>31 項目増えて、途中に一行追加されたら似たようなことになるでしょ http://mevius.5ch.net/test/read.cgi/tech/1432173164/33
34: デフォルトの名無しさん [sage] 2015/07/06(月) 13:55:10.74 ID:henE3y4I 向き不向きに関する思い込みだな http://mevius.5ch.net/test/read.cgi/tech/1432173164/34
35: デフォルトの名無しさん [sage] 2015/07/06(月) 17:53:09.90 ID:J6N5PkHq >>32 数十行だろうと数万行だろうと ひとつの変更で複数の変更箇所が出てくる構造自体のほうが問題だと思うよ >そのコードを知らない他人から見れば、結局全部見ることになる 云々はベタに一個ずつ指定していても同じ確認コストを要するわけで 適切なコメントをつけとくなりなんなりで対応しないとしょうがないんじゃないの? >>33 いや、だから >レイアウト自体の変更ではなく、全体を一気に動かすなら という前提条件をつけた上での話をしてるんだけど http://mevius.5ch.net/test/read.cgi/tech/1432173164/35
36: デフォルトの名無しさん [sage] 2015/07/06(月) 18:38:29.56 ID:fhp0P+BJ >>35 > という前提条件をつけた上での話をしてるんだけど そう言うケースがどれだけあるんだ? って話でしょ 滅多にないケースに対応するために分かりにくい方法をとる必要はないよね http://mevius.5ch.net/test/read.cgi/tech/1432173164/36
37: デフォルトの名無しさん [sage] 2015/07/06(月) 21:37:27.39 ID:J6N5PkHq >>36 表の頭にあとから表題を付け加えるとかで 全体を動かすケースってのはそれなりにあると思うよ、 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。 それに、全体をずらすってのは>>29の発案であって俺が言い出した話じゃないんで 俺はあくまで他人から与えられた前提条件で考えただけの話 http://mevius.5ch.net/test/read.cgi/tech/1432173164/37
38: デフォルトの名無しさん [sage] 2015/07/06(月) 22:43:31.22 ID:fhp0P+BJ >>37 > 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。 普通はそうでしょ? > 俺はあくまで他人から与えられた前提条件で考えただけの話 あまりない条件だけ考えることになんか意味があるのか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/38
39: デフォルトの名無しさん [sage] 2015/07/06(月) 23:03:55.23 ID:J6N5PkHq >>38 そっちのが多いとは言ったが、全体を動かすのもそれなりにあるって言ってるじゃん 滅多にないとかありえないとかいうほどのレアケースではないよ http://mevius.5ch.net/test/read.cgi/tech/1432173164/39
40: デフォルトの名無しさん [sage] 2015/07/06(月) 23:42:36.40 ID:QbnSMTRw >>39 > ありえないとかいう 誰もそんなことは言ってないだろ? お前さんも認めてるように > 仕様変更で項目順の変更とか途中に項目追加とかのほうが多い なら、そっちの対応を優先して設計した方がいいんじゃね? って話 http://mevius.5ch.net/test/read.cgi/tech/1432173164/40
41: デフォルトの名無しさん [sage] 2015/07/06(月) 23:52:37.58 ID:UMBaWGrv >>37 別にセルのアドレスを固定で持ってようが、一つのアドレスに対して 相対で持ってようがどっちでもいいだろ ケースバイケースで使い分けようとは思わないのか? 俺が言ったのは数十個(行)程度の修正から避けるために 相対座標で組んだ方が良いと思っているならプログラム組むのは 向いてないってことだよ だから、お前は長いソースを組むような仕事は向いてないよって言ったんだよ。 せいぜい短く済むようなのを探しとけw 分かりやすいソースのほうが、修正工程の見積もりだって立てやすい お前のいう相対座標は、その一つの絶対座標に対して成り立っているんだから 見出しが追加されてずれる程度ならいいが、途中の箇所に複数追加変更されたら むしろ修正面倒なんじゃね? 数万も入力させるセルがあるなんてシートの設計のがおかしいと思うが 数万のセルがあちらこちら変更になるのなら簡単で見やすい定義を切っている ほうが引き継ぎもしやすいし、修正もしやすいってわからんのか? http://mevius.5ch.net/test/read.cgi/tech/1432173164/41
42: デフォルトの名無しさん [sage] 2015/07/07(火) 05:36:44.07 ID:PlDHyacp >>40 ああ、ごめん 「ありえない」じゃなくて「あまりない」だったか どっちにせよレアケースではないのでそこが重要とは思わんけど >>41 おれも「ひとつの手」だといってますよね? ということはそれが絶対ということではないですよ。 まぁ、全部直値で指定する場合の変更コストとOffsetで記述した場合の変更コストが それほど変わるとも思えませんが。 >>29のっぽい例で言えば 工事_A = "AO1" → 工事_A = "AO2" 工事_B = "AP1" → 工事_B = "AP2" 工事_C = "AQ1" → 工事_C = "AQ2" ・・・ というのが 工事_A = "AO1" → 工事_A = "AO2" 工事_B = Range(工事_A).Offset(0,1) → 工事_B = Range(工事_A).Offset(1,1) 工事_C = Range(工事_A).Offset(0,2) → 工事_C = Range(工事_A).Offset(1,2) ・・・ になる程度の話でしょ? んでもって、何もわからない誰かに保守を引き継ぐのであれば表のレイアウトについてはコメントに書いておくべき物じゃないですかね? 後任の人があらかじめ何の予備知識もないなら全部の要素を直接指定しているのかそうでないか自体、 少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。 http://mevius.5ch.net/test/read.cgi/tech/1432173164/42
43: デフォルトの名無しさん [sage] 2015/07/07(火) 05:42:25.10 ID:PlDHyacp やべ、工事_AだけRangeで指定してなかったし、全体をずらすだけなら 工事_B以降には変更ないわ 工事_A = Range("AO1") → 工事_A = Range("AO2") 工事_B = Range(工事_A).Offset(0,1) → 工事_B = Range(工事_A).Offset(0,1) 工事_C = Range(工事_A).Offset(0,2) → 工事_C = Range(工事_A).Offset(0,2) ・・・ http://mevius.5ch.net/test/read.cgi/tech/1432173164/43
44: デフォルトの名無しさん [sage] 2015/07/07(火) 05:48:03.16 ID:PlDHyacp さらに間違ってた 工事_AがRange型ならそれ以降にRange(工事_A)なんて書く必要なかった まぁ、何も知らずにコードを読んで表のレイアウトを理解できるかどうかとか 表の変更にかかるコストとかには大して影響ない話だけど http://mevius.5ch.net/test/read.cgi/tech/1432173164/44
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 958 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s