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)
463 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:17:17 ] >>453-454 さん お時間を割いて頂きたいへん有難うございました ノートに早速書き写したところなんと2頁にも及ぶなんて!(記録マクロと大違い) 段落が判らないので近い内ネカフェに印刷しに行けたら、と思っています 本当にありがとうございました また、余りの忙しさにお礼が遅れすみませんでした あの後記録マクロに成功し開けたり閉じたり繰り返したりができないものの、VLOOKでショートキーを使い保存までこぎつけました 目視と比べとても楽ちんでした ところがご指摘のとおり後ろにマクロ用?のようなシートがついているせいか?セルの表示が尋常でなく無理矢理値貼付けで乗り切ったのです その後9桁の数字が入力されたブックをマクロに通す作業がありましたので
464 名前:sage [2008/10/08(水) 21:22:35 ] 今度マクロを使って集計表を作ることになったのですが その中でVBAという物を使うということで質問をしに来ました。 内容は集計ボタンを押すと 同フォルダ内に配置されてるエクセルのファイル名を読み取って 事前に用意されている集計表の中に概要をコピーするというものです。 集計対象のエクセルは毎週作成され、「ファイル名称(作成日付)」で作られていき 数ヶ月に一度集計ボタンを実行します。 VBA、というかプログラムは全くのド素人ですが、 どういった文法?で作れば良いかなにかヒントだけでも教えて頂ければと思いこのスレに来ました。 皆さんどうか知恵をお貸し頂けないでしょうか、宜しくお願いします。
465 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:36:56 ] 1ブックずつ再度開けて自分のマクロのみ消去するのが面倒くさく、VBAの方を開き自分のショートキーのモジュールを解放しました 間違えて人の(どのブックにも3〜5個はある)は解放してないとは思うのですが、その後マクロの消えたブックになったりならなかったり 挙句いつもきちんと実行(9桁の番号が入ったブック達を通す)できていたマクロがデバッグ とりあえず慌てたものの優先事を片付け、再度初めからメール添付を保存しなおし今度はマクロを使わず手入力し、 手順のマクロを実行すると……………デバッグ 解放がいけなかったのでしょうか 記録マクロがいけなかったのでしょうか 黄色い行には"後ろのシートをアクティブにetc…"となっています。勿論このマクロは私が実行した記録マクロと違いえらい長く書いてある別の仕事の為のマクロです(抽出とまとめ)
466 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:41:57 ] >>464 >>1 ★5 ここは右も左も解らない奴が来るところじゃない どういう処理がしたくて、どういうコードを書いたが、どの部分で躓いてるのかを 具体的に質問できるレベルになってから出直すか 急ぎや勉強が嫌なら、金払ってVBAコード書いてくれるところに依頼しろ 車を運転するには免許が居るように、便利な物を利用するにはそれに応じた資格(スキル)が要る その資格無しに利便性を求めるなら、車でもタクシー使ったり運転手雇ったりするように 金使って解決しろ
467 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:48:54 ] 指定されたフォルダ中のエクセルファイルの一覧を取得する処理は、 453、454の中に書かれていますよ。 あと、434で紹介されたurlも参考になると思います。 文法云々ということであれば、エクセルVBAの入門書を入手するか、 ウェブの初心者向けサイトを調べてみてください。 それから、このスレのbPをよく読んでください。
468 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:54:43 ] 例えばデバッグの黄色い行を削除したりすればうまくいくのでしょうか その場合保存さえしなければ誰かが作成された、いつもは健全に働くモジュールを壊す事にはなりませんよね? いつもエラーなど発生しないのに私が要らないマクロを被せたせいで何かがどうかなったのでしょうか 自分のだけ解放しても他のマクロに影響があるのでしょうか それだけではないのです 今日は昼飯時に453さんの回答に気づきお礼をカキコするつもりが横に置いていた鞄に散歩中の犬がしっこをかけたのです! こんな目に遭う人がいますでしょうか 仕事もテンパリは続き少々のアルコールでは何にもなりません 皆様もこの寒暖の激しさにはお気をつけ下さい
469 名前:453,454 mailto:sage [2008/10/08(水) 22:11:56 ] >465 まだ、私が453〜454に書いたものは実行していないと思いますが、念のため書いておきます。 上記マクロは新規ブックの標準モジュールに書いてください。(ファイル名は任意ですが、 以下の説明ではマクロブックと呼びます) あなたが仕事で扱うブックには絶対に書かないでください。 エクセルを起動したらマクロブックを開き、ツール−マクロ−編集− prog_408 を選びます。 マクロ文中のフォルダ指定とかセル範囲などを実際のものに変更したうえで、いったん保存。 そのうえでprog_408を実行してみてください。 なお、私はWindowsXp、Excel2003で試しています。 ここまで書いたところで、468を見たので追加 465で書いてある「自分のショートキーのモジュールを解放」が気になる。そのモジュールにはあなたの マクロだけしか書いてなかったのかな? 本当に「自分のだけ」のモジュールでしょうか? ひとつのモジュールには複数のマクロが記録されるんですよ。 壊れてしまったものは、現場で対応してもらうしかないと思います。
470 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:56:33 ] なんなの、最近の流れ
471 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:34:46 ] スレbP−★5を読まない初心者ばっかり。
472 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 00:01:02 ] 469さん、ご丁寧にありがとうございました モジュールが単独だったか複数かという事ですが、珍しくうまくいった為解放する前にモジュールを表示させて自分の記録マクロを印刷しました そこには15行程度の構文が書かれていたのみですので下の方にもあったか?となるとおそらくなかったような…… なお記録する前に保存先を作業中のブックよりもう一つ深い範囲に適用する、を選択したと思います これがいけなかったのかもしれません あぁ楽をするのも大変ですね…… お先にお休みさせて頂きます。ありがとうございました。。
473 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 07:42:16 ] 過去スレですね? 現在PC環境にありませんが是非訪ねてみたいと思います! 晴れた今日も良い一日を!!
474 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 08:47:46 ] >>473 >>1 の★5のことだ・・・ マジでテンプラ読めないやつ増えてるのか?
475 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 09:51:50 ] そりゃ犬もションベンかけるわ
476 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 10:17:49 ] >>465 どのブックにもVBAモジュールがある…だと? あんた、「1ブックにはそれぞれ1シートしかないから、全シートを 一旦まとめて、後でまたバラして保存すれば…」なんて書いてたよな。 それでどういうことになるのかわかってるのか? あんたみたいなのは下手なことに手を出すな。 気づかない内に絶対まわりに迷惑かけてるから。 後始末する側の身にもなれ。
477 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:00:15 ] 2chで相談する前にそのブック配布したやつに相談するのが先だろ・・・ 他にVBAとか入ってるなら下手したら変数名とかかぶるし
478 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:17:51 ] VBAを勉強する前に、「仕事のやり方」から勉強するべき
479 名前:デフォルトの名無しさん [2008/10/09(木) 18:06:20 ] Excel2000でメニュー(データ>並べ替え)で現在のソート状態が表示されますが この値をVBAで取得する方法があれば教えて下さい。orz
480 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 21:21:37 ] 2chねらならVBEオブジェクトくらい使ったことあるよな
481 名前:デフォルトの名無しさん [2008/10/11(土) 03:49:58 ] フォーム画面/テキストボックスからの入力で、「型が一致しません。」が出てしまう。 【モジュール】 Private Foo As Integer public sub Bar(Baz As Integer) Foo = Baz End Sub ↓ 【フォーム】 Private Sub TextBox1_Change() On Error Goto Err If ( Len(TextBox1.Text) > 0 ) And ( IsNumeric(TextBox1.Text) = True ) Then Call Bar(TextBox1.Text) Else TextBox1.Text = "" End If Err: If Err.Number <> 0 Then MsgBox Err.Description End If End Sub
482 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 07:15:22 ] いったんエラー処理はずしてどの行でエラーか書いてくれよ まあfooかbazに入れてる値がまずいんだろう
483 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 07:46:33 ] 472です。その節はお世話になりました 犬に聖水をかけられた鞄は無事洗濯いたしました ところで9桁の番号を取得した後に'抽出とりまとめ'の長いコードの最初でデバッグが出始めた話でしたが なんと手順を間違えていたらしい事が昨日判明しました そのとりまとめ用の長いコードを実行するにはエクセルを全部閉じておいて、マクロブックを先に開いた後 例の9桁番号を取得したブックたちを開かなければならなかったのが、9桁の事で頭いっぱいでそちらを先に開いていたのです 恐らくこれが原因だったようです。まだ1回しか成功していませんがこの、全部閉じとけよ!はどのコードだったのでしょう? しかもそこで黄色になる訳ではないのですね?? もっと丁寧なデバッグ説明表示ならいいのに……
484 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 07:59:35 ] なお、1枚だけだと思っていたのにシートがもう一枚あるもののマクロの組んであるブックはごく一部だけで全ブックではありません ほんとに単純なシートなので高度なコード?ではないようです デバッグが出てヒィヒィ言っていたマクロブックも長いコードながら実行できない間は手作業でカバーできるものではありました けれど実行できればそれはそれでたいへん楽です! なんとか仕事が手薄な時間を作り出し教えて頂いたコードに挑戦できる日がくるのを夢みて…
485 名前:469 mailto:sage [2008/10/11(土) 10:09:56 ] >483,484 「全部閉じとけよ!はどのコードだったのでしょう?」への回答→そんなコードはない。 まさか、最大42ものブックを開いたところでマクロを実行させるつもりだったのか? [42=マクロブック+(2列×40行のデータのブック)+メールで送られる40ブック] FILE_NAME = Dir(SEARCH_PATH & "*.xls", vbNormal) Do While FILE_NAME <> Empty ' 繰り返し Call PROC_1 Loop と WK_PATH = SEARCH_PATH & FILE_NAME Workbooks.Open Filename:=WK_PATH Set BK_O = Workbooks(FILE_NAME) 〜 BK_O.Close FILE_NAME = Dir() でファイル一覧からひとつずつ開いて転記してクローズしている。 ちなみに、マクロを実行すると変更を保存するかどうかのダイアログが表示されるはず。 その際A4セルの12桁の番号に対応した9桁の番号がA6セルに入っているので確認できる。
486 名前:481 [2008/10/11(土) 12:15:07 ] フォーム画面/テキストボックスからの入力で、「型が一致しません。」が出てしまう。 【モジュール】 Private Foo As Integer public sub Bar(Baz As Integer) Foo = Baz End Sub ↓ 【フォーム】 Private Sub TextBox1_Change() On Error Goto Err If ( Len(TextBox1.Text) > 0 ) And ( IsNumeric(TextBox1.Text) = True ) Then Call Bar(TextBox1.Text) Else TextBox1.Text = "" End If Err: If Err.Number <> 0 Then ● MsgBox Err.Description 'テキストボックスにキーボードから値を入力したとき、ここでエラーが出る。 End If End Sub
487 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 12:45:27 ] ByRef渡しでもVBAの方でうまくやってくれたっけ?
488 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 14:52:03 ] >>486 だからOn Error外せって
489 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:23:17 ] >>485 >>483-484 は、まだおまいの作ったコードは実行してないと思う ネカフェで印刷して会社へ持って行って、見ながら手打ちしてからだから、 来年ぐらいじゃないかな
490 名前:479 [2008/10/11(土) 17:48:11 ] キーワードを変えてググってみても見つけられなかった。 VBAからソートプロパティを取得する方法は無いのでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 18:52:51 ] >>486 テキストボックスの値を関数に渡す前にVal()で数値に 変換したら。
492 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 19:03:24 ] >>490 > キーワードを変えてググってみても見つけられなかった。 > VBAからソートプロパティを取得する方法は無いのでしょうか? > ソートの設定のこと? これならマクロの記録でできるけど。 Range.Sort Key1:= ・・・・ Order1:= ・・・・
493 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 19:10:50 ] >492 これまでの書き込みから、ソートの「設定」ではなく「設定内容の参照」のようです。 なので、今まで回答がない。詳しい人の目にとまるまで回答はないかも。
494 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 20:58:41 ] >>479 単純にセルの値取得すればいいだけじゃないの??
495 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 23:01:15 ] OS: WindowsXP Excel: 2007 チャートの目盛線のスタイルを「破線」にしたいと思っていますが、 以下のようなコードを実行しても、「長破線」になってしまいます。 ActiveChart.Axes(xlCategory).MajorGridlines.Border.LineStyle = xlDash LineStyleの値として設定できる値(xlDash, xlDashDot, xlDashDotDotなど)を すべて試しましたが、やはり破線にはなりませんでした。 今は、手動で「目盛線の書式設定」→「線のスタイル」→「実線/点線」から、破線に設定しています。 VBAからは、チャートの目盛り線のスタイルを破線にはできないのでしょうか?
496 名前:デフォルトの名無しさん [2008/10/12(日) 00:38:29 ] エクセル2002 ウインドウズxp で質問! @列を選択 AダイアログBoxに文字を入れ検索 B検索にヒットしたセルの左のセルに*を入力 具体例 @’D列・F列を選択 A’ダイアログBOXに検索したい文字 イロハ を入力 B’ イロハニホ が入力されてるセルD1の左C1と アイロノカニ が入力されてるセルF3の左E3に*を入力 この作業のうちAとB(例はA’B’)をマクロで効率化したいと思っています。 詳しい方、コードを教えて下さい m( )m この板を知る前に総合相談所にカキコしてしまったことをご容赦願います。
497 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 05:46:19 ] 置換でいいじゃんd
498 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 07:07:43 ] >>496 先に総合相談所にも謝って来いよ
499 名前:479 [2008/10/12(日) 13:44:23 ] >>493 おっしゃる通り、ソートの設定状態を参照したいのです。 Excelの並べ替えメニューに現在のソート状態が表示されるので、何処かに ソート状態を保持している筈なのです。 これを取得する方法が分かりません。
500 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:54:02 ] >499 で、(直前に行われたであろう手動による)ソートの各種設定を参照してナニしようとしてるんですか?
501 名前:デフォルトの名無しさん [2008/10/12(日) 17:29:28 ] >>500 シートAにデータがあり、 シートBがアクティブ時にはシートAの選択データからシートBを編集します シートCがアクティブ時にはシートAの選択データからシートCを編集します シートBやシートCを編集する時のシートAのソート条件が異なるので 編集できるかどうかを判断するためにソート状態を知りたいのです。 実際には、プログラム用ブックと上記のデータ用ブックに分かれていて プログラム用ブック側でデータブックのイベントを拾って汎用的に処理 しています。
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 ダメだった時はどうダメだったのかを書こうぜ > 特定セルと特定セルの右隣を関数に入れて比較 そこは合ってる で、右隣のセルに入ってるのは日数じゃなく年数でしょ? 後はもっぺんヘルプ読んで