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)
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の場所変わるでそ。