[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/30 05:22 / Filesize : 296 KB / Number-of Response : 978
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part23



1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ]
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/
15 pc12.2ch.net/test/read.cgi/tech/1271261239/
16 hibari.2ch.net/test/read.cgi/tech/1280045912/
17 hibari.2ch.net/test/read.cgi/tech/1289182437/
18 hibari.2ch.net/test/read.cgi/tech/1298240666/
19 hibari.2ch.net/test/read.cgi/tech/1305754555/
20 hibari.2ch.net/test/read.cgi/tech/1312435844/
21 hibari.2ch.net/test/read.cgi/tech/1316931607/

前スレ:
Excel VBA 質問スレ Part22
toro.2ch.net/test/read.cgi/tech/1322400978/


301 名前:294 mailto:sage [2012/02/20(月) 08:01:46.57 ]
>>295
ありがとうございます
やっぱり独学じゃダメなのかな・・・
もっと勉強します

302 名前:278 mailto:sage [2012/02/20(月) 09:49:16.54 ]
とりあえず思いついたメモを羅列
・人によってできる勤務が異なる(夜勤1は出切るが夜勤2は出来ない等)
・夜勤はなるべく連続しないようにする(夜勤、明け、休み、夜勤・・・)
・早番がすぐに来ないようにする(早番、日勤、休み、早番)
・前月の夜勤の明け、明け休みも考慮する。早番も
・希望休、希望勤務を入力できるようにする
・同じ番号の勤務はなるべく続かないように
・休みも偏らないようにする
・勤務は各回数入力できるように(休みも9回の時などあるので入力)

もっとある気がしますが、この時点で凄く難しそう…

303 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 10:07:26.30 ]
>>302
ナーススケジューリング問題(ググれ)に匹敵するような要件の場合、勤務表を作成するのはすごく困難。

304 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 10:36:51.36 ]
>>302
最初から自動割振りするシステムは難しいから、
割振り入力してボタンを押すと問題がある割振りに色を付けるシステム
(夜勤連続だと赤、休み集中だと青など)
を作ってみたら?



305 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 13:05:17.31 ]
>>303
あんまりおどすなよ。

306 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 13:41:17.42 ]
>>302
落ち着け。

勤務表作成を新人に引き継ぐ感覚でまとめてみ。
それもおまいさんが急用でどうしても質問受けれない場合にどう引き継ぐか。

その感覚でまとめれば要件資料としてはそれなりになるはず。

「すごく困難」って言ってる人がいるけど、正攻法で1からやろうとすると困難かもね。
単純ロジックで乱数うまく使って種表作って、
補正が手詰まりになったら最初からやり直すプログラムにすれば、
表が完成するまでの時間はかかるけどなんとかなる。



307 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 14:10:35.11 ]
>>306
> 補正が手詰まりになったら最初からやり直すプログラムにすれば、
> 表が完成するまでの時間はかかるけどなんとかなる。

それ、いつ終わるの?
組み合わせ爆発、半端ないよ?

308 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 14:52:45.60 ]
>>306
仮に要件が固まったとしても、それを実現できるコードを書けるとは限らない。

汎用的なシフト勤務ソフトがそれほど出回ってないのは、それぞれの職場の都合が大きく異なるのということより、
やはりシフト勤務作成そのものが難しいからだと思う。

実際ナーススケジューリング問題でググればわかると思うが、正攻法では無理なのでGAによる解法がかなり
研究されてる。

309 名前:278 mailto:sage [2012/02/20(月) 16:18:27.47 ]
ナーススケジューリングは気をつけないといけないんですよね・・・
やっぱりそこが難点ですか困難なほどに;

引継ぎ感覚でもう少し具体的にまとめてみます

コード書くのはほとんど初心者で何から手をつけたらいいのか全然分からないですが…
少しずつでも頑張っていきます



310 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 16:35:41.36 ]
勤務表に関しては入力支援を強化してアナログ入力した方が早いんだよな

ボタンひとつで終われば楽っちゃ楽なんだけど
継続的に使えるプログラムを作成する労力と、1ヶ月のうち勤務表作成にかける労力を考えると
どうしてもアナログ入力になる。

