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)
641 名前:630 mailto:sage [2009/01/24(土) 22:09:05 ] >>638 >エラーを無視するのは行儀は悪い エラー処理って大そうに考えてる人多いみたいだけど、 俺はエラー処理ってのはプログラムの効率化を図る手段だと思ってる 実際にErrorステートメントなんか存在しなくても、 厳密なプログラムを書けば99.9%(経験上100%)同じことはできる Errorステートメントってのは、あらゆる場面を想定した厳密なプログラムを 書かなくてもいいように効率化(手抜き)をするためのモンじゃないの?
642 名前:635 mailto:sage [2009/01/24(土) 22:15:04 ] >>640 639の地域と言語のオプションというのはもちろんコントロールパネル内のやつの一項目です。 変なところは無いみたいですし、そもそも購入してからいじった覚えもありません。 現状どのEXCELシートでも9/8/7と入力すると2009/8/7に置き換わって問題ないようにみえます。
643 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 22:19:03 ] >>642 A1セルに09.08.07じゃなくて、9/8/7っていれてみ
644 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 22:22:37 ] 確認するんならA2セルに9/8/7と入れてみるべきじゃないかな 書式の問題かもしれないし
645 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:11:33 ] >>643 >>644 A1A2セル共に9/8/7と入れれば09.08.07に自動で置き換わりますので書式には問題は無い様に思えます。 ちなみにA1セルに9/8/7と入力して635の処理を走らせると2009/8/7が20/9//8/に置き換わるだけでした。 それとMid関数を利用してピリオドをスラッシュに置き換えても結果は同じ07.09.08でした。 この処理の目的としては日付欄なのに入力の際にピリオドを直接入力している間違った記述を一括で直したいというのがあるのですが どうしてこんな順番入れ替わりがおこるのかが本気で謎です。
646 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:48:18 ] >>645 DateSerialをかますんだ! Dim s As String If TypeName(Range("A1").Value) = "String" Then s = Range("A1").Value Range("A1").Value = DateSerial(Left(s, 2), Mid(s, 4, 2), Right(s, 2)) End If
647 名前:635 mailto:sage [2009/01/25(日) 07:49:29 ] >>646 確認しましたが、それで大丈夫みたいですね。 ありがとうございました。
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を表示させずにその後の処理を実行する方法はありませんか?