1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ] 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/ 14 pc12.2ch.net/test/read.cgi/tech/1262748898/ 15 pc12.2ch.net/test/read.cgi/tech/1271261239/ 16 hibari.2ch.net/test/read.cgi/tech/1280045912/ 17 hibari.2ch.net/test/read.cgi/tech/1289182437/ 18 hibari.2ch.net/test/read.cgi/tech/1298240666/ 19 hibari.2ch.net/test/read.cgi/tech/1305754555/ 20 hibari.2ch.net/test/read.cgi/tech/1312435844/ 21 hibari.2ch.net/test/read.cgi/tech/1316931607/ 前スレ: Excel VBA 質問スレ Part22 toro.2ch.net/test/read.cgi/tech/1322400978/
522 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:31:33.21 ] イミディエイトウィンドウは200行がMAXで不可変らしいね。 >>519 「オートフィルタ カウント」 でぐぐればいろいろ出てくる
523 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 13:57:19.01 ] >>516 それimmediateの意味とはちがくね? immenselyとかimmensityの意味じゃね?
524 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 15:07:58.10 ] >>523 直接の〜、とか 即時の〜 という意味だね。 形容詞だね。 ホントどうでもいいけど
525 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 20:33:40.70 ] >>516 immediateはどうかんがえたって即って意味だろ
526 名前:デフォルトの名無しさん [2012/03/07(水) 21:21:07.31 ] ユーザーフォームを使おうと思ったのですが、 閉じるボタンを押した時、必ずフリーズします。 何故でしょうか。
527 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:37:14.41 ] >>526 ボタンを押した時に実行されるコードを何故貼らない
528 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:37:33.25 ] >>526 壊れているのかもな
529 名前:526 [2012/03/07(水) 21:42:22.61 ] すみません。526です。 セルをダブルクリックで呼び出すことにしていまして、 閉じるボタン押した時、セルが編集可能状態である為エラーが出るみたいです。 (ボタンで呼び出した場合は普通に閉じれました。) コードの中身はなく、ひとまずフォームを作った感じです。 ダブルクリックでフォーム呼び出しはやるべきではないのでしょうか。
530 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:50:53.38 ] Cancel = False
531 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:34:23.81 ] 教えてください。 まず変数aに1を代入し DO LOOPの中でaを5にしました。 その後aを使うと元の1に戻っているのですが、 これは仕様ですよね? この5という数値を使う方法はありませんか?
532 名前:デフォルトの名無しさん [2012/03/07(水) 23:41:52.46 ] >>531 仕様がないAH0
533 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:12:08.65 ] VBAの変数にループ内のスコープなんてなかったよな? >>531 とりあえずコード貼れ
534 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:19:44.48 ] >>531 a = 1 Do a = 5 Loop Until True MsgBox a
535 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:22:36.75 ] >>533 すみません。質問した者です。 変数に追加していくのではなく、 毎回上書きしていただけでした・・・ 初心者でごめんなさい。 ' Do ' If r = 1 Then ' Exit Do ' End If ' total = Cells(r, 4) ' r = r - 1 ' Loop
536 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:56:45.28 ] >>535 謎すぎるけど解決したなら、よかった
537 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 01:01:53.11 ] for系でないループで 中をIfとExitで制御している形はけっこう危険なんだよね。 思わぬ条件で抜けたり 一度も通らない経路ができたりする。
538 名前:デフォルトの名無しさん [2012/03/08(木) 01:02:17.51 ] =LEN(A1) =LEN(A2) =LEN(A3) みたいな値をB列にA列の終わりまで入れていくにはどうしたらいいですか? For文で回すんでしょうか・・・? データの最終位置を取得するのに、「End(xlDown).Row」と、「(Rows.Count, 1).End(xlUp).Row」 ってどう違うんでしょうか? MsgBox "End(xlDown).Row : " & Cells(1, 1).End(xlDown).Row MsgBox "(Rows.Count, 1).End(xlUp).Row :" & Cells(Rows.Count, 1).End(xlUp).Row ↑ を、マクロ開始前のセルの位置をズラして色々やってみても結果は同じでした・・・。
539 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 01:33:09.38 ] >>538 Cells(1, 1).End(xlDown).Row は上から順番に見ていく 途中に空白があると、それより下のデータは無視される Cells(Rows.Count, 1).End(xlUp).Row は下から順番に見ていく 最終行までびっちりデータが入っている場合を除いて、本当の一番下がわかる
540 名前:デフォルトの名無しさん [2012/03/08(木) 01:45:52.43 ] >>539 分かりやすい説明をありがとうございました。 で、 =LEN(A1) =LEN(A2) =LEN(A3) みたいのを入れてくには、やはりFor文で回すのでしょうか?
541 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 02:04:48.60 ] >>540 数十行程度ならForでもいいと思う もっと大量にある場合はオートフィルの方がプログラムがすっきりするし処理スピードも速いはず
542 名前:540 [2012/03/08(木) 02:21:23.52 ] >>541 ありがとうございます! ググってみたところ、 Range("B1").AutoFill Destination:=Range("B1", Range("A65536").End(xlUp).Offset(, 1)) でいけるみたいです!この方が頭よさそうだし、スッキリ見やすいし、これでいきます! おかげさまで安眠できます。 夜分遅くにお付き合いいただき、ありがとうございました!
543 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 21:37:27.17 ] P列に区分として1又は9を入れた時、Q列に当日の日付を入れたい で、その行位置は範囲は 2行目からlastrow = Cells(Rows.Count, "A").End(xlUp).Row までとしてこういう時 どういう風に Worksheet_Changeに書けばいいんでしょ?
544 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:20:58.13 ] >>543 何がわからないの?
545 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:24:19.73 ] >>543 何も考えずにやれば、こう lastrow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastrow If Cells(i, "P").Value = 1 Or Cells(i, "P").Value = 9 Then Cells(i, 17).Value = Now End If Next ただし、Worksheet_Changeでこれやっちゃうとループするので 違う所でやるか、変更箇所のチェックしてQ列なら変更しないとかの工夫が必要
546 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:26:58.87 ] だからP列に1又は9を入れた時、その横に当日日付を入れたい で、どう書けば良いのか?って聞いてんですけど
547 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:31:28.83 ] リロードしてなかった。。。 >>545 ありがとうございます。 それを元にまた勉強してみます
548 名前:デフォルトの名無しさん [2012/03/09(金) 00:27:00.69 ] 結構ggったのですが解決しないのでどなたかご教授ください!! if 以下の3セルの内容が数字(全角・半角)でないとき 処理Aを行う Sheet1.Cells(y, x) Sheet1.Cells(y, x+1) Sheet1.Cells(y, x+2) else if Sheet1.Cells(y, x)のみが数値(全角・半角)でないとき処理Bを行う という処理を掛けたいです。 別の言い方をすると、セルが文字・全半角スペース・空の時に処理を掛けたいです。 If not と IsNumberで出来ると思いきや上手くいってません。 お願いいたします。
549 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 00:27:09.17 ] >>545 cells(i,16)で書くよりCells(i,"P")で書いたほう 列が非表示だったら時便利ね!とか、関係ないことをオモタ
550 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 01:08:49.15 ] With Sheet1 a = StrConv(.Cells(y, x), vbNarrow) b = StrConv(.Cells(1, x + 1), vbNarrow) c = StrConv(.Cells(1, x + 2), vbNarrow) End With If IsNumeric(a) = "False" And IsNumeric(b) = "False" And IsNumeric(c) = "False" Then 処理A End If If IsNumeric(a) = "False" And IsNumeric(b) = "true" And IsNumeric(c) = "true" Then 処理B End If ベッタベタでよければ どうぞ。
551 名前:デフォルトの名無しさん [2012/03/09(金) 01:15:04.82 ] >>550 ありがとうございます試してみます!! IsNumeric IsNumberの使い方もあまりわかっていなかったので助かりました。
552 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 02:42:06.08 ] >>550 IsNumericはBooleanなんだが、なぜ文字列で判定する? ちなみにIsNumericは、全角の数字でもTrueの判定するから、StrConvする必要はなかったりする 指数表記も認めたりするから、数字の定義によっては注意が必要
553 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 03:03:03.65 ] >>552 ””いらないね。あっても動くけど。 If not IsNumeric(a) And not IsNumeric(b) And not IsNumeric(c) で書いてたんだけど、解りにくいかと思ってやった。 今は反省している。 全角の数字判定は知らんかったわ。便利ね。 ありがとう
554 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 23:40:36.42 ] VBAは、無くなるの?
555 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 23:51:09.95 ] それは目出度い
556 名前:デフォルトの名無しさん [2012/03/10(土) 00:40:01.35 ] JSサポートするという噂話だけ
557 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 01:21:54.25 ] VBAにJavaScript???
558 名前:デフォルトの名無しさん [2012/03/10(土) 16:17:05.72 ] 1行につき2シートずつ追加するマクロ(簡単に言うと)があります。 これが、72行ぐらいになって、シート数が159を超えたあたりから、シート追加の 「Copyメソッドが失敗しました」とエラーになります。 実際、そのブックでそれ以上シートを追加しようとしてもできません。 ググってみたところ、シート数に上限などはないようですが、メモリに依存するようです。 1枚1枚のシートは、それほど情報量はないのですが、Vlookup関数を多用してますので、 それもメモリを食っているかもしれません。 シート名も、平均22文字ぐらいあって、とても長いです。 一連のマクロは、一度も保存せずに、メモリ内だけで行っています。 データは、60行〜80行ぐらいまである時もあり、一括管理できるようにするため、 やはり1つのファイルに収めるのが理想的ではあります。。 どうすれば、このエラーを回避できるでしょうか?
559 名前:デフォルトの名無しさん [2012/03/10(土) 17:53:10.37 ] それってあるデータを見栄えのいいように整形するためにシートを作ってるって解釈でいいの?
560 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 18:26:11.05 ] 試したけど、空白シートをただ追加するだけなら5000シートでも問題なかった Excel2007 on Win7 シート毎の有効行やvlookupなど、少しずつ条件を変えて状況が変わるか試してみたら? 原因が特定できれば対処も考えやすいと思う
561 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 19:17:20.06 ] まず数百もシート作るっていう設計を考え直した方がいいんじゃないかと
562 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 21:48:45.31 ] ここは64bit版の出番だな。
563 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:17:58.69 ] Range("A1").Characters(Start, Length).TextのLengthに256を超える数値は指定できないんでしょうか? 257以上を指定したらCharactersクラスのTextプロパティを取得できませんってエラーが出るんです…
564 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:42:09.93 ] >>563 うちの2007ではちゃんと動いてる 環境かけ
565 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:49:30.49 ] >>564 Windows7 64bit版、Excel2010 32bit版です。。
566 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:52:16.01 ] ntの頃は、鯖と普通のやつの違いがレジストリのどっかが違うだけだったネタがあったな
567 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:53:02.68 ] >>566 誤爆
568 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:54:11.13 ] 今試したらRange("A1").Characters(Start, 257).Font.Bold = Trueとかは動くのに Textプロパティだとエラーが出てしまいます。。 やりたいことはTextプロパティを使わなくてもできるので別の方法考えてみます。
569 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:03:29.53 ] >>568 Length=256なら本当にOKなの?
570 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:07:39.75 ] >>569 MsgBox Range("A1").Characters(1, 256).Text MsgBox Range("A1").Characters(1, 257).Text の両方を試して256はOKでした
571 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:11:18.10 ] >>570 うちは同じ環境だけど、エラーでない
572 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:15:31.25 ] >>571 ですよねぇ・・・ 今までもRange("A1").Characters(Start, Length).Textという書き方は何度もしてきたと思うし こんなエラーに出会ったことがないので、たぶん私が何か見落としてるんだと思います。 もうちょっと調べてみます。ありがとうございました。
573 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:22:58.34 ] 質問です。 今、ウインドウ枠の固定を使って、上から3行だけを固定で表示させるようにしています。 この固定部分にボタンを配置して、マクロを登録しようと考えています。 それで、ホイールを回せば4行目から下が上下にスクロールするわけですが、ホイールを 回して下に適当にスクロールさせて、固定部分のボタンを押す。 そうすると「画面に表示されている」上から4行目のセル番地を取得する。 そういうマクロを作成したいんですが、これは可能でしょうか? すみませんがよろしくお願いします。
574 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:33:19.28 ] >>573 MsgBox ActiveWindow.ScrollRow + 3
575 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:42:17.38 ] >>574 おお!できた! 多分できないかなーと思ってたんで嬉しいです。 ありがとうございました。
576 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 00:33:01.82 ] >>572 うちの2007でも、TextやCaptionを取得しようとするとエラーになるな でも設定してもエラーにならずに正常に動く Dim c As Characters Set c = Range("A1").Characters(0, 260) MsgBox c.Text 'ここでエラー おかしいのはRange.Charactersメソッドじゃなくて CharactersクラスのTextメソッドだな エラーのMsgBoxの行を変えてテストした c.Text = String(25, "W") 'これは正常に動作 c.Text = String(250, "W") 'これはエラーは出ないが動作してない c.Text = String(256, "W") 'これはエラー どうも怪しげな動作してるな
577 名前:デフォルトの名無しさん [2012/03/11(日) 02:56:35.77 ] Excelってなんでもできるんだなー Excelで
578 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 04:55:25.47 ] それは無理
579 名前:510 mailto:sage [2012/03/11(日) 09:10:27.01 ] 誰か>>510 知ってる人いませんかね。 OSはXPでエクセル2002です。
580 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:39:05.54 ] フォームの場合、エクスポートしたファイルには フォームやそこに配置したコントロールのプロパティと プログラムコードが1つのファイルに書かれているわけだが インポートしたときにプロパティ領域とコード領域を分ける空行部分が コードエディタ側に読み込まれるってだけの話だろ
581 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:45:34.73 ] >>580 分かりやすい回答ありがとうございました。
582 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:09:37.71 ] え、formってimportできるんすか?!! この前 outportしてそのままimportしたら、class moduleになったので、もうてっきり無理なんだと。。。
583 名前:558 [2012/03/11(日) 14:30:33.27 ] >>559 ええと、業務用です。 取引先ごとに、表紙と帳票をセットにして、FAXするのですが、今までは帳票だけを ガーッと保存もせずに、シート追加して作成するマクロがあって、別にFAXの表紙だけを まとめたExcelファイル(取引先300件分のシートがあって、3,3Mくらいのファイル) の中から、該当の取引先宛の表紙を探して、総FAX枚数や、帳票内の集計数なんかをちょちょっと 直して、印刷して、帳票とマッチングしてFAXしてたんですが、データ(取引先)が 72件もあると、結構2時間ぐらいかかる作業なんです。 この仕事を引き継いだ、元ヘタレPGの私としましては、なんとしてもマクロ化 しちゃいたい衝動にかられまして、FAX表紙は、ざっと3パターンしかなかったので、 取引先を一覧にして、表紙のテンプレに、Vlookup()で引っ張ってきて、 表紙と帳票とセットでシート追加するようにマクロを組んだんです。 そうしたらこのエラーです。 まあ、限界に挑戦するマクロだとは思うんですが、、元々の量の倍になってる 訳だし、、やっぱりファイルを分けるしかないのかな・・。 メモリを食ってる部分が、VlookUPなのか、シート名なのか、それともファイルを 保存してないせいなのか、ある程度でも分かれば、そこを対処してから、ファイルを 分ける方向で行こうかと思って質問させて頂いた次第です。 ひょっとしたらスレチかもしれませんが・・・。
584 名前:558続き [2012/03/11(日) 14:31:55.26 ] 計算式より、値が入ってた方がExcelのメモリは食わないんでしょうか・・・? ちなみにファイルサイズは、2.3Mくらいです。 ここ↓ oshiete.goo.ne.jp/qa/3047947.html で、詳しく説明して下さってる方がいるんですが、ここでいう、「配列数式」や 「揮発性(volatile)関数」ってのが何のことなのか、いまいち分かりません。。 VlookUPのことなのか?だとしたら、VlookUPをマクロでやってしまった方がいいんだろうか・・・ 長々とすみません。お知恵をお貸しくださいますと幸いですm(_ _)m
585 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:38:02.97 ] vlookupでもシートでも話聞く限り、そこまでメモリ食う感じがしない 顧客名全部仮の名前にして、FAX表紙も適当なものに差し替えてファイルアップすれば もっと具体的なアドバイスもらえるんじゃないかな
586 名前:558 [2012/03/11(日) 14:51:48.85 ] >>585 ありがとうございます。 ファイルは会社にあるので、アップするとしたら明日以降になりますが・・・。 最初のシートに、全ファイルの目次を作って、目次から、各シートに飛べるように ハイパーリンクを組んだんですが、ひょっとしたらそれがいけなかった・・・? VBA初めてなので、ソース見ていただいた方がいいかもしれませんね。。
587 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:01:52.27 ] あと、エラーがでた環境も詳しく OS、Excel、メモリ
588 名前:558 mailto:sage [2012/03/11(日) 15:16:02.07 ] >>587 了解しました!(OSはXP、Excelは多分2003・・・)
589 名前:デフォルトの名無しさん [2012/03/11(日) 15:56:09.31 ] Vista.sp2,Excel2000 新しいExcelで,Excel2000のソートコードが動くでしょうか 使っているコードです sh2.Range("e9").Select Rows("11:45").Select Selection.Sort Key1:=Range("A11"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin sh2.Range("e9").Select
590 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:18:23.96 ] >>589 動くよ
591 名前:デフォルトの名無しさん [2012/03/11(日) 16:38:44.83 ] >>590 ほんとにありがと
592 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:45:48.72 ] VISTA Excel2007 微妙にスレチっぽくて恐縮なのですが… ExcelからADOでAccess2010ファイルに接続したいのですが udlファイルを作成して、ダイアログでProviderとData Sourceを指定、接続テストも通るのに、 いざ次のコードでそのudlファイルを指定するとエラーになります ([ODBC Driver Manager]データソース名および指定された既定のドライバが見つかりません) 原因分かる方いますでしょうか ADODBCon.Open UDL01_fPath またExcelVBAでudlファイルのProviderの値の取得方法ってあるのでしょうか? Data Sourceの値は以下のコードで取得できたのですが、Provider値の取得方法が分かりません 以下のコードでData Sourceの部分をProviderに置き換えてもエラーに With CreateObject("ADODB.Connection") .ConnectionString = "FILE NAME=" & UDL01_fPath DB_FPath = .Properties.Item("Data Source").Value End With 以下、udlファイルの中身です [oledb] ; Everything after this line is an OLE DB initstring Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test\DB\Database1.accdb;Persist Security Info=False
593 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:57:24.25 ] 補足 UDL01_fPath ’udlファイルのフルパス udlファイルにアクセスする前に、udlのData Sourceに格納されたDBファイルの 存在チェックを入れており、その部分ではエラーがないので、 Providerの指定でエラーが起きてると思うんですが分かりません 最初はudlファイルのProviderとData Sourceの値をコード内で指定していたのですが、 その時はエラーはありませんでした その時の値とをテキスト上にコピーして文字列を比較しても差異はありませんでした
594 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 19:42:42.20 ] >>592 なんか良くわからんが、たぶん ADODBCon.Open "FILE NAME=" & UDL01_fPath MsgBox ADODBCon.Provider
595 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 19:59:57.96 ] >>594 ありがとうございます!! うまくいきました こんな見落としで何時間も浪費していたなんて自分が情けない
596 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 16:09:38.74 ] 以前、>>447 でカラーパレットについて質問したものです。 ユーザーフォームにボタン表面の色を変えたものを複数並べる ことによって色を選ぶようにしました。 ボタン一つ一つのクリックイベントにコードを書いたのですが、 イベントの共有やどのボタンが押されたかを識別することによって コードを簡素化したいのですが、VBAでそういったことは可能でしょうか? ググったのですが、ブックの共有などの情報ばかりで検索しきれなかったので、 どなたか教えてください。 よろしくお願いします。
597 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 18:41:11.31 ] application.caller で出来たっけ?
598 名前:デフォルトの名無しさん [2012/03/12(月) 19:51:06.54 ] オートフィルタをかけた抽出結果のタイトル行を除いた最初の行の、二番目の列から、 データの入っている有効セル全てをコピーするにはどうすればいいでしょうか?
599 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:13:22.36 ] こんばんあ!しつもんだお! for nextの後にcallでquerytable.addすると処理固まってしまうのですが、どうすれば良いですか?メモリとかバッファとかよくわかりません
600 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:17:12.27 ] すいません。 VBAで32bit符号無し演算をしたいんですが、型がlongじゃダメです。(当然) どんな技を使えば良いですか?
601 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 21:01:49.30 ] >>596 Part17で似た質問をして、カラーパレットをクラスモジュールを使って作成したことがあります。 できてはみたものの、クラスモジュールはよく分かりませんでした。 VBやC#なら、どのイベントにどのプロシージャを結びつけるかをプロパティウィンドウで 簡単に設定できるようになっています。 VBAではそういう使い方は向いていないのではないか、と思います。
602 名前:596 mailto:sage [2012/03/12(月) 21:49:46.96 ] >>597 ,601 ありがとう。 Application.Callerをググったら、どの例もシート上のボタン等を調べるみたいで、 ユーザーフォーム上のボタンのクリックイベントでは使えないみたいです。 ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1427920774 ここを見ても、601さんが書かれているように気軽にできる感じではなかったので、 ボタンのtagプロパティにカラーコードを書いておいて、activecontrolで識別するようにしました。
603 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 23:05:54.84 ] >599 Long型でユーザー定義変数を作成し、 LSetステートメントで強制的に2つのLong型に分割。 2つのLong型を下位32bitと上位32bitで別々に計算し、 計算後に改めてCurrent型にLsetステートメントで合体。 という方法がある。 「VBA currency型のビット演算」でググるとよろし。
604 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 12:18:48.28 ] >>603 ちょーthx.
605 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 19:30:37.29 ] Excel2010 bookname = "D:\data\backup\data_xxxxxxxx.xlsx" xxxxxxxxxx は作業日付 Worksheets("data").Copy With ActiveWorkbook .SaveAs Filename:=bookname .Close End With としてdataシートを別ブックに保存しようとすると、このシートには Activateになった時に作業をするモジュールがついていて xlsxでは 保存出来ないとExcelに言われてしまうんですが。。。 保存する際にモジュールは要らなくデータだけで良いんですけど どうすればモジュールを切り離して保存出来るんでしょうか?
606 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 19:41:52.71 ] >>605 今、手元にExcel2010が無いんで自信ないけど、 .SaveAs Filename:=bookname, FileFormat:=xlOpenXMLWorkbook とかでどうだろ? 明日会社行けば試せるんだけど・・・
607 名前:605 mailto:sage [2012/03/13(火) 19:59:10.22 ] すごい! 出来ました。 そのFileFormat指定は初めてです。 ありがとうございます。m(__)m
608 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 20:32:15.03 ] はろー。ループするとき処理待ちするにはどうすればいいですか?
609 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 20:36:33.61 ] 「こんばんわ、処理町隆史です」という。
610 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 20:43:21.74 ] おれがずっと探し求めていたのはジャーマンスープレックスもといドゥーイベントカンスーだったようだ…
611 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:55:34.65 ] >>608 DeEvents
612 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 22:05:09.05 ] OS:XP Home 32bit Excel:2003 条件を満たした場合、ソースコード自体を書き換える事は可能でしょうか?
613 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 22:24:36.95 ] >>605-607 Application.DisplayAlerts = False でいいんじゃないのか
614 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 22:29:45.74 ] >612 できるけど、OSやExcelのバージョン違いに対する対応なら #If〜#Then〜#EndIfや#Constの条件付きコンパイルを使うほうがよい。 どうしても書き換えしたいなら、参照設定で 「Visual Basic for Applications」に参照設定をすれば VBEのコードそのものを直接VBAで動かせるようになる。
615 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 22:35:10.19 ] >>613 Application.DisplayAlerts = False ↑ これは単にメッセージ出すのを抑制するだけですよ?
616 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:37:57.80 ] >>615 xlsxで保存したらマクロは保存されない 警告なしで保存できるんだからそれでいいだろ
617 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:53:25.53 ] >>613 ,616 なるほど。そういう手もあったんですね
618 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:55:37.82 ] >>615 ↑ お前がずれてますよ 605もアホだがエスパーすると… … … … 警告なしに保存したいということだろ だからDisplayAlerts=Falseが合っている FileFormat指定が的外れ 警告はxlsxで保存するとマクロは保存されませんよ ってことだからな
619 名前:586 [2012/03/14(水) 01:29:08.85 ] とりあえず、「Copyメソッドが失敗しました」のエラーが起こる簡易版のファイルを 作成しました。 www.vivi-loda.mydns.jp/index.php?m=dp&n=file1526 DLkey:asd test1の方で実行しても、test2で実行しても、 こちらの環境(Win7 HomePreminum SP1(32ビット版)、Excel2003 SP3、メモリ3G) だと、44シート追加したあたりで、当該エラーが出ます。 このファイルだと、マクロではエラーが出るものの、手作業でシート 追加はできますが、とりあえずこのエラーを回避したいです。(できるものなら) ちなみにこのマクロを実行すると、一時的にPCが重くなったりするので、お気をつけください。 よろしくお願いいたします。
620 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 02:19:08.42 ] >>619 自分の環境ではエラーにならない Win7 Ultimate SP1 (64bit) メモリ8GB、Excel 2007 SP2
621 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 03:45:17.31 ] >>619 Vista Ultimate SP2 32bit Excel2007 SP3もエラーなし ちなみにシート500まで追加させても問題なし 2003の問題か、PCの問題だな 昔ディスプレイドライバー辺りのバグでExcelでメモリ不足出たことあったが つかWin7でExcel2003とか動作保障あるのか
622 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 04:00:24.00 ] >>619 流れ読んでないけど、ワークシートのコピーは複数回実行するとマクロでなぜかエラーになる現象がある。 標準のワークシートをコピーする関数を使うのはやめて、「ワークシートを追加→セル全体をコピー→ペースト」 という関数を作っておくと楽。