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


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

Excel VBA質問スレ Part10



1 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:56:43 ]
ExcelのVBAに関する質問スレです

前スレ pc11.2ch.net/test/read.cgi/tech/1228372971/

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

237 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:32:56 ]
>>236
ちょっと始めたばかりの自分にはレベルが高すぎですかね。。。

ちなみに入力制限は、普通にセルに入力させたいんですが、
それはエクセルに規則制限の設定があるって事ですか?

238 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:36:58 ]
>>237
シート入力制限(Excel)&入力インターフェースとエラー制限(VBA)だよ。
初心者さんには厳しいかもしれんね・・・
内容見てると、VBAよりも運用で逃げれそうな面が多いので、
Projectに制限がないなら、運用/仕様で逃げるべき。

仕事なのでそれでは〜!

239 名前:224 [2009/03/13(金) 16:48:05 ]
自分の知らない言語仕様がもしかしたらあるかもと思い質問しました
Ruby の Duck Typing も最初は抵抗がありましたが、
言語の基本理念に合わせれば幸せになれたように、無駄な抵抗はやめて
VBA ではグローバルな名前空間で一意の名前を使ったほうがよさそうですね

句読点もここの習慣に合わせることにします
半英語 (笑) は確かに悩みの種ですが、カタカナ語は読みづらいし、
英単語を「てにをは」でつなぐくらいなら全英語のほうがまだましです
プログラムを書くときは公開が前提のため、ドキュメントを含め全て英語ですが、
白熱した議論となると英語では正直しんどいんですよね...

これまで Microsoft 独自仕様の言語は避けてきたのですが、
表計算 w/ OOP という計算言語モデルは最近面白いかもしれないと思いつつあります
Excel (w/o VBA) のみでも stochastic なアルゴリズムを使うことで、
割と複雑な問題でも現実的 (?) な労力と計算時間で解けることは確認しました
VBA にも標準で正規表現や SQL パーザなどのライブラリが用意されているようですし
何か面白いことはできないかとくちゃくちゃ遊んでいるところです


240 名前:デフォルトの名無しさん mailto:sage  [2009/03/13(金) 17:00:33 ]
いま、独学でVBA勉強しているとこなんだが
これを使って将来仕事に生かせるかどうか不安なんだ

書籍見てもどう約竜野かいまいちわからないし
この板にいる名人方は経験値豊富そうだから意見を聞きたい

役に立つのか?

241 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:46:54 ]
はっきり言って全く役に立たない。
手作業では数日がかりでも終わらないデータ集計が
数分で1円の間違いも無くレポートの体裁に整えられるくらいが関の山


242 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:51:37 ]
通貨、「Excelとハサミは使いよう」だ

243 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 17:53:43 ]
>>240
すごく役に立つよ
でもどう役立つのかいまいち分らんなら素質ないかも知れんから
使えるやつを捕まえてうまくおだててやらせるすべを覚えときゃいい
そいつが全部やってくれる

244 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 19:26:17 ]
仕事するにあたって便利になるように、小物ツールを作る程度だな

245 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 20:05:05 ]
今の管理職にはパソコンの使い方自体覚束ないような人が多い
プログラムで効率化したところで、彼らには何をやっているのかすら分からないから
一切評価されない。空いた時間以上に無茶振りされて仕事が増えるだけ

そういう意味では役に立たない



246 名前:デフォルトの名無しさん [2009/03/13(金) 21:00:12 ]
メインの言語何か別にやってて
必要なとき覚える程度ならいいけど
この言語が初めてとか、病気になるよ(笑)

247 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 21:10:45 ]
>>246
ABAPとVB6.0しか実務で扱ってないので、転職先が無い・・・

248 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 21:20:21 ]
ピボットテーブルがあるのになんでVBAなんか使うの?

249 名前:デフォルトの名無しさん [2009/03/13(金) 21:21:57 ]
SAPいいじゃん
あとはうまくでっちあげろ

250 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 21:22:33 ]
ピボットテーブルでは集計しか出来ないから

251 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 21:27:05 ]
この言語ででかいもの組まれると作るのはいいが
引き継ぐ人間のことを考えると涙しかでないな

252 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 21:31:26 ]
おれはVBAしか出来ないからどう困るか想像できんのだけど

253 名前:デフォルトの名無しさん [2009/03/13(金) 22:27:19 ]
>>252
あって然るべきものがフツーにない場合が多い
のと、シート毎に行数を取って置くのが面倒だからと隅っこに忍ばせた白文字の行数とかIDとかテラウザス
開発者のちょっとしたお茶目がとんでもない殺意を生み出す
さらに別に無駄に出力してるわけではなく
当然客がいじりたおすわけで忍ばせた文字が残っている保証もなければ
忍文字と内容が一致してるわけもなくさらにフォーマットからいって違う可能性もあるしで
仕様やそこに至った経過をしらんとどうしようもないような要素がさらっと入る
バージョン管理ツールも効かないしね
この言語で綺麗に組むって多分目的からズレてんだろうなってフツーに思うけど引き継ぐのは嫌

254 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 22:30:59 ]
なるほロケット

255 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 23:22:45 ]
そのレベルの奴しか周りにいないなんて可哀相だな



256 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 23:28:31 ]
>>238
返事が遅くなりました。
アドバイスありがとうございます。
もうちょっと勉強を進めていきたいと思います。

257 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 23:51:54 ]
>>250
Excelなんて集計にしか使わないだろ。

258 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 23:56:42 ]
集計なんてAccessでしかやらんが。

259 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 00:04:19 ]
>>258
Excelでは何やってんの?

260 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 00:28:49 ]
別に誰が何やってようと関係どうでもいいことだ
くだらない雑談は終わりにしようぜ

261 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 04:14:42 ]
ExcelVBAは基本的にCOMコンポーネントだけの言語なので、
COMができる仕事ならExcel VBAでも出来る。
これを集計しかできないとか、レポートにしか使い道が無いというのは…。

俺がよくやっていたのはXMLのパージングと生成やらテストデータの作成。
ほかにも死ぬほどの仕事をExcelVBAに叩き込んだ。
たぶん今やってるプロジェクトの数パーセントは俺のマクロだより。
EmacsやPerlと心中するような奴でもExcel VBA覚えるべき。
ExcelVBAはWindowsの糊言語だよ。

262 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 04:29:33 ]
やだなぁなんも蓄積してかないし
vbaはあくまでもメインのプログラムとの橋渡しだけにしたいなぁ
バージョン管理も効かないし
作ったはいいけどエクセルデータ触るたびにvbaも修正が必要とかなりそう

263 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 04:55:41 ]
全部思いこみだねえ

264 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 05:31:24 ]
ていうか、集計やレポートの作成以上難しいことをやったらいかんよ
できるできないは別として

265 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 06:29:45 ]
262みたいな子って、結構居るよ。
組込マクロ言語から入って単独開発言語を囓り始めた時期に
こういう症状が出ることがある。
基礎が出来てりゃあんなバカな発想はしないんだけどな。



266 名前:デフォルトの名無しさん [2009/03/14(土) 06:34:13 ]
基礎云々じゃなくて作るだけの人と保守までしなきゃならない人との違いだろ

267 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 06:51:01 ]
基礎が出来てないから、VBAの保守ごときで右往左往してしまう件

268 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 07:59:58 ]
>>267
保守できないのは努力が足りない?


269 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 09:13:24 ]
集計するならピボットもVBAもイラン
いまのとこ数式で事足りてる

270 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:21:22 ]
やたらとセルにどっからでもアクセスできるからソースはクソになりがちではある

271 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:27:52 ]
とあるExcelで作られたシステムを引き継いだんだけど
これってVBで作ったほうがよくね?って思ってる。
なぜExcelで作ったのかなぞだ。

272 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 10:35:25 ]
この話題が出てるときに、このあからさまなネタw

273 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 11:11:34 ]
この話題だから書いただけなのに

274 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:01:08 ]
で?

275 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:11:44 ]
<font size="2">



276 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:13:50 ]
そんなにExcelがすきなの?

277 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:48:21 ]
すべてvbaで作って自分しか保守れないようにするんだ

278 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 12:51:28 ]
</font>

279 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 15:26:16 ]
>>262
プログラムを書いたことが無いのかもしれないが、
入出力が変わったら、どんな言語ツールでもプログラムを書き換えるだろ。

280 名前:デフォルトの名無しさん [2009/03/14(土) 15:27:06 ]
マクロって隠すことできるんですか?
たくさんマクロが組まれてそうなファイルを手に入れて
分析したいのですが、標準モジュールには簡単なマクロしか
入ってません。

フォームのボタンらしきもので色々動くファイルなのですが
ボタン自体が保護されているような状態。


281 名前:デフォルトの名無しさん [2009/03/14(土) 15:30:39 ]
デザインモードでアクセスできました
すみません。

282 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:05:29 ]
俺はRDBをExcelにDumpingして、VBSの正規表現を使って仕事してる。
どんな会社でも、どんな業種でもExcelファイルなら開けるってシェアの大きさは有利だよ。

シェア率って、本当に大切だよ。

283 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:13:43 ]
>>282
VBS・・・?

284 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 17:17:05 ]
COMのVBScript.RegExpのことじゃないの?

285 名前:デフォルトの名無しさん [2009/03/14(土) 19:27:11 ]
質問ですー
VBEの画面でOと0の見分けがつかんの何とかならんですか?



286 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:38:32 ]
フォントは自由に選べますよ

287 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:44:26 ]
>>285
プロポーショナルフォントじゃ無くせばOK。
例)Pゴシック→ゴシック って意味ね。

288 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:45:40 ]
区別できるフォントを捜して設定すればいいんですね
週明けに早速試してみますありがとうございます

289 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:58:29 ]
Range("A" & i)



290 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 20:51:35 ]
質問です。
指定した1秒未満の短い時間(0.5秒など)だけマクロを停止させたいと考えています。
Application.Wait メソッドなどでは最短でも1秒は停止しなければならないようですが
これは可能なのでしょうか?

291 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:00:55 ]
APIでSleep()がGetTickCount()定義して処理する

292 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:13:03 ]
基本的なことだが、VBAとVB6はほぼ同じ。
グーグルでVB6をつけて検索すれば大抵のことは解決する。
初心者さんはまずVB6で検索してくれ。

293 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:28:19 ]
>>291
Sleepを使う事で解決できました。ありがとうございます。