>>309
つーか、この件に関しては引継ぎなんて考えるなよw
できる人ができる形でやればいいんだよ
どうせ素人が扱えば余計な動作やエラーで詰むし
そこそこ使える人ならそれなりのモノ作るんだから

311 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 19:27:43.39 ]
つーかさ、>>278はNSPの一般解求めるのが目的じゃなくて
職場の勤務表を作るのが目的なんだから
とりあえず作成に必要な要件をもっときちんと書き出してみたらどうよ。
>>302の情報だけじゃ結局>>278にしか分からんじゃん。
たとえば勤務シフトには何種類あるのか、(明、早、日、夜1、夜2、休の6種類なのか?)
スタッフ何人いて各シフトにはそれぞれ何人割り振るのか、
そのうち何人がシフトに制約があるのか、etc.
具体的に書き出したらそこそこ何とかなるかも知れんのと違う?
まぁ現状で(手書きの状態で)どの程度満足できるシフトを作れてるのか
もわからんから、あんまり厳しい条件だと自動化は無理だろうけど。

312 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 20:33:52.13 ]
実際の勤務表に近いものをどこかにUploadしてください
他業界の人に勤務表作成を依頼するつもりで説明してください


313 名前:278 mailto:sage [2012/02/20(月) 20:49:48.30 ]
そうですね、それでは確実なところから
・勤務は 早番、日勤、夜勤1、夜勤2、明け、休み、有給、研修
 日勤は2番、3番・・・とあり多いときで(行事などの日)10番とかも
 土曜、日曜日は4番、5番までなど少ないことが多い
 平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
 正職、パート、嘱託?や人により可能な勤務が違う
 パートには休みを全部自分で指定する人もいたり。
 一日の勤務で最低 早番、2番、夜勤1、夜勤2、明け*2、明け休み*2が正職か嘱託でいる
 夜勤ではこの人とこの人は一緒にできない、がある
 早番はやったら次の早番まで5日は間が欲しい
 夜勤は基本連続しないように(夜勤、明け、休み、夜勤…無理ならOK)
 先に勤務を希望している場合あり(早番、夜勤なども)
 前の月の夜勤の明け、明け休みも考慮する
 休み、同じ番号の勤務はなるべく連続しないように。偏りのないように
 休みは基本月10回。月により前後することあり、又多い人もいる

とりあえずシフトに関することはこれくらいかな・・・

314 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 21:46:17.55 ]
連続したセルに値を書き込むのに簡単な方法は無いでしょうか?
セルに値を書き込むと、自動的に隣のセルにフォーカスが移動するみたいな

315 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 21:59:23.91 ]
看護士の勤務表は、準夜・深夜・休みを縦横計算しとけばいいと思う。
あとは、希望勤務の登録かな・・・


316 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:10:25.86 ]
>>314
それをVBAでやりたいって事?
エンター押すと横移動はオプションで設定できる。

317 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:11:21.36 ]
>>313
だ・か・ら・他業種の人相手にその説明で理解できると思う?
何番ってのは人数なのか?だったらなんで
>早番、2番、夜勤1、夜勤2、明け*2、明け休み*2
って一番が居なくて2番が居るんだ?
これだと1日8人が必要ってことだが
>日勤は平日6番、7番以上欲しい
ってのはこの8人には含まれてないのか?
そもそもこのシフトを全部で何人で回してるんだ?
(これ一番重要かもしれない)

>>314
それ普通にエンター押せば次のセルに行くじゃん。
エンター押下で上下左右のどちらに行くかは
ツール=>オプション=>編集から
"入力後にセルを移動する" の "方向"で変えられる。


318 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:12:20.14 ]
>>314
VBAと関係なく、普通に移動するんじゃないの。
下方向か横方向かは設定次第だが。

319 名前:314 mailto:sage [2012/02/20(月) 22:25:10.40 ]
自己解決しました、レス有難うございます

Private Sub Puts(s As String)
Dim r As Long, c As Long
r = ActiveCell.row
c = ActiveCell.Column
Cells(r, c) = s
Cells(r, c + 1).Select
End Sub



