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)
494 名前:デフォルトの名無しさん [2009/01/11(日) 20:05:41 ] A(伝票番号)B(日付)C(店名)D(金額) となっていて、C列の店名ごとに並べ替えてあります。 C列の店名が変わるごとに列A〜Dに太線を入れたいので以下のようにしました。 Sub test() With Range("C1", Range("B65536").End(xlUp)).Offset(, 250) .Formula = "=IF(C2="""","""",IF(C1<>C2,1,""""))" .Value = .Value On Error Resume Next With Intersect(.SpecialCells(xlCellTypeConstants) _ .EntireRow, Range("A:D")).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThick End With On Error GoTo 0 .ClearContents End With End Sub これだとデータが1件(1行分)しかない場合線が引けません。 データが1件でも区切り線が引かれるようにするには どのようにすれば良いですか?
495 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:24:15 ] >>494 努力だけは認めるが、無駄が多すぎる。 店名が同じかどうか判定するのに、わざわざワークシート関数なんか使わなくてもVBAだけでやればいいだろうに。 Sub test() r = 2 While Cells(r, 3) <> "" If Cells(r, 3) <> Cells(r - 1, 3) Then With Range(Cells(r, 1), Cells(r, 4)).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThick End With End If r = r + 1 Wend End Sub
496 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:37:40 ] >>495 考えすぎたみたいです。解決しました。 ありがとうございましたm(_ _)m
497 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:43:27 ] >>494 オレの知らないテクニック満載で何やってんのか理解できねえ
498 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:46:09 ] すみませんw
499 名前:デフォルトの名無しさん [2009/01/12(月) 07:19:54 ] 2007の質問ですー 図形の操作がらみが「マクロの記録」に残らないんですが 以前のバージョンのように記録させる方法ないでしょうか?
500 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 08:23:04 ] >>499 ない
501 名前:デフォルトの名無しさん [2009/01/12(月) 17:55:50 ] 初歩的な質問で申し訳ありません。教えていただけますでしょうか。 下図@のように、クラスと番号と氏名が入力されているファイルがあります。 下図Aのように、クラスと番号のみが入力されているファイルがあります。 クラスと番号の2つをキーに、図@からAに氏名をとってきたいのですが、 どのようにしたら良いでしょうか。 キーが1つであれば、VLOOKUPで出来るのですが、2つになって困っています。 宜しくお願いします。 図@ 図A クラス 番号 氏名 クラス 番号 1 1 相沢 1 1 1 2 加藤 1 2 1 3 佐藤 2 1 1 4 館山 2 2 2 1 安西 2 3 2 2 木村 2 3 工藤
502 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 17:57:54 ] Excel総合相談所 76 pc11.2ch.net/test/read.cgi/bsoft/1228655230/942 942 名前:名無しさん@そうだ選挙にいこう[] 投稿日:2009/01/12(月) 17:51:11 【1 OSの種類 .】 WindowsXP 【2 Excelのバージョン 】 Excel2007 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 可 【5 検索キーワード 】 VLOOKUP 値の取り出し 下図@のように、クラスと番号と氏名が入力されているファイルがあります。 下図Aのように、クラスと番号のみが入力されているファイルがあります。 クラスと番号の2つをキーに、図@からAに氏名をとってきたいのですが、 どのようにしたら良いでしょうか。 キーが1つであれば、VLOOKUPで出来るのですが、2つになって困っています。 宜しくお願いします。 図@ 図A クラス 番号 氏名 クラス 番号 1 1 相沢 1 1 1 2 加藤 1 2 1 3 佐藤 2 1 1 4 館山 2 2 2 1 安西 2 3 2 2 木村 2 3 工藤
503 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 21:11:53 ] こんなスレにホイホイ質問して良かったのか? 俺はマルチポストでも構わず答えちまう男なんだぜ。 俺なら、どっかのセルにクラスと番号を結合させた物を作る。 cells(i,1).value & "-" & cells(i,2).value をforでまわしてどっかに作る。 図1と図2に同じ処理。 後はfindでsetするなり、好きに料理しろ。
504 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 21:50:33 ] 実行中のマクロより呼び出すことで、実行を中断しデバッグ可能な状態にする コマンドはありますか? マクロの自動記録で試しましたが記録されませんでした。
505 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 21:58:38 ] >>504 勘違いかも知れんが、Stopとかブレークポイントの事か?
506 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:28:43 ] >>505 そうです。 ブックを開いてマクロ実行する運用の中で、 一定の条件が成立した時に止めたいのですが、 ブックを開く度にブレークポイントを手動で設定するのは 現実的ではないのでブレークポイントはちょっとNGと思ってます。 イメージとしては以下のような感じです。 if xxxxx then application.stop ← ここで止めたい end if ブレークポイントをマクロより動的に設定できるか、 ブックに保存できる方法でも助かります。
507 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:30:16 ] >>506 errとerr.number使えばいいんじゃねーの?
508 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:34:30 ] MsgBoxやInputBox出せばそこで止まるぞ 止まったらEsc押すといい
509 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:37:15 ] >>508 はダメだった、すまね
510 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:53:25 ] じゃあSTOPでいいんじゃね? 止まったところでイミディエイトウィンドウで変数の内容を見たり書き換えたり自由にできる。 実行再開はCONT (嘘)
511 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 22:58:17 ] SendKeys "{Break}" ごめん嘘
512 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 01:58:50 ] debug.assert false じゃダメなん?
513 名前:505 mailto:sage [2009/01/13(火) 17:18:25 ] >>506 そのままでいいじゃん for i=1 to 5
514 名前:505 mailto:sage [2009/01/13(火) 17:20:27 ] >>506 途中で送信してしまった for i=1 to 5 if i=3 then stop endif next i みたいに。
515 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 20:24:40 ] 単に止めるだけなら for i=1 to 5 if i=3 then stop next i って書く。
516 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 21:12:47 ] 俺は処理が1行でもThenの後ろには書かない もちろん、If ... Then ... else ...もやらない
517 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 21:36:38 ] >>514 >>515 ありがとうございました。 stopで止まりました。
518 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 21:51:33 ] >>516 すいません そのわけを教えてください
519 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 22:15:21 ] クラスモジュールについてドップリ勉強できる書籍はないだろうか?
520 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 22:39:31 ] 勉強するほどのものじゃないんじゃ
521 名前:デフォルトの名無しさん [2009/01/13(火) 22:54:17 ] IPアドレスを 123.456.789.10 からx番目のIPアドレスを求めるような EXCEL関数かVB関数を探してるのですが、 そんな便利なものありませんか?
522 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:17:28 ] x番目って何よ?
523 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:23:36 ] Split("123.456.789.10", ".")(x)でいいんじゃねーの
524 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:25:33 ] >>522 すみません。 123.254.90.10から 1番目は、123.254.90.11 2番目は、123.254.90.12、 … という意味です。 上のIPアドレスの範囲も間違えて、あぁぁぁ、出直してきます。 失礼しました。。。。
525 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:28:29 ] 単なる足し算じゃね
526 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:02:10 ] うーん Sub test() For x = 1 To 10 A = Split("169.254.100.10", ".") A(3) = A(3) + x Debug.Print Join(A, ".") Next End Sub
527 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:48:01 ] 123.254.90.256とかやりそうな奴だな
528 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 20:38:53 ] 123.54.90.999 とかやってくれたら笑えるんだけど
529 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 00:29:42 ] OSはXP EXCELは2003です。 1.EXCEL上に別のEXCELシートを開くハイパーリンクを貼る 2.リンク先のシートが開くと同時に Private Sub Workbook_Open() Workbooks("Book1").Close End Sub みたいな感じで処理を走らせ、リンクで開いたシート自体を閉じる のような処理を入れるとシートが閉じられた後、EXCELがおかしくなります。 アクティブになっているEXCELシート以外のシートがアクティブにできないし、 新たに別のシートも開けなくなります。 ハイパーリンクとリンク先のシートを閉じる処理って同時には行えないんですかね?
530 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 01:01:19 ] >>529 イベント処理中でブックを閉じると実行中のインスタンスが開放されて暴走するんだっけ、 なんかそんなのがあったような気がする。
531 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 03:44:25 ] 開く方に Book1閉じるって書くしかないんじゃね
532 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 04:02:02 ] マクロ専用のブックを1つ用意して、それは閉じないようにするとか
533 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 18:17:44 ] すみません。質問させて下さい。 Excel2002のシートにラベルコントロールを貼付けました。 それをクリックすると、マウスカーソルがコントロールから離れるまで コントロール全体のサイズが若干大きくなってしまいます。 これは仕様でしょうか? もし対処方がありましたら、御教示下さい。
534 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 18:20:29 ] >>533 フォーカス位置を示す点線で囲まれた状態のことを言ってんなら、それは仕様
535 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 18:37:33 ] >>534 回答ありがとうございます。 ラベルのキャプションのテキストのサイズも変化するので、 フォーカスの点線ではないと思われます。 キャプションのテキストは通常状態ですと文字が滲んでおり、 クリックしてラベル全体が大きくなると文字がハッキリすることから、 ラベルをクリックしたときのサイズが正しいような気がします。
536 名前:デフォルトの名無しさん [2009/01/15(木) 19:37:27 ] 質問です。 book1をアクティブにした状態のまま、book2の特定のセルに書き込みをしたいのです。 で、 Windows("book2.xls").Cells(1, 2) = 1 とやったのですが、エラーが出ます。 正しくはどうやればいいのでしょうか?
537 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 22:06:50 ] × ブック.セル = 値 ○ ブック.シート.セル = 値
538 名前:デフォルトの名無しさん [2009/01/16(金) 18:33:12 ] すいません質問です。 VBAを使い年賀状を作成しなければならないのですが まず何からどうしたらよいかさえわかりませんm(_ _)m お願いします。汗
539 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 18:40:34 ] まずは作成しなければならない状況に陥らせた人に聞くべきだろう
540 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 18:48:41 ] マクロ記録しながらシートで作ればいいよ
541 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:00:27 ] この時期だと年賀状じゃなくて寒中見舞いだぞ
542 名前:536 [2009/01/16(金) 19:27:50 ] >>537 レスありがとうございます。 さっそくやってみました。 Windows("book1.xls").Sheets("Sheet1").Cells(1, 2) = 1 とやったのですが、やはりエラーが出ます。 なぜなのか、さっぱりわかりません。 しつこいようですが、教えて下さい<(_ _)>
543 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 20:03:41 ] ちょっとはぐぐれよ。オブジェクト名やメソッド名がおかしいだろ。 Sub test() Workbooks("book1.xls").Activate Workbooks("book2.xls").Worksheets("Sheet1").Cells(2, 1) = 1 End Sub
544 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:03:00 ] Excel 2000ですがマクロのステップ数が大きくなると、 ブックのファイルサイズがMB単位で肥大化して困ってますが、 皆さんどうしてますか?
545 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:17:27 ] そんな現象おきないのでどうもしてないが
546 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:24:57 ] どんだけ巨大なマクロを作ってるんだか。 ワークシートを操作するマクロを何度も走らせるとファイルが太る可能性はあるが、 それならシートの再構築でダイエットできるかもしれない。
547 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:27:09 ] 以下の構成で、hogeよりfugaにあるクラスを生成(new)しようとすると、 「ユーザ定義型は定義さていません」エラーとなります。 クラスでないモジュールの場合はそのまま呼び出せてます。 名前空間の問題と思われますが解決方法はありますでしょうか? hoge.xls → fuga.xla(参照設定)
548 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:31:21 ] >>546 マクロは相当な量です。 再構築は以前試した時は多少は改善しました。 でも、まっさらなブックにマクロのみ貼り付けても、 それ以上は小さくならなかったのでコレが限界かと。
549 名前:デフォルトの名無しさん [2009/01/16(金) 23:32:49 ] >>543 おおおおお、ありがとうございました!!
550 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:34:08 ] Variant型をできるだけ使わないようにするとか
551 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 00:30:00 ] >>547 support.microsoft.com/?scid=kb%3Ben-us%3B555159&x=14&y=9
552 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 10:08:15 ] シートをそれぞれ別ブックに保存する方法教えて。 保存名はシートの名前で。
553 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 11:38:51 ] それを手動でやる方法すら思いつかないの? 思いつくならそれをマクロの記録で録ることすら 思いつかないの?馬鹿なの?死ぬの?
554 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 11:44:17 ] >>552 ワークシートコレクションに対するループの中で (1) シートが1枚のブックを新規作成 (2) そこへシートをコピペ (3) 名前を付けて保存 (4) 新規ブックを閉じる を繰り返す とりあえず>>1 の★5の理由によりまずは自分で作ってみれ。方法は★6で。
555 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:44:33 ] >>551 ありがとうござました。 しかし各クラスごとに生成用のメソッドが必要とは... これがなければ理想的なんですが。
556 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:44:47 ] >>555 オブジェクト指向ではコンストラクタとデストラクタもクラスライブラリで用意することになってる。 というか勝手にインスタンス化するのは不可能だろ。どんだけメモリが必要かもわからんのに。
557 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:49:40 ] >>556 おまい判ってない。 ↓ではコンストラクタでなはく生成用のグローバルなメソッドを クラスの外に定義しろっていってんだよ。 オブジェクト指向以前の問題。 ttp://support.microsoft.com/?scid=kb%3Ben-us%3B555159&x=14&y=9
558 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:00:01 ] シートの表示倍率の値は取得できます?
559 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:44:18 ] >>556 Excelのclassのインスタンス化プロパティがPrivateかPublicNotCreatebleしか選べないから 外部から直接インスタンス化できないという仕様なのが問題で、コンストラクタは関係ない。
560 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 19:30:45 ] Withっていいな。Withでネストしまくったコード見ると癒される。
561 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:43:17 ] >>558 出来ますよ
562 名前:デフォルトの名無しさん [2009/01/18(日) 11:40:34 ] すみません、質問です。 エクセル2003のVBAについてです。 フォーム内に、セル(もしくは、エクセルのセルと同様の働きをするもの) の貼りつけることってできるのでしょうか?
563 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 12:15:21 ] >>562 ググれカス q.hatena.ne.jp/1148568634 これで良い?
564 名前:デフォルトの名無しさん [2009/01/18(日) 13:52:10 ] withを使った方が処理の速度は速くなりますか?
565 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 13:54:43 ] はい
566 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 13:59:02 ] EXCEL2003です。 VBAの処理の中でハイパーリンクをセルの書式設定にてロックを解除したセルに貼り、 その後シート全体をセルの選択が出来ない形で保護する つまりハイパーリンクのあるセル以外は押しても反応が無いよう保護する処理を作ったのですが、 ハイパーリンク以外のセルを押すとリンク先の画面が立ち上がってしまいます。 ハイパーリンクのあるセル以外は選択することも出来ないような画面を作りたいのですが、 何故上のような画面が出来てしまうのでしょうか?
567 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 14:34:48 ] > 何故上のような画面が出来てしまうのでしょうか? 保護により選択出来ないセル上で行ったクリック動作は 現在選択状態にあるセル上で行ったものとして扱われる 故に選択できるセルが1セルなら、どこをクリックしようとそのセルをpクリックした扱いになる 君の要望を実現するには、セル上のハイパーリンクではなく、 ボタンコントロールなどを使ってリンク先に飛ぶのが適切だろうな まあガンバレ
568 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:07:11 ] うん!僕がんばるよぉぉぉおおお!!
569 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 16:35:58 ] WindowsXP上でEXCEL2003を使用してます。 フォームに入力した内容を編集してシートに反映させるマクロを作成しているのですが、 マクロ実行中はシートをアクティブに出来ないのでマクロを終了させないと シートの変更内容の確認が出来ません。(テスト作業+デバッグの効率が悪い…) マクロ実行中(フォーム表示中)でも、シートのウィンドウをアクティブにしてシート選択が 可能になる方法はあるのでしょうか? よろしくおねがいします
570 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:58:08 ] >>569 VBEのウィンドウを最大化しなければいい
571 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 18:31:58 ] >>569 普通に見れるだろ
572 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:46:29 ] マクロを手動で実行ではなく、 (例)表列A1、A2に数値を入力したらリアルタイムに(マクロ側に計算式記述。例えば A1*A2)A3に結果を表示させようとする場合どうすればいいでしょう? 解説サイト見てもブック起動時実行ってのばかりしか見つからない…
573 名前:569 mailto:sage [2009/01/18(日) 19:48:39 ] もう少し作成しているマクロを説明すると、 ・マクロはsheet1上に置いたコマンドボックスから開始する(フォームが表示される) ・フォームに入力した内容が反映されるのはsheet2・sheet3 で、 ・フォームが表示されている状態ではExcelのウインドゥをアクティブにすることが出来ない ・なので、マクロで変更されている筈のsheet2・sheet3を開くことが出来ない という状態です。 >>570 VBEのウインドゥについては開いている状態でも閉じている状態でも上記の現象に変わりありません。 >>571 マクロがsheet1を編集しているなら普通に見れるとは思いますが、 編集しているのは背面にある他のシートなので…
574 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:48:44 ] >>572 ワークシート関数と同じ感覚? それならSelectionChangeで出来る。 シートごとに設定しないといかんけどね。
575 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:11:43 ] >>569 ,573 Modelessで呼べば良いだけでは? >>574 SelectionChangeではなくChangeだろ SelectionChangeは選択セルが変更されたとき Changeはセルの値が変更(入力、削除など)されたとき それと対象セルと処理内容が同じならシート毎に設定する必要も無い ブック単位、あるいは全ブックを対象に一括処理する方法もある
576 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 20:20:07 ] >>575 vbModelessを付けてフォームを開いたところ上手くいきました、 ありがとうございます。
577 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 21:34:00 ] >>574 多分functionとrangeを使ってどうにかこうにか書くのだと思うのですが上手くいかない
578 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 21:36:51 ] >>577 ヒント Workbook_SheetChange Application.EnableEvents = False
579 名前:教えてください [2009/01/20(火) 00:51:55 ] 質問です。初心者です。 複数のブックに散らばっている同じ名前のシートを、1ブックの1シートにまとめたいのですがうまくいきません。 msgbox "5"までは表示されるので、次の行がおかしいのだと思います。 「motosheet.」の記述を消すとマクロ自体は動作するのですが、コピー元のブックではなくてコピー先のブックを参照してしまいます。 なぜか、rangeの親オブジェクトを記述すると「実行時エラー 1004 アプリケーション定義またはオブジェクト定義エラー」となります。 1行前はrangeの親オブジェクトを記述しても問題ないのに・・・ 本当に困っています。よろしくお願いします。
580 名前:教えてください [2009/01/20(火) 00:52:34 ] Private Sub CommandButton2_Click() Application.ScreenUpdating = False Dim motobookspath As Variant Dim motobookpath As Variant Dim 先ブック入力済み最終行番号 As Long Dim データ貼り付け開始行番号 As Long Dim sakirange As Range Dim motorange As Range Dim motobook As Workbook Dim motosheet As Worksheet Dim 入力済み最終行番号 As Long motobookspath = Application.GetOpenFilename(filefilter:="Exclブック,*.xls", MultiSelect:=True) MsgBox "1"
581 名前:教えてください [2009/01/20(火) 00:53:00 ] For Each motobookpath In motobookspath 先ブック入力済み最終行番号 = ThisWorkbook.Worksheets("データ").Range("i1").End(xlDown).Row データ貼り付け開始行番号 = 先ブック入力済み最終行番号 + 1 MsgBox "2" Set sakirange = ThisWorkbook.Worksheets("データ").Cells(データ貼り付け開始行番号, 1) MsgBox "3" Set motobook = Workbooks.Open(Filename:=motobookpath) Set motosheet = motobook.Worksheets("データ") MsgBox "4" 入力済み最終行番号 = motosheet.Range("i1").End(xlDown).Row MsgBox "5" Set motorange = motosheet.Range("a2", Cells(入力済み最終行番号, 19)) motorange.Copy Destination:=sakirange motobook.Close savechanges:=True Next Application.ScreenUpdating = ture End Sub
582 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 01:06:50 ] Set motorange = motosheet.Range("a2", Cells(入力済み最終行番号, 19)) → Set motorange = motosheet.Range("a2", motosheet.Cells(入力済み最終行番号, 19))
583 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 06:51:42 ] 巷ではこういうコードが普通にあんのかね。
584 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 11:38:28 ] 誰もがプログラミングの専門家じゃないからね。 入門書を斜め読みして断片的な知識で「動けばいい」程度のコードを書いてる人のが圧倒的に多いよ。
585 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 19:28:45 ] 超初心者で申し訳ありませんが・・・ エクセルのシートにある数字と文字列をCSVファイルに下記のように出力したいです。 (エクセル) 123,鈴木 1013,田中 (出力) 番号,名前 0123,鈴木 1013,田中 自分で作ってみたところ、下記のように文字列になってしまいます。 (出力) ”番号”,”名前” ”0123”,”鈴木” ”1013”,”田中” となってしまいます。 どのようにすれば良いのでしょうか。 よろしくお願い致します。
586 名前:579 [2009/01/20(火) 21:14:18 ] >>582 うぉー!! ありがとうございます!!!! 2日悩み続けてました。CellsオブジェクトもThisworkbookの子オブジェクトとして認識されて しまっていたのですね。 でも悩みに悩んでいるといろんなことを考えるから、勉強にはなりますよね。 >>583 もっと違った記述方法があるんですかね?教えてください。
587 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 21:48:51 ] >>585 どんなプログラムを作ったの?
588 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 22:07:54 ] >>579 まず変数名に日本語を使うところからダメだわ。
589 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 22:14:47 ] >>588 それは場合によりけりだな
590 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 22:21:17 ] 場合というか,使われ方とか規模とか書く人とかによるな どちらかに決めて使い分けはしない
591 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 00:29:10 ] 俺も変数名に日本語使うの抵抗あるけど 日本語使うとコードが分りやすくなるような気もするから 使おうかなとも思うけど… でも抵抗あるんだよなー
592 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 00:39:52 ] 英語だと既存の関数名、メソッド、プロパティ、その他予約後などと被る時、 ローマ字で書くのは嫌いだから日本語で書いちゃう
593 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:02:53 ] >>592 確かに! 日本語で書けば被らないな てことは日本語で書いたほうが合理的だな
594 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 05:44:10 ] ActiveXコントロールのテキストボックスをワークシート上で使う場合、 Heightを文字の大きさの2倍以上にしないと、文字が崩れますが 解決法はありますか?
595 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:15:08 ] 日本語は入力が面倒臭いのが難点。
596 名前:デフォルトの名無しさん [2009/01/21(水) 20:02:04 ] Excel2003にて、インターネット上からXMLを取得して利用するツールをつくって いるところなのですが、文字化けを起こします。 Dim get_xml As Object Set get_xml = CreateObject("MSXML2.DOMDocument.3.0") get_xml.async = False get_xml.Load (src_url) 抜粋するとこのようなコードです。 このときに、 ‖ この文字だけが、半角?に変換されてしまいます。get_xml.Load した直後で既に?に変わってしまっているのですが、どうすれば解消するでしょうか? 取得するxmlはUTF-8で、IE等のブラウザから見ると正常に‖と見えます。 よろしくおねがいします。
597 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 20:23:54 ] >>596 >>1 ★3,★4
598 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 22:56:21 ] >>597 失礼しました。。。
599 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 17:46:03 ] 日本語の変数名に関しては、漢字のみの送り仮名無し。って条件ならOKにする事が多いなぁ。 送り仮名が入ると面倒だよね。 あとは、変数名一覧表を作っておく事が絶対条件かも・・・。
600 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 18:10:08 ] >>599 Option Explicitは必須だね。 なまじわかりやすすぎて、同じ意味の別の熟語に無意識に脳内変換しちゃうことがある。
601 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:03:30 ] 質問です。宜しくお願いします セルA1には、「8:00」がはいっているとして、 Option Explicit Sub test1() UserForm1.TextBox1 = Range("a1").Value UserForm1.Show End Sub これで、テキストボックスに「0.33333333」じゃなく、 きちんと時刻を表示させるにはどうすればよいですか。
602 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:27:06 ] 右辺をRange("A1").TextとかFormat$(range("A1").Value,"h:mm") など。 TextはA列のセル幅が狭いと##とかなるけど。
603 名前:質問です [2009/01/22(木) 20:03:19 ] Sub test() Cells(1, 1).Activate Do Until ActiveCell = "" 入力値 = ActiveCell If 入力値 Like "*[C,CX*,O,OX*,O2,O2X*,Fe]" = True Then If 入力値 Like "*[O,OX*]" = True Then If 入力値 Like "*O" = True Then 処理 = 1 ElseIf 入力値 Like "*X2" = True Then 処理 = 2 End If ElseIf 入力値 Like "*[Fe,Fe*]" = True Then If 入力値 Like "*Fe" = True Then 処理 = 3 ElseIf 入力値 Like "*X2" = True Then 処理 = 4 End If Else If 入力値 Like "*[O2,C]" = True Then 処理 = 5 ElseIf 入力値 Like "*X2" = True Then 処理 = 6 End If End If
604 名前:質問です [2009/01/22(木) 20:04:18 ] ElseIf 入力値 = "*[Au,AuX*,Ag,AgX*,Pt,PtX*,Au1,Au1X*,Ag1,Ag1X*,Pt1,Pt1X*]" = True Then If 入力値 Like "*[Au,AuX*,Ag,AgX*,Pt,PtX*]" = True Then If 入力値 Like "*[Au,Ag,Pt,]" = True Then 処理 = 7 ElseIf 入力値 Like "*X2" = True Then 処理 = 8 End If ElseIf 入力値 Like "*[Au1,Au1X*,Ag1,Ag1X*,Pt1,Pt1X*]" = True Then If 入力値 Like "*[Au1,Ag1,Pt1]" = True Then 処理 = 9 ElseIf 入力値 Like "*X2" = True Then 処理 = 10 End If Else 処理 = 11 End If Else 処理 = 12 End If ActiveCell.Offset(0, 1).Activate ActiveCell = 処理 ActiveCell.Offset(1, -1).Activate Loop End Sub どうも分岐がうまくいかないのですが。
605 名前:質問です [2009/01/22(木) 20:05:07 ] 以下、その処理文字列です。 対象に[*]があることで違う分岐を選んでいそうですが、 ほかのものも予想外の分岐をするのですがなぜでしょうか。 (説明が下手ですいません) J0015-1*2 J0015-2*2 J0235-2PtAuX10 H0053-1PtX2 H0036-2C H0037-1CX2 J0004-1*2-O J0004-1*3-O1X2 J0004-1*3-OX2 H0053-1Pt1X2
606 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 21:16:29 ] NAMAE = Cells(1, 1) KUMI = Cells(2, 1) If NAMAE = "" Then NAMAE = "*" End If If KUMI = "" Then KUMI = "*" End If row1 = 3 Do While Cells(row1, 1).Value = "" Set aaa = Cells(row1, 2).Find(What:=NAMAE, LookAt:=xlPart) Set bbb = Cells(row1, 3).Find(What:=KUMI, LookAt:=xlPart) If Not aaa Is Nothing And Not bbb Is Nothing Then '条件が合ったときの処理 End If row1 = row1 + 1 Loop 変数のNAMAEとKUMIを検索項目にして目当ての行を見付けるプログラムを作ってます。 例えばNAMAEに入力があればKUMIがスペースでもNAMAEが一致する行をすべて検索できるようにしたいのですが、 上のようにすると検索対象の一覧の中で名前(row1, 2)が一致しているのに、組(row1, 3)がスペースの行が検索に引っかかりません。 一覧の中で検索対象セルの入力有無に関わらず、検索に引っ掛けるようにするにはどうしたらいいでしょう? 質問がわかりにくいとは思いますがお願いします。
607 名前:606 mailto:sage [2009/01/22(木) 21:23:56 ] すいませんまちがえました。 上の Do While Cells(row1, 1).Value = "" は Do While Cells(row1, 1).Value <> "" の間違えでした。
608 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 22:23:09 ] 読む気になれない・・・。
609 名前:606 mailto:sage [2009/01/22(木) 23:37:24 ] すいません。 最善の処置かはわかりませんが、自己解決しました。 スレ汚し失礼しました。
610 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:05:26 ] 特定のEXCELシートが開いている時にはそのシートを閉じ、 開いていなければ何もしないという処理って可能ですか?
611 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:08:50 ] >>610 ブックじゃなくてシート?
612 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:28:23 ] >>610 ブックなら可能 やりかたは自分で調べろ
613 名前:610 mailto:sage [2009/01/23(金) 00:29:16 ] >>611 間違えました。 シートではなくブックです。 失礼しました。
614 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:04:27 ] >>613 Workbooks( ).Close
615 名前:610 mailto:sage [2009/01/23(金) 01:16:51 ] >>614 それって全部閉じませんか? ブックAでマクロを起動するとブックAはそのままでブックBを閉じる機能なんですが。 そしてブックBが閉じている状態で起動してもエラーがおきないようにしたいです。
616 名前:603 [2009/01/23(金) 01:22:49 ] 長かったので問題の箇所まとめました。 If 入力値 Like "*[C,O,O2,Fe]" = True Or 入力値 Like "*[CX,OX,O2X]*" = True Then この分岐で(入力値) J0235-2PtAuX10 H0053-1PtX2 を拾ってしまうんですが、何が原因でしょうか。
617 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:25:39 ] >>615 Workbooks( ブックB ).Close エラー処理、またはエラー処理をしなくても済むような方法は自力で調べて考えろ 調べても考えてもわからなかったら、そこで始めて人に聞け
618 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:37:15 ] XP SP3 Excel 2002 SP3 ユーザフォームのShowModalをFalseに設定しています。 ユーザーフォームには、複数のテキストボックス、チェックボックス コマンドボタンを配置しています。 ユーザフォームとワークシート間を移動した時の イベントを教えて下さい。 Activate,Deactivateを試しましたが、該当しないようです。 宜しくお願いします。
619 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:47:47 ] >>616 色々な文字列のうち、どれがLikeの条件にヒットするか試してみたけど、法則が見えない ttp://momoiro.s4.x-beat.com/up/img/momoiro08659.png
620 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:54:13 ] >>618 該当するイベントは存在しないので、何か別の方法を考えるしかない。 例えばタイマーで一定時間ごとにアクティブなウィンドウを調べるとか、 はっきり言ってかなり面倒な方法しかなかったと思う。
621 名前:618 mailto:sage [2009/01/23(金) 02:06:26 ] >>620 有難う御座います。 やはりそうですか。ほかに力技でも考えてみます。 長いこと調べていたんで、これですっきりしました。
622 名前:デフォルトの名無しさん [2009/01/23(金) 02:11:43 ] >>619 そうですね。いろいろ試しているんですが、きびしいです。 Likeにクセあるんだろうと思いながら使えない気がしてます。 入力値をもっと制限する方法も検討しながらもう少し探ってみます。
623 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:17:18 ] あのさ、偶に勘違いしてる人が居るけど、Like演算子の文字クラスで [AB,CD,EF]とした場合、AB CD EF のどれかに一致するものではなく A B , C D E F のどれかに一致するものという意味になる つまり「 , 」は区切り文字ではなく検索文字のひとつに過ぎない >>619 の記述だと、B1のは「末尾が C , O S F e のどれかで終わるもの」という意味で C1の記述だと「C X , O 2 のどれかが含まれるもの」という意味になる その正しい仕様を理解していれば、○の付いてるものは正しく仕様法則に従っていることが解る AB CD EFのどれかで終わる場合にマッチさせたければ、"*AB"、"*CD"、"*EF"の3条件をOrで重ねるか Like演算子ではなく正規表現で"(AB|CD|EF)$"とするべきだ
624 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:19:54 ] >>622 こうなったらRightとInstrで1個ずつ調べるしかないと思う
625 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:25:34 ] >>619 たとえば、"*[CX,OX,O2X]*"は、 CかXか,かOか2を最低一つ含むという意味では?
626 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:26:37 ] >>623 なるほど、つまり "*[C,O,O2,Fe]" → "*[,2CeFO]" "*[CX,OX,O2X]*" → "*[,2COX]*" ということか。納得いった。 VBAの解説してる某有名サイトは間違ってんだな
627 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:28:49 ] >>617 ありがとうございます。 その.closeでエラー回避する方法あるんですね。 調べてみます。
628 名前:デフォルトの名無しさん [2009/01/23(金) 02:33:57 ] >>625 >>626 そうなのですか。 確かにそれなら納得がいきます。 参考にしたサイトを間違えたかも。 ありがとうございます。 長いコードを書くことが確定した。
629 名前:623 mailto:sage [2009/01/23(金) 02:40:06 ] >>626 ,>>628 OfficeTANAKAかな? まあ解説サイト作ってるからといって全てを熟知してるわけじゃないし レベルも様々だから仕方ないさ まあ、あの人レベルはそんなに低くもなく高くもなくだが もっとレベルの低い人がデタラメばかり書いてる解説サイトもあるから過信は禁物
630 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:51:41 ] >>615 プログラムってのはひとつの発想に固執せず、 いろんな角度から発想を転換してみるのが上達のコツ こういう時はエラーが起きないよう注意するより、 エラーを無視すればいいんだよ on error resume next workbooks("B.xls").close on error goto 0
631 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 04:24:46 ] 出来るなら 一度保存して閉じるけど
632 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 04:26:53 ] そういうことじゃなくて、そもそも目的のブックが開いてない可能性があるのよ。
633 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 04:46:04 ] もし 開いていたら 閉じる
634 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 09:08:26 ] >>602 ありがとうございます
635 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:32:21 ] A1とA2セルの書式設定の表示形式をyy.mm.ddにして A1セルに文字列で「09.08.07」と入力して a = Cells(1, 1) Cells(2, 1) = Mid(a, 1, 2) & "/" & Mid(a, 4, 2) & "/" & Mid(a, 7, 2) 上のような処理を実行すると何故かA2セルに「07.09.08」と順番が入れ替わって表記されてしまいます。 何故なんでしょう? EXCELは2000です。
636 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:32:44 ] >>610 開いている全てのワークブックの名前をDoで回し取得、 該当ブックが有れば.close
637 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:39:01 ] >>635 年/月/日が月/日/年になってしまう時は、コントロールパネルかツール/オプションで地域の設定を見直す
638 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:43:34 ] >>636 全ブック回すならFor Eachの方がコードがシンプルになるけど負荷が大きくなる。 エラーを無視するのは行儀は悪いが一番処理は速い。 エラー処理をきちんと書く、例えばエラーメッセージを出すとか実行結果をエラーコードとして返すのが王道だけど 片手間で作る小規模なコードでは大げさすぎる。 どの方法を使うかはケースバイケースだ。
639 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 21:58:53 ] >>637 地域と言語のオプションやEXCELのツール→オプションを見ましたが不自然な場所は内容に見えるのですが。 もう少し詳しくお願いします。
640 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 22:06:36 ] >>639 ExcelじゃなくてWindowsのコントロールパネルの地域と言語のオプションだよ。 どこかのセルに「9/8/7」ってキーボードから入れたらどうなる? 「2009/8/7」になるか「9/8/2007」になるか。
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を表示させずにその後の処理を実行する方法はありませんか?
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