294 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:33:19 ]
Application.Wait [NOW()+"0:00:00.1"]

295 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:54:45 ]
WaitやOnTimeは、1秒未満を指定してもエラーにはならないけど
1秒単位に丸めて処理されるから意味無いよ

Application.Wait [NOW()+"0:00:00.1"]
Application.Wait Now()
は同じで
Application.Wait [NOW()+"0:00:00.6"]
Application.Wait [NOW()+"0:00:01"]
も同じ



296 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:58:36 ]
うそ、仕様が変わったのか?

297 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:05:18 ]
Sub a()
t1 = Timer
Application.Wait [NOW()+"0:00:00.1"]
Debug.Print Timer - t1
End Sub

0.1103516
0.1000977


298 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:16:28 ]
確か丸めは環境依存だったような。
確実な方法では無いから普通は使わないけど。

299 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 03:55:41 ]
これが環境依存とは聞いたことないな。
みんな普通に使ってるようだけど。

300 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 07:27:51 ]
>>297やってみたら

97%くらいは
0

3%くらいが
0.015625

だった

301 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:17:35 ]
Waitやってるやつ環境くらい書けば?
XP, Excel2000,はOK

302 名前:デフォルトの名無しさん [2009/03/15(日) 13:38:34 ]
これさ
ミリ秒単位ってほぼとれてなくない?
数字の上でどうでてようととれるもんはめちゃくちゃなんだけど?
0ms5msって交互にとれるけどホントか?これ?(笑)

303 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:02:00 ]
今やってるのは100ミリ秒だろ

304 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:17:21 ]
Application.Wait [NOW()+"0:00:00.1"]
は、うちでも0.1秒前後になるけど、WinAPIのSleepと比べるとものすごくばらつきが大きい。
Sleepだと100回やって100〜104msと100ms未満になることは無かったし超過も僅かだが
Application.Waitは80ms台が数回出たし、超過誤差もSleepの10倍以上。

処理上、僅かな超過が出るのは仕方のないことだし、それは環境にも依存することだが
その超過量が同条件でのSleepより遙かに大きかったり、指定未満になったりするのは
明らかにApplication.Waitの欠陥で、1秒未満の処理がまともに出来ているとは言いがたい結果だな。

因みに環境はWinXP/Excel2003

305 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:53:42 ]
>>304
Application.Wait [NOW()+"0:00:00.25"]
だとどう?



306 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:56:57 ]
>>304
あるいは、
Application.Wait [NOW()+"0:00:00.0625"]
とか

307 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:58:07 ]
>>297はXPSP3 Excel2007

10ミリ秒の精度が必要か?
所詮、いくらSleepの精度が高くてもCPUやメモリなどの競合で
処理の遅延することは避けられないし

308 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 17:15:17 ]
まあ、そもそも>>290がどんな要件に使うのかすら、オレには想像つかない。



309 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:09:52 ]
そうか?
>>290は1秒じゃ長いから0.5秒くらいで待ちたいと言ってんだろ?
そのときに0.01秒の誤差なんか気にするか?
0.1秒の誤差も気にならないかも

310 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:19:03 ]
俺はそんなもの測れると思ってないけどね
長年ゲームアプリ作ってきた勘
テキトーな間隔でテキトーに止まるとは思うけど
数秒に数回成功するって目安だな

311 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:44:41 ]
そうか?
1秒で待つか0.5秒で待つかで実際やってみると体感的に違うけどな


312 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:45:47 ]
VB6のSleep() APIでも数ミリ秒の誤差はある
VB系でミリ秒気にするのは病みすぎ
スレッド使える他言語でやれよ
(ActiveX使えとかWindowsじゃ無理とか言うなよw)


313 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:00:50 ]
お前ら、よく知らんことには口出すな

314 名前:デフォルトの名無しさん [2009/03/15(日) 19:19:44 ]
教えてください。
上位のコンボボックスの選択しだいで、下位のコンボボックスが空の場合も、値が入っている場合もあります。下位のコンボボックスに値が入っている場合のみ実行したいコードがあるのですが、条件式としてはどのように記述すればいいのでしょうか?
お願いします。

315 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:26:36 ]
なんらかのトリガ時に両方見ればいくね?



316 名前:314 [2009/03/15(日) 19:32:44 ]
>315
ごめんなさい。よく分かりません。

317 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:47:00 ]
ボタンかなんか押してプログラムが動くんだろ?
だったら、ボタン押した時に2つのボックスの中身を見て判断すれば良いんじゃねーの?
この内容が分からないんなら、コンボボックスの使い方を説明してるHP見たほうが早い。

318 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:38:22 ]
>>314
上位のコンボボックスの選択されている値をみればいいんじゃないかな
下位のコンボボックスに値をセットしたり空にしたりする処理があるんだから、
そのための判定式がその処理のとこにあるだろう


319 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:59:07 ]
>>314
ttp://www1.axfc.net/uploader/He/
He_205317.xls
Pass : prog

320 名前:314 [2009/03/15(日) 22:45:03 ]
>319さんへ
わざわざ親切にありがとうございました。
私の説明が悪かったのですが、「下位のコンボボックスが空」とういうのは、「ボックスに何も
表示されていない状態」のことではなく、「ボックスに何も表示されていないし、ボックス中に
何の選択肢もない状態」のことなんです。上位に対応する下位がない場合、ボックスを空に
しているのです。「ComboBox2.Text <> ""」という記述は前者のようです。
もしよかったらまた教えてください。

321 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 22:53:00 ]
>>320
どちらにしろTextが空なんだからそのIfでOKだろ?
嫌ならListCountで項目数判定汁


322 名前:314 [2009/03/15(日) 23:02:24 ]
ListCountでできました。
ありがとうございました。
じぶんなりによく考えて、よく調べたつもりだったんですが・・・
まだまだ初心者の域を抜け出せてないようです。

323 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 23:05:29 ]
>>314
ユーザー入力でCombo Textの空文字判定が曖昧になること心配しているなら、
ComboをReadOnlyにするという方法もある。
まあ頑張って下さい。

324 名前:デフォルトの名無しさん [2009/03/18(水) 22:02:18 ]
2007 xlsm vista
今まで(2003 xpでは)正当に動いていたマクロが機能していません。
どのように修正したらいいものかさっぱりの状態ですので、教えてください。
よろしく。

sub モジ()
Aマクロ
Bマクロ
Cマクロ
end sub
で、Aマクロの中にapplication.run "dataweb" があるのですが、
webデータ取得(を全くすることなく)前に、 Bマクロにさっさといってしまいます。


325 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:24:01 ]
ブックごとうpしろ
出来ないなら帰れ



326 名前:324 [2009/03/19(木) 00:57:50 ]
ブックごとのアップはできません、悪しからず。
調べる端緒がほしいので、よろしく。

2003で同期だったものが、2007では非同期になってしまうということです。
そうゆうことはあり得るのでしょうか?


327 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:07:54 ]
>>326
Bマクロでブレイクすれば、データが取れるの?

328 名前:324 [2009/03/19(木) 01:46:10 ]
Bマクロでブレイクして、データ取得はできます。

なお、Aマクロ単独での動きは、2003及び2003互換モードで正常ですが、
2007ではやはり、勝手に先に動きます。



329 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 04:04:03 ]
Call

330 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 05:53:09 ]
>>326
それは同じマシンでもそうなるの?
2007から複数コアCPUがサポートされてるから、そうなる可能性はあるとは思うが

関係ないかもしれないが、一度マルチスレッド計算のオプションはずして試してみては?


331 名前:324 [2009/03/19(木) 10:51:06 ]
>>330 サンクス。
2007 XP機で試してみました。ちゃんと正常に動いたことから、
VISTA機でのみ正常に、動作していないことになります。
マルチスレッド計算のオプション外しもやってみましたが、変わり無しです。

なお、VISTA機ではmsgboxだけなら止まるのですが、msgboxの次にendがあったりすると
msgboxは流れています。
inputメソッドも止めることなく、流れていってます。
この症状は、Aマクロの中でも、Bマクロの中でも同様に起こっています。


332 名前:324 mailto:sage [2009/03/19(木) 10:55:03 ]
>>329
Callは書いても書かなくても一緒でした。

333 名前:デフォルトの名無しさん [2009/03/19(木) 11:23:15 ]
procedureの呼び方ですが、
「プロシージャ」と「プロシジャー」
どちらが一般的なのでしょうか。

334 名前:デフォルトの名無しさん [2009/03/19(木) 11:30:57 ]
プロシージャ

335 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 13:07:50 ]
prэsi':dзэ(r)



336 名前:デフォルトの名無しさん [2009/03/19(木) 15:41:11 ]
手続き
と日本語で解釈b

337 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:56:29 ]
>>331
msgboxは流れる ってのがよくわからんが、msgboxでok押す前に次の行が実行されてるってことか?
簡単に試したがうちではそうならないし、現象が発生する最低限のコード晒して見たら


338 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 05:53:15 ]
質問です。
userFormのTextBoxsに09と入れ、セルに入力すると9になります。
変数(string)代入しても、上手くいきません。
どうしたらいいでしょう?
対象セルの書式設定も文字列にしています。

339 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 06:53:59 ]
' を頭に結合させてみてはいかがかな。

cells(1,1).value = "'" & textbox.value
のように。

340 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 07:27:25 ]
>>339
上手くいきました!
ありがとうございます!

341 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:30:53 ]
>>338
対象セルの表示形式が文字列になってれば、おれんとこじゃ09になるけど?

342 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:35:01 ]
>>324
あんたの質問内容ってこう見えるよ。何を答えろと・・・

今、車で走ってて道に迷いました。今まで普通に走ってきた道ですが・・・
どうしたらいいでしょう。よろしく。

出発点
 ルートA、ルートB、ルートC
到着点

ルートAに看板があるのですが、暗くて分かりません。

Q そもそもどこ走ってる?A 言えません
Q 地図ねーの?         A 今までの地図と違うみたいです
Q 誰か近くにいねーの?A 止まってくれません・・・

343 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:41:47 ]
コード晒す気がないみたいだから答えてほくないんだろ
もしくは荒らし

344 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 10:00:43 ]
やっぱりそうだよね。真剣に考えて損したよ。
一応、エスパースレいってみれば? >>324

345 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 10:10:37 ]
>>338
文字列変換用関数というのもある。こっちの方が便利かと
string str = Format$(123, "00000")