320 名前:278 mailto:sage [2012/02/20(月) 22:29:35.78 ]
説明難しいですね…
早番=1番と考えていただければいいです
平日7番までというのは日勤者(2番〜7番の6人)です
今現在は正職が13人、嘱託が1人、パート2人、(関係ないけどお掃除さん1人)
ただ3月で正職と嘱託が1人ずつやめます

パスは vba です
これは勤務表
www.dotup.org/uploda/www.dotup.org2664409.jpg.html
勤務表の一番右になります
www.dotup.org/uploda/www.dotup.org2664415.jpg.html
これが当番表になります。
実際作りたいのはこっちで考えています
www.dotup.org/uploda/www.dotup.org2664419.jpg.html

321 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:29:39.19 ]
そんなもん必要になる状況がよくわからん。

322 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:36:30.41 ]
>>320
質問。
明けについて。夜勤明けの勤務なの?それとも明け休み?
それは夜勤と確実にペアなものなの?夜勤だけで明けがない場合もあるの?

323 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:44:58.89 ]
>>320
現状のままだと3月以降に条件を満たすのは無理
NSPがどうこう言う以前に延べ人数で考えたらすぐ分かる

まず一個目の画像から1日平均10人が勤務する必要があることがわかる。
つまり1ヶ月で延べ300人必要

対してスタッフは3月以降14人(16-2=14)、
この人たちが月平均10日休むってことは20日働くってことで
20*14=280人ってことで、300-280=20人 => ちょうど1人分足りない

ってことで、15人以上居ないとあなたの施設は回らない


324 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:45:15.43 ]
>>321
帳票付けるときに重宝する
TABキー使わずにテンキーとエンターだけで表の端まで行ったら先頭列の1行下に移動できるし

325 名前:278 mailto:sage [2012/02/20(月) 22:49:31.98 ]
>>322
夜勤は(夜勤、明け、休み)で1セットは確実です
明けが無いとかはないです

>>323
一応来年度に新しい職員が2人入るのと異動で何とかなるとは思いますが…
それでも厳しいのには変わりないんですよね

326 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:03:01.95 ]
>>278
資料をまとめなおしてみたよ。読んでみて違う所の指摘と、研修について月何回とか決まってるかとか、教えてプリーズ。

278番様向け 勤務シフト表入力支援システム要件書 (ドラフト)

1.職員の種類
 正職、パート、嘱託などがあり。
 人によって可能な「勤務」に違いがある。(パートは日勤3番以降のみ。)

2.勤務の種類
 早番、日勤(2番〜10番)、夜勤1、夜勤2、明け、休み、有給、研修などがある。
 同じ種類・番号の勤務(および休み)はなるべく連続しないように。偏りのないように。
 最低限必要な1日の勤務人数は
 早番、日勤(2番〜5番)、夜勤1、夜勤2、明け、明け、休み、休み
 の11名。(休み2名は前々日の夜勤1、夜勤2。強制。)

3.早番
 別名1番。

4.日勤
 2番、3番・・・と(行事などの日)10番ぐらいまである
 平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
 土曜、日曜日は4番、5番までなど少ないことが多い

つづく・・・

327 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:03:49.82 ]
つづき

5.夜勤
 夜勤ではペアを組ませられない組み合わせがある。
 夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
 前の月の夜勤の明け、明け休みも考慮する

6.明け
 夜勤の翌日は自動的に入る。

7.休み
 休みは基本月10回。月により前後することあり、又多い人もいる
 パートには休みを全部自分で指定する人もいたり。
 夜勤の翌々日は自動的に入る。

8.研修
 − 未稿 −

9.有給
 有給休暇。

-以上-

328 名前:278 mailto:sage [2012/02/20(月) 23:18:59.70 ]
とても綺麗にまとめていただいてありがとうございます
>人によって可能な「勤務」に違いがある。(パートは日勤3番以降のみ。)
パートで3番ができない人もいます(一応)

休みは年間を通して計算しているので(年度始めには回数は決まっていますが)
9回だったり11回だったりします
休みが多い人というのはパートの人で、配偶者の給料から計算して入れているようです

