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


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

●EXCEL・VBAの教えてスレ Part2●



1 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 11:14:15 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

OOoのCalcの質問もOKです

前スレ
pc10.2ch.net/test/read.cgi/tech/1054356121/


170 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 11:50:05 ]
計算問題を自動で作って答えあわせをするコードとか
100マス計算とかできるんじゃない?
でもそういうなのはネットを探せばいくらでも出てくるような気がする。

171 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 12:30:10 ]
>>170
数学を図式化して理解しやすくするのは良いが

それは駄目だろ、餓鬼に頃は紙に文字を書いて計算しないと馬鹿になるぞ

172 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 12:31:00 ]
>>170

173 名前:デフォルトの名無しさん [2007/02/04(日) 14:19:00 ]
あるExcelファイルを日付が変わったら自動起動させるようにするには、
どんな感じで実現したらよいのでしょうか・・?

日の定型処理をしているのですが、
忘れてしまう事が多々あるので自動化したいです。

174 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 14:53:15 ]
>>173
そんな曖昧な条件でどうしろと?
「あるExcelファイルを日付が変わったら自動起動」という条件だけなら
OnTimeで0:00にブックを開くプロシージャを呼ぶだけだが、実際にはOnTimeが使える
状況では無いだろうし、ブックを開くのも「日付が変わったら=0:00」では困るのでは?

条件はエスパー以外の第三者にも伝わるように、日本語できちんと書こう。

175 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:00:57 ]
多分タスクでOK。つまり、VBA云々ではなくWindowsの使い方の問題。

176 名前:デフォルトの名無しさん [2007/02/04(日) 16:00:52 ]
excel4.0専用のスレが見当たらないのでここで失礼します。
excel4.0のマクロって最近のexcelでも当時と同じように記述できるの?
なくなったマクロ関数や文法の変更なんかはないのかな?

たとえば『=select(シート名!R[1]C[1])』と記述して実行すると、
目的のシートのアクティブセルではなくマクロシートのselect関数が
記述してあるセルから1行下で1列右のセルを選択してしまう。
これはexcel側の仕様変更によるものじゃないよね?
もし記述の間違いによるものだったら正しい書き方を教えて。

177 名前:173 mailto:sage [2007/02/04(日) 19:26:01 ]
>>174
すいません。今週末から勉強を始めたので理解が足りないかもしれません。
Webクエリを用いてあるHPの表データを取得し統計処理をしています。
統計処理はそのExcelファイルを起動すれば実行できるよう実装済。

そのHPの表データは00:10頃に日々更新されているので毎日実行したいです。
そこでこの時間がきたら自動的にExcelファイルを起動する方法は、
どうやるのかなと質問してみました。
よくウイルス等で特定の時間が来たら挙動するようなものもあるし、
出来ない事はないなだろうと。

実行条件は時間以外にも色々ありますがFlagや分岐をつけたりすれば、
何とかできるだろうという事で今回は質問しませんでした。

Googleで「VBA 自動起動」等と検索しても条件が悪いらしく、
上手く引っかからないのでキーワードだけでももらえればと思いました。
これ以上は上手く説明できません。ごめんなさい。

>>175
あっありがとうございます。
VBAではなくそんな方法だったんですね。
書き込み後の検索中にAccessで似たような質問にヒットした時、
APIでスケジュラーに・・なんて記述があったので、
関係あるのかと思っちゃいました。

178 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 21:35:03 ]
>>177
スタートボタンから、ヘルプとサポートをクリック、テキストボックスに at っていれてみ。
出てくるから
スレ違いな話になってしまうんでこれでやめるけど。



179 名前:デフォルトの名無しさん [2007/02/04(日) 22:14:27 ]
誰か教えてください。
仕事で ある一定の条件を満たすレコードを足していくプログラムをかいたのですが、数字がおかしくなります。
例えば、足す数字が15.1 80.6 30.4となると出た数字が126.100015239みたいな数字になります。
これはなんでなんでしょうか?

180 名前:デフォルトの名無しさん [2007/02/04(日) 22:43:27 ]
小数点の演算というのは、CPUの仕組み上誤差が出るものなのだ。

仕組みや理由についてはは、「浮動小数点 誤差」とかでググるとそれっぽい解説のされてるとこがでるのでそこで確認してください。


Excelのシート上で、その見た目をどうにかしたければ、セル書式の設定で小数桁数1桁だかなんだかにすればよいです。