346 名前:デフォルトの名無しさん [2009/03/20(金) 19:39:25 ]
これってどう?

Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
ttp://www.amazon.co.jp/gp/product/4844326864/



347 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:59:07 ]
リアルタイム処理を考慮されてない言語で無理矢理ゲームを作るのは
趣味としてやるには面白いかもしれないけど実用性は低い

348 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:59:25 ]
ミニゲーム系はFlashの独壇場。
Excelでやる必要性はない。

349 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:00:39 ]
はぁそうですか

350 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:40:17 ]
Excel VBAしか知らないから
俺には丁度いいかも

351 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 10:38:52 ]
VBAで出来ない事じゃないし、やってる人もいるけどさ・・・。
それはあくまで ”出来る” であって、向いてる訳じゃないのよ。

例えば、アクションゲームならばFPSって概念を持ってるFlash(ActionScript)で作った方がいいよね。
衝突判定の関数をVBAで組むならば、ASにはその物ズバリの関数が既にある訳。シェイプが接触したいるかどうかをbooleanで返す。
Flashはドローツールから派生してるんで、シェイプを扱う能力が超高い。現状だと最高峰。
MovieClipって形で、duplicate、attack、色んな複製をしつつ、それら全てにプログラムを組みこむ事も出来る。
リアルタイムで動くタイムラインを、全てのシェイプが保持出来る訳で、ゲームには凄く向いてる。

決してVBAがダメと言ってる訳じゃないよ。VBAが光る分野は別の所。
向き不向きがあるから、それに則る方が良いかも。と言う観点で。

352 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 10:42:15 ]
だいたいなんらかのプログラムが組めるなら別の言語なんて習得に1週間かかんねぇだろ
やらないで怖がってるだけの奴は馬鹿
なんでもかんでもVBAでやろうとすんな

353 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 12:02:05 ]
Flash厨うぜえぞ

354 名前:デフォルトの名無しさん [2009/03/21(土) 13:18:32 ]
「セルをドットに見立ててゲームをつくる」とかすごすぎw

なに?
>ワークシート上のセルを方眼紙のように正方形にしてどっとに見立てて、ワークシートを
>縮小して表示することで、グラフィックを表現する手法で、セルの1つ1つの背景色が
>そのままドットの色になります。
って


355 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:49:14 ]
attachですた。



356 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:59:42 ]
attach No.1・・・って、違うか?!

357 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:30:13 ]
オートシェイプをスプライトに見立てて作ったゲームってのも
あってもよさそうだが見たことがない。
みんなワークシートにドット絵を描きたがるのはなんでだろう。

358 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:54:34 ]
>>357
座標関係じゃね?セル位置のほうが初心者には直感的。
もしくは、オブジェのNewとか、オブジェクトの一意のID指定がメンドイとか。

個人的には、VBAで2Dゲームは初心者に向いてると思う。
描画の基礎は勉強できるでしょ。

359 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:06:52 ]
>>352
スレチだが言語によると思うぞ。俺はVC/JAVA屋でC#に四苦八苦。
さらにDirectXなんかは思想の理解にてこずるし。
まあ、言語というよりはフレームワークの問題だが・・・

あと、半月くらいVB系触らないと構文殆ど忘れるしw

360 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:53:36 ]
>>354
アラン・ケイの本に、セルを使って棒グラフを表現する例が載っていたから、
画期的なアイデアと言うほどではないな。

361 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:30:03 ]
すいません。次のことをしたいのですが、簡単だと思ったのですが、
出来なく困っています。

最初にB列の任意のセルを一つ選び、
その選んだB列のセルに、常にR24のセルをコピーし
貼り付けたいのですが、色々やりましたが出来ません。

例えば、
セルB28を選び、マクロを実行したらR24をコピーし同じくB28に貼り付ける。
セルB30を選び、マクロを実行したらR24をコピーし同じくB30に貼り付ける。
セルB77を選び、マクロを実行したらR24をコピーし同じくB77に貼り付ける。

たったこれだけのことですが、このマクロの部分が相対参照にしても出来ません。
識者の方宜しくお願い致します。
なお
EXCEL;ver2000
OS:win2000
VBA;多少使えます。

宜しくお願い致します。

362 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:43:12 ]
ActiveCell = Range("R24")

> VBA;多少使えます。
それはないだろ…

363 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:55:31 ]
lol

364 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:01 ]

デフォルトプロパティを省くな


365 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:10 ]
>>362
有難うございます。しかし調べ、いろいろ試し下記のコードを作成したのですが・・・

ActiveCell = Range("R24").Copy
ActiveCell.Offset(30, -2).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub

↑出来ませんでした。R24だと手間が掛かってしまうと思うので、

任意のB列のセルにセルA1の値をコピーし貼り付ける。

という例で結構ですからコードをお願いできないでしょうか?

例えば、

セルB5を選び、マクロを実行したらA1をコピーし同じくB5に貼り付ける。

たったこれだけで良いです。宜しくお願い致します。



366 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:45:26 ]
cell(2,5).value = cell(1,1).value
cell(2,5).interior.colorindex = RGB(255,255,255)
こんな感じだった気がする

367 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:16:38 ]
>>366
cell → cells
colorindex → color

368 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:34:13 ]
セル情報全部コピーしたいって前提なら、↓で良いと思うがね。

Sub test()
Cells(1, 1).Copy ActiveCell
End Sub

369 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:39:14 ]
「R24だと手間」があったからValueにしてみた
色は関係ないのか。斜め読みスマソ

370 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:27:59 ]
>>365
VBAがまったくわかってないようなんで、ヒントじゃなくて完成したマクロを書いといてやる。

Sub Macro1()
  ActiveCell = Range("R24")
End Sub

371 名前:365 mailto:sage [2009/03/22(日) 17:16:18 ]
皆様本当に有難うございます。
只今仕事からかえってきました。んでまた仕事ですorz。
報告は後ほどさせて頂きます。

372 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:25:56 ]
>>370
プロパティを省略するな。と何回言わせるのだ・・・。

373 名前:デフォルトの名無しさん [2009/03/22(日) 21:30:20 ]
openのメソッドを勉強中ですが、
「updatelinks」引数の説明の中で、
「リモート参照」と「外部参照」という2つの言葉が出てきました。
「リモート参照」「外部参照」とはどういう意味ですか?
ググってみても出てきませんでした
(T_T;)。

374 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:19:52 ]
>>372
ケチつけてるヒマがあったら正解を示せ。と何回言わせるのだ・・・。

375 名前:デフォルトの名無しさん [2009/03/22(日) 22:54:11 ]
Sub test()

selection.value=range("A1").value

End sub

A1の値を今選択しているセルの値に





376 名前:デフォルトの名無しさん [2009/03/22(日) 23:03:17 ]
↑あ、説明間違った。
今選択しているセルにA1の値を入れると。
ちなみにこの場合はActivecellよりselectionの方がいいと思うよ。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:08:07 ]
>>374
え、付けるべきプロパティが解らないの?

コードが根本的に間違っていると言ってるわけじゃないのに
それでも「正解を示せ」と言うからには、それくらいしか思いつかない…

378 名前:365 mailto:sage [2009/03/22(日) 23:33:25 ]
365です。
あれから>>370さんのコードをそのまま頂いたら、
出来ました!!!
>>370さん本当に感謝です。
コードまでそのまま書いてくださり大変助かりました。
しかしこんな簡単なコードで出来るとは、
拍子抜けです。
勉強不足を感じました(汗。感謝。

>>366さん
>>368さん
わざわざ有難うございます。
どうやら私の説明が悪く、
何をしたいのか正確に伝えれなかったみたいです。
アドバイスいただきましたが、
それとはちょっと違いました。
ですが親切に本当に有難うございました。

ではお騒がせしました(ぺこり

379 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:34:11 ]
>>378
>>362

380 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:01:22 ]
おれが即座に>>362でレスしたのはスルーだったわけだ

381 名前:365 mailto:sage [2009/03/23(月) 00:07:42 ]
>>380

いえ、>>365の最初

ActiveCell = Range("R24").Copy

で使わせてもらいました。
>>362さん=>>370さん
だと思っていたのですが・・・。

最初に回答を頂いていたようで有難うございます。
しかし、これは「ヒント」だと思ったので、
>>365のような長居コードになってしまいました。

382 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:08:34 ]
>>377
なんか本気で自覚がなさそうだから親切に教えてあげるけど、
デフォルトのプロパティがどうとか正解が知りたいんじゃなくて
「煽りがウザイ」って遠回しに言ってるんだと思うぞ。

プログラマーの精神年齢が低いのは世界共通の現象らしく、
とある海外のプログラミングの入門書にも
「まず大人になれ」みたいに書いてあって吹いたわ。

383 名前:デフォルトの名無しさん [2009/03/23(月) 00:10:19 ]
プロパティの重要度も分かってない奴が適当な回答して悦に浸るのは間違ってる。

>>365ではコピペしようと試みてるのに、destination使ってコピしてる>>368のコードは違うと言いきってるし。
どういうこっちゃ。

だいたいから、なんで .value を省略する馬鹿が多いんだ?
プロパティ省略なんて百害あって一利無しだ。
可読性もひったくれもあったもんじゃない。

384 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:04 ]
なんでマジになってるの?

385 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:07 ]
まあ今の時点でValueやらTextやら書いてもどうせ意味分からんだろうし
省略してることで壁に当たったとき、もう一度勉強しなおせばいいさ



386 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:36 ]
プロパティの呼び方も分かってない奴がプログラマーとか笑わせるなよw
マジで。

387 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:03 ]
> 百害あって一利無しだ。
コードが短くなるという利があるでしょ

388 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:21 ]
皮肉や嫌みが通じないのは、目の前のコードを100%文法通りに解釈する訓練を受けた弊害だな

389 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:13:28 ]
プロパティは知らなくても俺には関係ないが、それなら copyメソッドを勧めるべきだろ。

390 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:14:10 ]
>>387
横から突っ込むけど
それって利点なのか?w
必要なことを表現してない短縮って百害あ(ry・・・以下ループ

391 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:15:53 ]
古いバージョンのVBAだとRange( )よりRange( ).Valueのがかなり高速だったんだけど、
今のバージョンでは差が出ないんだよな。
当のMSもデフォルトプロパティの省略は推奨してないんだけど、言うことを聞かない
日曜プログラマが多いから仕様を変更したんかな。