研修は出張みたいな感じで、休みではないけど職場にはいないとなります
月に一度あるかないか(無いことのほうが多い)であっても一人だけです

329 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:43:30.36 ]
278番様向け 勤務シフト表入力支援システム要件書 (ドラフト2)

1.職員の種類
 正職、パート、嘱託などがあり。
 人によって可能な「勤務」に違いがある。(パートは日勤3番以降※のみ。)
 ※ 人によっては日勤4番や5番しかできない。

2.勤務の種類
 早番、日勤(2番〜10番)、夜勤1、夜勤2、明け、休み、有給、研修などがある。
 同じ種類・番号の勤務(および休み)はなるべく連続しないように。偏りのないように。
 最低限必要な1日の勤務人数は
 早番、日勤(2番〜5番)、夜勤1、夜勤2、明け、明け、休み、休み
 の11名。(休み2名は前々日の夜勤1、夜勤2。強制。)

3.早番
 別名1番。

4.日勤
 2番、3番・・・と(行事などの日)10番ぐらいまである
 平日は大体6番、7番以上まで欲しい(希望休が重なるなどで5番までのこともあり)
 土曜、日曜日は4番、5番までなど少ないことが多い

つづく





330 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:44:17.04 ]
つづき
5.夜勤
 夜勤ではペアを組ませられない組み合わせがある。
 夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
 前の月の夜勤の明け、明け休みも考慮する

6.明け
 夜勤の翌日は自動的に入る。

7.休み
 正職、嘱託の休みは基本月10回。
 月により前後することがある。(1年間の回数は決まっており、兼ね合いで調整。)
 パートは人によって回数が違う。
 パートには休みを全部自分で指定する人もいたり。
 夜勤の翌々日は自動的に入る。

8.研修
 出張による研修。多くても月1回1名程度。

9.有給
 有給休暇。


331 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:13:58.53 ]
>>278
提案。

当面の目標は入力支援とし、下記の機能を実現。

1.条件に合わないモノを検出する機能
2.一意で決まるモノを自動入力する機能(夜勤→明け→休み)
3.コンボボックスによる候補での入力(条件によってソートする。)

この辺りが出来ればかなり楽になるんじゃね?


332 名前:278 mailto:sage [2012/02/21(火) 00:26:44.73 ]
>>329
まとめなおしていただいてありがとうございます
改めてまとめると自分でも分かりやすいですね

>>331
それくらいのほうがいいのでしょうか
やっぱり自動で作成はかなり困難ですかね…

333 名前:331 mailto:sage [2012/02/21(火) 00:45:10.26 ]
>>332
順番の問題だよ。
自動生成を作っても調整は必要になるんだろ?

まずは調整と入力を支援する機能を作る。
  ↓
休みの事前入力とかを作る。入力部分に連動させる。
  ↓
手動部分を少しづつ自動化。

こうすれば、途中段階のものでも活用できる。

最初から大風呂敷やると時間が無くなる一方で何も出来上がらないと思う。



334 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:53:59.72 ]
>>332
331ではないけど、
自動化は総当たりとかで頑張れば不可能ではないと思うけど融通がきかないと思う
ある人が骨折して2週間以上抜けてしまうとか
この二人組は両方新人なのでばらばらにしたいとか
都合で休みを振り返る人が結構いるとか
そういう例外までも自動化で対応するのはかなり困難
その点入力支援はそういった例外にも強い

自動化しても融通がきかないとまったく使えないシステムになりかねない
最初に入力支援を作って様子をみて、いけそうなら最初のシフト表を自動作成することを考えればいい

335 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 03:00:13.24 ]
人員マスターテーブル作って、各人可能なシフトパターンを網羅
表に希望の休みを入力して空いてるセルに人員マスターテーブルからランダムで勤務パターン取得
そしてアナログで手直しするのが一番早いんじゃね?

入力支援に関してはchangeイベントとVlookup使えばテンキーだけで行ける。

336 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 04:06:23.05 ]
そろそろ別の所でやってくれないかな

337 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 07:17:54.61 ]
>>278
当番表の構造が分からないので説明お願いします

