1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/ ★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)
648 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 17:56:18 ] Open ファイル名 For 開き方 As #ファイル番号 というコマンドの「#」の意味を調べてみたんですが 言及されてなくてわかりません。 この#にはどんな意味があるのでしょうか?
649 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:08:33 ] あるブックをアクティブにすると同時にマクロを走らせることって可能ですか?
650 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:25:52 ] >>648 「#」は「ナンバーサイン」とも言う。そして、例えば「2番目のvoid」を「void#2」とも書く。 その意味を込めてMS-BASICで採用された仕様だ。
651 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:55:24 ] >>649 Workbook_WindowActivate
652 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:04:08 ] >>650 ほえー!ずぅっとシャープだとばかり思ってました。 番号を表す「ナンバーサイン」という記号だったんですね。 勉強になりました。ありがとうございます。 >>649 そのブックに、Auto_Open()のモジュール名で記述されたプログラムは ブックを開くと同時に実行されます。
653 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:08:00 ] 開くときではなくアクティブにしたときでしょ?
654 名前:652 mailto:sage [2009/01/25(日) 19:12:30 ] 確かに。読み間違えました。 どうもすみません。
655 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:40:49 ] >>651 ありがとうございます。 もう一つ質問です。 非アクティブ状態のシートのアクティブセルの参照はどうすればいいでしょうか? 現在ブックBがアクティブ状態で Cells(1, 1) = Workbooks("A.xls").Worksheets(1).ActiveCell.Offset(0, 1) のような処理はオブジェクトはプロパティ・メソッドをサポートしてないと言われました。 ブックAをアクティブにしたくないのですけど、やはりブックAをアクティブにしてからでないと無理ですかね?
656 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 20:29:26 ] そもそも、ちょっと考えてみれば当然のことだが アクティブじゃないシートにはアクティブなセルなど存在しない それにActiveCellはWorksheetオブジェクトのメンバではなくExcelオブジェクトのメンバなので 上位オブジェクトを指定するならExcel.ActiveCellのようになり、Excel以外は指定できない つまり、「(A):非アクティブなシートのアクティブセル」って概念自体が間違いであり 君がやりたいことは「(B):非アクティブなシートが最後にアクティブだったときにアクティブだったセルの取得」 と表現するのが正しい というわけで、存在しないもの(A)は取得できないので、(B)を取得するには 任意のシートにアクティブセルが存在するようにしてやる(任意のシートをアクティブにする)か、 アクティブセルの移動を監視記録するのどちらかだな 表示を止めてアクティブにしたのが見えないようにも出来るが、それでも前者が嫌なら後者しかない
657 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 21:02:48 ] うぜーよ
658 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 22:30:01 ] べつにうざくはないが、よくそこまで親切にレスできるのかと関心する 職場で部下に教えるならまだしも、2ちゃんで赤の他人に教えるだけで
659 名前:デフォルトの名無しさん [2009/01/25(日) 23:23:32 ] EXCEL97です ActiveSheet.PageSetup.LeftHeader = "&18 1月12日 &A" このなかの1月12日の部分をnow()+2かstring型の変数を使いたいのですが方法はありますか
660 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 23:36:15 ] ActiveSheet.PageSetup.LeftHeader = "&18 " & Format(Now() + 2, "m月dd日") & " &A"
661 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 23:51:02 ] >>656 丁寧にありがとうございます。 >アクティブじゃないシートにはアクティブなセルなど存在しない これが確認できれば出来れば十分です。
662 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 16:18:41 ] ActiveとSelectを混同してると見た 俺がちょっと前までそうだったから
663 名前:デフォルトの名無しさん [2009/01/26(月) 19:12:35 ] 質問です。 データをシステムから取り込んだエクセルファイルなんですが、 セル内の数値の先頭に半角スペースがついてしまいます。 たぶんこれが原因で、数値の大小がおかしくなります。 例えば 変数=20.222 if 変数>10.333 then これで =falseとなるんですが何か対処法はないでしょうか。 セルをダブルクリックしてEnterで先頭のスペースは消えて数字扱いとなります。 セルの書式は未選択状態です。 ファイルがで手元にないので詳しいことはすいません。
664 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 19:51:29 ] >>663 変数="20.222 " if value(trim(変数)) > 10.333 then
665 名前:664 mailto:sage [2009/01/26(月) 19:58:01 ] すまん、ワークシート関数と勘違いしました。 val(trim(変数))
666 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 20:58:54 ] >>663 元のデータは変えちゃいけなくて、VBAでなんとかするなら上のレスのとおり。 修正してもいいんならシート全体を選択してコピー→そのまま貼り付けして、 黄色いびっくりマークをクリックして「数値に変換」
667 名前:デフォルトの名無しさん [2009/01/26(月) 20:58:56 ] 質問よろしいでしょうか。 乱数を生成させて、結果によって単純な算術演算を行うプログラムで統計を取っています。 会社のPCで結果が出るまでに2時間はざらなのですが、 会社のCPUがpen4 3Ghz 自宅のCPUがcore i7 940 2.93Ghz 単純なプログラムなので、劇的にはかわらないまでもすこしは早くなるかと思ったんですが、 逆に遅くなりました。 8コア中 1コアしか使用率があがらなかったので、単純にクロック数の問題だと思うのですが、 VBAで8コアフルに稼動させるようなソースは書けるんでしょうか? しかし、前の乱数値の結果が次に影響するような演算なので、 追い越してなにかを処理しておくというのは意味なさそうです。
668 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:00:29 ] >>663 csvでも取り込んでいるのかな? csvファイルの仕様がおかしいんで内科医?
669 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:04:13 ] >>667 そりゃ無理だ。VBAが今後マルチスレッド化されたとしても、単純なプログラムでは1コアしか使いようがない。 まさかとは思うが、シートの更新を止めてないとか言わないよな。
670 名前:667 [2009/01/26(月) 21:10:32 ] >>669 ですよね;−; シートの更新は止めています。 シートへのアクセスも極力抑えて、演算に必要な数値はすべて配列で確保しています。 実行時間は単純に量の問題です、10億試行とかそういう回数なので…
671 名前:デフォルトの名無しさん [2009/01/26(月) 21:11:18 ] www.nicovideo.jp/watch/sm5947975
672 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:14:15 ] >>668 単純なcsvの読み込みなら、たとえ " 123 " みたいにダブルクォートで囲ってあっても 強制的に数値化されてしまうので逆に困るくらい。
673 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:17:18 ] >>670 そんなに回数が多いならVBAじゃなくてもっと演算向きの言語にしなよ。 必要ならそいつをVBAで起動すればいいんだし。
674 名前:デフォルトの名無しさん [2009/01/26(月) 21:18:21 ] 664-666 ありがとうございます。 明日試してみます。
675 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:23:52 ] >>670 10億回程度のループならそんなに多いとは思わんけどな。 無駄に時間のかかるプログラムって、アルゴリズムやコーディングに問題があることが多いけど、 誰か詳しい人には相談した? それから基本的なこととしては、Variant型の変数は使ってないよな? あとは乱数の発生を別のプロセスにやらせてファイルにどんどん書き出していくとか、 そもそも数値計算にVBAを使うこと自体が疑問なので、全体をコンパイラで書き直すとか。
676 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:26:21 ] 675の言うことには耳を貸さないのが吉
677 名前:667 [2009/01/26(月) 21:43:17 ] いろいろアドバイスありがとうございます。 すいません統計などと洒落たことを言ってしまいましたが、 プログラム自体はパチスロ機のシミュレータです。 自分ひとりでつかうならいいんですが、 プログラム知識0の人へのインターフェイスや出力、視覚化も兼ねているので…。 そして残念なことに、このシミュレータの作成は片手間でやらないといけないので、 うまいこと作り直す時間も知識もありません…。 同じ課でたまたまプログラムの知識があった私が任されています… ので同じ課にはわかる人はいません…。 もちろん実機担当に質問はできますが、手一杯だとは思います…。 アルゴリズムはやりようがあると思いますがなるべく実機に近くなるようにしています。 実機はもちろん人の操作によって一連の流れになるので、 アルゴリズムも単純な上から下です。 実行時間は現状でそれなりに満足しています。 10億試行は最終的段階なので、普段は5分とかそういうレベルです。 ただ、環境(CPU)による違いがなかったので質問した次第です。 気遣いありがとうございました。
678 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:31:23 ] 会社のCPUがpen4 3Ghz 自宅のCPUがcore i7 940 2.93Ghz で逆に遅くなるってのは悲しいな 結局クロックが全てか てか 実機担当って職業プログラマーが居る、その会社は何だろう 気になる
679 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:41:48 ] パチンコ機屋じゃないの?
680 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:30:39 ] >>678 うちは北森コアのPen4 3.4CGHzとi7 965(3.2GHz)を使ってるが 1スレッド処理でもi7の方が速いぞ そもそもCPIもバス帯域もメモリコントロールも拡張命令も勝っているi7が 0.07GHz程度の実周波数の差程度でPen4に負けるのはおかしい 会社のPCがベースクロック3GHzの石を使ってOCしてるとかじゃなければ 君が自宅で使ってるi7のPCは、構成に問題有りで何処かに極端なボトルネックが 発生していると思われる
681 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:32:56 ] 質問です。 EXCELシートにハイパーリンク貼って、そのシートをブラウザでプレビューすると ブラウザにもハイパーリンクが表示されるけど そのブラウザ上のリンクをクリックした時に Private Sub Workbook_SheetFollowHyperlink を起動することってやっぱ無理かな?
682 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:38:43 ] >>680 自宅PCは省電力でクロックダウンしているんじゃないか?
683 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:59:12 ] >>681 自分でHTMLとVBScript or JavaScriptでそういうコードを書けばできなくもないだろう。 つまり、VBAでは無理だ。
684 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 00:37:43 ] 何かにCPUパワーを喰われてるとか 「遅くなった」のが実は0.01秒程度の差だったとか もし自作ならドライバがちゃんと入ってないとか
685 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 04:47:10 ] CommandButtonでClickイベントが呼ばれたときに、そのボタンのキャプションを取得したいのですが、 よい方法はありませんでしょうか? ネットのフォーラムなどの情報では、 ActiveSheet.Buttons(Application.Caller) や ActiveSheet.DrawingObjects(Application.Caller) などでオブジェクトを取得できるとあるのですが、 プロパティがない、などと言われます。 代替手段はないものでしょうか? 環境:Excel2007
686 名前:685 mailto:sage [2009/01/27(火) 04:54:33 ] すいません。そもそも _ClickイベントやMouseDownなどではApplication.Callerは使えないですね。 どうしたらよいのだろうか
687 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:11:01 ] >>686 押したボタンのクリックイベントに適当に書くのが普通じゃない?
688 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:23:04 ] >>685 コマンドボタンには2種類あるでしょ。 挿入を選ぶとコントロール(部品)の一覧が出てきて 上段が「フォーム コントロール」、下段が「ActiveX コントロール」ってなってるやつ。 下段の方のボタン使ってる?
689 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:38:13 ] >>685 「マクロの登録」で登録されたマクロはコマンドボタンのクリックで呼び出される Sub test() MsgBox ActiveSheet.Buttons(Application.Caller).Caption End Sub
690 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:43:14 ] >>688 マクロが登録できるのはフォームコントロールの方だぞ
691 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 06:11:34 ] >>686 そもそもCommandbutton1のClickイベントで呼ばれるのはCommandbutton1_clickなんだから、 Private sub commandbutton1_click Msgbox commadbutton1.caption End sub で、いいんじゃねーの? クラスモジュール使って擬似コントロール配列にしてるとしても、どうにでもなんじゃん アホなの?
692 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 07:45:56 ] >>690 両方出来るぞ
693 名前:685 mailto:sage [2009/01/27(火) 10:53:06 ] 教えて! Watch Excel VBA Application.caller エラー2023について oshiete1.watch.impress.co.jp/qa4024188.html ここの方法でいけましたが、もう少しスマートな方法がないかな?と。 >>687 >>691 10個あったら、10個分イベントと名前の組をかかないといけないですよね。 冗長性があります。 >>689 ActiveXの方では無理っぽいです・・・ >>688 ActiveXの方を使っています。 やりたいことはボタンのキャプションを取得することなので、 できるのであればフォームコントロールの方でもよいのですが・・・
694 名前:685 mailto:sage [2009/01/27(火) 10:57:08 ] URL間違えました。こちらでした。 moug|即効テクニック | コマンドボタンのクリックイベント内でボタン名を取得するには www.moug.net/tech/exvba/0150059.htm
695 名前:デフォルトの名無しさん [2009/01/27(火) 16:07:22 ] シート保護はprotectで非保護はunprotectでいいですか?出先なので簡単な質問ですが。
696 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:13:46 ] >>695 いんじゃね
697 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:19:40 ] ありが十匹!!
698 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 20:14:57 ] >>693 一つのプロシージャに1行ずつ書き足すのが冗長性があると言ってるってことは、 擬似コントロール配列を使ってクラスモジュールで処理してるとしか考えられない訳だから、 取りあえず今使ってるソース出せ そしたら改良してやるから
699 名前:デフォルトの名無しさん [2009/01/29(木) 09:07:22 ] すみません初心者ですが質問です。 Msgboxに「月度を入力してください」と表示 →インプットboxに月(1〜12までの数字)を入力する画面を出して尚且つ、 1〜12以外の数字または文字を入力したら、「1〜12の数字を入力してください」 というエラーメッセージが出る→最後にまたMsgboxが出てきて「○月度ですね」と 表示するにはどう組めばいいでしょうか。 ○には入力した月数を出したいのですがよろしくお願い致します。
700 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 09:08:34 ] >>699 VB初心者スレへどうぞ。
701 名前:デフォルトの名無しさん [2009/01/29(木) 11:00:04 ] >700 すみません、VBAの初心者スレは探しましたが無いみたいです。 どなたかお願い致します。
702 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 12:15:27 ] >>699 流れは大体できてるように見えるのだが・・・ 「インプットboxに入れられたものを数値にして1〜12だったら抜ける」ってことを Do〜Loopを使って組めばいいだけ
703 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 14:29:53 ] 超初心者です。 何個か開いたファイルの中から、特定のファイルを探す。 という単純な事がしたいのですが ファイル名が例えば「経理ファイル200812.xls」のように、 月によってYYYYMMの部分が変わってしまいます。 開いたファイルの中から、ファイル名に「経理ファイル」が付いているファイルをアクティブにしたい場合 どのようにすればよいでしょうか。 ワイルドカードが使えないかと思ってやってみているのですが よろしくお願いします。
704 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 15:01:32 ] dim b as workbook for each b in workbooks if b.name like "経理ファイル*" then b.activate end if next
705 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 15:53:30 ] >>704 できました!! ありがとうございました。
706 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:39:44 ] 質問です h = 1 Do Until Cells(h, 6).Value = "" If Cells(h, 3).Value = Cells(h + 1, 3) Then Cells(h, 6).Value = Cells(h, 6).Value + Cells(h + 1, 6).Value Rows(h + 1).Delete End If h = h + 1 Loop 2行のときは1行にできるのですが、3行以上のときも1行にしたい場合どのようにすればよいでしょうか
707 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:57:21 ] >>706 最初に見つけた位置のhを保存しといてそこに入れていく
708 名前:707 mailto:sage [2009/01/29(木) 19:00:08 ] 違ったな 「Deleteしたときはhをインクリメントしない」かな?
709 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 19:45:32 ] End Ifの前にh = h - 1で解決しました ありがとうございます
710 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:41:33 ] >>701 頭だけでなく眼が悪いんでしょうか。 VBA ( V B A ) のスレではなく、VB ( V B ) のスレへどうぞ。
711 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:59:42 ] OS XP EXCEL2003 dteProductDay=format(date,゙yyyy/m/d゙) cells(1,1)=dteProductDay というように、システムの日付を整形してセルに表示させたいのですが、 フォーマット通りに表示されず1/29/2009となります。何が悪いのでしょうか。
712 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:09:19 ] >>711 書式を変えるか、または文字列で
713 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 02:12:09 ] >>711 的外れかも知れないが 表示するセル自体の書式を適切に設定しないとそうなる。 そのフォーマットだと、変数に代入された値は2009/1/29となるので エクセルはこれを日付と認識し内部的に日付のシリアル値として値を保持するのでは。 たとえばdteProductDay=format(date,゙yyyy m d゙) とするとセルには「2009 1 29」と表示される。
714 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 12:23:35 ] OS-XP Office2003 Shiftキーを押しながらドラッグでセルの移動ができますが、 Shiftキーを押さなくても常にセルを移動することはできますか。 もしくはExcel上でのみ、Windowsの固定キー機能のように Shiftキーを押しっぱなしにすることはできないでしょうか。 キーボードでなら、たとえば上に移動したい場合 ActiveCellを取得して、真上のセルと置換していけばできそうなんですが。
715 名前:711 mailto:sage [2009/01/30(金) 20:50:12 ] >>712-713 ありがとん cells(1,1)= "'" & dteProductDayでうまくいきました。
716 名前:7777 mailto:sage [2009/01/30(金) 22:31:30 ] エクセルでシート1で例えばF団体をA列の1で書いてそれを シート3のD列の3に自動記入させるマクロは分かるんだけど シート1でF団体がA列の1以外になっても自動記入できるマクロある? あるなら教えて
717 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:07:32 ] 日本語で質問できない人お断り
718 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:08:56 ] >>716 Private Sub Worksheet_Change(ByVal Target As Range) ~~~~~~~ どこに書き込まれたかはTargetという変数に入ってる
719 名前:7777 mailto:sage [2009/01/30(金) 23:13:26 ] 718さん 意味がわかりません
720 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:18:17 ] 日本語読めない人お断り
721 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:31:13 ] Worksheets("シート3").Range("D3") = Worksheets("シート1").Range("A1") みたいにセル名が固定ならわかるけど、コピー元のセルが不定の場合はどうするかって質問でしょ?
722 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:53:13 ] F団体ってなんだろ…新しい宗教か?
723 名前:7777 mailto:sage [2009/01/31(土) 08:51:59 ] >>721 うん!!そのとおりです
724 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:19:07 ] >>723 A1とA2の両方に値がある場合はどちらを採用するの?
725 名前:7777 mailto:sage [2009/01/31(土) 09:52:09 ] >>724 1月23日 団体名 内容 F団体 このときF団体がAの2列に書いてるけど Aの2列にD団体を記入して Aが3列になってもシート3のまとめシートには自動記入できるかなぁって
726 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 10:06:03 ] >>725 1対1対応ならなんの問題もないでしょう? それから行と列を区別して書いてたほうが他人に伝わりやすいですよ。 ABCは列 123は行
727 名前:7777 mailto:sage [2009/01/31(土) 10:42:31 ] A列からD列の10行までの範囲がコピー範囲のときは どうマクロ組むの?
728 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:15:45 ] >>727 マクロ記録してみたら?
729 名前:7777 mailto:sage [2009/01/31(土) 11:34:10 ] できました! ありがとうございました。
730 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:39:37 ] 俺が質問を理解できないうちに解決か
731 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:05:52 ] >>730 VBAを使うやつは問題をミクロにとらえ過ぎている。 もっとマクロなレベルで考えるんだ。 コピー元とコピー先の対応がどうなっているかだけ理解したらできるかできないか判断できるだろ?
732 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:18:32 ] EXCELを使うのは本来はすんごく高度なスキル(=異常な思考様式)が必要 そうでもない人、もしくはそういう発想をするのがヤな人がVBAを使うのだが、 VBAは最高級のBASICの一つで、これだけでも結構重量物 (VB.NETはこれは超ベテランが使う言語で、これからいきなり始めるのだ けはやめたほうがいい) VBAの入門に向いているのはExcelよりかAccessだね。Excelだと動作 は遅いはExcelと基本的に合わないわでロクなことないね。
733 名前:7777 mailto:sage [2009/01/31(土) 15:24:34 ] いやできてないんだけど マクロ記録とは?
734 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:13:28 ] もういいから帰ってくれ!
735 名前:7777 mailto:sage [2009/01/31(土) 17:09:51 ] ひどすぎ
736 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:10:34 ] >>725 マクロの前に日本語を勉強した方が… でも一応想像してみた シート1 年月日 団体名 内容 1/23 F団体 陳情 1/26 D団体 年始挨拶 1/27 A団体 予算ヒア みたいに日付ごとの日報が書いてあって 団体ごとに各シートに抽出したいんじゃないのか? でもこれだったらわざわざ聞いてこないよな。
737 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:50:16 ] 確かにそれだったらその辺のOL捕まえた方が手っ取り早いな。
738 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 19:48:09 ] 長文ですがお許しを 最近クラスモジュールを勉強しているんですがプロパティの設定で Letがうまくいきません。 WindowsXPSP3、Excel2003 クラスモジュール内容 Private m_TestValue As String Public Property Get TestValue() TestValue = m_TestValue End Property Public Property Let TestValue(ByVal New_Value As String) m_TestValue = New_Value End Property で標準モジュールに Public Sub Test() Dim Test As Class1 Set Test = New Class1 Test.TestValue = "testtest" MsgBox Test.TestValue End Sub として実行するとプロパティプロシージャの定義が一致していないというコンパイルエラーが出ます。 これはなぜでしょうか?
739 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 20:07:43 ] Public Property Get TestValue() As String もしくは Public Property Let TestValue(ByVal New_Value As Variant) Getの戻り値の型と、Letの最後の引数の型 つまり、ひとつのプロパティの型は一致させてください
740 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:01:13 ] なるほど!Property Getの戻り値も型を指定する必要があるんですね。 m_TestValue変数の型を指定していてそれを返しているから てっきりそれだけでいいと思ってた。 ありがとうございました。
741 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:36:34 ] ブックAにブックBへのハイパーリンクを張って、ブックBの Private Sub Workbook_Open() 内で色々と処理をしているのですが、 ブックA内のハイパーリンクをクリックした時にブックBを表示させずにその後の処理を実行する方法はありませんか?
742 名前:デフォルトの名無しさん [2009/02/02(月) 00:57:32 ] 初心者です。教えてください。 今フォームを使ってデータの抽出をするプログラムを作っています。 データは階層構造になっています。 仮に3階層あるとして、フォームにその3階層をプルダウンで指定してやると条件に一致したデータが表示されるようにしたいのです。 その際、上位階層をプルダウンで指定すると、その上位階層が包含する下位階層のみが プルダウンで表示されるようにしたいのですが、どうしたらいいのでしょうか。 フィルタオプションを使用しようと思うのですが、可能でしょうか? 困っています。教えてください。
743 名前:デフォルトの名無しさん [2009/02/02(月) 01:47:00 ] こんばんは。すみません、エクセルの質問させてください。 ブックAのシート1のA1にブックBのシート1のA1からA5を、足した結果をだしたい場合、どの様に入力すればよいですか? どうかおしえてください。お願いします。
744 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 04:53:09 ] >>741 ハイパーリンクでは、ブックを非表示で開くことは出来ない ハイパーリンクをボタンとかに変えて、ブックAのVBAからブックBを非表示で開きましょう 因みにVBAからブックを非表示で開く方法は、幾らでも情報有るから自分で調べましょう>>1 ★5 >>742 入力規則のリストの連動ならまだしも、Excel用ではなく汎用ActiveXのコンボボックスの連動は Excelに関係ない話なのでスレ違いです>>1 ★3〜★4 とりあえずVB6用の方法がほとんどそのまま使えるし、サンプルも転がってる >>743 WorksheetFunction.Sum 中に入る式は、普通にシート上で入力する式と同じだから解るよな? まあ解らなくてもスレ違いだから自分で調べろってことになるが
745 名前:741 mailto:sage [2009/02/02(月) 21:58:13 ] >>744 741です。 お答えありがとうございます。 うーん、やはりハイパーリンクでは無理でしたか。 私の作った処理をもう少し詳しく言うと ハイパーリンクをクリックするとそのセルがアクティブになることを利用して ブックBのPrivate Sub Workbook_Open() の中で Workbooks("B.xls").Worksheets(1).Cells(1, 1) = ActiveCell.Offset(0, 1) みたいな感じでハイパーリンクの隣のセルの情報を転記するという処理を行っていたのですが。 例えばA1とA2のセルの上にセルと同じ大きさのボタンを作り、両方のボタンに同じマクロを登録して A1の上に作ったボタンをクリックするとB1の情報を転記し、A2の上に作ったボタンをクリックするとB2の情報を転記する という処理って作れますか? ハイパーリンクみたいにクリックするとその下のセルがセレクトされるみたいな処理が作れればいいんですけど。
746 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:52:18 ] >>745 作れるよ ボタンに限らずオブジェクトには配置されてるセルアドレスを返すプロパティがあるから それが何かくらいは自分で調べようね
747 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 07:39:03 ] >>742 Private Sub Select change AddItem
748 名前:741 mailto:sage [2009/02/03(火) 23:43:31 ] セルを左クリックするとマクロが起動する処理って作れませんかね? Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) というのを使うと目当てのセルをクリックしただけでマクロを起動できるようになったんですけど エンターを何回か押していたらその目当てのセルまでアクティブが移動してしまって望まないタイミングでマクロが起動されてしまいます。 そうではなくあくまでクリックした時にマクロが起動できるようにしたいんですけど、いい方法ありませんか?
749 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:04:20 ] >>748 WorkSheetにはクリックイベントがないから、 セルに同じサイズのボタンを貼り付けるぐらいしかないんじゃ
750 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:38:21 ] ワークブックにWorkbook_SheetBeforeDoubleClickてイベントに有るし Workbook_SheetBeforeRightClickっていうのも有るし、シート名を取得して実行すれば良いのでは?
751 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 01:35:00 ] >>750 普通「クリック」と言えば左シングルクリックのことだろう。 右クリックやダブルクリックイベントでどうしろと。
752 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 02:43:54 ] それ言い出すと、>>749 も セルをクリックで処理したいって言ってるのに ボタンクリックでどうしろと ってことになるな。 俺は>>749 も>>750 も代用法のひとつとして有用な情報だと思うけどね。 >>749 も書いてるが「セル」の「左(シングル)クリック」イベントは無いから、 対象が「セル」であること(ボタンなどを配置しなくても済むこと)を優先するなら>>750 「左シングルクリック」で操作できること(ダブルクリックしなくて済むこと)を優先するなら>>749 ってことでいいじゃん。 俺の場合、目当てのセルが複数ならダブルクリックイベントで、ひとつならボタンで妥協するかな。
753 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 02:55:30 ] ボタンでやってみたけど、色を透明にしておいてもクリックするとなぜか灰色になって 下のセルが見えなくなっちゃうんだな。XPと2003の環境で。 代用案として出すなら、イメージコントロールを貼り付けて透明なGIFを貼った方がよさそう。
754 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:22:39 ] ボタンの代わりか・・・ つラベル
755 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 20:43:07 ] なぜ“左”クソツクなのか。右でいいやん。
756 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 20:48:34 ] 作った本人が使うんならいいけど、人が使う物なら標準と異なるUIは避けるべきかと
757 名前:741 mailto:sage [2009/02/04(水) 20:59:06 ] 741です。 皆さん色々とありがとうございました。 とりあえずボタンでやってみようと思いますが、 745でも言ってるように複数張ったボタンの内一つを押した後それに応じたセルを指定する方法が いまだにわからない状態です。 とりあえずもうちょい調べてみます。
758 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:05:26 ] >>757 VBAにはコントロール配列が存在しないから、 ボタンをたくさん貼ればボタンの数だけ独立したイベントハンドラが作られる。 だから、ボタンごとに各セルの処理をずらずらっと並べて書けばいい。 冗長だし面倒だけど。 さもなくば、ボタンの座標とセルの座標を比較して、重なった位置のセルを探し出すとか。
759 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:30:54 ] 疑似コントロール配列使おうよ クラスの作り方工夫すれば、疑似コントロール配列にした上で 処理は同じだが対象は違うというようにも出来るし、 そもそもボタンがどのセル上に配置されてるかは取得できるし
760 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:53:42 ] 質問です Sheets("sheet1").Select Dim MyRange As Range Set MyRange = Columns("A").Find(What:=Sheets("Sheet2").Range("A1")) いくらやっても検索値がnothingになってしまいます どこを変えればうまく検索できますか
761 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:03:34 ] Sheets("Sheet2").Range("A1")に入っている値が Sheets("sheet1")のA列に存在しないとnothingになるけど
762 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:28:03 ] >>760 別にどこも間違ってないから、原因として考えられるのは、本当に探してるデータが存在しないか、検索条件が違ってるか、だな。 それでもうまくいかない時は、Findメソッドの検索条件を省略せずにきちんと書いてみる。一例を書くとこんな感じ。 Set MyRange = Columns("A").Find(What:=Sheets("Sheet2").Range("A1"), LookIn:=xlFormulas, LookAt:= xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False)
763 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 23:33:13 ] Flash持ってるなら、Flashの透明ボタン張るのが一番良いと思う。
764 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:03:24 ] 質問です。 Dim v(1 To 10) As Long とするのと Dim a(1& To 10&) As Long とするのはどっちがいいですか?
765 名前:764 mailto:sage [2009/02/05(木) 00:05:42 ] すいません。 vとaとなりましたが、どっちもvです。
766 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:08:28 ] Columns("A")もまずいな。 シートモジュールに書いてるかも知らんしな。 ちゃんとシートくらいは指定汁.
767 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:09:34 ] >>764 この場合、配列のサイズはコンパイラが解釈するので型指定は意味がないと思う
768 名前:764 mailto:sage [2009/02/05(木) 00:23:21 ] >>767 そうなんですか。ありがとうございます。
769 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 11:43:29 ] OS XP / EXCEL2003 です。 仮に「A」というファイルがあったとして「A」のVBAから、 別のファイル「B」の「ActiveX コントールのコンボボックス」の値を参照することは可能でしょうか?
770 名前:デフォルトの名無しさん [2009/02/05(木) 15:25:43 ] sheet1を選択している状態で以下のマクロを実行しても sheet2のAAAという文字列がBBBに置換されません sheet2ではなく、sheet1のAAAが置換されます Worksheets("Sheet2").Select Cells.Replace What:="AAA", Replacement:="BBB", MatchByte:=False
771 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:31:17 ] >>770 1行ごと(処理ごと)にいちいち対象となるシートを書かないとActiveSheetが処理される。 Worksheets("Sheet2").Cells.Replace What:="AAA", Replacement:="BBB", MatchByte:=False または、 Worksheets("Sheet2").Select Selection.Cells.Replace What:="AAA", Replacement:="BBB", MatchByte:=False みたいな感じにしなきゃいけない。 確認してないからオブジェクトのエラーが出るかもしれないけど、基本的な考え方としてはこんなところ。
772 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:33:20 ] >>769 可能です
773 名前:769 mailto:sage [2009/02/05(木) 18:35:27 ] >>772 ご返答ありがとうございます。 もし良かったら何か例文を載せて頂けないでしょうか。
774 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 19:10:09 ] フォーム上に配置したWEBブラウザコントロールを印刷したいのですがうまくいきません。 印刷はフォームのPrintFormメソッドを使っています。 コマンドボタン・ラベル・テキストボックス・コンボボックス等は印刷されるのですが WEBブラウザが配置されているところは空白になってしまいます。 検索してみたところAPIを使用する方法を見つけたのですが理解することができませんでした。 APIはブラウザ表示内容を画像として取得する方法だったのですが それをイメージコントロールに貼り付けるという流れになるのでしょうか? よろしくお願いします。
775 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:46:41 ] >>773 >>1 ★5の通り、ここはヒントだけで自分でコード書ける人用のスレなので例文は書きません とりあえずヒントとしてBのブックオブジェクトさえ作ってしまえば、あとはBから取得するのと変わらないと言っておく >>774 >>1 ★3,4 Excelと直接関係ない汎用コントロールの話はスレ違いです
776 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:08:58 ] あのさー、何度も言ってるけど>>1 はスレの合意じゃないから。 誰かが勝手に書いて、次スレ立てるときにコピペしてるだけ。 気に入らない発言はスルーしろよ。
777 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:34:26 ] >>770 だから標準モジュールじゃなくシートモジュールに書いてるんだろ? SHeet2のシートモジュールに書いてればCellsの親はSheet2なんだよ。 いちいちSelectしないコーディングを心がけてりゃそういう間違いはおかさない。 Worksheets("Sheet2").Select Cells.Replace What:="AAA", Replacement:="BBB", MatchByte:=False こんなことしないで Worksheets("Sheet2").Cells.Replace What:="AAA", Replacement:="BBB", MatchByte:=False と書けば標準モジュールでもシートモジュールでもユーザーフォームのモジュールでも ThisWorkBookのモジュールでも無関係に処理できる。 >>760 も同じ間違いだ・
778 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:37:42 ] ちょっとミスった。 >>777 の3行目は Sheet1のシートモジュールに書いてればCellsの親はSheet1なんだよ。 に訂正。 >>771 も嘘書いちゃいかん。 ActiveSheetが処理されるとは限らないんだよ。
779 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:42:36 ] >>776 気に入らない発言はスルーしろよ。
780 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:42:54 ] フォルダ「A」に 「A」「1」「2」「3」というファイル名のExcelワークシートが4つあります ファイル「A」のcell(P1:DY1850)の数式をコピーし「1」「2」「3」のcell(P1:DY1850)に自動的に貼り付けていきたいのですが どのようにすればいいのでしょうか? よろしくおねがいします
781 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:43:52 ] >>779 これ言っとかないと、>>1 を理由にスレ違い認定したがる奴が増えるかもしれんからな。
782 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:48:13 ] >>780 まずマクロの記録をやってみろ
783 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:41:22 ] ★使ってるのは多分一人。 気に入らないなら無視すれ。
784 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:32:05 ] >>1 のテンプレが無かった頃から、同じ様な内容の指摘は多々あったので 指摘が>>1 ★n形式か、毎回文章で書かれるかの違いでしかないんだけどね 反抗期の子って、対象が形(テンプレ)になると妙に反発心燃やしたりするけど そもそもテンプレったって、書いてあることを端的に見れば 「バージョン情報書け(★1)」「他分野の話を持ち込むな(★2〜4)」「丸投げするな(★5)」「マクロの記録くらい試せ(★6)」 だけ これに反発してる子って、バージョン情報不要だと思ってるの? COMやOCXやWin32APIの話から、VB言語で組める全てのアルゴリズムの話までオールOK? そして丸投げも大歓迎で、マクロの記録なんて試すくらいなら、俺が親切丁寧にコード書いちゃるってか? 実のところはそんなこと無いだろ? 結局形有る物に反発したい年頃なだけで、根底は>>1 の内容に賛同してるんだろ? 上記3つともOKなら、「>>1 は絶対のルールじゃない」とか「気に入らないなら無視しろ」とか みみっちいこと書くのではなく、それこそ「気に入らない"スレ違い指摘"は無視」して、ちゃっちゃと答えちゃえば スレ違い指摘の意味すら無くせるので一番効果的なはずなのに、それをしないのが何よりの証拠 と、暇なので長々と書いてみたが、「気に入らないなら無視すれ。」 言ってる本人が出来なかったら恥ずかしいからなw
785 名前:769 mailto:sage [2009/02/06(金) 13:13:03 ] >>775 ご返答ありがとうざいます。 ブックオブジェクトを作るとのことだったので、 a.xlsに下記のように記述し実行してみたのですがエラーになってしまいました。 アドバイスを頂けないでしょうか。 Workbooks.Open Filename:="c:\b.xls" Workbooks("b.xls").Activate MsgBox Application.Workbooks("b.xls").ComboBox1.Value ←ここでエラーになります。
786 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:15:27 ] >>784 落ち着けよ
787 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:17:16 ] >>784 つまり、俺様はスレ違い認定する権利があってそれをするのだが、お前はそれに口出すな、ってことですね。
788 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:20:36 ] >>786 とりあえず落ち着け
789 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:31:10 ] >>785 コントロールの前にシートを指定していないせいだ
790 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:34:51 ] >>784 が★使ってスレ違い認定する奴だってことは分かった。
791 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:47:00 ] >>787 別に口出ししてもいいよ ただ、本当に>>1 が気に入らないなら、スレ違い指摘してる奴に ムキになって食い付くより、そんなの無視して答えちゃえばいいじゃんと 口出すなと言ってるのは>>776 他 >>790 もちろん俺も使ってるよ というか、改めて言うまでもなく解るように書いたんだがw
792 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:50:41 ] どっちがムキになってんだかw
793 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:55:11 ] 反論できないときは、相手を卑下して優位に立ったつもりになり 精神的安定を図るのが吉です
794 名前:769 mailto:sage [2009/02/06(金) 13:59:58 ] >>789 ↓でできました!!ありがとうございます。!!! MsgBox Application.Workbooks("b.xls").Sheets("Sheet1").ComboBox1.Value
795 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 14:13:36 ] これも>>1 に反発するなら、ブックだシートだとヒント出してる俺等を無視して、 丸投げ上等でスパっとコード書いちゃえばいいのに、何故それをしないんだろう? 結局は何かに反抗してみたい年頃なだけで、心底>>1 を否定してるわけではないんだよな
796 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 14:26:17 ] どうやって教えるかは決まってないし、人それぞれだから。 別にいきなり答えを書いちゃってもいいし、 それだと同じ人が何度も質問してきてウザく感じたりスレが荒れたりする可能性があるから、 できるだけ自分で考えるように誘導してやった方がいいと考える人もいる。 進行中の質問に別の回答者が割り込んで、いきなり答えだけを書いても何も問題はない。
797 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 14:54:01 ] 質問者だって、いきなり答えだけ書けよって思ってるかもしれないし まじめにVBAの勉強をしてるかもしれない
798 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:38:01 ] >>795 いや、俺は否定してるけど何か?
799 名前:Excel2003,XP home sp2 mailto:sage [2009/02/06(金) 20:42:54 ] 質問です 隠しシートに読み込んだCSVファイルの中身を出力しようとしているんですが元のシートのほうに出力されてしまいます。 シート参照のが仕方マズイのでしょうかヒントをください
800 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:50:52 ] ・どうやって読み込んだのか書け ・「元シート」とは何だ? ・「シートの参照」とは具体的に?
801 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:51:26 ] 追加 ・どこに出力しようとしてるのか書け
802 名前:Excel2003,XP home sp2 mailto:sage [2009/02/06(金) 20:51:33 ] ↑のコードtoku.xdisc.net/cgi/up/ttt/nm9199.txt
803 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:54:38 ] worksheets("隠しシート名").range(hogehoge
804 名前:Excel2003,XP home sp2 mailto:sage [2009/02/06(金) 20:56:24 ] >>803 やってみますありがとうございます
805 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:36:38 ] みんな落ちつけ。 落ち着いてExcelにFlash張りつけろ。
806 名前:デフォルトの名無しさん [2009/02/07(土) 00:03:53 ] >>805 Flashってなぁに?? 聞いたことあるけど、、実際どおいうことができちゃうの?
807 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 00:05:04 ] ググレカス
808 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 00:30:12 ] >>807 カスは>>799 まんま>>777 ちょっとぐらいは過去レス嫁と小一時間(ry
809 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 00:53:38 ] お前は過去スレに類似情報があると知ってるから読めと言ってるが、 大抵は類似情報なんかないのである。
810 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:21:59 ] >>809 大抵のまともな人間はまず自力で何とかしようとするモンだ それでも行き詰った場合に質問をするのがまともな人間の行動 だからお前みたいなヤツは、まともじゃない平均以下の存在価値の無い人間
811 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:26:40 ] >>810 質問する奴がいなくなっちゃうね。 このスレもういらないや。
812 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:27:56 ] おい、ここ2chだぞ。
813 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:29:47 ] いや落ち着け >>808 はツンデレだけどちゃんと教えてあげてる優しい人 そして 質問した>>799 は学習して次は現スレくらいは読むだろう
814 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:34:41 ] 流れがさっぱりわからん
815 名前:807 mailto:sage [2009/02/07(土) 01:37:17 ] >>808 は? >>807 は>>806 に言ったんだが、何か勘違いしてないか。
816 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:44:11 ] 過去レスなんか読まないのが今は普通なんだよ、オジサン
817 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 01:54:39 ] >>816 おばはんですが何か?
818 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 10:19:16 ] ♪けんかはやめてー
819 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 12:27:12 ] ↑喧嘩、早めてぇ
820 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:36:24 ] 何これ
821 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 12:26:13 ] コレクションのKey値を取得するにはどうすればいいんでしょうか? 具体的には、For Each In でコレクション内を回って、Key値がある値だった場合だけ、処理を実行させる というコードを作りたいのですが
822 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 15:42:15 ] >>821 Collectionでやりたいなら ' Module1 Dim col As New Collection Dim itm As Class1 Set itm = New Class1: itm.Key = "A": itm.Text = "123": col.Add itm, itm.Key Set itm = New Class1: itm.Key = "B": itm.Text = "456": col.Add itm, itm.Key Set itm = New Class1: itm.Key = "C": itm.Text = "789": col.Add itm, itm.Key For Each itm In col If itm.Key = "B" Then MsgBox itm.Text End If Next itm ' EOF ' Class1 Public Text As String Public Key As String ' EOF
823 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:42:26 ] 特定のBookを開いている時に エンターキーを押すごとにマクロを起動させることってできませんか?
824 名前:823 mailto:sage [2009/02/08(日) 20:43:22 ] 書き忘れましたが、EXCELは2003です。
825 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:54:06 ] >>822 おおクラスモジュールとかオブジェクト指向とかってやつですか・・・ やはりそういうのも覚えていかないと駄目ですね ただ今回は隠しシートを使って済ませることにしました 回答ありがとうございました
826 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:38:45 ] OSはXP Excel2000 VB6.0です ユーザフォームでツールボックスから「ピクチャボックスコントロール」と いう物を貼り付けたいのですが、ツールボックスに入っておらず、 方法がわかりません。 コントロールを追加しようとしたのですがそれらしいのが見当たらず。 ググってもピクチャボックスが選択できる事が前提のようなので 探すことができませんでした。 どうすれば表示されるのか教えていただけませんか?
827 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 08:45:49 ] >VB6.0です きっと誤爆だな
828 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 09:02:10 ] いやExcelのVBAから、VB6のインストール時に導入される ピクチャボックスを使いたいってことなのでは? しかしVB6使ってる人なら、こんなの簡単に解るはずなんだがな 因みにVB6持って無くて、ランタイムだけ入れてるとかは無しね それじゃダメだから
829 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 12:12:54 ] >>823 キーボードやマウスを使ったイベントはAPI使わないと無理
830 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 20:41:23 ] 実行しているsub名を取得する事は出来ますでしょうか。 sub aaa() msgbox bbb '←aaaと表示したい end sub よろしくお願いします。
831 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 20:56:33 ] >>830 >>1 ★3,4
832 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:30:35 ] >>830 実行しているsub名を取得することはできないけど、次のようなことをするのは可能。 sub aaa() msgbox "placeholder" end sub というコードを sub aaa() msgbox "aaa" end sub というコードに書き換えるようなこと。 ところで、何でそれ知りたいの?
833 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:39:59 ] subの最初に適当な変数にsub名を入れとけばいいじゃん
834 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:46:13 ] >>833 たしかに。 そういうの思い付く人と思い付かない人って 何が違うだろね
835 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:51:12 ] そういう事か? msgboxは質問時の方便で常時表示させたいんじゃないのか 今何の関数に飛んでますとか
836 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:57:13 ] 質問者のレス待てよ
837 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 01:30:14 ] EXCEL2003です。 特定のフォルダの中に、テスト.xls、テスト1.xls、テスト1000.xls、という3つのEXCELがあるとして killを使ってテスト.xls以外のブックをすべて削除する処理を作りたいと思っています。 kazu = "*" Kill "\\フォルダ\テスト" & kazu & ".xls" だとフォルダ内の3つはすべて消してしまうんですよね。 「テスト」の後に何もつかないブックだけを消さずに残すにはどうしたらいいでしょう?
838 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 02:03:56 ] "テスト1*.xls"
839 名前:デフォルトの名無しさん [2009/02/10(火) 04:24:49 ] かなりど素人なのですがEXCELでA列に文字を入力する際、A列の最終行数を ランダムにしたいのですがどうすればいいでしょうか? わかる方よろしくお願しますm(__)m
840 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 04:29:13 ] >>839 こんな感じかな A列のランダムな位置に文字を入れる 乱数 = Int(Rnd(1) * 65536) + 1 セル = "A" & 乱数 Range(セル) = "文字"
841 名前:デフォルトの名無しさん [2009/02/10(火) 04:31:48 ] ありがとうございます●〜*
842 名前:デフォルトの名無しさん [2009/02/10(火) 04:40:29 ] >>840 できました〜。 ホント感謝です(^−^)
843 名前:デフォルトの名無しさん [2009/02/10(火) 20:09:04 ] 質問です。 excel2000VBAでADOを使用して郵便番号データベースを参照したりいろいろしようと思い、とりあえず例のような条件(県は兵庫県、市と区は〜長田区・住所は読み仮名がイから始まるもの全て表示)で抽出したときの候補をずらずらと出したいと考えて組んでみましたが For Each dbFld In dbRes.Fieldのあたりで「型が一致しません」というエラーが出てしまいます。 Sub CMD_New_Click() Dim dbRes As ADODB.Recordset Dim dbFld As ADODB.Fields Dim dbCon As ADODB.Connection Dim strSQL As String Dim i As Integer Set dbCon = New ADODB.Connection dbCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "/KEN_ALL.mdb;" strSQL = "SELECT KEN_KANJI,SHI_KANJI,CHO_KANJI,CHO_KANA FROM YUBIN WHERE KEN_KANJI='兵庫県' AND SHI_KANJI LIKE '%長田区' AND CHO_KANA LIKE 'イ%';" Set dbRes = New ADODB.Recordset dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly If dbRes.EOF <> True Then Set dbFld = dbRes.Fields For Each dbFld In dbRes.Fields Sheet1.Cells(1, i) = Trim(dbFld("KEN_KANJI").Value) Sheet1.Cells(1, i) = Trim(dbFld("SHI_KANJI").Value) Sheet1.Cells(1, i) = Trim(dbFld("CHO_KANA").Value) i = i + 1 Next dbFld Else MsgField1.Caption = "見つかりません" End If End Sub どのように直すとよいのでしょうか?よろしくお願いします
844 名前:843 [2009/02/10(火) 20:12:44 ] 補足です。 For Each を使わずに走らせると、正常に動作する(兵庫県神戸市長田区イカニケイサイガナイバアイ) と表示されるため、SQL文やデータベースを開くことに失敗している可能性は低いです
845 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:18:39 ] >>844 まずForの直前でDebug.Print TypeName(dbRes.Field)ってやって、 Fieldメソッドがコレクションを返してるかどうか確認汁。
846 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:21:47 ] ごめん。今のなし。 よく見たらこの2行が矛盾してる。 Set dbFld = dbRes.Fields For Each dbFld In dbRes.Fields setの行を削除してみ。
847 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:40:56 ] エラーの原因は、 ×Dim dbFld As ADODB.Fields ○Dim dbFld As ADODB.Field じゃね? Set dbFld = dbRes.Fieldsは無しで。 しかし、 Do Until dbRes.EOF ... dbRes.MoveNext Loop で回す部分が無いし、 出力先が全部Sheet1.Cells(1, i) ってのもおかしかろ?
848 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:06:52 ] Option Base 1って邪道ですか? 先々で弊害とか出ます?
849 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:19:30 ] >>848 昔はちょっとでもメモリを節約するために、用途に合わせて配列の範囲を削ってた。 VBAなら配列の範囲は自由に決められるからあんまり意味はないと思う。 盲腸みたいなもんだな。
850 名前:830 mailto:sage [2009/02/10(火) 22:23:28 ] すみません。スレ違いと指摘を受け、昨日はレスできませんでした。レスありがとうございます。 皆さんが仰る通り、現在はsub名をコピペして、文字列として組み込んでおります。 なぜこの様な事をしているかと言いますと、 論理チェックのプログラム集合体を作成しています。(500個くらい) 現在、チェックのリストに振ってあるナンバーをsub名としております。 論理エラーがプログラムで検出された場合、sub名=チェックナンバー とエラーの内容を吐き出し、 チェックナンバーを主キーとして、リストからエラーメッセージを取得しています。 チェックナンバーをコピペして出力するのは問題無く出来ているのですが、 sub名を取得出来れば、コピペのミスが減ると思い、質問させていただきました。
851 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:44:46 ] >>850 ExcelのVBAではモジュール名を取得する方法はない。 すでに書かれているように、スクリプトを使ってSubの直後にグローバル変数をセットするように ソースを書き換えるのが、一番間違いが起こりにくいと思う。
852 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:47:18 ] エラーナンバー体系と、チェック関数体系は分けたほうがいいと思うんだけど。 エラー内容とチェック関数が1:nやn:1の関係になったりしてない? 仮に1:1の関係だというのなら、チェック関数内に文字列を直接書いといた方がいいとも思う。 (関数名=エラーコードからエラー文字列が正しく対応しているかどうかのチェックが面倒なので) それはともかく、コピペに勝る方法はまずないのだから、今回有効な手段としては、 後からチェックするコードを書くくらいかな。
853 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 22:49:51 ] AccessのVBAなら自分自身の名前が取れるらしいので、Excelに依存しない作業ならAccessを使うという手もある。
854 名前:830 mailto:sage [2009/02/10(火) 23:15:07 ] レスありがとうございます。 ExcelVBAで出来ないと言う事が分かったので、大きな収穫でした。 ダミーデータでエラーを出力した結果に対して目視チェックをする際、 1:1でエラーメッセージが取得出来ているかに重きを置く方向で調整したいと思います。 本当にありがとうございました。
855 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:16:14 ] vba extensibility support.microsoft.com/kb/410621/ja 使い方しらないけど、なんとなく近そうな道具
856 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:36:01 ] >>855 それ、行番号さえ指定すればプロシージャ名は取得できるけど、 自分自身が何行目に書いてあるかってのは結局わからないのよ。
857 名前:843 [2009/02/10(火) 23:36:52 ] >>845 >>846 >>847 動きました!いろいろアドバイス頂き、本当にありがとうございました >>847 ああ・・・エラーの理由がわからないのでできるだけシンプルにしたかったのと 改行制限に引っかかったのでいろいろ削ってたのでこうなってしまいました。 すいませんでした
858 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:59:30 ] >>855 マクロでコードを書き換えるとか、コードをマクロでチェックする系のレスは全部それ使うんだよ。
859 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:13:55 ] ビミョーに方向違いの質問ですがすいません まだおもちゃ程度にしかVBAいじれないんですが On Error〜がらみは古いかもと思って避けてたんですよ でもワークシート関数使うときにシート上で使うときはエラー処理が面倒なのに VBA上だとOn Error〜で簡単にできるのに最近気付いてですね こんな使い方はどこかに落とし穴があるんじゃあと気になるのと ここで回答者されてる皆様のOn Error〜への視線ってどんなものかと思いまして 漠然とした質問すいません
860 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:30:21 ] VBAで飯食わせてもらうくらいちゃんとしたもの使うならちゃんとエラー処理して、 エラー内容をユーザーにフィードバックする。 ちょっとしたマクロ程度ならOn Errorで十分。てか面倒。
861 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:40:07 ] On Errorは滅多に使わん。 関数を呼ぶ前にちゃんと変数の値をチェックするとか、最初からエラーが出ないように作ってるから。
862 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:44:27 ] >>860 えーと飯食わせてもらう作業のなかで利用しつつあるって感じなんですが ちょっとしたマクロ程度でもあるし「使うな」って程でもないならちょっと安心です ありがとうございます
863 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:48:34 ] VBA自体を商品にするんじゃなくて、 業務効率化のためのマクロ使用なら とにかく目的が達成できればいいんだから早く作れるほうがよい。
864 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:54:33 ] >>861 あっやっぱりプロの方はそうですか・・・ ちょっと前まではVBAなしでワークシート上でやってたんですが その時も確かにエラーが出ないように工夫はしてたんです でも例えばFor〜Nextで回す時とか「結果がエラーになるときは飛ばす」って ワークシート上でやってた時を思うとすごく斬新に思えてですね もし初心者の私に気付いてない「ありがちな間違い」があればと思ってここにきました
865 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:00:25 ] >>863 ですよねー 今のところ私のどんくささのせいでマクロ作るのも時間かかるし作らなくても時間かかるし(涙)
866 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:00:51 ] 事前にチェックするのと、事後にエラー処理するのと、どっちがいいかと言えばケースバイケースだけど、 VBAに限って言えばエラー処理が貧弱だから事前にチェックする方が結果的にコードがすっきり書けることが多い。
867 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 09:02:47 ] on error resume next はたまに使います。 いや、完全にデバッグしてから納品するのが当然なのは分かってる・・・。 分かってはいるんだが、ごく希に納品後にデバッグも止む無し、ってケースが・・・。 とりあえず動けば良い。とにかく早く、今日中に!! みたいな場合には。
868 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 10:56:14 ] ネットワーク先が生きてるかどうかってエラーなしで判断できたっけ?
869 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 11:29:33 ] 「生きてる」の定義が問題だが、まぁスレ違いだわな
870 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:05:13 ] >>868 ネットワークを介した共有フォルダorファイル? ネットのURLの有効性? TMネットワーク?
871 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:36:15 ] 画面描画しないとかカーソルを砂時計にするコマンドを使用している場合には on errorは便利だよ。 カーソル砂時計になりっぱなしとか避けられるから。
872 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:31:26 ] >>864 騙されるな。 本当にエラーが出ないほどチェックしてから関数を呼び出すなら、 チェックの部分が無防備なわけないだろ。
873 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:32:30 ] >>867 インラインで処理するのと、何でもエラーを読み飛ばすのとは違うだろ。
874 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:41:12 ] チェックするコードと処理するコードはアトミックじゃないから、普通はどんなチェックを行っても 原理的にはエラーが発生する可能性はある。 if dir("hogehoge") <> "" then 'ここでもうファイルが無い可能性がある end if
875 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:03:16 ] on errorで飛ばすんじゃなくて、簡単に予測出来るエラーの場合は条件分岐させて当然。 それでも出るのがエラーなのだよ。
876 名前:859 mailto:sage [2009/02/11(水) 20:39:36 ] 859ですレス頂いた皆さんありがとうございます 人様に売るものでもないんでマクロに産毛が生えたくらいのものしかつくってないんですが ワークシート上で関数で処理するときはエラーになる時はそのセルを参照するときも意識してないといけないですよね VBAでワークシート関数使ってから入力するならOn Errorですっ飛ばせば逆に綺麗に計算できるなと思ったんです エラーになるかどうかの計算をさせる部分が省略できるから返って負荷軽減にはいいかもと勝手に思ってですね あくまでワークシート関数使うときに限る話なんで皆さんのように複雑なプログラム組んでるときには 当て嵌まらないケースが多いんだと思います それでもここまで読んでいて参考になりました
877 名前:デフォルトの名無しさん [2009/02/12(木) 00:25:55 ] 「firefoxで或るURLを開く」をvbaはどう書くの
878 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 01:13:31 ] シェルに渡せ
879 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 13:33:52 ] >>875 >>874 ?
880 名前:デフォルトの名無しさん [2009/02/12(木) 17:23:16 ] firefoxで「或るURL」を開くは、まさにその URLのシェルへの渡し方がわからないので、聞いているんだが。
881 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:07:32 ] >>880 firefoxの使い方とか、スレ違いだろ。 普通に。 コマンドラインからやるようにやればいいだろ。 "C:\Program Files\Mozilla Firefox\firefox.exe" www.yahoo.co.jp とか。
882 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:31:56 ] たぶん、こういうことだろ? REM 「firefoxで或るURLを開く」
883 名前:880 mailto:sage [2009/02/12(木) 19:53:36 ] >>881 もちろん、VBAの書き方の問題として、"""あたりのことが、気になっていたもので。 大変、参考になりました。所期の目的を達成することが出来ます。サンクス。 いままで、IEでやっていたのをfirefoxでやるにあたって、より難しいとの思い込みが 邪魔してましたw
884 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:33:35 ] お前は一体何を言ってるんだ・・・
885 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:44:56 ] すみませんアホな質問だと思いますがお願いします 標準モジュールで Public Check As Boolean Public Sub hoge() Check = False Load Form1: Form1.Show として、 ユーザーフォームで Private Button1_Click() If TextBox1.Text = "" Then TextBox1.SetFocus Else Check = True ←※ Me.Hide End If End Sub というコードなんですけど、 デバッグで※の所をちゃんと通っているのに、 標準モジュールに戻ってくると値がFalseになってるんですが これは何故でしょうか?
886 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:12:24 ] すみませんやっぱりアホでした 標準モジュールでDimで2重に宣言してました・・・ スレ汚しスミマセン
887 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:06:50 ] >>884 自分で考えるより他人に聞いたほうが早いと、、、
888 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 18:21:30 ] 質問の文章を書いてると考えがまとまるんだよな。 脳が疑問点を俯瞰するというか。
889 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:33:48 ] その場合 書き込みボタン押す前に やめて欲しい
890 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:00:55 ] ボタンを押した瞬間にひらめくんだよ、これが。 脳のどこかが切り替わるんだろうな。 例えば誰かに質問するために電話をかけて、 つながった瞬間解決するとか、誰でも経験あると思うんだけどなあ。
891 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:58:22 ] とかいうつまんないやり取りは、くだらん質問よりうざい
892 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:05:19 ] >>891 うぜー
893 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:25:13 ] てな感じ
894 名前:デフォルトの名無しさん [2009/02/14(土) 06:55:41 ] 携帯からすみません。 一定時間経過したが、何も操作が無かったら、エクセル自体を閉じるコードを考えてます。 これって可能です? ちなみに、エクセル2003です。 VBAは、ある程度使えます。
895 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 08:55:09 ] >>894 Excelに標準で用意されてる関数だけでは無理 APIを使えば可能
896 名前:デフォルトの名無しさん [2009/02/14(土) 11:06:14 ] APIですか〜 それは、手に余ってしまいます。 素直に、作業ブックを閉じるようにします。 ありがとうございました!
897 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:09:38 ] 本で勉強中なのですが for nextの例で下記コードをためしにやってみたところ 変数が定義されていないとエラーがでます。 例と変わらずに打ち込んでいるのになぜエラーが出るのか教えてもらえないでしょうか? Sub ループ() For Cnt = 1 To 10 MsgBox ("こんにちは") Next Cnt End Sub Cntがカウンタ変数って事でよさそうなんですが。
898 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:14:23 ] そのまんまじゃんか。 Cntが宣言されてないんでしょ。 option explicit外すか、dim cntで宣言すれば良いんじゃない?
899 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:14:57 ] ためしに Dim Cnt As Integer を追加してみたところうまく動作しました。 何度みなおしても本には>>897 のコードだけで動くように書いてあるのですが。。 ちなみにEXCEL VBAのコツが面白いほどよくわかるって本です。
900 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:17:39 ] >>898 ありがとうございます。 option explicitってオプションで「変数の宣言を強制する」って奴と関係してるものですかね? ちょっと調べてみますが、この設定のせいだったんですね。 別の本だと「変数の宣言を〜」って設定を推奨してたので チェックしてました。
901 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:19:30 ] option explicit無しがデフォルト設定じゃなかったっけ?
902 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 19:17:07 ] 変数の宣言は強制しておけ。 ついでに、きちんと型の概念を持っておくと良いよ。 ただのお遊びマクロで終わるか、仕事で使えるプログラムになるかはそこが大きい。 型を理解してない奴は、ほぼ100%お遊びマクロ。
903 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 19:21:32 ] javascriptもお遊びですね
904 名前:名無しという名無し [2009/02/14(土) 19:21:39 ] 質問なんですけど ExcelってXLSのことなんですか? だとしたらここで質問したいんですけど 間違ってたらいってください 今、Excel viewer2003で XLSのファイルを見ようとしてるんですけど 「コマンドラインオプションの構文エラーです Command /?を入力するとヘルプが表示できます」 とか出てきて訳わかんないんですけど詳しい人がいたら教えてください。 お願いします。 (一応、ググって見ましたが、僕の見る限りなかったと思います)
905 名前:名無しという名無し [2009/02/14(土) 19:24:16 ] すみません上のやつ 書くとこミスりました すいませんがスルーでお願いします 本当にすいませんでした
906 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:22:21 ] すいません。質問なんですが、 Sub test() Range("Q2").Select Do Until ActiveCell.Offset(0, -1).Range("A1") = "" ActiveCell.FormulaR1C1 = "=SUM(RC[-15]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select Loop End Sub このコードの、Do Until の条件式は、「アクティブセルの一つ左のセルが空白である」っていう意味であってるんでしょうか? だとすると、「Offset(0,-1).」の後の「Range("A1")」にはどんな意味があるのでしょうか? 同様に5行目の「ActiveCell.Offset(1, 0).」の後の「Range("A1")」の意味がよく分かりません。 この「Range("A1")」が無いと正しく動作しないのでしょうか?
907 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:26:41 ] 何で自分で調べないの?
908 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:29:02 ] 調べたんですけど分からなかったです。スマンコ
909 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:55:56 ] >>908 Offset()もRange()もRange型オブジェクトを返す。両者の違いは、 Offset()はマイナスを指定できる。相対指定しかできない。1つのセルしか指定できない。 Range()はマイナス(左、または上)を指定できない。相対指定も絶対指定も可能。複数セルからなる領域を指すことが可能。 両者を組み合わせればあらゆる矩形領域を相対的に示すことが出来る。 この場合に限って言えば、Range("A1")は単なる無駄。 わざわざ無駄な式を書くには理由があるはず。あとで別の例題で書き換えて使うんでねーの?
910 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:23:26 ] 調べてない奴の台詞。> 調べたんですけど分からなかったです。
911 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:29:07 ] >>909 なるほど! 調べたけど分からなかったことが分かりました! ありがとうございます!
912 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:50:20 ] ┐(´ー`)┌
913 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:59:06 ] グラフ範囲 =Sheet1!$O$3:$T$3,Sheet1!$O$5:$T$269 をマクロで実行するためにはどうすればいいですか? myC = Range("L2") ActiveChart.SetSourceData Source:=Sheets("Sheet1") .Range("$O$3:$T$3", "$O$5:$T$ & myC") , PlotBy:= _ xlColumns で動きません。 よろしくお願いします。
914 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 23:12:30 ] マルチすんな
915 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:10:16 ] 定数戦隊 vbRed vbBlue vbGreen vbYellow vbPink 敵か味方か、謎の戦士 vbBlack
916 名前:デフォルトの名無しさん [2009/02/15(日) 22:38:43 ] エクセルで、全シートに同様の処理を反映させたいのですが Worksheets.Select For 行番号 = 2 To 10 .Cells(行番号, 列合計).Value = _ .Cells(行番号, 列数量).Value * Cells(行番号, 列単価).Value Next 行番号 と書くと「.cellsが不正」と言われます。 どのあたりがおかしいのでしょうか。
917 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:04:53 ] with で囲んでないのに、何でピリオドから始まってるの?
918 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:53:54 ] 質問させてください 以下の様な入力があった際に A列は(A,1)だけ文字色を黒に、それ以下はすべて指定色に変更 B列は(B,1)が文字色黒、(B,2)(B,3)が指定色 (B,4)が文字色黒、(B,5)(B,6)(B,7)が指定色 になるようにしたいのですが、どのように実装すれば良いのでしょうか A B C ore kimi warota ore kimi warota ore kimi warota ore dare warota ore dare warota ore dare warota ore dare warota
919 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 14:20:01 ] >>918 マクロの記録してから質問しろ
920 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 14:40:30 ] なんか色々アレしてたら突破口が出来ました スレ汚し失礼しました。 JavaとかCを軽くやっただけだったので 喜んで引き受けたんですが スコープは分かりにくいし、なんか予約語?っぽいのがもうわかんなくて。。。 ま、すいませんでした、自力でなんとかしまウィッシュ '2行目から終端までループしましょう For i = 2 To LAST_ROW 'テーマが全項目と同じか調べる '次の行のテーマを変数に入れときます THEME_NEW = Worksheets("Sheet1").Range("A" & i).Value '前の行と現在参照している行が異なる場合 If THEME_NEW <> THEME_OLD Then Worksheets("Sheet1").Range("A" & i).Font.colorIndex = 3 Else Worksheets("Sheet1").Range("A" & i).Font.colorIndex = 1 End If THEME_OLD = THEME_NEW Next