392 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:44 ]
一般論として、変に省略すると、うっかり複数のセルが選択された状態でマクロを呼んだら
エラーになったり関係ない周囲のセルを書き換えたりすることがあるから
もうちょっと丁寧にコーディングした方がいいと思う。

393 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:50 ]
右辺を省略すると誤作動起こす可能性があるぞ。

394 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:22:07 ]
xp 2003のADODB.Streamに関する質問です
shift-jisで読み込んだファイルをutf-8に変換して
バイナリモードにして.Wirteした後にさらにバイナリデータを追記したいのですが
.Write bytData
.Write chr(10)
とすると'実行時エラー3001'になってしまいます。
どうかご教示よろしくお願いいたします。

With SecondObj
.Position = 0
.Type = adTypeBinary
.Position = 3 '先頭から削除する文字数
bytData = .read
.Write bytData
.Write 追加したい文字列
.SaveToFile saveFile, adSaveCreateOverWrite
.Close
End With

395 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:42:29 ]
Write バイト配列



396 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 17:40:17 ]
すいません。
シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、
定期的に全て削除したいのですが、
VBAでやりたいと思います。
調べたのですが分かりませんでした。
識者の方、ご教授お願い致します。

なおexcel=2000
OS=2000

でう。宜しくお願い致します。


397 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:51:22 ]
どう調べて、どこが分からなかったのか?
まずはそれをそっとささやいて欲しい

398 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:20:12 ]
>>397
すいませんでした。
ネットと手持ちの本で調べたのですがのっていません。
自分でやったら、

数式
データ
書式設定

これらは削除できるのですが、
プリントスクリーンの画像だけは残ってしまいます。

399 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:59:21 ]
>>398
なんかシートごと消した方がいいような感じの発言ですね
でも一応
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp


でアクティブなシートのシェイプが全部消えるよ

400 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:18:54 ]
>>399
有難うございます!!!
今やったら出来ました。

大感激です!!!!!

本当に有難うございました!

401 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:44:09 ]
>シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、
>定期的に全て削除したいのですが、

興味本位だけどどういう使い方してんの?

402 名前:デフォルトの名無しさん [2009/03/23(月) 23:54:03 ]
すみません初歩的な質問なんですが
オートフィルタで抽出した可視セルの値を配列変数に代入したのですが
うまくいきません。

Sub test()

Dim atai() As Variant
Dim gyo() As intger

Sheets(1).Range("A1").AutoFilter 3, ">0"

ReDim atai(0), gyo(0)
atai(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Value
gyo(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Count

Sheets(2).Range("A2", "A" & gyo(0)).Value = atai(0)

End Sub

上記のコードではうまく配列に値を代入できません。
どなたかご教授願います。


403 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:32:50 ]
>>402
おかしな部分が多すぎて、どこから教えたらいいのか…
自分で考えながら作るのもいいけど、まずはマクロの記録やってみ?
無駄がないように手順を良く考えてから、余計なキーを押さないよう、
余計な場所をクリックしないよう、慎重に操作しながら記録してみて、
それでもできあがったマクロは無駄が多いから、
それを自分で修正していくのがいいと思う。

404 名前:デフォルトの名無しさん [2009/03/24(火) 00:50:11 ]
↑自動記録でどうやって配列変数に値を代入するの?


405 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:22:04 ]
>>401
株です。
ライトカッターって言うソフトで下部のチャートを切り取って、
それで明日の作戦を立てるのですが、
一週間もすると莫大なページを消費してなにが何だかになるので、
今回のVBAが必要になりました。



406 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:25:55 ]
オートフィルタに1件もひっかからなかった場合を考慮してないから注意な

Sub test()
  Dim atai() As Variant
  Dim gyo As Long
  Dim i As Long
  Dim R As Range
  Sheets(1).Activate
  Range("A1").AutoFilter Field:=1, Criteria1:=">0"
  Set R = Range("A2", Range("A" & Rows().Count).End(xlUp))
  gyo = R.SpecialCells(xlCellTypeVisible).Count
  ReDim atai(gyo - 1)
  i = 0
  For Each C In R.SpecialCells(xlCellTypeVisible)
    atai(i) = C.Value
    i = i + 1
  Next
  R.Copy Destination:=Sheets(2).Range("A1")
End Sub

407 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:31:26 ]
>>404
少なくとも最初のエラーはマクロの記録で解決するはず
自分で直せる部分は自力でやらせる方針なんで

408 名前:デフォルトの名無しさん [2009/03/24(火) 02:08:30 ]
質問です。
エクセル2003を使ってグラフの散布図作成するマクロを作っているのですが
データの範囲に変数使用する方法が分かりません。

マクロの記録で

Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("J4")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

これを作成したあと、グラフの読み込む範囲が今300なのに対して
ここの300を変数に格納した数値を利用して変化させたいのです。

ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"

ここにどのように変数を絡めたらいいのでしょうか。
変数には、行の一番最後を記録しています。
宜しくお願いします。

409 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:16:47 ]
>>408
gyou = 300
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R" & gyou & "C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R" & gyou & "C1"
とか

410 名前:408 [2009/03/24(火) 02:24:39 ]
>>409
ありがとうございます。
その&の前後の半角スペースが必須なのですね…。
そのやり方を試していたんですが、やっと解決しました。


本当に助かりました!!!

411 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:31:21 ]
スペースの有無で&記号の意味が変わるのってVBの最大の欠点だよな。
誰でも一度ははまったことあるはず。

412 名前:デフォルトの名無しさん [2009/03/24(火) 07:47:15 ]
c言語より後にできたくせにc言語より駄目な言語ばっかりで凹むよね

413 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:25:05 ]
VBSのRegExpをユーザー定義関数としてADDIN化するとか、
Excelの機能自体を拡張出来るスクリプトとしては優秀だな。
ワークシート関数で、リアルタイムで正規表現使えるのは便利だYo!

使ってる人多いから、ADDIN、ADDONもネットで簡単に拾えるし楽ちん。


414 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:39:13 ]
質問です。

forをつかってstr(i)に繰り返しデータを入れるようにして、
複数のボタンのキャプションを設定したいと考えてます。

bt1、bt2、bt3…と一部の数字だけ違うのですが、
上手くループで処理する方法はありますでしょうか。

415 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:50:13 ]
>>414
Controls



416 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:15:32 ]
ありがとうございます!

後、追加で知りたいんですが、
空のセルをstring型に取り込むと、空のままだと思うんですが、
それをcase文で判定するには、nullや””じゃうまくいきません。

セルが空の時は何かまた違う値が入るんでしょか?

417 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:58:00 ]
セルの初期値はEmpty(定数:vbEmpty)だけど、Emptyなら「Case ""」にマッチするはずだし
String型変数にEmptyを代入するとNullStringに変換されるので、尚更「Case ""」で問題ない。
因みにNullString(定数:vbNullString)は""と同義ね。

「Case ""」にマッチしないなら、セルが空ではない可能性が高いと思う。
Debug.Print Len(変数)
若しくは
Debug.Print Len(セル)
で、0になるか確認してみそ。0じゃなかったら空セルじゃないってこった。

418 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:38:31 ]
>>417
ありがとうございます。
一応、msgboxで確認してました。

今よくよく考えたら、""ではなく、" "にしちゃってたかも知れないです^^;
もうアドバイスを踏まえ、もう一度試してみます!

419 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:57:58 ]
ちょっと色々やってみたんですが、controlsを使うものがうまくいきません。。。

Controls("CommandButton" & "i").Caption = "test"
というのを、ソースに直接書いても動かないんでしょうか?

Me. Controls("CommandButton" & "i").Caption = "test"
にしても動きません。

ネットで探してみても、Moduleに書け的な事もありますが、

Public Sub chg(ByVal i As Integer)
End Sub

の間に書いて、callしても動きません。
どこがいけないでしょうか?

420 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:08:18 ]
変数「 i 」が「 1 」だとして
Controls("CommandButton" & "i")
だと、ボタン名は
CommandButtoni だぞ。
CommandButton1 なら
Controls("CommandButton" & "i") ではなく
Controls("CommandButton" & i) だ。

こういうのもMsgBoxやDebug.Printで
MsgBox "CommandButton" & "i"
などを確認すればすぐに解ることなので、そういう問題起きたら
動かねーって騒ぐ前に初歩的な確認を行う癖を付けようぜ。

421 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:42:12 ]
すいません。
書き間違えました。
ソースはしっかりiのみで、””で囲んではないです;;

422 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:54:11 ]
Me. Controls
  ↑このスペースはNGだ。

これも書き間違いなら
Me.CommandButton1.Caption = "test"
が動くか試せ。

423 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:59:19 ]
ソースはコピペしろ
書き間違いがなくなるし早いだろ

424 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:28:58 ]
すいません。セルを選択して、選択したところから左側のセルに、
「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは


なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
時刻と日付の順序を反対にすると

ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。

なお、
excel:2000
OS;win2000です。
宜しくお願い致します。

425 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:33:11 ]
>>424
セルの書式



426 名前:424 mailto:sage [2009/03/26(木) 09:33:52 ]
>>424です。コードが一部抜けてました。>>424は破棄し、
丸々訂正させてください。丸々1から書き直すと下記になります。

すいません。セルを選択して、選択したところから左側のセルに、
「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date

なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
コードの時刻と日付の順序を反対にすると

ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。

なお、
excel:2000
OS;win2000です。
宜しくお願い致します。


427 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:45:43 ]
あのさ、そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか?
間違っても日付と時刻が隣同士にはならないぞ。

とりあえずエスパーすると
ActiveCell.Offset(0, -14).Range("A1").Value = Time
ActiveCell.Offset(0, -13).Range("A1").Value = Date
で良いんじゃないかと思うのだが。

428 名前:424 mailto:sage [2009/03/26(木) 09:58:12 ]
>>427
有難うございます!!!あっけなく出来ました。
感謝です。
しかし、
>そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか?
これは分かってますが、
>間違っても日付と時刻が隣同士にはならないぞ。
え?これがなぜだかサッパリ分かりません。
少なくとも隣り合うと思うのですが。
>>426でも
(0,-14)(0,-13)
と位置を指定したのですから、-14の次の数字は-13ですから、
少なくとも隣り合うと思っていたのですが。。。
一応本は読みました。

私のコードのどこがいけないのか、
もう少しご指摘願えないでしょうか。

429 名前:424 mailto:sage [2009/03/26(木) 09:59:37 ]
>>425
有難うございます。しかしそれではなかったです。