338 名前:278 mailto:sage [2012/02/21(火) 07:22:49.41 ]
なるほど、それなら入力支援も使えるしいいですね
とりあえずはそちらから取り掛かろうと思います

>>336
すみません;こう長くお話しちゃお邪魔でしたね…

>>337
当番表の構造・・?


339 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 07:33:18.93 ]
>>338
わかりました
当番表は勤務表の縦横を入れ替えて
番号順に並べ替えたものなのですね



340 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:43:55.13 ]
いつまでVBAと関係無い話してんだよ

341 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 14:07:24.52 ]
Excel2002を使っています。
あるテキストファイルの最終行から4行目(4行目だけ)の値を取りたいと考えております。

最終行取得はヤフー知恵袋にありましたのでこれを使おうと思います。
Do While Not EOF(1)
Input #1, MyString
cnt = cnt + 1 ’cnt=行数
Loop

Line Input では何行目とか言う指定はできないようで
どのように指定行を取るかが分かりません。
ググッたら「Line Input で空読み」という事までは分かりましたが
空読みの意味が分かりません・・・

ここから指定行を取得するにはどのようにすればいいのでしょうか?

342 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 14:34:53.26 ]
行番号を指定して読むことは出来ない。

処理時間をあまり気にしないなら、配列
MyString(3) as string
を作って、ファイルの先頭から行を読むたびに0->1->2->3->0->1->...と保存していけば、
最も古いデータが最終行から4行目。

dim index as long
index = 0

Do While Not EOF(1)
Input #1, MyString(index)
index = index + 1
if index = 4 then
index = 0
end if
Loop

343 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 14:58:15.15 ]
278さんではありませんが
勤務表の別スレを立てましたのでどうぞ

ExcelVBAで勤務表を作ろう
toro.2ch.net/test/read.cgi/tech/1329803312/


344 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:08:17.97 ]
>>342
ありがとうございます。
配列に入れるとは全く思いつきませんでした。
目から鱗が落ちる回答勉強になりました。
希望通りの結果が得られました。
ありがとうございました。

345 名前:278 mailto:sage [2012/02/21(火) 19:21:52.87 ]
>>343
本当にありがとうございます
本来自分がやるべきことなのに・・・
これからはそちらに書き込むようにいたします

346 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:34:06.17 ]
すいません、VBAでスレタイ検索したらここに流れ着いたのですが、初心者用の質問スレってありますか?

表内で、ある列の書かれている文字ごとにその行の背景色を変えていくと言うマクロを
VBEでモジュールに書きたいのですが、イマイチイメージが浮かばなくどうしていいかわからない状況です

足の骨折で入院してて勉強が遅れてしまったので急いで追いつきたいのですが、
おそらく簡単であろうこんな問題もわからなくなってきた次第です・・・

変数を使用して、繰り返しの処理をし、RangeとCellsを使って解けと言われたのですが???と言う状況です

そこで初心者用のスレがあったら誘導願います
スレ違いでスイマセン

347 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:45:46.58 ]
>>346
スレはここでも良いと思うけど、Cellsを使ってループ処理をする、その方法は知ってるの?
For i = 1 to 100
If Cells(i,1)= "xxxx" Then
Cells(i,1)= 〜
End If
Next
みたいなさ

348 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:48:13.75 ]
>>344
もう解決してるので今更感が強いけど、
テキストファイルをエクセルで開いて下から4行目を取得する、
というやり方もできるよ
Test.txtを開くと仮定したらこんな感じ

Sub test()
Dim WB As Workbook
Dim I&
Dim Txt$
Set WB = Workbooks.Open("test.txt")
With WB.Sheets(1)
I = .Cells(.Rows.Count, 1).End(xlUp).Row
If I > 3 Then
I = I - 3
Else
I = 1
End If
Txt = .Cells(I, 1).Value
WB.Close
MsgBox Txt
End With
End Sub



349 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:07:58.96 ]
>>347
文字は何パターンあるのかな。
パターン数分の背景色が必要になるけど、何色でも良いの。



350 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:09:31.70 ]
↑間違えた。>>346宛ね。

