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)
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