430 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:00:21 ]
offsetで - の値を使うときは用心すべし。
どうしても使うならば、

if activecell.columns < 13 then
を挟むとかしてエラー回避しないと、何ともお粗末になってしまうよ。

431 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:04:17 ]
if activecell.columns < 13 then

if activecell.column < 13 then   に訂正。

>>429
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

activecell.column が100で開始したとき、
offset(0,-13) で、87 を "select" してるでしょ。
んで、次に offset(0,-14) を "select” してるから、73に書かれる。
select したら activecellの場所変わるでそ。

432 名前:424 mailto:sage [2009/03/26(木) 10:14:10 ]
>>430
>>431
431さんご親切に有難うございます。

>select したら activecellの場所変わるでそ。
そういうことか!!!と思いました。
ご指摘頂きやっと意味が分かりました。
>>431のご説明は、間違えたコードの下にメモとしてコーピーさせて頂きます。
勉強不足を感じました。
本当に有難うございました。


433 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:39:51 ]
Controls("CommandButton" & i)でもやはり動きません…
subかfunctionがないと言われます。

またMeなどつけてもオブジェクトがおかしいと言われます。

何か宣言しないといけないとかありますか?

434 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:50:32 ]
>>433
Controlsはフォーム上のコンポーネントにしか使えない。
ワークシートに貼り付けたボタンの場合はControlsじゃなくて
Worksheets("Sheet1").OLEObjects("CommandButton" & i).Object.Caption = "test"

435 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:40:44 ]
>>433
>>414ではコマンドボタンのオブジェクト名が bt1、bt2…だけど、実際のオブジェクト名は?



436 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:47:13 ]
エラーメッセージが「Sub または Function が定義されていません。」なら
>>434で正解の可能性が高い。
質問するときはエラーメッセージを1文字も間違えずにそのまま書くのが基本だよ。
たとえ意味が通じても、勝手に略しちゃだめ。悪い例→「subかfunctionがない」
それにメッセージをそのまま検索すればたいてい解決方法が見つかる。

437 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:11:47 ]
質問です。

ブックオープン時に、publicのstringに
セルを読み込んでいます。

最初のうちはうまい事その中身を使えるんですが、
ずっとブックを開いたままにしていると、
気が付いたら変数の中身が変わってるのか、
消えるのか分かりませんが、最初の状態ではなくなってしまいます。

変数に値を入れたものを
ずっと保持しておく事はできないんでしょうか?

438 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:18:40 ]
>>434>>436
ありがとうございます!
ご教授頂いた記述でうまくいきました。

>>435
携帯から書き込んでいて面倒だったので省きましたが、実際は普通にCommandButton1です。



439 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 02:34:06 ]
>>437
Option Explicitは書いてある?

440 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 07:44:28 ]
>>439
書いてないです。
それを書けば延々保持され続けるんでしょうか?

441 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 09:00:01 ]
モジュールレベル変数の値は
・任意に代入、初期化
・モジュール内編集
しない限りは保持される。

誤って気付かない内に初期化するコードを書いてる可能性が無いのに不意に初期化されてるなら、
「モジュール内編集」に因るものの可能性が高い。

「モジュール内編集」とは、モジュールレベルの宣言部(Public xxx As Stringとか書いてるところ)
を書き替えるとか、新しいプロシージャを作成・削除するとか(既存のプロシージャ内の編集は非該当)
デザインモードを使用するとかね。

「モジュール内編集」を行ったらモジュールレベル変数が初期化されるのは当然のことでそれはどうしようも無い。

442 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 12:41:21 ]
まぁ、それ以外にも初期化されることがあるんだけどな

443 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:16:52 ]
例えば?

444 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:52:32 ]
[VBA] Public 宣言された変数の有効期間
support.microsoft.com/kb/408871/ja

445 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:56:29 ]
あー、そのページで、「モジュール内編集」以外が何なのか明記しておいた方がいいか。
・プロジェクトの構造の変更
・コンパイルエラーの発生
・コントロールを削除して [元に戻す] を実行する

ちなみに、そのほかにも初期化されることが経験上あった。

いずれにせよ「何もしてないつもりでも、変数が初期化されることはありうる」という前提で
プログラミングすべきで、意図しない初期化が困る場合は、シートに値を保存するなどを
しておく必要がある。



446 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:58:27 ]
あー、さらに追加。
「そのほかにも」の内容は、「なにもしてないつもり」だったので、何なのかは具体的にはわからない。

447 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 15:29:13 ]
へー

448 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:23:21 ]
>>437
static

449 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:01:14 ]
staticでも無力ですがな

450 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:38:26 ]
モジュールレベルの変数が初期化されるとき
つまりモジュールが初期化されるときは
モジュールレベルのプロシージャも初期化され
プロシージャレベルで保持されるStatic変数も
プロシージャの初期化に伴い当然初期化される

451 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:23:02 ]
ななめ読みしてレスで悪いんだけど、非表示シートに書き込んでおけば?

452 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:06:03 ]
すいません。
もし選択したセルがA1であれば、B1の値を7にする。
というのは何とかできました。

If ActiveCell = Range("A1") Then
Range("B1").Value = 7
End If

これと似たように
もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。
というのが出来ず困っています。一応下記のようにしましたが

If ActiveCell = Range("A1:A10") Then
Range("B1").Value = 7
End If

どうしても出来ません。

もし出来なければ、
「選択したセルがA列のいずれかであればB1の値を7にする。」

ということでも良いのですが。

識者の方お力をかしていただけないでしょうか。
宜しくお願い致します。
なおexcel:ver2000
OS:win2000になります。

宜しくお願い致します。

453 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:34:27 ]
If ActiveCell.Column = "1" Then

454 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:45:24 ]
>>453
有難うございます!
今日はもう遅いので、明日試させていただき、
追って報告します。


455 名前:452 mailto:sage [2009/03/28(土) 02:53:18 ]
すいません。列のいずれか、というのを教えていただき本当に助かります。
感謝してます。

しかし出来れば、

「もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。」
というケースも分かれば嬉しいなと思います。、
どなたか教えていただければ助かります。




456 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 03:16:16 ]
If Not Intersect(ActiveCell, Range("A1:A10")) Is Nothing Then
 Range("B7").Value = 7
End If

457 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:00:11 ]
ここは質問スレだがおまえの宿題手伝いスレじゃねーぞ
んなクソ簡単な命令くらい自分で調べて作れアホ

458 名前:452 mailto:sage [2009/03/28(土) 13:39:05 ]
>>453
有難うございます!出来ました!助かりました。
>>456
有難うございます!
出来ました。

お二人に助けていただき、エラーを防ぐプログラムが出来るようになりました。
本当に感謝します。

>>457
勘違いしてます。私は既に自分で調べて、試行錯誤して、
それでも分からなかったのでここで聞いてます。

>んなクソ簡単な命令くらい自分で調べて作れアホ
クソ簡単って。。。
自分まだVBA初めて10日ぐらいなんですよ。
あなたにとってはそんな簡単なこと、でも私にとっては
チンプンカンプンで難しいことが一杯あるんですよ。
でもなんとか自分で試行錯誤してるうちに、
これでも最初に比べれば飛躍的に自分で対処できるようになったんですよ。

459 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:54:26 ]
>>458
> 自分まだVBA初めて10日ぐらいなんですよ。

>>361
> VBA;多少使えます。
> VBA;多少使えます。
> VBA;多少使えます。
ふ〜ん

460 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:57:14 ]
>>1
> ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
>    コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
>    ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
お前のやってることはまるで教えてクンだ

461 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:10:19 ]
まあ俺の顔に免じてゆるしてやれよ

462 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:33:27 ]
>>457
心のちーせーやろーだなぁw


463 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 18:34:21 ]
亀レスだけど・・・。

>>437
シートに保持させるのが嫌なら、レジストリに放り込んでおくとか、
CGIでインターネットに変数保管しておくのはどう?

464 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:22:59 ]
>>463
>CGIでインターネットに変数保管しておくのはどう?

ネットにつながらない環境の時とか接続に失敗したらどうするのさ

465 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:41:40 ]
それが問題になるなら、それを選択しなければ良いだけじゃね?



466 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:32:23 ]
bookopenのイベントでレジストリキー書き換えが強固だな。


467 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:08:18 ]
437です。

レジストリに値をってのはやり方は全くわかりませんが、
その動作や処理自体特に問題のないものなんでしょうか?


468 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:20:46 ]
WSHでレジストリに変更加える訳でも無ければ、
ExcelVBAから触れるレジストリ領域は一か所だけだね。
VBAで触れる部分をどんだけ滅茶苦茶にしても問題は無いと思うけど。

個人的には、レジストリやINIの肥大化が嫌いなんで、
きちんと管理出来ないなら使わない方が良いかも。と思うよ。
レジストリエディタでVBAを介さずに値の削除、書き込みが出来ない内はお勧めしないよ。

今回の状況だと、素直にワークシートに値を書き込んでおくのが良いんじゃないかな。

469 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:21:36 ]
ExcelVBAのビルドイン関数って意味ね。

470 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:02:17 ]
>>468
ありがとうございます。
もう少し色々調べたいと思います。


471 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:14:12 ]
初歩的な質問ですみません。マクロの記録で操作記録されないようでお手上げです。

OS ビスタ
Excel2007使用です。

スピンボタンの設定で

LINKEDCELL = TARGET.ADDRESS

という部分をその左隣のセル指定に変更したく色々やりました。

稚拙な質問ですみません。よろしくお願いします。

472 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:55:25 ]

特定のフォルダに「品番」.jpg
A1〜A10に「品番」の羅列
B1〜B10に「品番」.jpgを自動的にセルのサイズに合わせて貼り付け(もし該当するファイルがなければunknown.jpg
A列の品番が変わると自動的に差し替え

現在は
A列にフルパスで参照したい画像のファイル名
挿入の数だけ下記のマクロ作ってやってます

Range("A2").Select
ActiveSheet.Pictures.Insert(Cells(1, 1)).Select

OSはXP エクセルは2003です
宜しくお願い致します

473 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:44:24 ]
丸投げ感たっぷりだなぁ

474 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:33:18 ]
すいません
最初考えた時はできなくて現在の妥協案になりまして
やっぱりもう一度やり直そうと考えたんですが、やっぱり挫折・・・
正直、丸投げしました

475 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:59:32 ]
>>472
ChangeイベントでTargetやTargetからの相対位置を対象とすれば良し