351 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 21:03:18.61 ]
>>346
このあたりを調べて使えるようになればできるよ。
最終行取得
繰り返し(for each〜next)
colorindex
entirerow
dictionary


352 名前:346 mailto:sage [2012/02/21(火) 21:26:45.65 ]
>>347
For〜Nextは勉強しましたので、その文はナントカわかります

>>349-350
大元が2種類あって、更にその片方が何種類か条件があるような感じです
ですので、背景色は6〜7色前後になりますが、色については指定がありましたので、
ColorIndexの後にその数字を入れていけば対応できます

>>351
残念ながらまだ基礎の方なのでColorIndex以外は習ってないですね・・・

今習ってる構文?といえば
思い出せるのは、If〜Then〜Else、For〜Next、Do〜Loop位ですね


347さんのでなんとなくなイメージは浮かびました



答えてくださった方々、ありがとうございました
とりあえずはもうちょっとネットで調べてみます

353 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:01:14.63 ]
OS:XP SP3
Excel:2003 SP3
---
(略)
graph_name = ActiveChart.Name
graph_index = ActiveChart.Index
(略)
ActiveSheet.ChartObjects(graph_index).Activate 'エラーが発生する
(略)
---
例えば、graph_nameがGraph 3だったら、
ActiveSheet.ChartObjects("グラフ 3").Activate
とする事で、エラーが発生しなくなります。

解決策をご存知の方はぜひご教授願います。

354 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:25:34.74 ]
>>353
graph_index =ActiveChart.Parent.Index

355 名前:デフォルトの名無しさん [2012/02/22(水) 10:41:53.09 ]
>>215なんですが、>>217さんのやり方で成功したかと思ったんですが、
欄が全部埋まってる場合にも空白のメッセージボックスが出てきてしまうんですよね。。。

全て記入されている場合はメッセージボックスを出さない処理にするにはどうすれば良いのでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:48:31.30 ]
>>355
最後のmsgboxのところを
ifでよける。


357 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 15:04:52.84 ]
>>354
サンクス!

358 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:09:05.40 ]
>>355
if len(str)>0 then msgbox str

359 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:10:42.95 ]
then
end if

{
}
で書くのに慣れると、BASICはどうも読みにくくて仕方ない。。
まあ慣れの問題なんだけどさ



360 名前:デフォルトの名無しさん [2012/02/22(水) 22:51:46.44 ]
おう、お前ら
初心者で悪いけど質問な

ユーザーフォームっての作ったんだけど
そこに入力された値ってのはどうやって得るんだ?

初心者なんだから丁寧に教えろよ

361 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:08:36.01 ]
つまんない

362 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:34:39.45 ]
ユーザーフォームの値を得たり、値を入れたりは
Applicationオブジェクトから辿ると何となく分かるけど、
Msgboxのボタンを押すとか謎。

363 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:44:29.66 ]
>>360
オブジェクト名.Valueでよろし。。。。。

364 名前:デフォルトの名無しさん [2012/02/23(木) 00:03:42.57 ]
>>363
なんだ、簡単だったな
あんがとよ!

365 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:18:57.32 ]
便乗するわけじゃないけどユーザーフォームについての質問です。

ユーザーフォームの右上の×をクリックしたときって
どういう動作をしているのでしょうか?

×でフォームを閉じたことを標準モジュールのプロシージャ
(そのユーザーフォームをShowしたプロシージャ)から知る方法ってありますか?

現在はPublicで宣言したBoolean変数とフォーム上のコマンドボタンを用いて
コマンドボタンをクリックしたら変数をTrueにしてからHideするようにしてます。
(×で閉じたらFalseだからそれで判断してます)
パブリック変数を使わないで×で閉じたことを知る方法があったら教えてください。


366 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:37:52.92 ]
>>365
標準で用意されているイベントハンドラでは知ることはできない
プロセスの終了方法を区別するには、×ボタンのクリックイベントをフックするぐらいしかないんじゃない?
ただしアプリケーションの作法としては終了方法を区別するような設計にするのはあまり良くないと思うけど

367 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:48:44.80 ]
>>365
ユーザフォーム内だと
UserForm_QueryClose
で処理できるんだけど
いっそのこと Xで終了出来なくしたら? だめかな?やっぱ

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = 0 Then Cancel = 1
End Sub