181 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 23:35:39 ]
浮動小数点演算をIF文なんかで条件処理する場合
=つかっちゃ駄目なんだよなぁ

182 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 01:29:53 ]
基本的に割り算もだめですね


183 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 08:09:20 ]
整数値の割り算の場合は/でなく
¥(商) Mod(余り)を使えばなんとかなる

184 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 10:48:46 ]
いま正規表現の検索フォームを作ってます
検索対象をusedrangeで取得してfor eachでまわしてます。
これで動作は問題ないのですが、対象が多いと時間がかかってしまいます。

そこで、rng=usedrangeと配列に代入して高速化しようとして問題にぶちあたりました。

配列に代入されるのがValueっぽいので、
セルに10:00の様に時間や日付が入っている場合
longになるので検索文字が10などと一致しません。

usedrang.textとして代入すると空になってしまいます。
配列に代入された文字の表示形式を調べて変換することも考えたのですが、
現状と大差ない感じがします。

シート上に表示されている値をまとめて配列に代入する方法か代替案がありましたら
ご教授おねがいします。


185 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 10:53:50 ]
クエリー

186 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 11:05:11 ]
txt→CSV変換でなにか、いいサンプルコードないですか?

入力ファイル:oder.txt
出力ファイル:任意.csv
csvに出力する時、元のtxtから不要データの排除と任意条件での集計

VBAかVBSで出来そうと思いいろいろ本読んで見たけど
いかんせんCobolerなので、よくわかっとりません

187 名前:デフォルトの名無しさん [2007/02/05(月) 11:09:25 ]
元のテキストファイルのフォーマットはどのようなものですか?
固定長?

188 名前:デフォルトの名無しさん [2007/02/05(月) 11:36:51 ]
Public Sub TextToCSV(ByVal pInPath As String, ByVal pOutPath As String)
Const C_DELIM As String = "," '区切り文字
Dim s As String:Dim s2 As String:Dim ss() As String
Dim fnoIn As Long: Dim fnoOut As Long

'ファイル開く
fnoIn = FreeFile: Open pInPath For Input As #fnoIn
fnoOut = FreeFile: Open pOutPath For Output As #fnoOut

'ファイル終了まで繰り返し
Do While (EOF(fnoIn))
'1行読み出し
Line Input #fnoIn, s
'特定のバイト位置に区切り文字を入れた文字列を作成する。
'イメージ000001111122222⇒00000,11111,22222
s2 = Mid(s, 1, 5) & "," & Mid(s, 6, 5) & "," & Mid(s, 11, 5)
'区切り文字が入った文字列をSplitで配列に出力
ss = Split(s2)
'各要素のチェックをする
If ss(0) = "99999" Then GoTo LOOP_NEXT
'ここまで来たら大丈夫のようなのでカンマ入り文字列(s2)CSVに出力する
Print #fnoOut, s2
LOOP_NEXT:
Loop
Close #fnoIn: Close #fnoOut
End Sub




189 名前:デフォルトの名無しさん [2007/02/05(月) 11:37:36 ]
あータブとか消されてしまうのか。見づらいな。

190 名前:186 mailto:sage [2007/02/05(月) 15:09:56 ]
>>187
固定で102byteです。
得意先がいい加減で、仕様も手探り状態なもので(泣

>>188
ありがとうございます。
このコードを参考にして、試行錯誤してみます。



191 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 17:01:11 ]
>>190
得意先に仕様書無いと作れないと言えばいいじゃん。