これで解らなければ、諦めるか、この程度は理解できるレベルまで自分で勉強しろ



476 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:07:04 ]
shell関数について質問です。

アプリケーションをwinword.exeを指定した時、
空白を含むパスのファイルが開けません。

C:\test 1\test.txtだと、
file:///test%201/test.txtと記述しないとうまくいきません。

セルからパスを読み込ませ開きたいのですが、
うまく開く方法はないでしょうか?

477 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:13:47 ]
>>476
"""C:\test 1\test.txt"""

セルに「C:\test 1\test.txt」と入っているなら
"""" & Range().Value & """"

478 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:23:54 ]
>>477
ありがとうございます。
今は外にいるのでまた明日試したいと思いますが、
ご教授頂いた記述はどういった意味になるんでしょうか?

479 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:33:33 ]
>>478
ここは初心者スレじゃない
基礎的な構文規則くらい自分で調べろ

480 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:06:18 ]
初心者スレなんてないんだから、初心者の質問でもいいだろ。
まぁ俺は答える気ゼロなんだがなw

481 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:15:01 ]
プログラム起動時のパラメータはスペースで分割される。
スペース入りのパスを渡す場合には、分割されないようダブルコーテーションで囲む必要がある。
ダブルコーテーションの中にダブルコーテーションを書く場合場、""と書く。

以上をあわせると、
"""abc def"""
"""" & range.value & """"
の意味がわかるはず。

482 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:15:55 ]
質問スレだろ?
変な研究とかの丸投げじゃなきゃ質問に答えてやれよ
どーせ分からないだけだろ

483 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:22:22 ]
>>482
偉そうなこと言ってる暇があるならお前が教えてやればいい
それとも質問者本人が煽ってるだけなのかな?

484 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:22:58 ]
これわからない奴なんてほとんどいないだろw

485 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:26:30 ]
>>483
そんなくだらん煽りなんかしないで、お前が答えてやれよ。



486 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:27:15 ]
丸投げでも良いじゃない。人間だもの。

487 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:41:46 ]
いや、俺にはわからん。
A2なのに(1, 1)になる理由とか、、、
>>484はわかるのか。すごいなあ。

488 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:49:44 ]
>>481
ご親切にありがとうございます。

489 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:50:44 ]
>>487
わかんねーなら黙っとけ糞が

490 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:53:50 ]
ExcelVBA覚えるのにおススメの本ありませんか?

当方のレベルは、超簡単なシェルスクリプトぐらいなら作りますが
VBAの文法とか構造がさっぱりわからなくて初学者向けから勉強したいと思ってます。

491 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:59:25 ]
Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!

492 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:05:29 ]
本屋に行って手に取ってみるぐらいの労力惜しむなよ…

493 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:11:58 ]
>>492
書評ってなんで必要だと思う?

494 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:13:09 ]
大村あつしの入門書っぽいの選んどけ

495 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:22:34 ]
うちのばあちゃんが、人の悪口ってのはコンプレックスの裏返しだって言ってた。
つまり>>489自己紹介乙



496 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:24:28 ]
>>493
(1) 書評欄を埋めるため
(2) 評論家がゼニをふんだくるため

497 名前:490 mailto:sage [2009/03/30(月) 23:46:29 ]
ありがとうございます
>>491
よさそうですね。見てみます。エロゲみたいなタイトルですが

>>492
>>494
実はすでに大村あつしの入門書を見たんですが最初は簡単だったのにいきなりむずかしくなって
自分には合わないなって思いました。
ほかたくさんあったんですがイマイチピンとこずここで聞きました。

498 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:52:18 ]
>>493
書評は別に必要ではないだろ

499 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:56:12 ]
できる大辞典 Excel VBA
がオススメ

大村あつしは知識はあるが根本的にバカなので
こいつの書いた本は素人にはオススメしない
バカな内容に引きずられないだけの基礎スキルを持っていて
知識だけ上乗せしたい中級者以降なら構わないが

500 名前:472 mailto:sage [2009/03/31(火) 00:04:55 ]
ヒントありがとうございます。助かります。

別のイベントで指定すれば良いんですね。やってみます。


501 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:57:31 ]
(^p^)あうあうあー

502 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:13:54 ]
>>475
changeイベントなんて1文字打ち込むごとに…

503 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:22:15 ]
…は発生しない
確定された時にのみ発生する

あとは変更確定されたセルが、目的のセル範囲かで条件分岐して処理すれば良いだけ

504 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:02:57 ]
1文字打ち込むごとにchangeイベントが発生するのはComboBoxやTextBoxなどだな

505 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:04:59 ]
>>499
著者は誰?




506 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 15:10:37 ]
Excel-VBAでXMLデータを引っ張ってるのですが
--------------------------------------------------------------
NGパターン
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
--------------------------------------------------------------
--------------------------------------------------------------
OKパターン
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "GET", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
-証明書確認画面が出る。(主導ではいを選択)-
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
--------------------------------------------------------------
POSTでリクエストを出すとエラーが返ります。
GETでサーバ証明書を取得後にPOSTを続けるとエラーが出ないので、証明書関連だと
おもってるのですが、オレオレ証明書でも無視して続行する方法を
教えて頂けないでしょうか。

507 名前:デフォルトの名無しさん [2009/04/01(水) 01:57:32 ]
>>506
ぐぐれ

508 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:26:40 ]
XPのExcel2007です。

次の流れのプログラムを作成しました。
1.テキストファイルを読み込み
2.不要データの削除
3.作表(列の追加など)
4.罫線・セルの色付け

プログラム自体は稼働し、結果も希望通りのものができました。

しかし、一度実行した後にもう一度実行すると、初回時に比べて処理時間がかかります。
マクロの最初と最後に、画面更新の停止と解除(screenupdating)も追加してみたのですが、改善にいたりませんでした。
一度ファイルを終了し、再度開きなおした場合の初回はやはり処理は早いです。

そういった現象を回避できる手掛かりを探しています。
ご助言をいただけましたら幸いです。


509 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:28:50 ]
再実行の前に、初回の実行したときのデータをすべて削除してるか?


510 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 15:37:54 ]
>>509
ありがとうございます。

データの削除は最初に行っています。
(Cells.Delete Shift:=xlUp)

使用しているシートは2つ。(2つとも削除しています)
1.テキストファイルを読み込むシートと読み込んだ後に、
2.別シートにすべてコピーしてから、不要データの削除や罫線処理を行っています。

何度か確認したところ、別シートにコピーしてからの処理が重くなるようです。

511 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:34:06 ]
>>507
証明書を入れて回避する方法は探せたけど
認証を無視する方法がみつからない。(回避じゃダメなので)
ぐぐって見つかるサイトがあるならURLを教えてください。

512 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:36:58 ]
>>510
とりあえずブックうp
外部に出せないデータとかは、適当な文字列と置き換えていいから

513 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:08:14 ]
>>508,510です。
ファイルあげてみました。よろしくお願いします。
ttp://uproda.2ch-library.com/lib116394.xls.shtml
DLパスは変更なしです。

外に出せないコードは削除してあります。
しかし一回目早く、2回目以降が遅いという現象はおきます。
何分手探りでVBAやっているため、コードが見づらいと思います。
(基本マクロ記録からいじくっているのが多いです)
よろしくご教授ください。

514 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:11:57 ]
>>513 ですが、一回削除してからうpしなおしました。

ttp://uproda.2ch-library.com/lib116395.xls.shtml
パス変更なしです。
お願いします。

515 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:20:32 ]
>>513-514です。
たびたび本当に申し訳ありません。
うまくあがってなかたったので、再度あげました。
ttp://uproda.2ch-library.com/lib116397.xls.shtml
お願いします。



516 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:29:06 ]
事務所名でてるから早く消せ

517 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:32:07 ]
>>516
最後にあげたのは全部消したはずなので、大丈夫だと思います。

518 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:45:18 ]
>>517
マクロの中に

519 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:06:53 ]
ありがとうございます。
先程削除しました。
今後はあげるのやめときます。
お騒がせしてすいませんでした。

520 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:55:05 ]
諦めるって事か
お疲れさまでした

521 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:33:11 ]
>>510
>データの削除は最初に行っています。
これは、マクロの中でやってるのか?
再実行する前に手で全部削除(コピー残すんじゃなくて)して再実行してみてどうだ

考えられる可能性は、コピーを残すことによりデータ量が増えて遅くなってるとか
空シートのクリアは早いがデータの多いシートのクリアは遅いとか

まあ、まずマクロのどこ(どの命令)が遅いか確認したら?

522 名前:非508 mailto:sage [2009/04/01(水) 20:12:53 ]
落としたやつを動かしてみたが、枠線とか背景色とかをいじってる所が遅くなるようだ。
セルでなくシートを削除して、新しいシートで実行すると速度が変わらないので、Excelの仕様の問題かと。
シートの中に何か覚えている部分があるんだろう。

523 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:40:12 ]
>>521、522
ありがとうございました。

その後、メモリの消去の命令とかいろいろ追加してみましたが、やっぱり駄目でした。
仕様ということであきらめてみます。
お見苦しいところを、多々お見せして、申しわけありませんでした。


524 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:45:51 ]
>>523
upし続けてくれる?
直ぐ消すと
見てくれる人も見てくれないよ

525 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:01:17 ]
開放する命令を出さないとダメだぞ。



526 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:36:17 ]
open ?

527 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:45:48 ]
初心者なんですが質問をさせてください。
ワークシートのセルに関数を入れて

 4(=index(〜)とかで4になったもの)
n = ↑のセル
range("a1")=n

とかにするとa1には=index(〜)がそのままはいってしまって。
値(この場合4)にしたいんだがどうすればいいか教えてください。説明が下手で申し訳ありません。

528 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:59:19 ]
自己解決しました。
マクロの記録でコピペして値のみでできました。
もし他にも方法があったら教えてください。

529 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:06:10 ]
ここって日本の掲示板だよな?
あまりにも日本語の質問が少ないんで
何処か日本以外の国の掲示板に迷い込んだのかと錯覚する…

530 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:30:14 ]
自然言語がちょっと乱れた程度で外国語と間違えそうになるなんてすごいです。
尊敬します。先生と呼ばせてください。

ところで先生は文末に約物だけを付けるのは正しい日本語とみなす派なんですね。

531 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:34:51 ]
どうしたの?