368 名前:365 mailto:sage [2012/02/23(木) 03:32:51.89 ]
>>366
無理なのですか、残念です。
終了方法を知りたいというか、
ユーザーフォームと標準モジュール間でパブリック変数を介さないで
情報のやり取りがしたかったのです。
標準モジュール同士ならローカル変数でも引数で受け渡し可能ですけど、
ユーザーフォームには引数渡せませんよね?
標準モジュール側からLoadだけしておいて
フォームのオブジェクトに値を入れてShow
とか、
フォーム側からHideして標準モジュールに戻ってから
オブジェクトの値を取得とかは出来ますけど、
Hideしたときにどういう風にHideしたかの情報を
パブリック変数を使わずに取得できないかな?
ということが知りたかったのです。
(ぶっちゃけていうと「実行」と「キャンセル」の判別に使いたいのです。)
パブリック変数の使用以外に
フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
それをフラグに使うっていう手もありますが、
なんかスマートじゃないな、という気がしまして。

>>367
上に述べたとおり、×をキャンセルボタン扱いで使いたかったわけです。
残念ながら私の思うような方向では出来ないっぽいですけど。

ともあれ、お二方にお答えをいただけてとてもうれしかったです。
どうもありがとうございました。



369 名前:365 mailto:sage [2012/02/23(木) 03:49:06.68 ]
一応、私の知っている範囲でフォームから標準モジュールへ
何らかの値を渡す方法っていうのは以下の3種類しかないです。

1.パブリック変数の使用
2.フォーム上のオブジェクトの値をHide後に取得する
3.フォーム内のプロシージャからワークシートのセルや
外部のテキストファイルなどに書き出しておく

これ以外に何か方法をご存知の方、教えていただけたら幸いです。



370 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:20:30.93 ]
>>369
普通標準モジュール側に通知用の関数用意しとかない?
ボタン押したときに呼んでやるの

371 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:41:55.92 ]
>フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
>それをフラグに使うっていう手もありますが

>フォーム上のオブジェクトの値をHide後に取得する

オブジェクト=コントロールだと思ってる?
普通は、フォームにパブリックな変数定義するんじゃないかな
まあ、パブリック変数を介してるのには違いないけど


372 名前:365 mailto:sage [2012/02/23(木) 05:58:09.38 ]
>>370

すごい!おっしゃるとおり出来ました。
今までフォームモジュールの中から標準モジュールのプロシージャをCallしたことがなかった
(引数も渡せないから、そんなことが出来ると思ってなくて試してもいなかった)ので、
やってみて目から鱗です。
これからはこの手でいきます。
ご指導どうもありがとうございました。
こんな感じで試しました。

[Module1]
Sub Test
Userform1.show
End Sub
Sub BtnClick
Stop '<=ここで止まった(つまりここにキャンセルの処理を書いておけばOK)
End Sub

[UserForm1]
Private Sub CommandButton1_Click
Call BtnClick
End Sub


>>371
どうもありがとうございます。
370さんにバッチリなお答えを教えていただいたので今後はそちらを使うことにします。

一応、オブジェクト=コントロールというか、
フォーム内のコントロールはオブジェクト(に含まれる)という程度の認識です。
コントロール以外で、フォーム内にオブジェクトがあるのかどうかは分かってないです。


373 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:29:19.07 ]
派遣のお姉さんが毎日6時間かけて色んなCSVファイルから必要なデータを取り出して集計してExcelに整形する処理、
私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして
時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪

374 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:44:53.20 ]
人力でも6時間足らずで終わる仕事を2時間程度にしか短縮できないオマエさんがヘボなのか、
VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、
どっちだかよくわからん話だな。

375 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:11:20.53 ]
どう読んだらそうなるんだ
コーディングが2時間だろ

376 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:19:41.89 ]
は?
仕様のヒアリング1時間、コーディング30分、テスト30分だろ