192 名前:186 mailto:sage [2007/02/05(月) 18:04:31 ]
>>191
言ったよ゚・(つД`)・゚・
普段もらっている受注データとは別のもので。。。
特殊なパターンで、これしか渡せないと言われた。
txtデータと口頭で言われた項目(どこまでが**で**byteで、とか)だけ。
結局、自分たちで解析するしかなくて。。。
ホストのマスターに落とす必要ないのでVBSかAccessの類で出来ないか
考えてたんです。

ちなみに得意先はホ●ダ技研鈴鹿工場です
バイクも車もホ●ダだが、こういう体質は好かん!

193 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 18:10:10 ]
大丈夫、他も似たようなもんだ。

194 名前:デフォルトの名無しさん [2007/02/05(月) 20:11:48 ]
>>180>>181>>182>>183
激しく感謝です。やっぱだめなんですね・・・^^;

195 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:04:29 ]
>>194
つか<、>で範囲チェックすりゃいいじゃん

196 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:09:03 ]
>>195
それはやっちゃダメ
結果的に同じでもコード的に意味が違ってしまう
つまり可読性を損なう

197 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:18:55 ]
>>196
どうしても出来ないときは
いいじゃんコメント書いとけばいいんだから

全部そんなプログラム組んじゃいけないけど


198 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:20:09 ]
後は10とか100でかけて整数値にするかだな



199 名前:184 mailto:sage [2007/02/05(月) 21:59:21 ]
>>185
俺にたいするレスと受け取っていいんですよね?

色々検索して
ttp://www.microsoft.com/japan/technet/scriptcenter/resources/officetips/jun05/tips0607.mspx
を参考にしてテストしてみたんですが、
やっぱり時間とかはきちんと取得できないんですけど、
(セルに10:00といれておくと0.5になる)
これじゃないんでしょうか?

申し訳ないんですが、検索キーワードなど教えていただけると
助かります。

いや、助けてください

200 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 22:41:49 ]
Dim tm As Date
Dim buf As String
tm = Cells(0, 0)
buf = Format(tm, hh:mm")

これで普通の文字列になるがな


201 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 22:42:29 ]
buf = Format(tm," hh:mm")


202 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 22:45:10 ]
更にtmだけでも応用すりゃ検索もできる

203 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 23:08:56 ]
>>200-202
おまえ、バカだろ。文字列にする方法なんてこの際問題じゃない。そんなの簡単に解る。
君のやり方で文字列化するなら、その前にその値が元々どういう表示形式で表示されていたか判断しなきゃならないんだよ。

そして>>184
> 配列に代入された文字の表示形式を調べて変換することも考えたのですが、
とあるから、君の考えた方法は既に変わりきってる上で、表示形式をいちいち調べて文字列に変換してたら
ValueではなくTextプロパティをループで読むのと大差ないってこった。

204 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 23:14:58 ]
>>203
いや
>>10:00といれておくと0.5
と言う単なるヒントだ、そのまま使ったら馬鹿だが

205 名前:デフォルトの名無しさん [2007/02/06(火) 00:15:27 ]
10:00といれておくと0.5になるなら
逆に検索値を時間の場合10:00なら0.5にすりゃいんじゃねぇ?

206 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 00:35:33 ]
それだと時間じゃない0.5もヒットするわけで

207 名前:デフォルトの名無しさん [2007/02/06(火) 01:07:40 ]
データベース使っても結局Value値がセットされると・・・
0.5でヒットしたらセル見にいって属性しらべたら?
少しはマシかも、0.5とかいっぱいあったら終わりだけど

208 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:23:47 ]
Findじゃ遅いの?



209 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:27:24 ]
findじゃだめなんだよ

210 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:32:58 ]
あとはクエリ使って、ここで答えでないんなら
データベース関係のスレで聞いてみたら?

211 名前:184 mailto:sage [2007/02/06(火) 01:35:12 ]
色々なレスありがとうございます。
最初の書き込みが携帯からで、内容をはしょりすぎて誤解があるようなので再度書き込みます。

A列)日付 B列)曜日 C列)作業名 D列)開始時刻 E列)終了時刻 F列)処理時間 G列)備考
が入っている複数のシートから正規表現で検索をしたいと思っています。

今の簡単なコードを書くと

Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = strPattern
.IgnoreCase = True
.Global = True
end with
For Each sh in Thisworkbook.Sheets
For Each rng in sh.UsedRange
If reg.test(rng.Text) Then
検索文字列が見つかったときの処理
Debug.? "[address]" & rng.Address & " [text]" & rng.Text & " [Formula]" & rng.Formula
End If
Next
Next

といった流れなのですが、検索対象が大量にあり処理に時間がかかってしまいます。(対象30万件で5分くらい)
そこでFor Each rng in sh.UsedRangeをやめて、rng = sh.UsedRangeのように
配列にして、検索しようとしたところ、日付や時間(表示形式は[h]:mm)がLong型になるため
srtPattern = "10" などに10:00などが該当しなくなります。
rng = sh.UsedRange.Formulaは代入がうまくいくのですが、rng = sh.UsedRange.Textはできないようです。

列ごとに時間や日付が入っているなら、そこだけ変換すりゃいーだろ、と言われそうですが
列がずれた場合や新たに項目が増えた場合を考えて、決め打ちで変換するのは出来れば避けたいと考えています。
説明下手ですいませんが、高速に処理する方法がありましたらご教授お願いします。

212 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:39:00 ]
件数多いなぁ、確実にデータベース使った方が良いと思うよ
漏れはやり方わからんが

213 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:42:57 ]
>>列がずれた場合や新たに項目が増えた場合を考えて
列のセルに名前付けりゃいいんじゃないの?

214 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 01:56:50 ]
> 列がずれた場合や新たに項目が増えた場合を考えて、
2行目(実データの1行目)の表示形式に合わせるって手もある
30万回表示形式取得したら相当遅くなるだろうが、列数分(現状7回)だけなら殆ど気にならないだろ

215 名前:たのんます [2007/02/06(火) 02:00:54 ]
エクセルに関する質問なんですが
統計数字データをグラフに変換して、統計データによるグラフを作成する際に
統計データの始点と終点を同じにして、重ねて比べられるようなグラフにしたいのですが
統計データの量が、比較したいAとBでは異なるため、
始点終点を同じにして、重ねて比べることができません。
何か関数とかその他の方法で、
違うデータ量のものを重ねて比較する方法はないでしょうか?

216 名前:184 mailto:sage [2007/02/06(火) 02:08:44 ]
書き忘れましたが、正規表現を使いたい理由は作業名が入力者により、まちまちなのでまとめて検索したいからです。
誤)日付はDate型ですね。すいません。
  0.5は12:00でした。すいません。

いま>>199のリンク先のコードを改良してテストしてみたら、
10:00とかはちゃんと取れますね(表示10:00→取得値10:00:00でした)
ただ24時間を越えるとダメみたいです(表示28:00→取得値1900/01/01 4:00:00でした)
日付も表示が1月1日でも2007/01/01でした。
何か指定する方法があるのかもしれませんが…

>>208
Findって正規表現使えましたっけ?調べてみます

>>210
なにぶんADOとか初めてなんでもう少し
ttp://support.microsoft.com/?kbid=257819
とかを見て勉強してみます。

>>212
俺もそう思います

>>213
名前を定義なども考えましたが、名前=範囲な訳で新規に項目が増えた場合にはコードを追加し
範囲別にコードを書かなければいけないので、試してません。
条件分岐で範囲(名前)別にコードを書く必要もないかもしれませんが、
ただでさえ件数が多く時間がかかるので、極力条件分岐などの処理をいれたくないので。

>>214
それは考えつきませんでした。試して見たいと思います。

色々ありがとうございました。自分でも試行錯誤してみようと思います。

217 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:16:11 ]
>>216

Date型 は日付と時間一緒ですよ(小数点以下が時間)

>名前を定義
範囲で名前付けるんじゃなく、1行目の1セルに名前付けて
呼び出せば行位置と列位置が分かる 列位置分かればなんの行か分かるでしょ


218 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:19:39 ]
>>217

>名前を定義
と書いていて複数シートじゃ駄目だね・・・



219 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:20:11 ]
>>215
あるけどマルチしたので教えません

220 名前:たのんます [2007/02/06(火) 02:49:33 ]
すいません マルチの意味がわかりました、、、
してはいけないことと知りませんでした。
ただものすごく困っています。
色々調べても方法がなくて、、、
ご存知でしたら、何卒お教えいただけませんでしょうか?
以後こんな事をしてしまわないように気をつけます。

221 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:59:27 ]
今回のが教訓だ。ここで教えちゃったら教訓にならない。
「マルチしても謝れば教えてもらえる」程度に思っちゃうだろう。

今回マルチをしてしまった責は、今回答えてもらえないということで負い
以後気を付けることで、以後の質問では突き放されることはなくなる。

まぁマルチをしても、2chで仮初めの礼を言われることくらいしか楽しみのない
哀れな教えたがり君が答えてくれることもあるけどね。

222 名前:デフォルトの名無しさん [2007/02/06(火) 13:58:34 ]
VBAでTerminateメソッドって使えないんでしょうか?
VBAから起動しているアプリを終了したいんですが

Set WshShell = CreateObject("WScript.Shell")
WshShell.Terminate ("ファイルパス")
と打ち込んでもエラーになっていまいます。

Set WshShell = CreateObject("WScript.Shell")
WshShell.exec ("ファイルパス")
で起動はできるようですが。

VBAを使って、windows上で起動しているアプリを終了させるには
どうしたらいいんでしょうか?

223 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 14:25:54 ]
>>222
Win32API使うかWMI使うかだな
つーか全然VBAの質問じゃないし

224 名前:222 [2007/02/06(火) 14:34:30 ]
え、これVBAの質問じゃないんですか?
すいません。
これはAPIのスレに行けばいいんですかね?

225 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 15:09:04 ]
VB言語でApplicationオブジェクト(ExcelやWord)を操作するからVisual Basic for Application、略してVBA。
Applicationオブジェクト(Excelではブック、シート、セルなどを含む)を操作しなかったら
例えExcelやWord付属のVBEで実行しようと、VBAの分野の話じゃ無い。

開発環境の方のVisual Basicでやるべき事を、ExcelやWord付属のVBEに持ってきてるだけだ。
VBAはあくまでもマクロ言語なのに、開発環境に匹敵するほど強力過ぎる故にその辺の区別が出来ない奴が多くて困る。
「VBAで」の部分を「VB6.0で」に置換しても通用しちゃうような話は、全部開発環境分野の話だと思ってくれ。

因みに君のレベルならWin32APIよりはWMIの方がいいと思うぞ。
でもどっちにしろスレで質問することばかり考えてないで自分で調べることを考えよう。
どうせWin32APIスレでは言語限定での丸投げ(コード書いてクレクレ)なんて聞いちゃくれないし。

226 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:38:35 ]
ADOを使用してエクセルのシートをデータベースにセットする場合
各セル毎のデータ形式でなく、全て文字列形式にしてセットする方法があるんでしょうか?
(セルを全て文字列形式にするという方法は除いて)
もしあるのなら、教えてください。

227 名前:デフォルトの名無しさん [2007/02/07(水) 14:47:01 ]
>>221
何をエラそうに講釈たれてんだよ、バーカ。何も教えないくせに態度ばっかしデカいんだよ。

228 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 14:56:05 ]
( ゚д゚)ポカーン



229 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:50:04 ]
マルチがなぜダメなのかを知っていればあんなに高飛車に
偉そうなことは言わないというのは間違いのない話であるよな。

230 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:01:14 ]
つうか

>>226
の質問はスルーか

231 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:03:30 ]
if

Do While
 *********
Loop

end if

こんな感じのプログラムのDoLoopを1秒たったら繰り返すような感じに出来ますか?

232 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:36:24 ]
>>231
Application.WaitなりWin32APIのSleepなりお好きなように

233 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:02:10 ]
>>232

234 名前:デフォルトの名無しさん [2007/02/08(木) 20:05:16 ]


const aretsul = 1

DATA = "データファイル" Cells(row, aretsul).Text
Cellsに「222123,」見たいな感じにデータが入ってるんですが、最後のコンマを消したいんです
最後の一文字を読み込まないようにするにはどうすればいいでしょうか?

235 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 20:31:13 ]
> 最後の一文字を読み込まないようにする
Value値にも因るが、基本的に不可能。

読み込んだ後で、末尾の1文字を消すなら文字列操作関数でどうにでもなるけどね。

236 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:21:27 ]
>>234
left(cells(セルA,セルB), len(cells(セルA,セルB)) - 1)

こんなんどう?(未テスト。やりたいことは伝わるかと)

っていうか上の2行は?

237 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:40:45 ]
>>235 >>236

238 名前:デフォルトの名無しさん [2007/02/08(木) 21:58:30 ]
ごめん、ビジネスsoft板のExcel総合スレで聞いたんだけど、こっちの方がよさげなので、
すみませんがマルチさせていただきます。
以下、コピペですが、エラーを防ぐ原因と方法を知ってる方いたら教えてください。

すみません、VBAのことで質問です。
リンク先のプログラムで、コマンドボタンを押した後に表示されるフォーム(モーダレス)の
コマンドボタンを押して処理を実行中にシートをダブルクリックしたりすとエラーで落ちちゃう
んですが、これを防ぐにはフォームをモーダルでshowするしかないですかね?

555.sytes.net/up/img/375.zip



239 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 22:35:29 ]
>>238
原因不明なのですが、試してみてくれませんでしょうか?

ループの前に
Application.ScreenUpdating = false
ループの後に
Application.ScreenUpdating = true

スペルミスあったらごめんなさい。

240 名前:238 [2007/02/08(木) 22:46:43 ]
>>239
ありがとうございますm(_ _)m

教えていただいた通りにしたらエラーがでなくなりました。

Application.ScreenUpdating = false で画面の更新を一時的に止めてやるんですね。

Formをmodalで表示しなくてもこの方法ならいけそうです!



241 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:38:11 ]
>>226


242 名前:デフォルトの名無しさん [2007/02/09(金) 01:45:38 ]
>>241

243 名前:デフォルトの名無しさん [2007/02/12(月) 10:41:46 ]
すみませんが質問です。
ユーザーフォームにテキストボックス若しくはラベルを作り、
そこに文字を電光掲示板のように文字をスクロールさせる事は可能ですか?

244 名前:デフォルトの名無しさん [2007/02/12(月) 10:49:33 ]
タイマー作って文字列を更新しろ

245 名前:デフォルトの名無しさん [2007/02/12(月) 11:39:55 ]
Alt + PrintScreenで、画面のハードコピーをとって、
エクセルシートに貼り付ける時に、
そのハードコピーの拡大率は100%ですよね。
これを80%の拡大率で貼り付けたい時はどうすればよいのでしょうか?
貼り付けた後に、拡大率を変更するのは面倒なので。
(エクセルシート自体は100%のままで)

246 名前:デフォルトの名無しさん [2007/02/12(月) 12:22:16 ]
sub 貼りつけ
const ZOOM_RATE AS SINGLE = 0.8

ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = Selection.ShapeRange.Height * ZOOM_RATE
Selection.ShapeRange.Width = Selection.ShapeRange.Width * ZOOM_RATE

end sub


どのプロパティ実現できるか分からないときは、マクロの記録を活用すると良いですよ。


247 名前:243 [2007/02/12(月) 17:24:50 ]
>>244
なめらかに文字を流したいのですが・・・

248 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 17:27:26 ]
>>247
ラベルの位置を微調整するとか、自前で文字描画するとか、まぁ頑張って。



249 名前:243 mailto:sage [2007/02/12(月) 17:31:17 ]
>>248
簡単にできる方法ってないんですね・・・
何とかがんばってみます!

250 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 18:06:55 ]
いや、簡単だろ

251 名前:デフォルトの名無しさん [2007/02/12(月) 18:12:42 ]
質問です。
Office2007 Excelでマクロの記録機能で、テキストボックスを表示して、テキストボックス内に文字を表示するといったマクロを記録しましたが、テキストボックスに関するマクロが一切記録されません。
何か個別に設定が必要なのでしょうか?


252 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:53:09 ]
そのテキストボックス自分で実装したなら無理じゃね?

253 名前:デフォルトの名無しさん [2007/02/13(火) 19:25:13 ]
質問があります。

たとえばA1:D50までの表がありその中に3桁の数値が入っているのですが、
そのなかに指定した1桁の数値(H1に入力した数値)が(3桁のいずれかに)含まれるセルに色をつけたいのです。
また、関係ないかもしれないですが、表には空欄がある場合があります。

どうしたらいいでしょか。
お力をお貸しください。


254 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 20:07:08 ]
>>253
条件付き書式でも出来るが、VBAでやりたいなら単にループ回してInStrあたりでその数字が含まれてるかどうか調べればいいだけじゃん。
第二第三引数は数値渡しても自動で文字列化されるし、戻り値をそのまま条件に出来る。

255 名前:デフォルトの名無しさん [2007/02/14(水) 15:53:03 ]
教えてください!
VBAからマクロの記録を終了させたり開始させたりする事って
出来るのでしょうか?

Application.CommandBars("Stop Recording").Visible = True
strTempBuff = CommandBars("Stop Recording").Controls(1).Caption
If Not strTempBuff = "新しいマクロの記録(&R)..." Then
'記録中なら停止したい。
xlApp.Application.CommandBars("Stop Recording").Controls(1).Execute '同じErr
xlApp.Application.CommandBars("Stop Recording").Controls("記録終了(&R)").Execute '同じErr
End If

上記コードで実行すると、マクロ記録中の場合
オートメーションエラーが発生してしまいます。
既にマクロが走っているからでしょうか?



256 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:16:03 ]
すみませぬが質問です。フォームにラベルを作り、そのラベルにランダムの行数のセルを表示させ、
ちょっと時間をおいてその隣のセルを表示させる、というプログラムを作りましたが
上手いこといきません。アドバイス下さいませ。

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'メイン
Private Sub userform_initialize()
Call 表示
End Sub
'表示
Sub 表示()
'乱数発生
Randomize
Dim 行番号 As Long
Dim 乱数 As Long
行番号 = Worksheets("sheet1").Range("a65536").End(xlUp).Row
乱数 = Int(Rnd * 行番号) + 1
Label1.Caption = Cells(乱数, 1).Value
Sleep (1000)
Label1.Caption = Cells(乱数, 2).Value
End Sub

257 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:01:44 ]
>>256
なにが上手いこといかないのか良く分からないんですが、
きっとエラーになるのではなくて、いきなり表示がCells(乱数,2)の値に
なると仮定してレス

Private Sub userform_initialize()
はFormが表示されるまえに起こるイベントなんで、
表示されたときにはCells(乱数,2)が表示されてしまうと思います。

あとは、

Label1.Caption = Cells(乱数, 1).Value
'追加↓
DoEvents
Sleep (1000)
Label1.Caption = Cells(乱数, 2).Value

と、DoEventsを入れないと
Sub 表示()の処理がすべて終わるまで
表示が更新されないと思いますよ。

258 名前:デフォルトの名無しさん [2007/02/15(木) 00:30:37 ]
アクティブセルに色付けするとき、どう指定するんでしょうか?
range("A1").interior.colorindex=36
などという例は見たのですが、特定のセルじゃなく、アクティブなセルとして指定する場合を教えてください。




259 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:43:08 ]
range("A1")の変わりにActiveCellって書けばいいだけじゃん。
何でそんなことも調べられないの?
「アクティブなセル」でヘルプ検索したらすぐ出てくるのに。

260 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:50:17 ]
カーソル移動したセルの色変えたいなら
イベントと組み合わせて使えばよい

261 名前:258 mailto:sage [2007/02/15(木) 00:59:28 ]
>>259
それも試しにやってみたのですが、色が変わらないので間違っているのかと。

ちなみにユーザー定義関数内でやろうとしていて以下のようにしてもoutputはでますが、
色が出ないんです。指定がおかしいのでしょうか?

Function color(work)

ActiveCell.Interior.ColorIndex = 36

color = "color" & work

End Function


262 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:18:30 ]
>>261
普通にできてしまったのですが…。

Function test()
ActiveCell.Interior.ColorIndex = 36
End Function

同じですよね、多分?

263 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:25:42 ]
>>262
たびたびすみません。同じだと思うのですが・・・。

やろうとしていることは、
・ユーザー定義関数を作ろうとしていて(ここでいうcolorという関数)
・計算結果がある値をとればセルの色を変える
というもので、上述のcolorという関数はそれをおもいっきり簡略化したものです。

やっぱり上手くいかないです・・・
もしかして根本的にわたしが勘違いしているのかもしれません。ユーザー定義関数とマクロは別物ということでしょうか?

264 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:27:47 ]
263補足

>>262さんのを登録後、エクセル上で=test()と任意のセルに入力しても
ゼロと表示されるだけで色は変わりませんでした・・・

265 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:29:16 ]
引数のworkには何が入る予定なの?

266 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:30:49 ]
あー、分かった。
セルでセル関数のようにはマクロのユーザー関数は使えないよ。
ツールメニュー→マクロ→color(自分で作ったユーザ関数)を選らんで、
その時点で使うわけ。

267 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:30:54 ]
>>265
ただの文字列です。

268 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:34:30 ]
「セルの計算結果」って言ってるのは、
=SUM(R[-3]C:R[-1]C) ←こういう奴の話を言ってるんだよね?
で、このイコールのところに自分で作った関数を入れたいってことよね?
結論から言えば、できないんじゃないかなあ。



269 名前:268 mailto:sage [2007/02/15(木) 01:37:15 ]
ごめん!
ウソ言ってた。
できたよ。


270 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:37:24 ]
>>261
> ユーザー定義関数内でやろうとしていて
先に書けよ。

ユーザー定義関数ってのは引数を計算して、式を入れたセルに値を返す物で
書式設定だのなんだのというシート上の操作を行うものじゃないぞ。
だからアクティブセルを取得することは出来るが操作は出来ない。それがユーザー定義関数ってものだ。
指定がおかしいんじゃなくて、やろうとしている事に対してユーザー定義関数を使おうとしているのがおかしい。
取得が出来てることはDebug.Print ActiveCell.Address(0, 0)を入れればわかるだろう。
操作がしたいならイベントを使え。






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

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

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