532 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 07:05:43 ]
自分で不自由て自覚あるみたいだから好きに呼ばせておけばいいよ

533 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 19:57:19 ]
4(=index(〜)とかで4になったもの)

もうね。メタ文字が入ってると、どんなパターンなのか考えてしまってダメだわ。


534 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:52:17 ]
日本語でOK

535 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:28:15 ]
>>527-528
だいたい俺んとこじゃそういうふうにならないんだが。
仮にC1に=INDEX(D:D,4)となってて
n=Range("C1")
Range("A1")=n
と.Valueを省略して書いてもA1には値が入るぞ?



536 名前:デフォルトの名無しさん [2009/04/04(土) 16:16:24 ]
かつてoffice2003で作ったxlsファイルでVBAを組んだのですが
それをoffice2007のxlsxで開こうとするとエラーになってしまいます。
もちろん保存するときにxlsで保存すれば開けるのですが。

xlsで作ったVBAはあくまでもxlsファイルでしか開けなく
互換性はないのでしょうか?

537 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:55:47 ]
>>536
マクロ付きの場合、xlsxではなくxlsmになる。
名前を付けて保存のダイアログのファイルの種類のところから、それ選べ。

538 名前:デフォルトの名無しさん [2009/04/05(日) 09:46:08 ]
ボタンが一個置いてあり、その下に、数字がはいった二つのセル(仮にセルA、セルBとする)がある。
で、ボタンを押すと、別シートの表の中からセルAと一致
するセルをもつ行のうち最初にみつかったセルの1マス右側のセルにセルBの内容を書き込む・・・

というようなことをVBAでやりたいのですが、
単純化したサンプルでいいんでどういうコードになるか教えていただけませんか

539 名前:デフォルトの名無しさん [2009/04/05(日) 10:28:13 ]
オートシェイプにMouseMoveとかのイベントはありませんか?

オートシェイプ上にカーソルが移動すると
オートシェイプに合わせたデータを表示する
というのプログラムを組みたいのですが

540 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:32:32 ]
>>538
With Sheet2
.Range(.Cells(1, 1), .Cells(10, 1)).Find(what:=Sheet1.Cells(1, 1)).Offset(0, 1) = Sheet1.Cells(2, 1)
End With

Sheet2が別シート、Sheet1がボタンがあるシートな。


541 名前:デフォルトの名無しさん [2009/04/05(日) 11:04:03 ]
>>540

ありがとうございました。
ちなみにセルAとセルBじゃなくて、
列Aと列Bだったとして、
列Aの内容と一致するデータを別シートから検索し、右隣のセルに列Bの
内容を書き込む、みたいな場合はどうなるんでしょうか

542 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:11:31 ]
丸投げよくない

543 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:48:36 ]
>>539
シェイプ系には無い
ActiveXオブジェクトには有る

矩形で良いならコントロールツールのイメージオブジェクト使うのが手っ取り早い
凝った形が良いならActiveXオブジェクト作って取り込めば良い

544 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 12:38:49 ]
>>539
無い。けど、マウス座標からObject位置判定を自前でやれば同じことはできる

できたとしても、定義済みシェイプを使う方法が面倒だと思う
シェイプと情報をうまく自動リンクさせる手法の方が難しいと思われ

545 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:58:18 ]
デフォルトプロパティって書くべきなんだよな?



546 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:59:21 ]
関数だと必ず()にして表記したほうがわかりやすいよな
仕事としての意味で

547 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:25:50 ]
>>451
非表示シートって表示できるの?
矛盾した質問で申し訳ない

548 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:16:03 ]
セルの値を二元配列に組み込みたいのですが、
簡単にする方法はありますか?
data(0, 0) = A1.value
data(0, 1) = A2.value
data(1, 0) = B1.value
data(1, 1) = B2.value
data(1, 2) = B3.value
のように一度に格納したいのです

549 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:21:55 ]
>>547
出来ない理由でも?

550 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:05:28 ]
>>548

Dim ary As Variant

ary = Range(Cells(1, 1), Cells(3, 3)).Value

これで配列に入る。
添え字は1始まり。

551 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:11:28 ]
>>550
ありがとうございます

552 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:01:28 ]
>>549
拾ってきたソースで非表示シートに値を入れてるのがあって
それを目で追うために見えるようにしたかったんだよ

553 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:11:41 ]
表示できない場合、うっかり非表示にしちゃったときどうするんだ

554 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:16:02 ]
>>545
保守的には書いたほうが良い。書くべき。
けど、VB6に限れば書かない方が速度が速い。もしかしたらVBAも・・・?
まあ、所詮Excelなんで筋違いか。2008は知らん。

555 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:26:50 ]
どこぞのサイトに書く場合と書かない場合の計測結果があったな



556 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:06:51 ]
書いた方がわずかに早いけど、そこまでスピードにこだわる処理にVBAは向いてない気が

557 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:43:34 ]
質問です。
Variantに複数のRangeを代入した際の動きって
どこかにドキュメントとかありますか?
いまいちアレが配列になる理由がわからない。

558 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:57:49 ]
>>557
どゆこと?

559 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:06:05 ]
それは代入以前の問題だろ

君は複数範囲のRangeオブジェクトのValueプロパティが、配列を返すってことを理解してないだけじゃん。
変数は単にValueプロパティが返した値をそのまま保持しているだけで、Variant型変数に代入したときに
何か変換とかが行われてるわけじゃないし。

560 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:09:38 ]
>>557
variantでメモリを確保します
最低16バイトです
そこに配列の値を入れていきます。増えたらVariantが確保してるメモリ量も増大します
終わり

多分可変長ってところでひっかかてるんじゃないかな

561 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:51:12 ]
>>558,560
複数のRangeといったのは、下記のような代入です。
Dim var as Variant
var = [A1:B3]

なんでvarに配列が入るのか不思議だったので聞きました。
(普通に先頭要素の値が文字列として入ると思っていたから)

>>559
うーん、そういうExcelのCOMの作り方であって、
別にVBA的な何かというわけではないのですね。

デフォルトプロパティの動作についてドキュメントないのかな。
CVarでも動作同じなのかな。

562 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:53:46 ]
つまり勘違いしてただけか

563 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:32:03 ]
Range型に不用意にVariantを使用しない。後で意味が分からなくなる。
デフォルト云々の前に、Variantは不定形型ということを理解すべき。

564 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:38:54 ]
range == stringの認識も改めたほうがよさそだね

565 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:45:48 ]
>>563
なにいってんの?ばか?



566 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:46:10 ]
>>564
を見てふと思ったんだけど、
やっぱり比較演算子と代入演算子が同じってのは分かりにくいよね。

>>563
ユーザー定義関数なんかで、セル指定or文字 を引数で使うみたいに、
明確にvariantじゃなきゃ条件分岐がしっかり出来ないって用途は限定されるしね。
まぁ、そんな目的だとしてもTypenameあたりでしっかりと何型が入ったかを判定させるべきだと思う。
入れっぱなし、とりあえず問題なく動くからOK。って作り方はわしゃ好まん。

567 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:10:16 ]
VBAでカレーライスって作れますか?

568 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 23:12:10 ]
>>567
外部マイコンをVBAで制御すればできる
もちろん、マイコンでカレーライスが作れるように設定しておいてくれ

569 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:27:07 ]
だがそれは、はたしてVBAで作ったことになるのだろうか?

570 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:41:36 ]
『パソコンはC言語で動いてる』の考え方次第じゃない?
目に見える結果にプログラミング言語は限定されないと思う
しいて言うなら、カレーライス製造装置の制御ソフトの大半がVBAなら、VBAで出来てるといえるのでは?
最悪、かーちゃんにメールするだけでも成立しそうだが

激しくスレチ乙

571 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:44:00 ]
なるよ

572 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 01:05:33 ]
「パソコンで年賀状作った」
「それはプリンタに作らせただけだろう」
みたいな話か

573 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 06:53:16 ]
最後にちょっと国内で加工すれば国産になるのと同じ道理ですな

574 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:04:10 ]
>>563は何か勘違いしてるの?
セルの値の配列をいっぺんに入れるならVariant型しかないじゃん。


575 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:38:27 ]
Range.Value()の代入先がVariant()型に限るってのもVBAの妙な仕様の一つだよな。
別にDouble()やString()を許容してくれてもよさそうに思えるのに。



576 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:02:15 ]
プロパティの定義が
Value As Variant
なんだから、妙でもなんでもなく当然だろ?

というか、配列じゃないときに変換関数も通さず別型の変数に代入できてしまう方が妙だ。
自動型変換なんてのは行われないのが普通だからね。

VB6以前やVBAにどっぷりハマっていると、自動型変換されるのが当然で、プロパティの戻り値を
プロパティの型とは別型の変数に代入できないという当たり前のことが不自然に感じてしまうものなのか?

577 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:22:28 ]
ならばセルに数値が入ってる時TypeName(Range("A1").Value)ってやると
Doubleが返ってくるのをやめてほしい。
Range("A1").ValueTypeみたいなデータ型を調べるプロパティを用意すべき。

578 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:39:47 ]
>>577
オブジェクト指向を一から勉強し直せ

579 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:40:13 ]
>>577
それはTypeNameが内部型を返すという仕様通りの結果だろ?
結局全てに置いて理解が浅いだけの話じゃん。
そして問題点を指摘しているのではなく、「俺の妄想通りに動かない」とブー垂れてるだけ。
ホント、どうしようもないな。

580 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:53:11 ]
じゃあ問題なのは一部の演算子で自動的に型変換が行われてしまうってこと?
VBAだと暗黙の型変換を禁止する方法ってないよね?

581 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:55:04 ]
>>580
何いってんの?馬鹿なの?

582 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:11:21 ]
>>580
それ、結構重要だと思うわ
最近のスクリプト言語でも思う
勝手に型変換して書いたソースをなんとか動く形に解釈してしまうのは
俺もダメだわ

583 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:20:39 ]
単純な変数への代入だと勝手に型変換してくれるのに
配列への代入だと型変換してくれない。
なんで統一してくれないの?

584 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:22:08 ]
VBAは中途半端に型があるからなぁ
VBSみたいに、もう型なんてバリアント以外禁止!にすればよかったんだよ

実行環境が勝手に型変換するのは、勝手に型変換するコードを書くからなんだがな
それは問題なんじゃなくて、そういう言語だと理解して使うしかない