377 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:33:33.99 ]
どう読んだらも何も本来の文脈からいったら
おネエさんの作業時間と対比するには
VBAのほうも処理に必要な時間を書くべきだろ。
もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは
ちょっとあり得ない話だから
コーディングにかかった時間なのだろうと推測はできるが
はっきりと明記されていない以上、
日本語としては前述のような解釈も十分可能だぞ。


378 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:42:16.29 ]
> 私がVBAで2時間位で完全自動化した

これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。
日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。

379 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:45:59.83 ]
どうでもいい事ではスレのびるのな



380 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:56:32.22 ]
日本語っていうのは語順の入れ替えや語句の省略によるあいまい表現に寛容で
柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。
>私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。
という読み方だって、
その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。

っていうことがわからないなら
それこそ日本語を勉強し直した方が良いと思う


381 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:12:50.78 ]
>>380
余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を
二時間位で終わらせるような自動化をしたと読むのか?
ちょっと、日本人とは思えない解釈だわ

382 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:28:14.55 ]
>>377
>VBAのほうも処理に必要な時間を書くべきだろ。
はぁ?
お前のべき論なんか聞きたくもないよ。

383 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:32:11.51 ]
完全自動化されるなら、別に実行に二時間かかってもいいと思うが。
(と、話を変な方向に広げてみる)

384 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:48:20.87 ]
すでに述べている通り省略の仕方でどうにでもなる話だよ。
自説に都合の良い省略の仕方をされても困る。
作業時間云々のものからそういう省略の仕方ができないってことと、
元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。

で、俺は単なるべき論で言ってるわけじゃない。
前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで
そうでない解釈が間違いだとは言ってない。
むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、
先に持論を押し付けたのはどちらか、冷静に判断してほしいし、
そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で
だれも聞きたいと思ってないのは御同様。

385 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:02:01.04 ]
よっぽど悔しいんだろうなぁ

386 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:07:15.34 ]
> すでに述べている通り省略の仕方でどうにでもなる話だよ。

そもそも省略なんかしてないし。
100人読んだら、お前以外の99人は作業時間が、と取るわ。

387 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:16:34.11 ]
僕の解釈論はそろそろ終わりにしてもらえませんかね。

388 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:51:44.33 ]
>>386
あくまで個人の感想です

389 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:25:51.95 ]
こんな普通の文章でも、個人の解釈でどうとでもなるとか言う奴が書いた仕様書見たいわ



390 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:30:12.44 ]
自分の読解力のなさをわざわざ指摘してくれる人がいたというのに
逆ギレする馬鹿

391 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:42:03.30 ]
往生際悪すぎ

392 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:27:11.41 ]
>>384
オマエさん、ちょっとズレてるよ

393 名前:デフォルトの名無しさん [2012/02/23(木) 19:02:53.08 ]
傍目で見てたら論拠に基づいて発言してる人と
言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、
無根拠の方はそれに気づいてないってのが哀しいな。

394 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:15:35.72 ]
スレが伸びてると思ってみてみたら何だこいつら
いつぞやのDB馬鹿がまた暴れてんのか?

395 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:52:44.07 ]
どう解釈するのが普通か、なんて、多人数の意見を集約してみないとはっきりしない

ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて
実行時間が2時間だととられたなら書き方がわるかったと反省する

396 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:18:52.53 ]
ここは質問スレ。
>>373も、難癖をつけようとして失敗した>>374も、どっちもスレチ。


397 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:34:13.57 ]
スイマセン、助けてください
職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、
その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです

For〜Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。

imepic.jp/20120223/735690

これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい

398 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:59:33.99 ]
>>397
Sub TEST()
Dim i as 整数, j as 整数, k as 整数
For i = 1 to ワークシート数
For j = 6 To 12
For k = 2 To 8
With Cells(j, k)
If .valueが5000以上 Then
.フォント.色=青
ElseIf .valueが2000未満 Then
.フォント.色=赤
End If
End With
Next k
Next j
Next i
End sub

399 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:07:02.90 ]
>>398
訂正
With worksheets(i).Cells(j, k)



400 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:12:10.07 ]
>>398-399
ありがとうございます!
そうか・・・Nextの終了順番が間違ってたのもあったのか
これでナントカ追いつけそうです






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<296KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef