12/02/20 13:41:17.42
>>302
落ち着け。
勤務表作成を新人に引き継ぐ感覚でまとめてみ。
それもおまいさんが急用でどうしても質問受けれない場合にどう引き継ぐか。
その感覚でまとめれば要件資料としてはそれなりになるはず。
「すごく困難」って言ってる人がいるけど、正攻法で1からやろうとすると困難かもね。
単純ロジックで乱数うまく使って種表作って、
補正が手詰まりになったら最初からやり直すプログラムにすれば、
表が完成するまでの時間はかかるけどなんとかなる。
307:デフォルトの名無しさん
12/02/20 14:10:35.11
>>306
> 補正が手詰まりになったら最初からやり直すプログラムにすれば、
> 表が完成するまでの時間はかかるけどなんとかなる。
それ、いつ終わるの?
組み合わせ爆発、半端ないよ?
308:デフォルトの名無しさん
12/02/20 14:52:45.60
>>306
仮に要件が固まったとしても、それを実現できるコードを書けるとは限らない。
汎用的なシフト勤務ソフトがそれほど出回ってないのは、それぞれの職場の都合が大きく異なるのということより、
やはりシフト勤務作成そのものが難しいからだと思う。
実際ナーススケジューリング問題でググればわかると思うが、正攻法では無理なのでGAによる解法がかなり
研究されてる。
309:278
12/02/20 16:18:27.47
ナーススケジューリングは気をつけないといけないんですよね・・・
やっぱりそこが難点ですか困難なほどに;
引継ぎ感覚でもう少し具体的にまとめてみます
コード書くのはほとんど初心者で何から手をつけたらいいのか全然分からないですが…
少しずつでも頑張っていきます
310:デフォルトの名無しさん
12/02/20 16:35:41.36
勤務表に関しては入力支援を強化してアナログ入力した方が早いんだよな
ボタンひとつで終われば楽っちゃ楽なんだけど
継続的に使えるプログラムを作成する労力と、1ヶ月のうち勤務表作成にかける労力を考えると
どうしてもアナログ入力になる。
>>309
つーか、この件に関しては引継ぎなんて考えるなよw
できる人ができる形でやればいいんだよ
どうせ素人が扱えば余計な動作やエラーで詰むし
そこそこ使える人ならそれなりのモノ作るんだから
311:デフォルトの名無しさん
12/02/20 19:27:43.39
つーかさ、>>278はNSPの一般解求めるのが目的じゃなくて
職場の勤務表を作るのが目的なんだから
とりあえず作成に必要な要件をもっときちんと書き出してみたらどうよ。
>>302の情報だけじゃ結局>>278にしか分からんじゃん。
たとえば勤務シフトには何種類あるのか、(明、早、日、夜1、夜2、休の6種類なのか?)
スタッフ何人いて各シフトにはそれぞれ何人割り振るのか、
そのうち何人がシフトに制約があるのか、etc.
具体的に書き出したらそこそこ何とかなるかも知れんのと違う?
まぁ現状で(手書きの状態で)どの程度満足できるシフトを作れてるのか
もわからんから、あんまり厳しい条件だと自動化は無理だろうけど。
312:デフォルトの名無しさん
12/02/20 20:33:52.13
実際の勤務表に近いものをどこかにUploadしてください
他業界の人に勤務表作成を依頼するつもりで説明してください
313:278
12/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:デフォルトの名無しさん
12/02/20 21:46:17.55
連続したセルに値を書き込むのに簡単な方法は無いでしょうか?
セルに値を書き込むと、自動的に隣のセルにフォーカスが移動するみたいな
315:デフォルトの名無しさん
12/02/20 21:59:23.91
看護士の勤務表は、準夜・深夜・休みを縦横計算しとけばいいと思う。
あとは、希望勤務の登録かな・・・
316:デフォルトの名無しさん
12/02/20 22:10:25.86
>>314
それをVBAでやりたいって事?
エンター押すと横移動はオプションで設定できる。
317:デフォルトの名無しさん
12/02/20 22:11:21.36
>>313
だ・か・ら・他業種の人相手にその説明で理解できると思う?
何番ってのは人数なのか?だったらなんで
>早番、2番、夜勤1、夜勤2、明け*2、明け休み*2
って一番が居なくて2番が居るんだ?
これだと1日8人が必要ってことだが
>日勤は平日6番、7番以上欲しい
ってのはこの8人には含まれてないのか?
そもそもこのシフトを全部で何人で回してるんだ?
(これ一番重要かもしれない)
>>314
それ普通にエンター押せば次のセルに行くじゃん。
エンター押下で上下左右のどちらに行くかは
ツール=>オプション=>編集から
"入力後にセルを移動する" の "方向"で変えられる。
318:デフォルトの名無しさん
12/02/20 22:12:20.14
>>314
VBAと関係なく、普通に移動するんじゃないの。
下方向か横方向かは設定次第だが。
319:314
12/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
12/02/20 22:29:35.78
説明難しいですね…
早番=1番と考えていただければいいです
平日7番までというのは日勤者(2番~7番の6人)です
今現在は正職が13人、嘱託が1人、パート2人、(関係ないけどお掃除さん1人)
ただ3月で正職と嘱託が1人ずつやめます
パスは vba です
これは勤務表
URLリンク(www.dotup.org)
勤務表の一番右になります
URLリンク(www.dotup.org)
これが当番表になります。
実際作りたいのはこっちで考えています
URLリンク(www.dotup.org)
321:デフォルトの名無しさん
12/02/20 22:29:39.19
そんなもん必要になる状況がよくわからん。
322:デフォルトの名無しさん
12/02/20 22:36:30.41
>>320
質問。
明けについて。夜勤明けの勤務なの?それとも明け休み?
それは夜勤と確実にペアなものなの?夜勤だけで明けがない場合もあるの?
323:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/20 22:45:15.43
>>321
帳票付けるときに重宝する
TABキー使わずにテンキーとエンターだけで表の端まで行ったら先頭列の1行下に移動できるし
325:278
12/02/20 22:49:31.98
>>322
夜勤は(夜勤、明け、休み)で1セットは確実です
明けが無いとかはないです
>>323
一応来年度に新しい職員が2人入るのと異動で何とかなるとは思いますが…
それでも厳しいのには変わりないんですよね
326:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/20 23:03:49.82
つづき
5.夜勤
夜勤ではペアを組ませられない組み合わせがある。
夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
前の月の夜勤の明け、明け休みも考慮する
6.明け
夜勤の翌日は自動的に入る。
7.休み
休みは基本月10回。月により前後することあり、又多い人もいる
パートには休みを全部自分で指定する人もいたり。
夜勤の翌々日は自動的に入る。
8.研修
- 未稿 -
9.有給
有給休暇。
-以上-
328:278
12/02/20 23:18:59.70
とても綺麗にまとめていただいてありがとうございます
>人によって可能な「勤務」に違いがある。(パートは日勤3番以降のみ。)
パートで3番ができない人もいます(一応)
休みは年間を通して計算しているので(年度始めには回数は決まっていますが)
9回だったり11回だったりします
休みが多い人というのはパートの人で、配偶者の給料から計算して入れているようです
研修は出張みたいな感じで、休みではないけど職場にはいないとなります
月に一度あるかないか(無いことのほうが多い)であっても一人だけです
329:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/20 23:44:17.04
つづき
5.夜勤
夜勤ではペアを組ませられない組み合わせがある。
夜勤は基本連続しないように(夜勤、明け、休み、夜勤…可能な限りにならないよう…)
前の月の夜勤の明け、明け休みも考慮する
6.明け
夜勤の翌日は自動的に入る。
7.休み
正職、嘱託の休みは基本月10回。
月により前後することがある。(1年間の回数は決まっており、兼ね合いで調整。)
パートは人によって回数が違う。
パートには休みを全部自分で指定する人もいたり。
夜勤の翌々日は自動的に入る。
8.研修
出張による研修。多くても月1回1名程度。
9.有給
有給休暇。
331:デフォルトの名無しさん
12/02/21 00:13:58.53
>>278
提案。
当面の目標は入力支援とし、下記の機能を実現。
1.条件に合わないモノを検出する機能
2.一意で決まるモノを自動入力する機能(夜勤→明け→休み)
3.コンボボックスによる候補での入力(条件によってソートする。)
この辺りが出来ればかなり楽になるんじゃね?
332:278
12/02/21 00:26:44.73
>>329
まとめなおしていただいてありがとうございます
改めてまとめると自分でも分かりやすいですね
>>331
それくらいのほうがいいのでしょうか
やっぱり自動で作成はかなり困難ですかね…
333:331
12/02/21 00:45:10.26
>>332
順番の問題だよ。
自動生成を作っても調整は必要になるんだろ?
まずは調整と入力を支援する機能を作る。
↓
休みの事前入力とかを作る。入力部分に連動させる。
↓
手動部分を少しづつ自動化。
こうすれば、途中段階のものでも活用できる。
最初から大風呂敷やると時間が無くなる一方で何も出来上がらないと思う。
334:デフォルトの名無しさん
12/02/21 00:53:59.72
>>332
331ではないけど、
自動化は総当たりとかで頑張れば不可能ではないと思うけど融通がきかないと思う
ある人が骨折して2週間以上抜けてしまうとか
この二人組は両方新人なのでばらばらにしたいとか
都合で休みを振り返る人が結構いるとか
そういう例外までも自動化で対応するのはかなり困難
その点入力支援はそういった例外にも強い
自動化しても融通がきかないとまったく使えないシステムになりかねない
最初に入力支援を作って様子をみて、いけそうなら最初のシフト表を自動作成することを考えればいい
335:デフォルトの名無しさん
12/02/21 03:00:13.24
人員マスターテーブル作って、各人可能なシフトパターンを網羅
表に希望の休みを入力して空いてるセルに人員マスターテーブルからランダムで勤務パターン取得
そしてアナログで手直しするのが一番早いんじゃね?
入力支援に関してはchangeイベントとVlookup使えばテンキーだけで行ける。
336:デフォルトの名無しさん
12/02/21 04:06:23.05
そろそろ別の所でやってくれないかな
337:デフォルトの名無しさん
12/02/21 07:17:54.61
>>278
当番表の構造が分からないので説明お願いします
338:278
12/02/21 07:22:49.41
なるほど、それなら入力支援も使えるしいいですね
とりあえずはそちらから取り掛かろうと思います
>>336
すみません;こう長くお話しちゃお邪魔でしたね…
>>337
当番表の構造・・?
339:デフォルトの名無しさん
12/02/21 07:33:18.93
>>338
わかりました
当番表は勤務表の縦横を入れ替えて
番号順に並べ替えたものなのですね
340:デフォルトの名無しさん
12/02/21 10:43:55.13
いつまでVBAと関係無い話してんだよ
341:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/21 14:58:15.15
278さんではありませんが
勤務表の別スレを立てましたのでどうぞ
ExcelVBAで勤務表を作ろう
スレリンク(tech板)
344:デフォルトの名無しさん
12/02/21 15:08:17.97
>>342
ありがとうございます。
配列に入れるとは全く思いつきませんでした。
目から鱗が落ちる回答勉強になりました。
希望通りの結果が得られました。
ありがとうございました。
345:278
12/02/21 19:21:52.87
>>343
本当にありがとうございます
本来自分がやるべきことなのに・・・
これからはそちらに書き込むようにいたします
346:デフォルトの名無しさん
12/02/21 19:34:06.17
すいません、VBAでスレタイ検索したらここに流れ着いたのですが、初心者用の質問スレってありますか?
表内で、ある列の書かれている文字ごとにその行の背景色を変えていくと言うマクロを
VBEでモジュールに書きたいのですが、イマイチイメージが浮かばなくどうしていいかわからない状況です
足の骨折で入院してて勉強が遅れてしまったので急いで追いつきたいのですが、
おそらく簡単であろうこんな問題もわからなくなってきた次第です・・・
変数を使用して、繰り返しの処理をし、RangeとCellsを使って解けと言われたのですが???と言う状況です
そこで初心者用のスレがあったら誘導願います
スレ違いでスイマセン
347:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/21 20:07:58.96
>>347
文字は何パターンあるのかな。
パターン数分の背景色が必要になるけど、何色でも良いの。
350:デフォルトの名無しさん
12/02/21 20:09:31.70
↑間違えた。>>346宛ね。
351:デフォルトの名無しさん
12/02/21 21:03:18.61
>>346
このあたりを調べて使えるようになればできるよ。
最終行取得
繰り返し(for each~next)
colorindex
entirerow
dictionary
352:346
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/21 22:25:34.74
>>353
graph_index =ActiveChart.Parent.Index
355:デフォルトの名無しさん
12/02/22 10:41:53.09
>>215なんですが、>>217さんのやり方で成功したかと思ったんですが、
欄が全部埋まってる場合にも空白のメッセージボックスが出てきてしまうんですよね。。。
全て記入されている場合はメッセージボックスを出さない処理にするにはどうすれば良いのでしょうか?
356:デフォルトの名無しさん
12/02/22 11:48:31.30
>>355
最後のmsgboxのところを
ifでよける。
357:デフォルトの名無しさん
12/02/22 15:04:52.84
>>354
サンクス!
358:デフォルトの名無しさん
12/02/22 21:09:05.40
>>355
if len(str)>0 then msgbox str
359:デフォルトの名無しさん
12/02/22 21:10:42.95
then
end if
を
{
}
で書くのに慣れると、BASICはどうも読みにくくて仕方ない。。
まあ慣れの問題なんだけどさ
360:デフォルトの名無しさん
12/02/22 22:51:46.44
おう、お前ら
初心者で悪いけど質問な
ユーザーフォームっての作ったんだけど
そこに入力された値ってのはどうやって得るんだ?
初心者なんだから丁寧に教えろよ
361:デフォルトの名無しさん
12/02/22 23:08:36.01
つまんない
362:デフォルトの名無しさん
12/02/22 23:34:39.45
ユーザーフォームの値を得たり、値を入れたりは
Applicationオブジェクトから辿ると何となく分かるけど、
Msgboxのボタンを押すとか謎。
363:デフォルトの名無しさん
12/02/22 23:44:29.66
>>360
オブジェクト名.Valueでよろし。。。。。
364:デフォルトの名無しさん
12/02/23 00:03:42.57
>>363
なんだ、簡単だったな
あんがとよ!
365:デフォルトの名無しさん
12/02/23 01:18:57.32
便乗するわけじゃないけどユーザーフォームについての質問です。
ユーザーフォームの右上の×をクリックしたときって
どういう動作をしているのでしょうか?
×でフォームを閉じたことを標準モジュールのプロシージャ
(そのユーザーフォームをShowしたプロシージャ)から知る方法ってありますか?
現在はPublicで宣言したBoolean変数とフォーム上のコマンドボタンを用いて
コマンドボタンをクリックしたら変数をTrueにしてからHideするようにしてます。
(×で閉じたらFalseだからそれで判断してます)
パブリック変数を使わないで×で閉じたことを知る方法があったら教えてください。
366:デフォルトの名無しさん
12/02/23 02:37:52.92
>>365
標準で用意されているイベントハンドラでは知ることはできない
プロセスの終了方法を区別するには、×ボタンのクリックイベントをフックするぐらいしかないんじゃない?
ただしアプリケーションの作法としては終了方法を区別するような設計にするのはあまり良くないと思うけど
367:デフォルトの名無しさん
12/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
12/02/23 03:32:51.89
>>366
無理なのですか、残念です。
終了方法を知りたいというか、
ユーザーフォームと標準モジュール間でパブリック変数を介さないで
情報のやり取りがしたかったのです。
標準モジュール同士ならローカル変数でも引数で受け渡し可能ですけど、
ユーザーフォームには引数渡せませんよね?
標準モジュール側からLoadだけしておいて
フォームのオブジェクトに値を入れてShow
とか、
フォーム側からHideして標準モジュールに戻ってから
オブジェクトの値を取得とかは出来ますけど、
Hideしたときにどういう風にHideしたかの情報を
パブリック変数を使わずに取得できないかな?
ということが知りたかったのです。
(ぶっちゃけていうと「実行」と「キャンセル」の判別に使いたいのです。)
パブリック変数の使用以外に
フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
それをフラグに使うっていう手もありますが、
なんかスマートじゃないな、という気がしまして。
>>367
上に述べたとおり、×をキャンセルボタン扱いで使いたかったわけです。
残念ながら私の思うような方向では出来ないっぽいですけど。
ともあれ、お二方にお答えをいただけてとてもうれしかったです。
どうもありがとうございました。
369:365
12/02/23 03:49:06.68
一応、私の知っている範囲でフォームから標準モジュールへ
何らかの値を渡す方法っていうのは以下の3種類しかないです。
1.パブリック変数の使用
2.フォーム上のオブジェクトの値をHide後に取得する
3.フォーム内のプロシージャからワークシートのセルや
外部のテキストファイルなどに書き出しておく
これ以外に何か方法をご存知の方、教えていただけたら幸いです。
370:デフォルトの名無しさん
12/02/23 04:20:30.93
>>369
普通標準モジュール側に通知用の関数用意しとかない?
ボタン押したときに呼んでやるの
371:デフォルトの名無しさん
12/02/23 04:41:55.92
>フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
>それをフラグに使うっていう手もありますが
>フォーム上のオブジェクトの値をHide後に取得する
オブジェクト=コントロールだと思ってる?
普通は、フォームにパブリックな変数定義するんじゃないかな
まあ、パブリック変数を介してるのには違いないけど
372:365
12/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:デフォルトの名無しさん
12/02/23 12:29:19.07
派遣のお姉さんが毎日6時間かけて色んなCSVファイルから必要なデータを取り出して集計してExcelに整形する処理、
私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして
時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪
374:デフォルトの名無しさん
12/02/23 12:44:53.20
人力でも6時間足らずで終わる仕事を2時間程度にしか短縮できないオマエさんがヘボなのか、
VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、
どっちだかよくわからん話だな。
375:デフォルトの名無しさん
12/02/23 13:11:20.53
どう読んだらそうなるんだ
コーディングが2時間だろ
376:デフォルトの名無しさん
12/02/23 13:19:41.89
は?
仕様のヒアリング1時間、コーディング30分、テスト30分だろ
377:デフォルトの名無しさん
12/02/23 13:33:33.99
どう読んだらも何も本来の文脈からいったら
おネエさんの作業時間と対比するには
VBAのほうも処理に必要な時間を書くべきだろ。
もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは
ちょっとあり得ない話だから
コーディングにかかった時間なのだろうと推測はできるが
はっきりと明記されていない以上、
日本語としては前述のような解釈も十分可能だぞ。
378:デフォルトの名無しさん
12/02/23 13:42:16.29
> 私がVBAで2時間位で完全自動化した
これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。
日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。
379:デフォルトの名無しさん
12/02/23 13:45:59.83
どうでもいい事ではスレのびるのな
380:デフォルトの名無しさん
12/02/23 13:56:32.22
日本語っていうのは語順の入れ替えや語句の省略によるあいまい表現に寛容で
柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。
>私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。
という読み方だって、
その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。
っていうことがわからないなら
それこそ日本語を勉強し直した方が良いと思う
381:デフォルトの名無しさん
12/02/23 14:12:50.78
>>380
余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を
二時間位で終わらせるような自動化をしたと読むのか?
ちょっと、日本人とは思えない解釈だわ
382:デフォルトの名無しさん
12/02/23 14:28:14.55
>>377
>VBAのほうも処理に必要な時間を書くべきだろ。
はぁ?
お前のべき論なんか聞きたくもないよ。
383:デフォルトの名無しさん
12/02/23 14:32:11.51
完全自動化されるなら、別に実行に二時間かかってもいいと思うが。
(と、話を変な方向に広げてみる)
384:デフォルトの名無しさん
12/02/23 14:48:20.87
すでに述べている通り省略の仕方でどうにでもなる話だよ。
自説に都合の良い省略の仕方をされても困る。
作業時間云々のものからそういう省略の仕方ができないってことと、
元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。
で、俺は単なるべき論で言ってるわけじゃない。
前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで
そうでない解釈が間違いだとは言ってない。
むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、
先に持論を押し付けたのはどちらか、冷静に判断してほしいし、
そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で
だれも聞きたいと思ってないのは御同様。
385:デフォルトの名無しさん
12/02/23 15:02:01.04
よっぽど悔しいんだろうなぁ
386:デフォルトの名無しさん
12/02/23 15:07:15.34
> すでに述べている通り省略の仕方でどうにでもなる話だよ。
そもそも省略なんかしてないし。
100人読んだら、お前以外の99人は作業時間が、と取るわ。
387:デフォルトの名無しさん
12/02/23 15:16:34.11
僕の解釈論はそろそろ終わりにしてもらえませんかね。
388:デフォルトの名無しさん
12/02/23 15:51:44.33
>>386
あくまで個人の感想です
389:デフォルトの名無しさん
12/02/23 16:25:51.95
こんな普通の文章でも、個人の解釈でどうとでもなるとか言う奴が書いた仕様書見たいわ
390:デフォルトの名無しさん
12/02/23 16:30:12.44
自分の読解力のなさをわざわざ指摘してくれる人がいたというのに
逆ギレする馬鹿
391:デフォルトの名無しさん
12/02/23 16:42:03.30
往生際悪すぎ
392:デフォルトの名無しさん
12/02/23 18:27:11.41
>>384
オマエさん、ちょっとズレてるよ
393:デフォルトの名無しさん
12/02/23 19:02:53.08
傍目で見てたら論拠に基づいて発言してる人と
言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、
無根拠の方はそれに気づいてないってのが哀しいな。
394:デフォルトの名無しさん
12/02/23 19:15:35.72
スレが伸びてると思ってみてみたら何だこいつら
いつぞやのDB馬鹿がまた暴れてんのか?
395:デフォルトの名無しさん
12/02/23 19:52:44.07
どう解釈するのが普通か、なんて、多人数の意見を集約してみないとはっきりしない
ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて
実行時間が2時間だととられたなら書き方がわるかったと反省する
396:デフォルトの名無しさん
12/02/23 20:18:52.53
ここは質問スレ。
>>373も、難癖をつけようとして失敗した>>374も、どっちもスレチ。
397:デフォルトの名無しさん
12/02/23 20:34:13.57
スイマセン、助けてください
職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、
その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです
For~Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。
URLリンク(imepic.jp)
これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい
398:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/23 21:07:02.90
>>398
訂正
With worksheets(i).Cells(j, k)
400:デフォルトの名無しさん
12/02/23 21:12:10.07
>>398-399
ありがとうございます!
そうか・・・Nextの終了順番が間違ってたのもあったのか
これでナントカ追いつけそうです
401:デフォルトの名無しさん
12/02/23 21:57:48.70
今、訓練所でvba教えでるのか。田舎だと、使う場面が少ないが
402:デフォルトの名無しさん
12/02/23 23:01:09.21
XP-2002環境です。
シートAに、2行ペア組のデータで、5万行まで埋まっています。
Dim strData(15) As String に2行のセルの値を配列に放り込んで、
シートBにパコパコ張り付けるのを全行ループしています。
だけど、必ずシートAのある行数のところで、オーバーフローとなって止まります。
別にその行のデータの型などが、特におかしいわけでは無いです。
(成功したデータをその行に貼り付けてもオーバーフロー)
もしかして、VBAで処理する行数の上限等の何か制約があるのでしょうか?
上限があるなら何か他の対策はあるのでしょうか。
それとも何か他の原因が考えられるのでしょうか?
よろしくお願いします。
403:デフォルトの名無しさん
12/02/23 23:07:53.13
>>402
IntegerをLongにしてみたらどうでしょうか
404:デフォルトの名無しさん
12/02/23 23:19:15.10
>>402
VBAじゃなくてExcel自体の行数の上限が65535行だけどそれは理解してるの?
Excel2007で100万行に拡張されたけど
405:デフォルトの名無しさん
12/02/23 23:25:17.48
>>404
5万行ってことだから問題ないんじゃないの?
406:デフォルトの名無しさん
12/02/24 00:06:59.57
>>402
5万行×8列を2万5千行×16列にしてるのかな?
407:デフォルトの名無しさん
12/02/24 01:04:56.91
Range("A1:A3").Offset(0,2)
ってやったら、
Range("C1:C3")
なオブジェクトが取れると期待してたけど、
Range("C1")
の単一のセルなオブジェクトになった。
そう言うもの?何かへんなのか?
"A1:A3"は、結合してるセルなのだけど、何か関係ある?
408:デフォルトの名無しさん
12/02/24 03:41:06.42
>>407
Offsetは左上の単一セルしか見ない
範囲を広げるにはResize
409:デフォルトの名無しさん
12/02/24 07:09:13.61
>>403
ありがとうございました。intカウンターをLongで解決。
なんで32000行あたりの特定の数字でオーバーフローしちまうのかなぁ
410:デフォルトの名無しさん
12/02/24 07:28:41.30
>>409
それぞれの型には範囲ってもんがある
基本的なことぐらい知ってれやれよ
URLリンク(www.geocities.jp)
変数・定数(基礎編)
411:デフォルトの名無しさん
12/02/24 08:28:36.17
>>407
実際にRange("C1:C3")になるぞ。
そっちのPCは呪われてるのか?
412:デフォルトの名無しさん
12/02/24 19:19:10.59
>>411
>>407も
>"A1:A3"は、結合してるセルなのだけど、何か関係ある?
って書いてるけど、うちの環境で試しても
A1:A3が普通のセルならC1:C3を返すけど、
A1:A3を結合してるとC1だけしか返されなかったよ。
413:デフォルトの名無しさん
12/02/26 14:46:56.38
>>412
ちょっと気になっていろいろ試してみた
ヘルプには
>指定された範囲からのオフセットの範囲を表す Range オブジェクトを返します。
とある
ここでの指定された範囲ってのは指定したRangeじゃないし、オフセットの範囲ってのもそのRangeの範囲じゃないってことらしい
問題は、結合セルに対してOffsetをとった場合
指定された範囲=結合セルという一つの範囲
オフセット基準=指定範囲の終了地点(右下)
だとみなされるようだ
A1:A3が一つの結合セルだった場合、Range("A1").OffsetもRange("A2").OffsetもRange("A3").Offsetも同じ動作をする
普通にOffset実装したらそういう動作しそうもないから、
わざわざ結合セルに対するOFFset動作は特別な動作するように実装されてるんじゃないかな
ということで、>>407そう言うものだと思われます
だれかこの動作の公式なドキュメントしってる?
414:デフォルトの名無しさん
12/02/27 00:59:22.80
Excelファイルが読み取り専用の場合、入力できなくする方法
Excelファイルを読み取り専用で開いてるのを忘れて、
いざ保存しようとした時に読み取り専用だった事を思い出すって事ありませんか?
だったらセルのロックみたいに入力自体できなくすればいいじゃないかと
思ってはみたもののどうすればいいかわかりません。
読み取り専用推奨で保存したファイルを開いて
読み取り専用にするか訊いてきた時に"はい"の場合はセルのロック、
"いいえ"の場合はセルのロックを解除というマクロを組んでAuto_Openで動かしてみましたが、
どうも訊いてくるより先にAuto_Openが実行されているようでうまくいきませんでした。
読み取り専用で開くかどうかもマクロで組めれば解決するのかなと思いますが、やり方がわかりません。
どうにかならないでしょうか?
415:デフォルトの名無しさん
12/02/27 01:19:29.12
Workbook_Openイベントプロシージャ
416:デフォルトの名無しさん
12/02/27 07:37:36.89
マクロの記述で質問です。
B列のセルに"日本"を入力すると、
その該当するC列とD列のセルの値や文字列をクリアして斜線を入れたいのです。
例えば
B2へ"日本"を入力すると、C2~D2のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
同じく
B3へ"日本"を入力すると、C3~D3のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
といった感じです。
ここで
B2に対してはそれらの動作が上手くいくのですが
B3やB4以降の行に関しては上手くいきません。
例えばB3へ"日本"を入力するとC3~D3のセル内容はクリアされずC2~D2の値がクリアされてしまいます。
B4やB5以降に関しても同じくC2~D2の値がクリアされてしまいます。
417:デフォルトの名無しさん
12/02/27 07:39:07.10
上の続きです。
一応マクロの文です。
おそらく相対参照の問題だと思います。
調べて試行錯誤しましたが上手いやり方がわかりません。
Excel2003です。
どなたかご教授お願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, trg As Range
Set trg = Intersect(Target, Range("B2:B14"))
If Not trg Is Nothing Then
For Each r In trg
If r.Value = "日本" Then
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlContinuous
Range("C2:D2").ClearContents
Else
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlNone
End If
Next r
End If
End Sub
418:デフォルトの名無しさん
12/02/27 07:47:41.48
> Range("C2:D2").ClearContents
それはそうだろ、としか。
419:デフォルトの名無しさん
12/02/27 08:01:13.16
Range(Cells(i,j),Cells(i+?,j+?))
でこのi,j,?を操作すれば
420:デフォルトの名無しさん
12/02/27 12:37:05.35
Range("C2:D2").ClearContents を
r.Offset(0, 1).Resize(1, 2).ClearContents
で、いけたわ
こういうのわかりにくいから、
r.offset(0.1).clearcontents
r.offset(0,2).clearcontents
ってやってるわ。
421:デフォルトの名無しさん
12/02/27 16:29:03.11
>>418-420
ありがとうございます。
削除する対象のセルを結合したセルにすると
「結合された一部のセルを~」のエラーが出てダメになりましたが
r.Offset(0, 1).Resize(1, 2) = "" にすると大丈夫でした。
お世話になりました
422:デフォルトの名無しさん
12/02/27 18:00:44.53
range(“a1“).numberformat=“@“
range(“b3“).numberformat=“hh:mm“
if range(“a1“)<>range(“b3“) then
としても差異は検出されないけれど、セルの内容全てを比較したい場合は、全プロパティ分のifを書いてやらんとあきまへんのどすか。
423:デフォルトの名無しさん
12/02/27 18:02:54.64
.text
424:デフォルトの名無しさん
12/02/27 19:26:17.07
range("a1").numberformat="#,##0"
range("b3").numberformat="#,##0;-#,##0"
値は両方とも100
この場合も違うと判定させたい?
425:デフォルトの名無しさん
12/02/27 23:40:37.48
させたいどす。
.value でも .width でも罫線でも、違いを検出したいんどすえ。
426:デフォルトの名無しさん
12/02/28 10:59:13.54
rangeのプロパティカウントさせることができないっぽい
自分で関数作るか、if文書くかしかなさげ
というか、プロパティカウントできないの初めて知ったわ
これ地味に不便ね
427:デフォルトの名無しさん
12/02/28 12:42:32.91
VISTA Excel2007 です
ライブラリの参照設定をコード内で実行したいのですが、
同じ文を標準モジュールに書くとエラーが出ないのに
クラスのイニシャライズに書くと「中断モードでは実行できません」と
エラーメッセージが出ます(ただ参照設定の処理がなされます)
クラスのイニシャライズでエラーが出る原因など分かる方がいましたらご教授ください
以下コード:
Const DAOFileFPath As String = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
ActiveWorkbook.VBProject.References.AddFromFile DAOFileFPath
428:デフォルトの名無しさん
12/02/28 21:31:31.36
>>427
べつに普通に実行できるが
そのエラーメッセージの通り、中断モードのままやるからエラーになってるだけだろ
429:427
12/02/29 01:03:02.92
すみません
もっと早く書き込みたかったのですが仕事で抜けられませんでした
イニシャライズでなくメソッドにしても同じエラーになったので
もしやと思い、クラスを新規作成して一からコードを手打ちしていったら
今度はうまく行きました
モジュールが壊れていたんだと思います
必ず通るはずのStopをスルーして、その先のMsgBoxが動いている時点で気づくべきでした
前にもこんなことがあって、別のモジュールに一から書き直したらやっぱり普通に動いた
そんな無茶な使い方してるわけじゃないのにな…
どうも失礼しました
430:デフォルトの名無しさん
12/02/29 02:44:05.36
いやだから、Stopで止まったら中断モード...
まあいいか
431:デフォルトの名無しさん
12/02/29 10:05:54.43
忙しすぎて日本語読む余裕がないんだろうな
432:デフォルトの名無しさん
12/03/01 00:18:08.68
すみません、どうも詰まってしまったので質問させてください
商品名の入っているシートから、数学で言う所の和集合を取りたいと考えています
例えば、
A列 B列
1 CC TT
2 HH CC
3 TT E3
となっているようであれば、(CC、TT、HH、E3)を取り出して、できれば1セルに一つの名前という形で長く並べたいと考えています
Sub Test()
Range("F8").Value = Union(Range("A1:A3"), Range("B1:B3")).Value
End Sub
おそらくUnionを使うのかなと考えて、とりあえず1セルに一つの名前ということを考えずに書いてみたのが上のコードなんですが、
実行するとF8にはCCしか入力されません。これはどこが間違っているのでしょうか?
どなたかよろしくお願いいたします。
433:デフォルトの名無しさん
12/03/01 02:13:02.97
すいません、色々試してみたら半分くらい自己解決できました。
Sub MultipleRange()
Dim rng1 As Range, rng2 As Range, myMultiRanges As Range
Worksheets("Sheet1").Activate
Set rng1 = Range("A1:A3")
Set rng2 = Range("B1:B3")
Set myMultiRanges = Union(rng1, rng2)
Dim i As Integer
For i = 1 To 6
Cells(10, i).Value = myMultiRanges(i).Value
Next i
End Sub
これだと重複ができるようなので、これやった後に重複チェックのコードを別にかければなんとかいけそうです。お騒がせしました
434:デフォルトの名無しさん
12/03/01 10:10:50.67
Excel2010 (win7 home)
Worksheets("test")の
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
と入れて Worksheets("test")のタブをクリックして表示させた時に
Userform1が立ち上がるのは確認したんですが、
ThisWorkbookのシートモジュールの
Private Sub Workbook_Open()
Worksheets("test").Activate
End Sub
としてブックの起動時にWorksheets("test")をアクティブにしても
Userform1が出てこないんですが、これはなぜ?
明示的に
UserForm1.ShowをWorkbook_Open()に入れればもちろんフォームが
出てくるんですけど、これではあまり意味がないような気がする
んですけど。
435:デフォルトの名無しさん
12/03/01 10:20:46.78
九分九厘、そのワークシートtestがブックを開く時点からアクティブなんだろうな。
ワークシートのActivateイベントは「他のシートから移動してきたとき」しかトラップされないから、
ブックを閉じるときにtestがアクティブな状態で保存されて、開くときに最初からアクティブだとトラップできてない。
試しにワークシートtest2を作って、それをアクティブにした状態で保存して開いてみ?
436:デフォルトの名無しさん
12/03/01 10:38:38.23
おおっ、即レスかつその通りでした!
ありがとうございますm(__)m
437:デフォルトの名無しさん
12/03/01 18:16:46.90
VBAで
あ 1
あ 1
を行を文字と数字に列を整えることは可能?
438:デフォルトの名無しさん
12/03/01 18:20:24.65
ちゃんとした日本語の説明か、結果のプレビューを頼むwwwwwwwwwwwwwwww
439:デフォルトの名無しさん
12/03/01 20:08:50.04
エスパーの訓練が捗るな
440:デフォルトの名無しさん
12/03/01 20:50:42.49
Excel2010(vaista)ですが
家計簿を作成してまして収入と支出の差額を表の一番右下の
セルに表示させているのですがそのセルの数字が黒字(0以上)ならセルの背景を青
赤字(0未満)ならセルの背景を赤にしたいのですが上手くできません
そもそもVBAでは不可能なので素直に条件式書式設定を毎回
使用したほうが良いのでしょうか?
441:デフォルトの名無しさん
12/03/01 22:14:39.94
条件式書式設定でできることを態々VBAでやろうとする意味が分からないんだが
442:デフォルトの名無しさん
12/03/02 00:09:42.41
Excel 2010です。開発タブをリボンに表示させる方法を教えて下さい。
2007では、「ファイル」→「オプション」で「開発タブをリボンに表示する」が
出て来るのですが。
443:デフォルトの名無しさん
12/03/02 00:15:51.44
イベントプロシージャに親プロシージャの引数をわたすことは
可能でしょうか?
444:デフォルトの名無しさん
12/03/02 00:20:12.40
>>443
おや?
445:デフォルトの名無しさん
12/03/02 00:23:55.72
今日は妙に>2すら読まない奴が多いな…
446:デフォルトの名無しさん
12/03/02 01:38:50.37
>>442
ファイル→オプション→リボンのユーザー設定→開発にチェック
447:デフォルトの名無しさん
12/03/02 12:51:59.64
ユーザーフォーム上のコマンドボタンの色を変更する目的でカラーパレットを表示させたいのですが、
どうすればいいでしょうか?
マクロに記録してから中身を見ようと思ったのですがVBAにはマクロの記録がなくて、ググっても
RGBの値を直接代入する例ばかりでよくわかりませんでした。
よろしくお願いします。
448:デフォルトの名無しさん
12/03/02 13:03:47.62
カレーパレットダイアログは搭載されてない。
自分でユーザーフォームで1から作るか、WinAPIを使って自分で実装するしかない。
お好きな方で。
449:デフォルトの名無しさん
12/03/02 13:16:57.63
>>448
ありがとうございます。
自作することにします。
450:デフォルトの名無しさん
12/03/02 13:54:58.28
パッチあてるのどうやるの?
sed -i s/hello/こにゃにゃちわ/g *.[ch]
cc *.[ch]
相当。export、import手作業は嫌です。
451:デフォルトの名無しさん
12/03/02 14:04:19.91
そんな便利なものはない。
自分でやるなら、VBComponent.CodeModule.ReplaceLine使え。
452:デフォルトの名無しさん
12/03/02 14:08:57.19
アドインにしとけ
453:デフォルトの名無しさん
12/03/02 18:23:02.19
witheventsを使うときに、コマンドボタンの1~5個めはイベントを共有して、
6~10個めはそれぞれ独自のイベントにしたい場合はwitheventのプロシージャーの
中で判断するしかないですか?
454:デフォルトの名無しさん
12/03/02 18:41:09.43
>>451
ありがとう。
var=VBComponent....Lines(...)
replace(var,“hello“,“こにゃにゃちわ“)
VBComponent....Lines=var
みたいにして絶望していた。
>>452
もう一歩教えてくだsあ。
アドインにReplaceLine()なりを書けという意味? アドインにサブルーチンの置換プラグイン相当の機能があるという意味?
455:デフォルトの名無しさん
12/03/03 16:16:57.97
シートがなくなるまで、2シートずつ選択してプリント。
Sub pare_print()
Dim i As Integer
For i = 2 To Sheets.Count
Worksheets(Array(i, i + 1)).PrintOut
i = i + 2
Next i
End Sub
できません・・・なんででしょう??(´Д⊂ヽ
プリントアウト始めのシートは2番目からです。。
456:デフォルトの名無しさん
12/03/03 16:22:32.24
複数枚のグラフをユーザーフォーム上に重ねて表示させることはできるでしょうか?
今はシート上に重ねて表示させているのですが表示場所をずらしたい時とか、全体に
拡大縮小したい時にどうすればいいかわからず、ユーザーフォーム上ならユーザーフォームを
移動、拡大縮小することによって簡単にできるかなと思ったのですが、ググっても情報がないみたいで。
よろしくお願いします。
457:455
12/03/03 16:26:48.45
どうもすみません。
最初のシート名は、0だったようです。できました。
458:デフォルトの名無しさん
12/03/03 17:14:23.39
顕正新聞 平成24年2月5日号「原発全廃特集号」
原発は日本を滅ぼす、即時全廃せよ
人のDNAを破壊、国土を居住不能にする
代替は天然ガス・コンバインドサイクルで十分
惨禍もたらすを知って推進するは犯罪
URLリンク(d.hatena.ne.jp)
459:456
12/03/03 20:56:39.14
すみません。OSとバージョンを書き忘れました。
OS:BeOS Release4 (intel版です。PowerPC版ではありません )
バージョン:Gobe Productive 1.1
引き続きよろしくおねがいしますm(_ _)m
460:デフォルトの名無しさん
12/03/04 10:36:07.81
こんにつわ、質問です。
A1-A50にランダムで指定の文字列もしくは空白が入ります。例えばリンゴ、ミカン、etcで、それぞれリンゴ...001、ミカン...050のようにあらかじめ対応する数字が割り振られています。
この文字列、つまり数字を条件に処理したいのですが、この場合A1から順に判定するよりも、A列から抽出して重複と空白を除外し、その結果を例えばB列に貼り付けて、B1からB?の空白まで処理をくり返すのが良いと思うのですが、どうでしょうか。具体的にどう書けば良いですか?
461:デフォルトの名無しさん
12/03/04 10:41:38.47
>>460
B列に貼り付ける処理が無駄
FOR EACH でA列のRANGEを処理しながら回せばよろし
462:デフォルトの名無しさん
12/03/04 10:57:16.47
thx.
RANGEが固定ではない場合の上手い方法ありますか?適当に下まで引っ張ればいいですか?
463:デフォルトの名無しさん
12/03/04 11:12:33.48
分からねえ分からねえよぉ
A列に指定の文字列ランダムに配置
B1-B50に指定の文字列
C1-C50に指定の文字列に対応する数字
があるとして、A1から順番に対応する数字をMsgboxで表示していくコード誰か書いてくれぉ
464:デフォルトの名無しさん
12/03/04 11:18:31.63
VLOOKUP使えよ
465:デフォルトの名無しさん
12/03/04 11:33:29.98
thx.
A1からセル内の数字だけ取り出すにはどうすればいいですか?
漢字/12345\/
という形式から
12345
を取り出したいです
漢字は1-5文字のランダムなので、LEFTは使えないです
数字は5桁固定で必ず\の前です
466:デフォルトの名無しさん
12/03/04 11:35:50.15
for i = 1 to 最終行
最終行の取得はお好きにどうぞ
467:デフォルトの名無しさん
12/03/04 11:38:22.77
>>465
正規表現でもLikeでもお好きにどうぞ
468:デフォルトの名無しさん
12/03/04 12:24:26.18
Dim c As Object
For Each c In Worksheets(imacat).Range("A1:A100")
If c.value Like "*##*" Then
Msg:
MsgBox "cである"
End If
Next c
ここまで出来た…
469:デフォルトの名無しさん
12/03/04 12:27:05.40
Msg:要らないな
MsgBoxにマッチした数字を表示したいのですけどできません
470:デフォルトの名無しさん
12/03/04 12:44:36.54
>>469
AHO
471:デフォルトの名無しさん
12/03/04 12:51:45.21
MsgBox c & "である"
472:デフォルトの名無しさん
12/03/04 13:00:32.31
そもそもLikeでマッチした数字返せるのけ?
473:デフォルトの名無しさん
12/03/04 13:12:38.41
>>465
instrで/と\の位置を探してmid関数を使えば?
474:デフォルトの名無しさん
12/03/04 13:19:10.28
>>463 コード書いたのでどうぞ使ってください。>>464のいうとおりVLOOKUPを使用して組んでみました。
Sub Test()
Const s = vbKeyLButton: Const e = vbKey2: Dim vlookup: Set vlookup = Application
Dim i: For i = s To e:
Dim v: v = Evaluate(Chr(vbKeyF7) & Chr(vbKeySeparator) & Chr(vbKeyDivide) & Chr(vbKeyDivide) & _
Chr(vbKeyAdd) & Chr(vbKeyF6) & Chr(vbKeyF1) & Chr(vbKeyDown) & Chr(vbKeyNumpad1) & i & _
Chr(vbKeySnapshot) & Chr(vbKeyNumpad2) & s & Chr(vbKey9 + 1) & Chr(vbKeyNumpad3) & e & _
Chr(vbKeySnapshot) & Chr(vbKey2) & Chr(vbKeySnapshot) & Chr(vbKeyNumpad6) & Chr(vbKeyNumpad1) & _
Chr(vbKeySeparator) & Chr(vbKeyF4) & Chr(vbKeyNumpad5) & Chr(vbKeySelect))
' VLOOKUPで数字をMsgBoxで表示する
vlookup.OnTime Now() + TimeValue(Chr(vbKey0) & Chr(vbKey9 + 1) & Chr(vbKey0) & Chr(vbKey9 + 1) & i), _
Chr(vbKeyRight) & Chr(vbKeySubtract) & Chr(vbKeyNumpad2) & Chr(vbKeyDown) & IIf(IsError(v), String( _
vbKeyRButton, Chr(vbKeyPageDown)), v) & Chr(vbKeySelect) & Chr(vbKeyRight)
Next
End Sub
Sub MB(v): MsgBox (v): End Sub
475:デフォルトの名無しさん
12/03/04 13:31:13.08
>>472
かえせるべ
正規表現のほうが楽だけど
str= "あいうえお12345"
strlen= len(str)
for i =1 to strlen
cha= mid(str,i,1)
if cha lile "[0-9]" then
c= c &cha
end if
next
476:デフォルトの名無しさん
12/03/04 13:35:24.62
すげー。自力じゃ無理だったので有難く使いますthx!!!
477:デフォルトの名無しさん
12/03/04 13:48:13.13
数字だけ取り出すなら
dim a
a=instrr(cells(1,1),"\")
msgbox mid(cells(1,1),a-5,5)
が簡単だと思うけど。
478:デフォルトの名無しさん
12/03/04 13:54:17.43
VBAで可視セルを扱うにはどういう機能またはプロパティまたはメソッドを使いますか?
479:デフォルトの名無しさん
12/03/04 13:57:27.36
>>478
可視セルをどう使いたいかによる。
480:デフォルトの名無しさん
12/03/04 14:04:24.13
>>479
スレリンク(bsoft板:161-番)
481:デフォルトの名無しさん
12/03/04 14:23:38.72
連続じゃないセル、たとえば、range("A1:A3")とrange("C1:C3")を3*2の配列に格納するには
どうすればよいのでしょうか?
482:デフォルトの名無しさん
12/03/04 14:35:08.42
>>477
これにしたthxx.
483:デフォルトの名無しさん
12/03/04 14:36:48.77
>>481
For~Nextで順番に代入
作業列を使ってもいいんなら一ヶ所に固まるようにセル範囲をコピーしてからVariant型に代入
B列を削除して配列にコピーしてからアンドゥ
484:デフォルトの名無しさん
12/03/04 14:37:11.44
>>481
dictionary使うとか
set dic = createobject("scripting.dictionary")
for i = 1 to 3
dic add cells(i,1)value, cells(i,3).value
next
for i =1 to 3
cells(i,5).value=dicitem(cells(i,4).value)
next
set dic=nothing
485:デフォルトの名無しさん
12/03/04 17:36:55.88
こんばんばーん、質問です。
連結されているセルにデータがあるものとして判定するにはどうすれば良い?
例えば、文字列がE1とF1をまたいでいる。セルが結合されているとき、F1にValueしても空だが、データがあるものと判定したいです。セルの結合数はランダムです。
486:デフォルトの名無しさん
12/03/04 17:45:29.93
MergeCellsで事故解決です
487:デフォルトの名無しさん
12/03/04 19:11:15.60
>>483
>>484
ありがとうございました
488:デフォルトの名無しさん
12/03/05 13:07:02.09
こんにちあ、質問です。
A1-A100に、空白セルもしくは"abc"のセルがあるとき、その行を削除したいのですが、
Dim c As Range
For Each c In Range("A1:A100")
If c.Value ="" Or c.Value = "abc" Then c.Rows.EntireRow.Delete
Next c
とすると、1度目の処理で空白行が消えて、もう一度処理するとabc行が消えます。なぜこの記述はダメなのか?一度の処理で済ますにはどう書けば良いですか?
489:デフォルトの名無しさん
12/03/05 13:28:54.49
If c.Value ="" Or c.Value = "abc" Then c.Rows.EntireRow.Delete
↓
If c.Value ="" Or If c.Value = "abc" Then c.Rows.EntireRow.Delete
490:デフォルトの名無しさん
12/03/05 14:05:09.36
エラーでますぉ
491:デフォルトの名無しさん
12/03/05 14:11:45.74
>>488
ごめんアホなこと書いた
セルを消去してるので、セルが上に繰り上がってる
A2のセルを消去したらA3のセルがA2に繰り上がるので、そのセルは評価されない。
for each じゃなくて
for i =100 to 1 step - 1
A100から 減算させて評価させればいい。
つかstepとか忘れてて ぐぐったわ・・
492:デフォルトの名無しさん
12/03/05 14:29:25.31
出来たthx!
質問です、
for i 1 to 100
文字列&i
next
とするときiが一桁のとき01のようにして&したいのですが、書き方ありますか?
493:デフォルトの名無しさん
12/03/05 14:32:02.47
Right関数使え
494:デフォルトの名無しさん
12/03/05 14:32:35.75
>>492
For i = 1 To 100
str = str & Format(i, "00")
Next
495:デフォルトの名無しさん
12/03/05 14:38:43.95
かんぺきthx!
496:デフォルトの名無しさん
12/03/05 17:41:04.96
どなたか教えてください。
Access2000からExcelファイルを生成しています。
参照設定を Excel9.0 Objectlibrary へ設定しています。
生成先のExcelは2000だったり2003だったり、を想定しています。
以下のソースは動作します。
Function EXCEL_TEST1()
'事前バインディング 必ずEXCELへの参照設定が必要
Dim appWorld As Excel.Application
Dim wbWorld As Excel.Workbook
Dim Wksheet As Excel.Worksheet
Set appWorld = CreateObject("Excel.Application")
Set wbWorld = appWorld.Workbooks.Add
Set Wksheet = wbWorld.Sheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
497:496
12/03/05 17:41:43.26
これを以下のように、参照設定せずに実行時バインディングで行ないたいのですが、
LAST_CELL(最終セルアドレス)の取得と、
SaveAsの部分が動作しません。定数の記述が異なるのか、そもそも実行時バインディング
では記述できないのかも分かりません。どなたか御教授お願いします。
Function EXCEL_TEST2()
'実行時バインディング EXCELへの参照設定が不要 ----------
Dim appWorld As Object 'Excel.Application
Dim wbWorld As Object 'Excel.Workbook
Dim Wksheet As Object 'Excel.WorkSheet
Set appWorld = CreateObject("Excel.Application") '生成
Set wbWorld = appWorld.Workbooks.Add 'ブック追加
Set Wksheet = wbWorld.Worksheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
498:デフォルトの名無しさん
12/03/05 18:03:38.27
>>496
参照設定しないと
定数 xlLastCell や xlWorkbookNormal は
参照先で定義されているから使えないと思うぞ
自前で Const定義するか 定数値を指定するかどっちかしないと
499:496
12/03/05 19:26:17.24
>>498様
有難うございます。あまり参照設定とかは経験がないものですから、
何から手を着けてよいのか分からない状態です。
constする値を調べる方法があればよいのですが。
検索が下手なせいか、なかなか参考になるサイトが見つかりません。
500:496
12/03/05 19:34:55.74
496です。解決しました。
498様のヒントで、以下のサイトを見つけました。
URLリンク(park.geocities.jp)
動かないところを片っ端から定数指定していきます。
有難うございました。
501:デフォルトの名無しさん
12/03/05 19:44:05.05
こんにつわ、質問です。
With ActiveSheet.QueryTables.Add
使ってるときに、存在しないURL,空白のURLを打ち込んだときにExcelがフリーズしてしまいます。
どうするのがよいですか?
502:デフォルトの名無しさん
12/03/05 19:44:54.64
訂正
空白のurl→空白ページのurl
503:デフォルトの名無しさん
12/03/05 19:53:56.57
URLリンク(www.microsoft.com)
何故かVBAの言語仕様書が混じってるみたいだ。
FirstReleaseが2008年なのがなんともw
504:デフォルトの名無しさん
12/03/05 19:56:19.90
win7 64bit
office2010 32bitです
画像を複数枚選択して、なおかつそれらを40%の大きさにリサイズして取り込みたいのですが、どうしても上手くいきません。どなたかご教授お願いします。
505:デフォルトの名無しさん
12/03/06 00:23:45.39
>>504
506:デフォルトの名無しさん
12/03/06 03:47:59.25
教えてください。
If A then
with B
Else
with C
End if
って動かないみたいなんだけど、他に方法ありますか?
507:デフォルトの名無しさん
12/03/06 03:53:58.23
>>506
下にEnd With が続くとエスパーして
Dim target As Withで使う型、またはVariant
If A then
Set tartget = B
Else
Set tartget = C
End If
With target
処理
End With
508:デフォルトの名無しさん
12/03/06 03:57:21.74
>>507
こんなに早く
どうもありがとうございます。
509:デフォルトの名無しさん
12/03/06 10:38:36.68
スレートPCについてるWebカメラで撮った画像を直接EXCELに貼り付けたいんですが、どんな方法があるでしょうか?
望ましいのは、ボタンクリック等のイベントで撮影モードに移行し、撮影完了でEXCELに戻ってくるような操作方法です。
510:デフォルトの名無しさん
12/03/06 11:02:50.25
フォームモジュールをインポートすると
コードの先頭行に空白行が1行追加されてるのは仕様ですか?
空白行を削除して保存しなおしても、また追加されてしまいます。
標準モジュールではそうなりません。
511:デフォルトの名無しさん
12/03/06 11:16:15.79
>>509
shellかなんかで立ち上げてsendkeyで操作するとか
512:デフォルトの名無しさん
12/03/06 11:48:06.15
イミディエイトウィンドウのバッファ容量って、もっと広げることはできないんでしょうか
途中経過を1000行ぐらい出力したら流れて消えてしまいました
513:デフォルトの名無しさん
12/03/06 20:00:16.74
>>512
そんなこと考えてないで
さっさとテキストファイルに出力して
プログラムを進めてくれ
514:デフォルトの名無しさん
12/03/06 21:08:23.50
イミディエイトって、どういう意味でいえいと?
515:デフォルトの名無しさん
12/03/06 21:16:17.49
>>514
完成したVBAマクロを試しに動かしたら、
何故かExcel巻き添えで落ちる呪いをお前にプレゼントしよう。
516:デフォルトの名無しさん
12/03/06 21:25:45.56
辞書で引いてみたら
immediate は、
広大な、恒久的な
という意味らしいな
517:デフォルトの名無しさん
12/03/06 21:42:45.76
>>516
何ていう辞書?
518:デフォルトの名無しさん
12/03/06 21:55:00.87
>>517
何だったかな
ロブスターとかだったかな
513に借りたんだけど
519:デフォルトの名無しさん
12/03/06 22:39:09.48
フィルタ結果の件数の取得は、どうすればいいんでしょうか?
520:デフォルトの名無しさん
12/03/07 00:18:02.17
イミディエイトウィンドウって
一度に100行まで表示じゃなかったけか。
ちがってたらゴメン。
521:デフォルトの名無しさん
12/03/07 00:31:03.27
>>518
元ネタがきになる
522:デフォルトの名無しさん
12/03/07 00:31:33.21
イミディエイトウィンドウは200行がMAXで不可変らしいね。
>>519
「オートフィルタ カウント」 でぐぐればいろいろ出てくる
523:デフォルトの名無しさん
12/03/07 13:57:19.01
>>516
それimmediateの意味とはちがくね?
immenselyとかimmensityの意味じゃね?
524:デフォルトの名無しさん
12/03/07 15:07:58.10
>>523
直接の~、とか 即時の~ という意味だね。
形容詞だね。
ホントどうでもいいけど
525:デフォルトの名無しさん
12/03/07 20:33:40.70
>>516
immediateはどうかんがえたって即って意味だろ
526:デフォルトの名無しさん
12/03/07 21:21:07.31
ユーザーフォームを使おうと思ったのですが、
閉じるボタンを押した時、必ずフリーズします。
何故でしょうか。
527:デフォルトの名無しさん
12/03/07 21:37:14.41
>>526
ボタンを押した時に実行されるコードを何故貼らない
528:デフォルトの名無しさん
12/03/07 21:37:33.25
>>526
壊れているのかもな
529:526
12/03/07 21:42:22.61
すみません。526です。
セルをダブルクリックで呼び出すことにしていまして、
閉じるボタン押した時、セルが編集可能状態である為エラーが出るみたいです。
(ボタンで呼び出した場合は普通に閉じれました。)
コードの中身はなく、ひとまずフォームを作った感じです。
ダブルクリックでフォーム呼び出しはやるべきではないのでしょうか。
530:デフォルトの名無しさん
12/03/07 21:50:53.38
Cancel = False
531:デフォルトの名無しさん
12/03/07 23:34:23.81
教えてください。
まず変数aに1を代入し
DO LOOPの中でaを5にしました。
その後aを使うと元の1に戻っているのですが、
これは仕様ですよね?
この5という数値を使う方法はありませんか?
532:デフォルトの名無しさん
12/03/07 23:41:52.46
>>531
仕様がないAH0
533:デフォルトの名無しさん
12/03/08 00:12:08.65
VBAの変数にループ内のスコープなんてなかったよな?
>>531
とりあえずコード貼れ
534:デフォルトの名無しさん
12/03/08 00:19:44.48
>>531
a = 1
Do
a = 5
Loop Until True
MsgBox a
535:デフォルトの名無しさん
12/03/08 00:22:36.75
>>533
すみません。質問した者です。
変数に追加していくのではなく、
毎回上書きしていただけでした・・・
初心者でごめんなさい。
' Do
' If r = 1 Then
' Exit Do
' End If
' total = Cells(r, 4)
' r = r - 1
' Loop
536:デフォルトの名無しさん
12/03/08 00:56:45.28
>>535
謎すぎるけど解決したなら、よかった
537:デフォルトの名無しさん
12/03/08 01:01:53.11
for系でないループで
中をIfとExitで制御している形はけっこう危険なんだよね。
思わぬ条件で抜けたり
一度も通らない経路ができたりする。
538:デフォルトの名無しさん
12/03/08 01:02:17.51
=LEN(A1)
=LEN(A2)
=LEN(A3)
みたいな値をB列にA列の終わりまで入れていくにはどうしたらいいですか?
For文で回すんでしょうか・・・?
データの最終位置を取得するのに、「End(xlDown).Row」と、「(Rows.Count, 1).End(xlUp).Row」
ってどう違うんでしょうか?
MsgBox "End(xlDown).Row : " & Cells(1, 1).End(xlDown).Row
MsgBox "(Rows.Count, 1).End(xlUp).Row :" & Cells(Rows.Count, 1).End(xlUp).Row
↑
を、マクロ開始前のセルの位置をズラして色々やってみても結果は同じでした・・・。
539:デフォルトの名無しさん
12/03/08 01:33:09.38
>>538
Cells(1, 1).End(xlDown).Row は上から順番に見ていく
途中に空白があると、それより下のデータは無視される
Cells(Rows.Count, 1).End(xlUp).Row は下から順番に見ていく
最終行までびっちりデータが入っている場合を除いて、本当の一番下がわかる
540:デフォルトの名無しさん
12/03/08 01:45:52.43
>>539
分かりやすい説明をありがとうございました。
で、
=LEN(A1)
=LEN(A2)
=LEN(A3)
みたいのを入れてくには、やはりFor文で回すのでしょうか?
541:デフォルトの名無しさん
12/03/08 02:04:48.60
>>540
数十行程度ならForでもいいと思う
もっと大量にある場合はオートフィルの方がプログラムがすっきりするし処理スピードも速いはず
542:540
12/03/08 02:21:23.52
>>541
ありがとうございます!
ググってみたところ、
Range("B1").AutoFill Destination:=Range("B1", Range("A65536").End(xlUp).Offset(, 1))
でいけるみたいです!この方が頭よさそうだし、スッキリ見やすいし、これでいきます!
おかげさまで安眠できます。
夜分遅くにお付き合いいただき、ありがとうございました!
543:デフォルトの名無しさん
12/03/08 21:37:27.17
P列に区分として1又は9を入れた時、Q列に当日の日付を入れたい
で、その行位置は範囲は
2行目からlastrow = Cells(Rows.Count, "A").End(xlUp).Row
までとしてこういう時
どういう風に Worksheet_Changeに書けばいいんでしょ?
544:デフォルトの名無しさん
12/03/08 22:20:58.13
>>543
何がわからないの?
545:デフォルトの名無しさん
12/03/08 22:24:19.73
>>543
何も考えずにやれば、こう
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lastrow
If Cells(i, "P").Value = 1 Or Cells(i, "P").Value = 9 Then
Cells(i, 17).Value = Now
End If
Next
ただし、Worksheet_Changeでこれやっちゃうとループするので
違う所でやるか、変更箇所のチェックしてQ列なら変更しないとかの工夫が必要
546:デフォルトの名無しさん
12/03/08 22:26:58.87
だからP列に1又は9を入れた時、その横に当日日付を入れたい
で、どう書けば良いのか?って聞いてんですけど
547:デフォルトの名無しさん
12/03/08 22:31:28.83
リロードしてなかった。。。
>>545
ありがとうございます。
それを元にまた勉強してみます
548:デフォルトの名無しさん
12/03/09 00:27:00.69
結構ggったのですが解決しないのでどなたかご教授ください!!
if
以下の3セルの内容が数字(全角・半角)でないとき
処理Aを行う
Sheet1.Cells(y, x)
Sheet1.Cells(y, x+1)
Sheet1.Cells(y, x+2)
else if
Sheet1.Cells(y, x)のみが数値(全角・半角)でないとき処理Bを行う
という処理を掛けたいです。
別の言い方をすると、セルが文字・全半角スペース・空の時に処理を掛けたいです。
If not と IsNumberで出来ると思いきや上手くいってません。
お願いいたします。
549:デフォルトの名無しさん
12/03/09 00:27:09.17
>>545
cells(i,16)で書くよりCells(i,"P")で書いたほう
列が非表示だったら時便利ね!とか、関係ないことをオモタ
550:デフォルトの名無しさん
12/03/09 01:08:49.15
With Sheet1
a = StrConv(.Cells(y, x), vbNarrow)
b = StrConv(.Cells(1, x + 1), vbNarrow)
c = StrConv(.Cells(1, x + 2), vbNarrow)
End With
If IsNumeric(a) = "False" And IsNumeric(b) = "False" And IsNumeric(c) = "False" Then
処理A
End If
If IsNumeric(a) = "False" And IsNumeric(b) = "true" And IsNumeric(c) = "true" Then
処理B
End If
ベッタベタでよければ どうぞ。
551:デフォルトの名無しさん
12/03/09 01:15:04.82
>>550
ありがとうございます試してみます!!
IsNumeric IsNumberの使い方もあまりわかっていなかったので助かりました。
552:デフォルトの名無しさん
12/03/09 02:42:06.08
>>550
IsNumericはBooleanなんだが、なぜ文字列で判定する?
ちなみにIsNumericは、全角の数字でもTrueの判定するから、StrConvする必要はなかったりする
指数表記も認めたりするから、数字の定義によっては注意が必要
553:デフォルトの名無しさん
12/03/09 03:03:03.65
>>552
””いらないね。あっても動くけど。
If not IsNumeric(a) And not IsNumeric(b) And not IsNumeric(c)
で書いてたんだけど、解りにくいかと思ってやった。
今は反省している。
全角の数字判定は知らんかったわ。便利ね。
ありがとう
554:デフォルトの名無しさん
12/03/09 23:40:36.42
VBAは、無くなるの?
555:デフォルトの名無しさん
12/03/09 23:51:09.95
それは目出度い
556:デフォルトの名無しさん
12/03/10 00:40:01.35
JSサポートするという噂話だけ
557:デフォルトの名無しさん
12/03/10 01:21:54.25
VBAにJavaScript???
558:デフォルトの名無しさん
12/03/10 16:17:05.72
1行につき2シートずつ追加するマクロ(簡単に言うと)があります。
これが、72行ぐらいになって、シート数が159を超えたあたりから、シート追加の
「Copyメソッドが失敗しました」とエラーになります。
実際、そのブックでそれ以上シートを追加しようとしてもできません。
ググってみたところ、シート数に上限などはないようですが、メモリに依存するようです。
1枚1枚のシートは、それほど情報量はないのですが、Vlookup関数を多用してますので、
それもメモリを食っているかもしれません。
シート名も、平均22文字ぐらいあって、とても長いです。
一連のマクロは、一度も保存せずに、メモリ内だけで行っています。
データは、60行~80行ぐらいまである時もあり、一括管理できるようにするため、
やはり1つのファイルに収めるのが理想的ではあります。。
どうすれば、このエラーを回避できるでしょうか?
559:デフォルトの名無しさん
12/03/10 17:53:10.37
それってあるデータを見栄えのいいように整形するためにシートを作ってるって解釈でいいの?
560:デフォルトの名無しさん
12/03/10 18:26:11.05
試したけど、空白シートをただ追加するだけなら5000シートでも問題なかった
Excel2007 on Win7
シート毎の有効行やvlookupなど、少しずつ条件を変えて状況が変わるか試してみたら?
原因が特定できれば対処も考えやすいと思う
561:デフォルトの名無しさん
12/03/10 19:17:20.06
まず数百もシート作るっていう設計を考え直した方がいいんじゃないかと
562:デフォルトの名無しさん
12/03/10 21:48:45.31
ここは64bit版の出番だな。
563:デフォルトの名無しさん
12/03/10 22:17:58.69
Range("A1").Characters(Start, Length).TextのLengthに256を超える数値は指定できないんでしょうか?
257以上を指定したらCharactersクラスのTextプロパティを取得できませんってエラーが出るんです…
564:デフォルトの名無しさん
12/03/10 22:42:09.93
>>563
うちの2007ではちゃんと動いてる
環境かけ
565:デフォルトの名無しさん
12/03/10 22:49:30.49
>>564
Windows7 64bit版、Excel2010 32bit版です。。
566:デフォルトの名無しさん
12/03/10 22:52:16.01
ntの頃は、鯖と普通のやつの違いがレジストリのどっかが違うだけだったネタがあったな
567:デフォルトの名無しさん
12/03/10 22:53:02.68
>>566 誤爆
568:デフォルトの名無しさん
12/03/10 22:54:11.13
今試したらRange("A1").Characters(Start, 257).Font.Bold = Trueとかは動くのに
Textプロパティだとエラーが出てしまいます。。
やりたいことはTextプロパティを使わなくてもできるので別の方法考えてみます。
569:デフォルトの名無しさん
12/03/10 23:03:29.53
>>568
Length=256なら本当にOKなの?
570:デフォルトの名無しさん
12/03/10 23:07:39.75
>>569
MsgBox Range("A1").Characters(1, 256).Text
MsgBox Range("A1").Characters(1, 257).Text
の両方を試して256はOKでした
571:デフォルトの名無しさん
12/03/10 23:11:18.10
>>570
うちは同じ環境だけど、エラーでない
572:デフォルトの名無しさん
12/03/10 23:15:31.25
>>571
ですよねぇ・・・
今までもRange("A1").Characters(Start, Length).Textという書き方は何度もしてきたと思うし
こんなエラーに出会ったことがないので、たぶん私が何か見落としてるんだと思います。
もうちょっと調べてみます。ありがとうございました。
573:デフォルトの名無しさん
12/03/10 23:22:58.34
質問です。
今、ウインドウ枠の固定を使って、上から3行だけを固定で表示させるようにしています。
この固定部分にボタンを配置して、マクロを登録しようと考えています。
それで、ホイールを回せば4行目から下が上下にスクロールするわけですが、ホイールを
回して下に適当にスクロールさせて、固定部分のボタンを押す。
そうすると「画面に表示されている」上から4行目のセル番地を取得する。
そういうマクロを作成したいんですが、これは可能でしょうか?
すみませんがよろしくお願いします。
574:デフォルトの名無しさん
12/03/10 23:33:19.28
>>573
MsgBox ActiveWindow.ScrollRow + 3
575:デフォルトの名無しさん
12/03/10 23:42:17.38
>>574
おお!できた!
多分できないかなーと思ってたんで嬉しいです。
ありがとうございました。
576:デフォルトの名無しさん
12/03/11 00:33:01.82
>>572
うちの2007でも、TextやCaptionを取得しようとするとエラーになるな
でも設定してもエラーにならずに正常に動く
Dim c As Characters
Set c = Range("A1").Characters(0, 260)
MsgBox c.Text 'ここでエラー
おかしいのはRange.Charactersメソッドじゃなくて
CharactersクラスのTextメソッドだな
エラーのMsgBoxの行を変えてテストした
c.Text = String(25, "W") 'これは正常に動作
c.Text = String(250, "W") 'これはエラーは出ないが動作してない
c.Text = String(256, "W") 'これはエラー
どうも怪しげな動作してるな
577:デフォルトの名無しさん
12/03/11 02:56:35.77
Excelってなんでもできるんだなー
Excelで
578:デフォルトの名無しさん
12/03/11 04:55:25.47
それは無理
579:510
12/03/11 09:10:27.01
誰か>>510 知ってる人いませんかね。
OSはXPでエクセル2002です。
580:デフォルトの名無しさん
12/03/11 09:39:05.54
フォームの場合、エクスポートしたファイルには
フォームやそこに配置したコントロールのプロパティと
プログラムコードが1つのファイルに書かれているわけだが
インポートしたときにプロパティ領域とコード領域を分ける空行部分が
コードエディタ側に読み込まれるってだけの話だろ
581:デフォルトの名無しさん
12/03/11 09:45:34.73
>>580
分かりやすい回答ありがとうございました。
582:デフォルトの名無しさん
12/03/11 10:09:37.71
え、formってimportできるんすか?!!
この前 outportしてそのままimportしたら、class moduleになったので、もうてっきり無理なんだと。。。
583:558
12/03/11 14:30:33.27
>>559
ええと、業務用です。
取引先ごとに、表紙と帳票をセットにして、FAXするのですが、今までは帳票だけを
ガーッと保存もせずに、シート追加して作成するマクロがあって、別にFAXの表紙だけを
まとめたExcelファイル(取引先300件分のシートがあって、3,3Mくらいのファイル)
の中から、該当の取引先宛の表紙を探して、総FAX枚数や、帳票内の集計数なんかをちょちょっと
直して、印刷して、帳票とマッチングしてFAXしてたんですが、データ(取引先)が
72件もあると、結構2時間ぐらいかかる作業なんです。
この仕事を引き継いだ、元ヘタレPGの私としましては、なんとしてもマクロ化
しちゃいたい衝動にかられまして、FAX表紙は、ざっと3パターンしかなかったので、
取引先を一覧にして、表紙のテンプレに、Vlookup()で引っ張ってきて、
表紙と帳票とセットでシート追加するようにマクロを組んだんです。
そうしたらこのエラーです。
まあ、限界に挑戦するマクロだとは思うんですが、、元々の量の倍になってる
訳だし、、やっぱりファイルを分けるしかないのかな・・。
メモリを食ってる部分が、VlookUPなのか、シート名なのか、それともファイルを
保存してないせいなのか、ある程度でも分かれば、そこを対処してから、ファイルを
分ける方向で行こうかと思って質問させて頂いた次第です。
ひょっとしたらスレチかもしれませんが・・・。
584:558続き
12/03/11 14:31:55.26
計算式より、値が入ってた方がExcelのメモリは食わないんでしょうか・・・?
ちなみにファイルサイズは、2.3Mくらいです。
ここ↓
URLリンク(oshiete.goo.ne.jp)
で、詳しく説明して下さってる方がいるんですが、ここでいう、「配列数式」や
「揮発性(volatile)関数」ってのが何のことなのか、いまいち分かりません。。
VlookUPのことなのか?だとしたら、VlookUPをマクロでやってしまった方がいいんだろうか・・・
長々とすみません。お知恵をお貸しくださいますと幸いですm(_ _)m
585:デフォルトの名無しさん
12/03/11 14:38:02.97
vlookupでもシートでも話聞く限り、そこまでメモリ食う感じがしない
顧客名全部仮の名前にして、FAX表紙も適当なものに差し替えてファイルアップすれば
もっと具体的なアドバイスもらえるんじゃないかな
586:558
12/03/11 14:51:48.85
>>585
ありがとうございます。
ファイルは会社にあるので、アップするとしたら明日以降になりますが・・・。
最初のシートに、全ファイルの目次を作って、目次から、各シートに飛べるように
ハイパーリンクを組んだんですが、ひょっとしたらそれがいけなかった・・・?
VBA初めてなので、ソース見ていただいた方がいいかもしれませんね。。
587:デフォルトの名無しさん
12/03/11 15:01:52.27
あと、エラーがでた環境も詳しく
OS、Excel、メモリ
588:558
12/03/11 15:16:02.07
>>587
了解しました!(OSはXP、Excelは多分2003・・・)
589:デフォルトの名無しさん
12/03/11 15:56:09.31
Vista.sp2,Excel2000
新しいExcelで,Excel2000のソートコードが動くでしょうか
使っているコードです
sh2.Range("e9").Select
Rows("11:45").Select
Selection.Sort Key1:=Range("A11"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
sh2.Range("e9").Select
590:デフォルトの名無しさん
12/03/11 16:18:23.96
>>589
動くよ
591:デフォルトの名無しさん
12/03/11 16:38:44.83
>>590
ほんとにありがと
592:デフォルトの名無しさん
12/03/11 16:45:48.72
VISTA Excel2007
微妙にスレチっぽくて恐縮なのですが…
ExcelからADOでAccess2010ファイルに接続したいのですが
udlファイルを作成して、ダイアログでProviderとData Sourceを指定、接続テストも通るのに、
いざ次のコードでそのudlファイルを指定するとエラーになります
([ODBC Driver Manager]データソース名および指定された既定のドライバが見つかりません)
原因分かる方いますでしょうか
ADODBCon.Open UDL01_fPath
またExcelVBAでudlファイルのProviderの値の取得方法ってあるのでしょうか?
Data Sourceの値は以下のコードで取得できたのですが、Provider値の取得方法が分かりません
以下のコードでData Sourceの部分をProviderに置き換えてもエラーに
With CreateObject("ADODB.Connection")
.ConnectionString = "FILE NAME=" & UDL01_fPath
DB_FPath = .Properties.Item("Data Source").Value
End With
以下、udlファイルの中身です
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test\DB\Database1.accdb;Persist Security Info=False
593:デフォルトの名無しさん
12/03/11 16:57:24.25
補足
UDL01_fPath ’udlファイルのフルパス
udlファイルにアクセスする前に、udlのData Sourceに格納されたDBファイルの
存在チェックを入れており、その部分ではエラーがないので、
Providerの指定でエラーが起きてると思うんですが分かりません
最初はudlファイルのProviderとData Sourceの値をコード内で指定していたのですが、
その時はエラーはありませんでした
その時の値とをテキスト上にコピーして文字列を比較しても差異はありませんでした
594:デフォルトの名無しさん
12/03/11 19:42:42.20
>>592
なんか良くわからんが、たぶん
ADODBCon.Open "FILE NAME=" & UDL01_fPath
MsgBox ADODBCon.Provider
595:デフォルトの名無しさん
12/03/11 19:59:57.96
>>594
ありがとうございます!!
うまくいきました
こんな見落としで何時間も浪費していたなんて自分が情けない
596:デフォルトの名無しさん
12/03/12 16:09:38.74
以前、>>447でカラーパレットについて質問したものです。
ユーザーフォームにボタン表面の色を変えたものを複数並べる
ことによって色を選ぶようにしました。
ボタン一つ一つのクリックイベントにコードを書いたのですが、
イベントの共有やどのボタンが押されたかを識別することによって
コードを簡素化したいのですが、VBAでそういったことは可能でしょうか?
ググったのですが、ブックの共有などの情報ばかりで検索しきれなかったので、
どなたか教えてください。
よろしくお願いします。
597:デフォルトの名無しさん
12/03/12 18:41:11.31
application.caller で出来たっけ?
598:デフォルトの名無しさん
12/03/12 19:51:06.54
オートフィルタをかけた抽出結果のタイトル行を除いた最初の行の、二番目の列から、
データの入っている有効セル全てをコピーするにはどうすればいいでしょうか?
599:デフォルトの名無しさん
12/03/12 20:13:22.36
こんばんあ!しつもんだお!
for nextの後にcallでquerytable.addすると処理固まってしまうのですが、どうすれば良いですか?メモリとかバッファとかよくわかりません
600:デフォルトの名無しさん
12/03/12 20:17:12.27
すいません。
VBAで32bit符号無し演算をしたいんですが、型がlongじゃダメです。(当然)
どんな技を使えば良いですか?
601:デフォルトの名無しさん
12/03/12 21:01:49.30
>>596
Part17で似た質問をして、カラーパレットをクラスモジュールを使って作成したことがあります。
できてはみたものの、クラスモジュールはよく分かりませんでした。
VBやC#なら、どのイベントにどのプロシージャを結びつけるかをプロパティウィンドウで
簡単に設定できるようになっています。
VBAではそういう使い方は向いていないのではないか、と思います。
602:596
12/03/12 21:49:46.96
>>597,601
ありがとう。
Application.Callerをググったら、どの例もシート上のボタン等を調べるみたいで、
ユーザーフォーム上のボタンのクリックイベントでは使えないみたいです。
URLリンク(detail.chiebukuro.yahoo.co.jp)
ここを見ても、601さんが書かれているように気軽にできる感じではなかったので、
ボタンのtagプロパティにカラーコードを書いておいて、activecontrolで識別するようにしました。
603:デフォルトの名無しさん
12/03/12 23:05:54.84
>599
Long型でユーザー定義変数を作成し、
LSetステートメントで強制的に2つのLong型に分割。
2つのLong型を下位32bitと上位32bitで別々に計算し、
計算後に改めてCurrent型にLsetステートメントで合体。
という方法がある。
「VBA currency型のビット演算」でググるとよろし。
604:デフォルトの名無しさん
12/03/13 12:18:48.28
>>603
ちょーthx.
605:デフォルトの名無しさん
12/03/13 19:30:37.29
Excel2010
bookname = "D:\data\backup\data_xxxxxxxx.xlsx"
xxxxxxxxxx は作業日付
Worksheets("data").Copy
With ActiveWorkbook
.SaveAs Filename:=bookname
.Close
End With
としてdataシートを別ブックに保存しようとすると、このシートには
Activateになった時に作業をするモジュールがついていて xlsxでは
保存出来ないとExcelに言われてしまうんですが。。。
保存する際にモジュールは要らなくデータだけで良いんですけど
どうすればモジュールを切り離して保存出来るんでしょうか?
606:デフォルトの名無しさん
12/03/13 19:41:52.71
>>605
今、手元にExcel2010が無いんで自信ないけど、
.SaveAs Filename:=bookname, FileFormat:=xlOpenXMLWorkbook
とかでどうだろ?
明日会社行けば試せるんだけど・・・
607:605
12/03/13 19:59:10.22
すごい!
出来ました。
そのFileFormat指定は初めてです。
ありがとうございます。m(__)m
608:デフォルトの名無しさん
12/03/13 20:32:15.03
はろー。ループするとき処理待ちするにはどうすればいいですか?
609:デフォルトの名無しさん
12/03/13 20:36:33.61
「こんばんわ、処理町隆史です」という。
610:デフォルトの名無しさん
12/03/13 20:43:21.74
おれがずっと探し求めていたのはジャーマンスープレックスもといドゥーイベントカンスーだったようだ…
611:デフォルトの名無しさん
12/03/13 21:55:34.65
>>608
DeEvents
612:デフォルトの名無しさん
12/03/13 22:05:09.05
OS:XP Home 32bit
Excel:2003
条件を満たした場合、ソースコード自体を書き換える事は可能でしょうか?
613:デフォルトの名無しさん
12/03/13 22:24:36.95
>>605-607
Application.DisplayAlerts = False
でいいんじゃないのか
614:デフォルトの名無しさん
12/03/13 22:29:45.74
>612
できるけど、OSやExcelのバージョン違いに対する対応なら
#If~#Then~#EndIfや#Constの条件付きコンパイルを使うほうがよい。
どうしても書き換えしたいなら、参照設定で
「Visual Basic for Applications」に参照設定をすれば
VBEのコードそのものを直接VBAで動かせるようになる。
615:デフォルトの名無しさん
12/03/13 22:35:10.19
>>613
Application.DisplayAlerts = False
↑
これは単にメッセージ出すのを抑制するだけですよ?
616:デフォルトの名無しさん
12/03/13 23:37:57.80
>>615
xlsxで保存したらマクロは保存されない
警告なしで保存できるんだからそれでいいだろ
617:デフォルトの名無しさん
12/03/13 23:53:25.53
>>613,616
なるほど。そういう手もあったんですね
618:デフォルトの名無しさん
12/03/13 23:55:37.82
>>615
↑
お前がずれてますよ
605もアホだがエスパーすると…
…
…
…
警告なしに保存したいということだろ
だからDisplayAlerts=Falseが合っている
FileFormat指定が的外れ
警告はxlsxで保存するとマクロは保存されませんよ
ってことだからな
619:586
12/03/14 01:29:08.85
とりあえず、「Copyメソッドが失敗しました」のエラーが起こる簡易版のファイルを
作成しました。
URLリンク(www.vivi-loda.mydns.jp)
DLkey:asd
test1の方で実行しても、test2で実行しても、
こちらの環境(Win7 HomePreminum SP1(32ビット版)、Excel2003 SP3、メモリ3G)
だと、44シート追加したあたりで、当該エラーが出ます。
このファイルだと、マクロではエラーが出るものの、手作業でシート
追加はできますが、とりあえずこのエラーを回避したいです。(できるものなら)
ちなみにこのマクロを実行すると、一時的にPCが重くなったりするので、お気をつけください。
よろしくお願いいたします。
620:デフォルトの名無しさん
12/03/14 02:19:08.42
>>619
自分の環境ではエラーにならない
Win7 Ultimate SP1 (64bit) メモリ8GB、Excel 2007 SP2
621:デフォルトの名無しさん
12/03/14 03:45:17.31
>>619
Vista Ultimate SP2 32bit Excel2007 SP3もエラーなし
ちなみにシート500まで追加させても問題なし
2003の問題か、PCの問題だな
昔ディスプレイドライバー辺りのバグでExcelでメモリ不足出たことあったが
つかWin7でExcel2003とか動作保障あるのか
622:デフォルトの名無しさん
12/03/14 04:00:24.00
>>619
流れ読んでないけど、ワークシートのコピーは複数回実行するとマクロでなぜかエラーになる現象がある。
標準のワークシートをコピーする関数を使うのはやめて、「ワークシートを追加→セル全体をコピー→ペースト」
という関数を作っておくと楽。
623:622
12/03/14 04:19:36.65
ちなみに >>619 のファイルを実行したらうちの環境
・Win7 Ultimate XP SP3 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x86 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x64 / Excel 2003 SP3 / メモリ8G
でも「実行時エラー '1004':
Worksheet クラスの Copy メソッドが失敗しました。」は出ます。
(エラーが発生する回数はランダム)
念のため確認ですが、手作業で「シートの追加」はできても「シートのコピー」はできないですよね?
で、ファイルを開き直すといったん復活して、再度実行すると同じ感じでエラーになる(毎回エラーに
なる回数は違う)ってやつですよね?
というよりか、マクロを使わないでも手動で何十回もシートをコピーすると、シートがコピーできないが
シートの追加はできるという現象は発生します。標準のシートコピーは使わないのがよいと思われます。
でも、この現象ってExcel 2007だと発生しないのか。知らなかった。
624:622
12/03/14 04:22:25.46
Win7 Ultimate XP SP3ってなんだ?そんなOSネーヨ(^_^;)
Win XP SP3の間違いです・・・。
625:デフォルトの名無しさん
12/03/14 06:50:26.27
外部音源やMIDIデバイスを使わずにbeep音をディストーションギターの16和音にするにはどうすればいいでしょうか
626:デフォルトの名無しさん
12/03/14 06:59:09.15
URLリンク(oshiete.goo.ne.jp)
No1参照
627:デフォルトの名無しさん
12/03/14 12:09:50.35
縦のrangeを横のrangeにコピーするにはどうすれば良いですか
628:デフォルトの名無しさん
12/03/14 12:30:24.18
>>627
マクロを記録してみろ
629:デフォルトの名無しさん
12/03/14 17:08:15.94
範囲指定して数値のセルのみ抽出するにはどうすれば良いですか