585 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:25:23 ]
>>577
それって意味あるの?
ValueTypeプロパティがあったとして、
VarType/TypeNameが廃止なら、現状のVarType/TypeNameと何も変わりない。
見た目が変わるだけ。

一方、VarType/TypeNameが存在するとしたら、そっちは何をするんだ?
例えば、Variantであるという戻り値なら、そんなものソースコードを見れば自明だ。
ほかの方法は思いつかない。まさかValueTypeと同じとは言わないだろうし。



586 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:30:16 ]
「variantの使い方は気をつけよう」でおk?

初心者はよく勉強すること
熟練者は的確なスレをすること
反論だけのキチガイはスルーすること

587 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:33:36 ]
スレをする?

588 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:40:27 ]
Variantはまだいい方。
一番わかりにくいのはRangeオブジェクトだと思う。
よく使われることを想定したためか、かなりの省略が許容されているおかげで誤解も多い。

589 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:46:17 ]
別に解りにくいなんて思ったことは無いけどな
理解度が低かった初心者の頃以外は

590 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:59:16 ]
EntireRowとかのRow自体のRangeとか、
結合セル時のOffsetとか、Find・FindNextとかはわかりづらいと思った。

591 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:10:04 ]
理論的な思考が出来る人なら問題にはならないけどね
結局は個人の問題

592 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:15:09 ]
んなアホな

593 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:24:04 ]
まあ出来ないうちはそう思うのは仕方ない
解ってみれば単純な物だが

594 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:26:06 ]
うゎ、こいつうぜ

595 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:31:57 ]
ここはヒトの理解というものについて考察するスレじゃないというのは、
論 理 的な思考が出来る人なら問題にはならないけどね。



596 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:36:17 ]
悔しかったの?

597 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:39:06 ]
Cellsの使い方がおかしい奴は多いねぇ。
Set r = Range("a1:b5")
r.Cells(2,1).hogehoge
なんてやつ見るとアフォかと。

598 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:40:46 ]
なにやってんのそれ?w

599 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:49:29 ]
やってることはどうでもRange("a1:b5") がセルの集合だからCellsを使うのはおかしいってこと。

600 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:58:52 ]
>>599
ただの相対参照じゃねーの?

601 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:07:32 ]
>>597
複数セルに対するCellsで第二引数まで指定するのは確かにおかしいが
やってる奴は滅多に見ないぞ

複数セルに対するCellsで第一引数のみの指定や
単一セルに対するCellsで第二引数まで指定するのならよく見るが、これらはちゃんと意味有るし

前者は範囲内、若しくは範囲の延長上で右下方向に何番目のセルという指定で
Range("A1:E5").Cells(12)なら、A1:E5の5行5列範囲で右下方向12番目ということで
1  2  3  4  5
6  7  8  9  10
11 12
のような感じで3行2列目のB3を返す

後者はOffsetの初期インデックス違いのようなもので、Offsetが0始まりなのに対して、Cellsが1始まり
Debug.Print Range("A1").Cells(3, 3).Address(0, 0)
Debug.Print Range("A1").Offset(2, 2).Address(0, 0)

因みに前者のような使い方があるので、「(親が)セルの集合だからCellsを使うのはおかしい」って言い方は不適切だな

602 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:35:18 ]
問題は、RangeもCellsもRangeオブジェクトを返すのに、その明確な
使い分けができてないことだろ

603 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:40:10 ]
使ってればそのうち使い分けられるようになるさ。

604 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:54:34 ]
いや、たしかに自然と使い分けてるんだが、
問題としては、使い分けの方法ってか、指針を説明できないってことなんだ

今だから白状するが、俺は初心者の頃は、Cellsは単一セルそのものを返してると思ってた
まあ、だからRangeとCellsの使い分けはあんまり悩まなかったが、かといって
範囲が1×1のレンジ操作はCells使えってのも、なんかちょっと違う気がする

605 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:06:00 ]
>>597がおかしいのは
r.Cells(2,1).hogehoge じゃなくて
rItem(2,1).hogehogeとかr(2,1).hogehogeって書けって意味だよ。
r.Cells(2,1).hogehoge ってr.Cells.Item(2,1).hogehoge の意味だけどセルの集合にわざわざ再度Cellsを使うのは無駄ってもんだ。
例えばCells(2,1)もCells.Cells.Cells(2,1)も同じセルををさすが、動けばいいってもんじゃねーからな。
EntireRowとかのセルの集合じゃないものにCellsを使うのは意味があるが>>597ではCellsは無意味だね




606 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:19:44 ]
r.Cells(2,1).hogehogeがr.Cells.[_Default](2,1).hogehogeの意味だって突っ込みは無しよ。

607 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:41:21 ]
>>605
デフォルトプロパティを省略するなって議論が上の方にあったな
だが実際問題、Cells.Item(2,1)なんて書かないなぁ
デフォルトプロパティがインデクサとして作用するなら普通みんな書かないんじゃない

まあ、そのせいで、Cells(2,1)はプロパティ取得じゃなくて、
Cellsというメソッドを2と1という引数で呼び出してると勘違いしてる時期があった

VBAの入門書とか、そのへんちゃんと解説してるようなのはほとんどないと思う
ちゃんとしたコード読まないと、ちゃんとしたコードかけるようにならないってことだな

ただ、Range.RangeとかCells.Cellsとかは感覚的におかしいと思うんだが
Range.Cellsは感覚的におかしいと思わないんだよなぁ

608 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:12:17 ]
>>607
Excel95の頃はCellsはメソッドじゃなかった?
中身は実質変わってないのかな?

609 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:27:47 ]
ソース見てRangeがオブジェクトかプロパティかわからない俺参上
Range("A1") = "abc"
たとえばこれはオブジェクトでデフォルトプロパティのValueが省略、でいいの?

610 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:52:48 ]
Rangeはオブジェクトを返すプロパティだよ

611 名前:デフォルトの名無しさん [2009/04/07(火) 17:35:05 ]
EXCEL2003です

セルの書式設定の[表示形式]定義が[文字列]かどうか
判断する方法を教えて下さい。
やりたい事は「日付を表すデータ」([表示形式]が[日付]とは限らない)が
元々どのように入力されているか判断したいのです。
具体的には、
文字列で「3/1」、「2009/3」「2009/3/1」と入力されて
いるのか、日付データで「2009/3」等と入力されているのかの
判断方法は、どうすれば良いかということです。

よろしくお願い致します。






612 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:40:30 ]
>>611
NumberFormatLocal

613 名前:デフォルトの名無しさん [2009/04/07(火) 22:14:32 ]
文字列で"0.1"とか"1"をDoubleに変換したいです。
且つ、"abc"のようなものなら失敗して欲しいです。
CDbl()でよいと思うのですが、"abc"などを渡した場合どのように失敗を通知してくれるのでしょうか?
例外などですか?このときの例外の補足の仕方を教えていただけますか?
宜しくおねがいします


614 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:24:36 ]
On Error GoTo xxxx
でエラートラップ
Err.Numberでエラーの種類しらべてしかるべき処理

はっきりいってVBAのエラー処理はおまけみたいなもんだ
変換してエラーでる可能性があるとわかってるなら、
変換する前に変換元が数字かどうかぐらい自分でチェックするほうがいいと思うぞ


615 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:34:04 ]
>>614
それは他の言語とどこが違うの?



616 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:41:15 ]
>>614
ありがとうございます。m(_ _)m

アドバイス助かります。自分でエラーチェックすべきか、
オブジェクトの例外スローに期待すべきかも悩んでました。
とりあえず試してみます。
例外が送出され、それを捕らえて上手くメッセージが出せたらそれに越したことはないものですから。。



617 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:42:55 ]
>>615
エラー処理ルーチンにうつった場合の、それ以降の処理が非常にややこしくなるんだ
まあ、詳しくは構造化エラー処理あたりでぐぐってみてくれ

で、613はJava系のプログラマか?
VBAで例外スロー、キャッチとか考えんほうがいいぞw


618 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:50:08 ]
つーか、IsNumericじゃダメなの?

619 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 06:07:31 ]
IsNumericかregexを使う

620 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:11:12 ]
vbのエラー処理ってこんなかんじだったかな

1:
on error resume next
(処理)
if err.number = xxx then

end if
on error goto 0

2:
on error goto eh
(処理)
exit sub/function
eh:
(errで分岐したり処理したりする。resume next で戻ることも出来るが、大体はそのままプロシージャを抜ける。)

621 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:15:33 ]
負の日付を判断する関数ってあります?
もしくは負の日付か判断する方法があったら教えてください

isDate(負の日付)や変数 = 負の日付とかするだけでエラーに飛んでしまって・・・

622 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:07:38 ]
まず、負の日付の定義についておしえてくれ


623 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:45:02 ]
1899/12/29以前ってことか?
俺のとこじゃDate型の変数にCdate("1872/8/13")を入れてMsgBox IsDate(変数)とすりゃTrueだけどな。
直にMsgBox IsDate(-10000)だとFalseだが。
エラーにはならんな。

624 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:07:01 ]
>>622-623
説明不足でもうしわけないです
表示形式が「日付」のセルに、例えば9999999999って値を打つと
####と表示され、マウスカーソルをあてると「負の日付または時間は####と表示されます。」
と出てきまして、そこの値をvbaの方で参照しようとして落ちているという状況です
(日付型のとこには0〜2958465以外の数値だと日付シリアル対象外でこうなるようで・・・)

関数があれば〜と言いましたが、代入するにしろ引数にするにしろ、
参照した時点で落ちてるので関数があっても意味がないと思い、
結局エラーに行かせた先で判断するようにしました

どうもありがとうございました

625 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:19:05 ]
>>624
Value2プロパティが2958465以下かで判断する方法もあるかもね。
ValueプロパティだとオーバーフローのエラーだがValue2だとオーバーフローしないから。



626 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:59:38 ]
>>625
知らないプロパティだったんで早速調べてみたんですがこれで行けそうです!
>>625氏の言うとおりの方法で範囲外なら無効な日付とメッセージを出すようにしてみました

出来ればエラーに飛ばしたくないと考えていたので助かりました
どうもありがとうございます!


627 名前:611 [2009/04/08(水) 17:37:10 ]
>612
レスありがとうございます


628 名前:デフォルトの名無しさん [2009/04/09(木) 00:08:50 ]
EXCELファイルがどのバージョン(EXCEL97、2000、2003)で
作成されたものか調べる方法を教えてくれ神ども。

629 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 05:48:16 ]
拡張子は?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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