1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/ ★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)
502 名前:500 mailto:sage [2008/10/12(日) 19:23:34 ] >501 シートAは手動でソートするんですか? シートAのソートをマクロで実行して、 その際のパラメータをデータブックに記録しておけばどうですか? シートAのソートのパターンをいくつかつくっておいてマクロ実行時選ぶように したらいいのでは?
503 名前:デフォルトの名無しさん [2008/10/12(日) 22:26:40 ] シートA(B&Cも)は別ブック(任意のデータブック)ですので、単独で開いて ソートされる事も想定が必要です。 プログラムブックからデータブックを開いて、データブックに定義されている 内容によりデータブックのアクティブシートを編集しています。 データブック側にはVBAコード等の記述は不要であり、プログラムブック側に VBAコードを記述し、データブックのイベントを拾ってデータブックの編集を 行っています。 データブックは任意のxlsファイルが指定できます。
504 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:42:02 ] 誰か早く無理だって言ってやれよ
505 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:01:29 ] 無理です
506 名前:503 [2008/10/13(月) 00:02:44 ] 自分も最初は無理だと思っていたのですが、メニューで現在のソート状態が表示 (Excel2000)されている事に気付いたので、取得する方法がある筈と考えた次第 です。 Excel2007を一寸見たら、現在のソート状態は表示されないみたいですね。 諦めかな...
507 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:27:16 ] 無理かどうかは知らんけど、Excelが覚えてるからといって、それを取得できる公開I/Fがあるとは限らない。
508 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:35:54 ] 二つのセルを比較して降順か昇順かしらべることはできるんじゃないの?
509 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:46:52 ] 無理です
510 名前:デフォルトの名無しさん [2008/10/13(月) 01:40:17 ] ExcelVBAの関数のコールグラフを作成してくれるツールってある? ちなみにDoxygen+VBFilterは関数の中は全く解析してくんなかった。
511 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:36:23 ] フォルダにある複数の報告書のファイル名を変更したいのですが 方法を知っている方おられませんか? 報告書(Aさん)→済_報告書(Aさん) 報告書(Bさん)→済_報告書(Bさん) 報告書(Cさん)→済_報告書(Cさん) 上記のように ()内の名前が変わってもファイル名を 報告書()→済_報告書() と変更できる方法を探しています。 何か良い方法を知っている方がいれば教えて頂けないでしょうか? お願いします。
512 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:12:43 ] ファイル名を fileName As String とすると、 まず fileName LIKE "報告書(*)" で想定した書式であることを確認した後、 fileName = "済_報告書(" & Mid(fileName,5,Len(fileName)-(4+1)) & ")" って感じ?
513 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:40:36 ] >>511 スレ違い ファイル名変更ぐらいならRENコマンドでできる。
514 名前:512 mailto:sage [2008/10/13(月) 17:50:21 ] この条件だと、wsh使わないと一寸厳しいとは思う。 というか、何かしら加工した上でSaveAsする時のファイル名の話だと思っていたのだが。 違うの? >>511
515 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:51:55 ] >>1
516 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:58:06 ] >>511 Name ステートメント
517 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:15:55 ] >>514 さん 返信遅くなってすみません レス有難うございます。 >>何かしら加工した上でSaveAsする時のファイル名の話だと思っていたのだが。 はい、ファイルを一度開いて、ある個所にチェックを付けてからファイル名を変更して保存します。 最初は>>516 さんの言うように Nameをつかってみようと思ったのですが()内の名前部分が ネックになって上手くいきませんでした。 >>513 、>>515 さん スレ違いでしたか、すみませんでした。
518 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:08:55 ] >>506 xlsファイルフォーマットが公開されているので(英語)、 解析してソート部分の設定を読み出すコード書いたら。
519 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 21:24:53 ] 何がわからないのかわからなかった
520 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 21:42:57 ] なんでわかってもらえないのかがわからない
521 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:54:48 ] なんでわかってもらえると思えるのかがわからない
522 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 10:15:24 ] >>506 ヘルプには「シートごとに保存される」 とは書いてあるがどうやって取り出すか書いてないな・・・ ところでそもそも「ソートの設定」で見ようとするのは危なくないか? コピペされたら最後に使われた「ソートの設定」とは違った並びになってる可能性もあると思う ソートのパターンが分かってるなら列ごとにどういうソートがかかってるか解析したほうがいいと思う
523 名前:500,502 mailto:sage [2008/10/14(火) 13:13:28 ] >506 522に1票 >シートBやシートCを編集する時のシートAのソート条件が異なるので >編集できるかどうかを判断するためにソート状態を知りたいのです。 とあるので、シートAのデータを上から順に調べるのが一番確実ではないでしょうか? ソートをプログラムするのは大変だけど、ある規則で並んでいるかどうか調べるだけなら簡単では?
524 名前:506 [2008/10/14(火) 13:22:48 ] 基本的には保存しない前提で考えていたので、コピペは考えていませんでした。 出直します。orz
525 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 16:26:52 ] なんで強制的にソートしちゃいけないのかな Aが一定の条件でソートされてないとBやCの編集ができないのに、 ソートは人まかせってのが不思議 永遠にソートしてくれなかったらどうするんだろう ソートされてるかどうかを何かのフラグとして扱うつもりなら、 それこそそんなの信用できないんじゃないの 気まぐれでソートして見てみただけかも知れないし
526 名前:デフォルトの名無しさん [2008/10/14(火) 16:57:54 ] 私の勘違いだと思うのですが、どうしても分からないのでお尋ねいたします。 文字列のソートの結果と大小比較(<, >)やStrCompの結果が異なるもの があるようです。具体的な例をあげると、 "ad-02-mb.html" "ad-02.html" の2つ。昇順ソートをすると後者が先に、大小比較では前者が小さいと なります。マッチング処理ができなくて困っています。解決方法を お教えください。
527 名前:506 mailto:sage [2008/10/14(火) 17:42:10 ] >>525 説明不足でした BやCの編集が出来ない訳ではなく、グループが分断されてしまうので編集に時間が 多めに要するという事です。 強制的にソートする事も考慮していますが、シートAを選択した時に元の並び順に 戻す必要があります。 別シートにコピーして並べ替えという手もありますが、出来るだけ自由度を持たせ ておきたいとも思っていますので、ユーザ任せでも良いかなという気もしています。
528 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:03:14 ] >>526 バージョン差あるかもだけど、option compare は? >>527 ソートされなくても永遠に作業が滞るわけではないのね。ならよかった いつの日か希望どおりにソートしてもらえるといいね
529 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:03:09 ] >>526 その「ソート」って何の事よ
530 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:35:11 ] >>527 だったら作業用のシート作って、データ全部コピーしてそこで自分の好きなようにソートすりゃええやんか。 そうすれば元データはいじらなくて済むっしょ。んで作業が終わった時に作業用のシートを消せば?
531 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:36:19 ] そぅっとしてやってくれ。
532 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:16:22 ] 早野乙
533 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:58:59 ] >526 自分のPC(WinXp Excel2003)で試したら再現したので並べ替えのヘルプを見たら原因判明です。 ヘルプから引用 一重引用符 (') とハイフン (-) は無視されます。ただし、ハイフン以外は同じ文字列がある場合、 ハイフンを含む文字列が後に配置されます。 引用終わり つまり、並べ替えの時は-が無視されるので、ad-02mb.html と ad-02.html が比較される。 先頭から6文字目は"m"と"."なので、"."のあるad-02.htmlが先になる。大小比較のときは"-"も 比較に利用されるので、bd-02-mb.htmlが先になる。 文字コード(10進表記)では、"-":45 ".":46 "m":109 です。
534 名前:526 mailto:sage [2008/10/15(水) 22:38:35 ] >533 おーっ、感動の回答!ありがとうございます。 自分の頭ばかり疑って、ヘルプを見るのを忘れてました。こんな仕様?があったとは。 で、どーすりゃいいのか考えないと。。。 とにかく、ありがとうございました。
535 名前:533 mailto:sage [2008/10/15(水) 22:54:32 ] >534 レスがあるとうれしいですね。 引用符を無視するのはわかるけど、なんでハイフンも無視するんだろ。 解決方法で悩んでいるようですが、データをハイフンではなくアンダーバー"_"にしたらだめですか? 処理対象のデータにハイフンとアンダーバーが混在してたらダメだろうけど、ハイフンだけだったら 一括置き換えでアンダーバーにしておいて、処理の後にハイフンに戻すとか。
536 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:00:23 ] binary
537 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:03:15 ] ハイフンは、行末で英単語を分割する際に使われるからだな。
538 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:04:22 ] どのような時に、なぜマッチング処理ができないのかを明記せよ
539 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:08:50 ] >536 バイナリ・モードの並べ替え(VBAでのsort)ってできるんですか? エクセルとエクセルVBAのヘルプをみたけど、「大文字と小文字を区別」するMatchCaseの記述は あるけど、バイナリのことは書いてありません。(Excel2003)
540 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:27:30 ] マッチング処理ってどういう処理をしてるの?
541 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:35:57 ] 比較にstrcompを使った独自ソート関数書けよ
542 名前:デフォルトの名無しさん [2008/10/15(水) 23:48:53 ] >>539 Option Compare ステートメント
543 名前:542 mailto:sage [2008/10/15(水) 23:52:53 ] こっちの勘違いにつき、忘れてcくれ(^^;
544 名前:539 mailto:sage [2008/10/15(水) 23:57:27 ] >542 エクセルVBAのヘルプを見てみました。 引用はじめ Option Compare ステートメントが記述されていないモジュールでは、既定の文字列比較方法 である Binary モードが使われます。 引用終わり ということは、何も考えずに(手動、マクロとも)ソートしたときがBinary モードなので、 ハイフン"-"を無視しないようにするのは無理なのでは?
545 名前:539 mailto:sage [2008/10/16(木) 00:03:27 ] >543 リロードしてませんでした。一晩寝ると忘れますので、ご安心を。
546 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:57:46 ] で今夜は徹夜ですっと
547 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 03:44:56 ] 購入日 保証年数 2006/10/05 2 2004/08/12 5 2005/04/22 3 という値があって、購入日から保証年数を足して、今日現在(Date)に達していない(つまりは保証切れ)の場合、 ・・・するという場合、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then 'もし列がA(1)なら ★ If DateDiff("d", 「現在のセルの日付」+右隣のセルの値(年数), Date) < 0 Then '今日との日付差がマイナスなら Target.EntireRow.Font.ColorIndex = 5 'その行のフォント色を青(5)にする Else Target.EntireRow.Font.ColorIndex = 0 'その行のフォント色は黒(0)にする End If End If End Sub 保証切れの場合、色をつけたいのですが、 ★をどのようにすればいいでしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 05:05:36 ] ある日付から、 n年後 n日後などを求めたい時は dateadd 詳しくはヘルプ読んで あとそのコードだと保証期間内の時に青になるよ datediffのヘルプ読んで
549 名前:526 mailto:sage [2008/10/16(木) 22:42:05 ] なんだかソートとマッチングの問題でいくつか質問をもらったみたいですが、 Windowsの文字列ソートの問題は、結構話題になっていることがわかりました。 Excel 95までは、単純なソートであったものが、Excel 97から単語ソートとMSの言う、 ハイフン、アポストロフィ無視のソートに変わったみたいですね。単語ソートだと、 アンダースコアも更におかしな挙動になります。私は、"-"を""に、"_"を" "にリプレース してマッチングする処理にしました。 ちなみにマッチングとは、キーをDo While oldキー >= Newキー で回して、 =のときにマッチング処理を行うものです。このときのキーの大小判定と、ソートの 並び順が異なるために、おかしくなっていました。 みなさんのおかげで、なんとか完成しました。ありがとうございました。
550 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:51:10 ] 説明する気ないのか
551 名前:526 mailto:sage [2008/10/16(木) 22:52:41 ] 間違えたDo While oldキー >= Newキーはブレーク処理でした。マッチングは Do While マスターキー >= トランザクションキーでした。
552 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:07:51 ] もう来なくていいよ
553 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:09:30 ] そもそもマッチングを勘違いしてると思われる。
554 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:13:46 ] マイッチングまちこ てか、正規表現でも使うの?マッチングって事は。
555 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:37:01 ] ブレーク処理とかマッチング処理なんて言葉が出てくるのは業務系のコボラーに多いな。 COBOL使えない若い人でも、周囲の先輩達が使うのでそれが一般的な用語だと思ってる事が多い。
556 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 10:56:37 ] ものすごくアフォな質問で申し訳ないんですが教えてください For〜Next文内で10回ごとにそれぞれ決まった作業を1回だけさせたい場合、 For I = 1 To 1000 「基本作業」 a = Right(I, 2) If a = 1 Then 「選択作業1」 ElseIf p = 2 Then 「選択作業2」 ↓ 以下、0まで選択作業計10個 ↓ Else End If Next I こんな感じでいいんでしょうか? 今実行環境が無いのでどなたかアドバイスお願いしますorz
557 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:39:21 ] >>556 あくまで自分ならだが For I = 1 To 1000 '「基本作業」 a = I Mod 10 Select Case a Case 1 '「選択作業1」 Case 2, 3 '「選択作業2」 End Select Next I といった感じにする
558 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:44:28 ] >>557 ありがとう 家に帰ったらいろいろ試してみます
559 名前:デフォルトの名無しさん [2008/10/17(金) 17:54:59 ] セルの値が1のときセルの色づけ赤,2のときセルの色づけ青 とするマクロをVBAで組んだのですが,一回実行した後, セルの値を1から2を変更しても,実行ボタンをあらためて 押さないと色が青に変わりません。 2を入力すれば直ちにセルの色づけが青に変わるようにする ためにはどのようなコードを入れればよいのでしょうか。 よろしくお願いします。
560 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:27:43 ] >>559 ボタン押したら色が変わるようにしたんだろ? だったら当然だな 入力してすぐに変えたければ 1.ボタンはやめてワークシートのChangeイベントで動かす 2.VBAをやめて条件付書式にする どちらかだな ところでテンプレ>>1 の★5読んだか?
561 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:06:41 ] >>560 ありがとうございます。 まったくの初心者です。場所を間違えたようです。 失礼しました。
562 名前:547 mailto:sage [2008/10/17(金) 20:36:21 ] > ★ If DateDiff("d", 「現在のセルの日付」+右隣のセルの値(年数), Date) < 0 Then なんですが、 dateaddをして、比較したいのですが、 If Dateadd("y", target.offset(0,1).value, target.value) < Date Then と、やってみてもダメでした、 Private Sub Worksheet_Change If Target.Column = 1 Then に、おいて、特定セルと特定セルの右隣を関数に入れて比較する方法は、 上記であっているのでしょうか?
563 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:38:26 ] >>562 ダメだった時はどうダメだったのかを書こうぜ > 特定セルと特定セルの右隣を関数に入れて比較 そこは合ってる で、右隣のセルに入ってるのは日数じゃなく年数でしょ? 後はもっぺんヘルプ読んで
564 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 01:46:12 ] >>559 条件付書式だかそんな感じの奴でマクロなしでできる
565 名前:547 mailto:sage [2008/10/18(土) 04:21:40 ] >>563 もう一度考えてみました。 やりたいことと、セルの値 購入日 保証年数 2006/10/05 2 ←保証切れ(青色になって欲しい) 2004/08/12 5 ←保証が切れていない(色は黒色に) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If DateAdd("d", Target.Cells.Offset(0, 1).Value * 365, Date) < Date Then ' 今日の日付に、Target.Cellsの右に入っている年数×365日を足して、今日の日付と比較 Target.EntireRow.Font.ColorIndex = 5 '青 Else Target.EntireRow.Font.ColorIndex = 0 '黒 End If End If End Sub 日付を入れると「全部青になってしまいます」 ちなみに If DateAdd("y", Target.Cells.Offset(0, 1).Value, Date) > Date Then と年数バージョンでもやってみましたが、同じ結果orzでした。 全然わかりません、足して日付が今日より前なら「保証切れ=青色」にしたいのですが・・。 日付と日付を比較できていないのでしょうか?単位が違う状態で比較しているのでしょうか?
566 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:47:32 ] >>565 おいおいw、悩み過ぎてわけわかんなくなったのか?ガンガレ 今日の日付に足したら、何足したって未来になるだろw >>562 のでほぼ合ってるんだよ オレのヘルプには "y" じゃなくて "yyyy" ってのがあるんだが、 おまいのにはないのか?
567 名前:565 mailto:sage [2008/10/18(土) 06:29:37 ] ありがとうございます。 yyyyでしたか・・・、さっそく書き換えるといけました!感動しました。 たしかにadddateで今ヘルプを見ると、 設定値 内容 yyyy yyyy y 年間通算日 yyyy・・・内容書いていませんwww (by Office 2003) でもyは、その年から何日後という意味なんですね、こんなの思いもよらなかったです。 しかし、大問題が発生しました。 xlsファイルを「開いたときに今日の日付を比較しないといけない」ので、 worksheet_changeじゃだめなんです。 workbookが開いたとき、な方法があればいいのですが、 worksheet_activate、selectionchangeでも反応しませんでした。 Private Sub Worksheet_Change(ByVal Target As Range) ここをどのように書き換えれば、読み込み時に再判定してくれるのでしょうか?
568 名前:565 mailto:sage [2008/10/18(土) 06:53:58 ] 何度もすいません、 たぶん、worksheet_activateイベントで良いと思うのですが、 activateになった時に計算させるということは、 自動的に Private Sub Worksheet_Activate(ByVal Target As Range) If Target.Column = 1 Then If DateAdd("yyyy", Target.Cells.Offset(0, 1).Value, Target.Cells.Value) < Date Then Target.EntireRow.Font.ColorIndex = 5 '青 Else Target.EntireRow.Font.ColorIndex = 0 '黒 End If End If End Sub Private Sub部分を変えただけだと 違うシートを選んで、選択し直すと 「コンパイルエラー プロシージャの宣言がイベントまたはプロシージャの宣言と一致していません」 と出ますが、すでに上の言葉が理解できません。 if文以下も変更しなければならないのでしょうか? byヘルプ プロシージャの名前はイベントと同じ名前ですが、パラメータの数と型が一致しません。 イベント プロシージャに新しくパラメータを追加したときなどに、このエラーが発生します。 たとえば、フォームの Form_Load イベント プロシージャを次のように変更すると、このエラーが発生します。 ダメです、わけわかりませんorz
569 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 08:23:40 ] >>567-568 > yyyy yyyy ちょwマジでw おちおち「ヘルプ読め」とも言えんじゃないか まあそっちは解決したようで良かった イベント変更の方だが、worksheet_activateは引数を取らないから、 そうなるのは当然だな 引数を消して、targetを自前で指定してやればOK つか、workbook_openイベントもあるんだが つか、今さらだけど、 色変えたいだけなら条件付き書式でもできるがw
570 名前:デフォルトの名無しさん [2008/10/19(日) 02:32:28 ] VBAにEffective C++やEffective Javaみたいなガイドラインってある?
571 名前:568 mailto:sage [2008/10/19(日) 02:58:41 ] >>569 >色変えたいだけなら条件付き書式でもできるがw こ、こんなのあったんですか・・。 春先ぐらいから悩んでいたのが、一撃で吹っ飛びました。 わざわざVBAを使う必要無かったんだ・・・。 ___________ || || ⊂⊃ || ∧ ∧ || ( ⌒ ヽ でも勉強にナターヨ・・・ ∧||∧ ∪ ノ ( ⌒ ヽ 彡 V ∪ ノ フワーリ ∪∪
572 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:29:41 ] ほんとに色変えるだけなのかよwまいったw >>559 もそうだし、こういう奴、実は多いのか? 何という時間の無駄
573 名前:デフォルトの名無しさん [2008/10/19(日) 07:09:25 ] 悪いけど笑わせてもらう ァ ∧_∧ ァ,、 ,、'` 。゚( ゚^∀^゚)゚。,、'` '` ( ⊃ ⊂) '`
574 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 07:12:51 ] 関数でできることをマクロでやろうとしたり、案外よくあるよな
575 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 12:16:55 ] だんだんとワークシート関数がウザくなってくるんだよなw
576 名前:デフォルトの名無しさん [2008/10/19(日) 17:15:03 ] 暇だから何か問題だしやが……出して下さい
577 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:25:44 ] >576 Excel総合相談所74で質問が出てますよ。(レス番号325です)
578 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:49:32 ] プログラミング初心者かつエクセルにも詳しくない奴が、 この手ので延々悩むんよね 心理的ハードルを超えさせる書式の魔力おそるべし
579 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:31:47 ] >>576 4色問題お願いします。
580 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:29:21 ] >>577 ありがと 解決済みだった >>579 全ての図形が4色で塗り分けられるとかなんとかだよね 図形の形とか定義あるのかな? セルに色塗るなら二色で出来ちゃうし
581 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:33:43 ] 二次元配列に書き出したセル範囲のデータををリストないしはコンボボックスに 格納したいんですが、ワークシートに書き出さずに直接入れる方法はありますでしょうか?
582 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:43:16 ] >>581 あります 入力規則のリストなら、マクロの記録録ればわかります コントロールオブジェクトのコンボボックスの方はVBAヘルプに載ってます 但しフォームツールのコンボボックスなら多分セル書き出し必須
583 名前:581 mailto:sage [2008/10/19(日) 22:50:06 ] >>582 すみませんコントロールツールボックスの方です シートに書き出せばRowSourceプロパティで簡単なのは存じてますが…
584 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:51:02 ] >>580 4色問題ってこんな感じのです。 ttp://yougo.ascii.jp/caltar/4%E8%89%B2%E5%95%8F%E9%A1%8C
585 名前:デフォルトの名無しさん [2008/10/19(日) 22:59:02 ] >>584 ありがとう 1.A1からランダムにIDつけて、同ID隣り合わせを領域と見なす 2.領域ごとに、隣り合わせ同色にならないように色IDを付ける 3.色IDが1から4で収まっているか判定 っていうアプローチでよいかなあ アルゴリズムの問題っぽいがw
586 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:36:57 ] セルに依存しない計算は速いのですが結果をセルに 出力するのに時間がかかります。たとえば Dim X(10000, 10) As Double Dim I As Integer Dim J As Integer '計算 For I = 1 To 10000 For J = 1 To 10 X(I, J) = Sqr(I) * Sqr(J) Next J Next I ' 出力 For I = 1 To 10000 For J = 1 To 10 Cells(I, J) = X(I, J) Next J Next I で出力の所要時間を計算時間と同程度にすることができるような 出力の書き方があれば教えてください。
587 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:51:32 ] For I = 1 To 10000 For J = 1 To 10 Cells(I, J) = Sqr(I) * Sqr(J) Next J Next I
588 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:51:40 ] ちらつき抑制でよいかな? forの前に Application.ScreenUpdating = False を入れると、シートの描画しないから早くなる 少しずつ描画見たいなら、例えばNextの間に Application.ScreenUpdating = Tlue Application.ScreenUpdating = False を追加すると、Iが一つ進むごとに描画される 例えばIが100ごとに実行したいなら J Mod 100 使ったりできる
589 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:54:01 ] つーか、配列を0始まりではなく1始まりにしてそのまま書き出したらいいやん
590 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:20:55 ] >588 21秒から13秒に8秒も短縮できました。ありがとうございます。 >589 具体的に「そのまま書き出す」ってどうすればいいんですか? よろしくお願いします。
591 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:29:07 ] >>590 >>589 じゃないけど、 range(cells(1,1),(cells(10000,10)) = X
592 名前:591 mailto:sage [2008/10/20(月) 00:30:17 ] タイプミス range(cells(1,1),cells(10000,10)) = X
593 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:36:38 ] base 1 にするのはお勧めできない。 変数に+1しる。
594 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:41:35 ] 592>> やってみました。1秒かからないんですね!ありがとうございました。
595 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:42:22 ] base 1 にするのはお勧めできないが 変数に+1するのもお勧めできない X(1 To 10000,1 To 10)にしる
596 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:49:07 ] すみません Range(Cells(1, 1), Cells(1000, 10)) = X(1 To 10000,1 To 10) とするとコンパイルエラーがでるんですが・・・。
597 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:52:29 ] >>596 違う違うw 1 to 10000 とかを書くのは dim のとこ
598 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:56:26 ] Dim X(1 To 10000, 1 To 10) As Double でしたね。失礼しました。 みなさんどうもありがとうございました。
599 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:02:50 ] EXCEL XP, 2000, 2003, 2007において、 VBAはクアッドコアに対応しているの? コア4つのVBAはやはり処理が早いんだろうか・・。
600 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 04:35:01 ] >>582 余談だけどフォームの方もできる
601 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 06:43:22 ] すみません 文字列の入ったセルをselectした際に、単にselectにするだけではなく、 編集中の状態にまでもっていきたいのですが、 そのような方法を御存じないでしょうか。 select後、sendkeys"{F2}"で実現できるのですが、 Sendkeysを使用しない方法を探しています。どうか宜しくお願いします。
602 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 08:24:46 ] 数式バーで編集じゃだめなの?