Excel VBA質問スレ Part10 at TECH
[2ch|▼Menu]
[前50を表示]
250:デフォルトの名無しさん
09/03/13 21:22:33
ピボットテーブルでは集計しか出来ないから

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

252:デフォルトの名無しさん
09/03/13 21:31:26
おれはVBAしか出来ないからどう困るか想像できんのだけど

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

254:デフォルトの名無しさん
09/03/13 22:30:59
なるほロケット

255:デフォルトの名無しさん
09/03/13 23:22:45
そのレベルの奴しか周りにいないなんて可哀相だな

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

257:デフォルトの名無しさん
09/03/13 23:51:54
>>250
Excelなんて集計にしか使わないだろ。

258:デフォルトの名無しさん
09/03/13 23:56:42
集計なんてAccessでしかやらんが。

259:デフォルトの名無しさん
09/03/14 00:04:19
>>258
Excelでは何やってんの?

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

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

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

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

263:デフォルトの名無しさん
09/03/14 04:55:41
全部思いこみだねえ

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

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

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

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

268:デフォルトの名無しさん
09/03/14 07:59:58
>>267
保守できないのは努力が足りない?


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

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

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

272:デフォルトの名無しさん
09/03/14 10:35:25
この話題が出てるときに、このあからさまなネタw

273:デフォルトの名無しさん
09/03/14 11:11:34
この話題だから書いただけなのに

274:デフォルトの名無しさん
09/03/14 12:01:08
で?

275:デフォルトの名無しさん
09/03/14 12:11:44
<font size="2">

276:デフォルトの名無しさん
09/03/14 12:13:50
そんなにExcelがすきなの?

277:デフォルトの名無しさん
09/03/14 12:48:21
すべてvbaで作って自分しか保守れないようにするんだ

278:デフォルトの名無しさん
09/03/14 12:51:28
</font>

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

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

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


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

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

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

283:デフォルトの名無しさん
09/03/14 17:13:43
>>282
VBS・・・?

284:デフォルトの名無しさん
09/03/14 17:17:05
COMのVBScript.RegExpのことじゃないの?

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

286:デフォルトの名無しさん
09/03/14 19:38:32
フォントは自由に選べますよ

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

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

289:デフォルトの名無しさん
09/03/14 19:58:29
Range("A" & i)



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

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

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

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

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

295:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/15 01:58:36
うそ、仕様が変わったのか?

297:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/15 02:16:28
確か丸めは環境依存だったような。
確実な方法では無いから普通は使わないけど。

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

300:デフォルトの名無しさん
09/03/15 07:27:51
>>297やってみたら

97%くらいは
0

3%くらいが
0.015625

だった

301:デフォルトの名無しさん
09/03/15 11:17:35
Waitやってるやつ環境くらい書けば?
XP, Excel2000,はOK

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

303:デフォルトの名無しさん
09/03/15 15:02:00
今やってるのは100ミリ秒だろ

304:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/15 16:53:42
>>304
Application.Wait [NOW()+"0:00:00.25"]
だとどう?

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

307:デフォルトの名無しさん
09/03/15 16:58:07
>>297はXPSP3 Excel2007

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

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



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

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

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


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


313:デフォルトの名無しさん
09/03/15 19:00:50
お前ら、よく知らんことには口出すな

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

315:デフォルトの名無しさん
09/03/15 19:26:36
なんらかのトリガ時に両方見ればいくね?

316:314
09/03/15 19:32:44
>315
ごめんなさい。よく分かりません。

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

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


319:デフォルトの名無しさん
09/03/15 21:59:07
>>314
URLリンク(www1.axfc.net)
He_205317.xls
Pass : prog

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

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


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

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

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

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


325:デフォルトの名無しさん
09/03/18 22:24:01
ブックごとうpしろ
出来ないなら帰れ

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

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


327:デフォルトの名無しさん
09/03/19 01:07:54
>>326
Bマクロでブレイクすれば、データが取れるの?

328:324
09/03/19 01:46:10
Bマクロでブレイクして、データ取得はできます。

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



329:デフォルトの名無しさん
09/03/19 04:04:03
Call

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

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


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

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


332:324
09/03/19 10:55:03
>>329
Callは書いても書かなくても一緒でした。

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

334:デフォルトの名無しさん
09/03/19 11:30:57
プロシージャ

335:デフォルトの名無しさん
09/03/19 13:07:50
prэsi':dзэ(r)

336:デフォルトの名無しさん
09/03/19 15:41:11
手続き
と日本語で解釈b

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


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

339:デフォルトの名無しさん
09/03/20 06:53:59
' を頭に結合させてみてはいかがかな。

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

340:デフォルトの名無しさん
09/03/20 07:27:25
>>339
上手くいきました!
ありがとうございます!

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

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

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

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

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

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

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

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

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

346:デフォルトの名無しさん
09/03/20 19:39:25
これってどう?

Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
URLリンク(www.amazon.co.jp)



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

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

349:デフォルトの名無しさん
09/03/21 00:00:39
はぁそうですか

350:デフォルトの名無しさん
09/03/21 00:40:17
Excel VBAしか知らないから
俺には丁度いいかも

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

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

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

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

353:デフォルトの名無しさん
09/03/21 12:02:05
Flash厨うぜえぞ

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

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


355:デフォルトの名無しさん
09/03/21 15:49:14
attachですた。

356:デフォルトの名無しさん
09/03/21 15:59:42
attach No.1・・・って、違うか?!

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

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

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

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

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

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

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

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

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

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

宜しくお願い致します。

362:デフォルトの名無しさん
09/03/22 10:43:12
ActiveCell = Range("R24")

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

363:デフォルトの名無しさん
09/03/22 10:55:31
lol

364:デフォルトの名無しさん
09/03/22 10:58:01

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


365:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/22 11:45:26
cell(2,5).value = cell(1,1).value
cell(2,5).interior.colorindex = RGB(255,255,255)
こんな感じだった気がする

367:デフォルトの名無しさん
09/03/22 12:16:38
>>366
cell → cells
colorindex → color

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

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

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

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

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

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

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

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

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

375:デフォルトの名無しさん
09/03/22 22:54:11
Sub test()

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

End sub

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



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

377:デフォルトの名無しさん
09/03/22 23:08:07
>>374
え、付けるべきプロパティが解らないの?

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

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

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

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

379:デフォルトの名無しさん
09/03/22 23:34:11
>>378
>>362

380:デフォルトの名無しさん
09/03/23 00:01:22
おれが即座に>>362でレスしたのはスルーだったわけだ

381:365
09/03/23 00:07:42
>>380

いえ、>>365の最初

ActiveCell = Range("R24").Copy

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

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

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

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

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

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

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

384:デフォルトの名無しさん
09/03/23 00:11:04
なんでマジになってるの?

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

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

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

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

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

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

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

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

393:デフォルトの名無しさん
09/03/23 00:19:50
右辺を省略すると誤作動起こす可能性があるぞ。

394:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/23 16:42:29
Write バイト配列

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

なおexcel=2000
OS=2000

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


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

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

数式
データ
書式設定

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

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


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

400:デフォルトの名無しさん
09/03/23 23:18:54
>>399
有難うございます!!!
今やったら出来ました。

大感激です!!!!!

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

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

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

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

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


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

406:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/24 01:31:26
>>404
少なくとも最初のエラーはマクロの記録で解決するはず
自分で直せる部分は自力でやらせる方針なんで

408:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/03/24 02:24:39
>>409
ありがとうございます。
その&の前後の半角スペースが必須なのですね…。
そのやり方を試していたんですが、やっと解決しました。


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

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

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

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

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


414:デフォルトの名無しさん
09/03/25 21:39:13
質問です。

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

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

415:デフォルトの名無しさん
09/03/25 21:50:13
>>414
Controls

416:デフォルトの名無しさん
09/03/25 22:15:32
ありがとうございます!

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

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

417:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/25 23:38:31
>>417
ありがとうございます。
一応、msgboxで確認してました。

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

419:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/26 07:42:12
すいません。
書き間違えました。
ソースはしっかりiのみで、””で囲んではないです;;

422:デフォルトの名無しさん
09/03/26 07:54:11
Me. Controls
  ↑このスペースはNGだ。

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

423:デフォルトの名無しさん
09/03/26 07:59:19
ソースはコピペしろ
書き間違いがなくなるし早いだろ

424:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/26 09:33:11
>>424
セルの書式

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

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

429:424
09/03/26 09:59:37
>>425
有難うございます。しかしそれではなかったです。

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

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

431:デフォルトの名無しさん
09/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
09/03/26 10:14:10
>>430
>>431
431さんご親切に有難うございます。

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


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

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

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

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

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

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

437:デフォルトの名無しさん
09/03/27 00:11:47
質問です。

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

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

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

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

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



439:デフォルトの名無しさん
09/03/27 02:34:06
>>437
Option Explicitは書いてある?

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

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

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

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

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

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

443:デフォルトの名無しさん
09/03/27 13:16:52
例えば?

444:デフォルトの名無しさん
09/03/27 13:52:32
[VBA] Public 宣言された変数の有効期間
URLリンク(support.microsoft.com)

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

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

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


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4842日前に更新/170 KB
担当:undef