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/
346 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:34:06.17 ] すいません、VBAでスレタイ検索したらここに流れ着いたのですが、初心者用の質問スレってありますか? 表内で、ある列の書かれている文字ごとにその行の背景色を変えていくと言うマクロを VBEでモジュールに書きたいのですが、イマイチイメージが浮かばなくどうしていいかわからない状況です 足の骨折で入院してて勉強が遅れてしまったので急いで追いつきたいのですが、 おそらく簡単であろうこんな問題もわからなくなってきた次第です・・・ 変数を使用して、繰り返しの処理をし、RangeとCellsを使って解けと言われたのですが???と言う状況です そこで初心者用のスレがあったら誘導願います スレ違いでスイマセン
347 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:45:46.58 ] >>346 スレはここでも良いと思うけど、Cellsを使ってループ処理をする、その方法は知ってるの? For i = 1 to 100 If Cells(i,1)= "xxxx" Then Cells(i,1)= 〜 End If Next みたいなさ
348 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:48:13.75 ] >>344 もう解決してるので今更感が強いけど、 テキストファイルをエクセルで開いて下から4行目を取得する、 というやり方もできるよ Test.txtを開くと仮定したらこんな感じ Sub test() Dim WB As Workbook Dim I& Dim Txt$ Set WB = Workbooks.Open("test.txt") With WB.Sheets(1) I = .Cells(.Rows.Count, 1).End(xlUp).Row If I > 3 Then I = I - 3 Else I = 1 End If Txt = .Cells(I, 1).Value WB.Close MsgBox Txt End With End Sub
349 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:07:58.96 ] >>347 文字は何パターンあるのかな。 パターン数分の背景色が必要になるけど、何色でも良いの。
350 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:09:31.70 ] ↑間違えた。>>346 宛ね。
351 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 21:03:18.61 ] >>346 このあたりを調べて使えるようになればできるよ。 最終行取得 繰り返し(for each〜next) colorindex entirerow dictionary
352 名前:346 mailto:sage [2012/02/21(火) 21:26:45.65 ] >>347 For〜Nextは勉強しましたので、その文はナントカわかります >>349-350 大元が2種類あって、更にその片方が何種類か条件があるような感じです ですので、背景色は6〜7色前後になりますが、色については指定がありましたので、 ColorIndexの後にその数字を入れていけば対応できます >>351 残念ながらまだ基礎の方なのでColorIndex以外は習ってないですね・・・ 今習ってる構文?といえば 思い出せるのは、If〜Then〜Else、For〜Next、Do〜Loop位ですね 347さんのでなんとなくなイメージは浮かびました 答えてくださった方々、ありがとうございました とりあえずはもうちょっとネットで調べてみます
353 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:01:14.63 ] OS:XP SP3 Excel:2003 SP3 --- (略) graph_name = ActiveChart.Name graph_index = ActiveChart.Index (略) ActiveSheet.ChartObjects(graph_index).Activate 'エラーが発生する (略) --- 例えば、graph_nameがGraph 3だったら、 ActiveSheet.ChartObjects("グラフ 3").Activate とする事で、エラーが発生しなくなります。 解決策をご存知の方はぜひご教授願います。
354 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:25:34.74 ] >>353 graph_index =ActiveChart.Parent.Index
355 名前:デフォルトの名無しさん [2012/02/22(水) 10:41:53.09 ] >>215 なんですが、>>217 さんのやり方で成功したかと思ったんですが、 欄が全部埋まってる場合にも空白のメッセージボックスが出てきてしまうんですよね。。。 全て記入されている場合はメッセージボックスを出さない処理にするにはどうすれば良いのでしょうか?
356 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:48:31.30 ] >>355 最後のmsgboxのところを ifでよける。
357 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 15:04:52.84 ] >>354 サンクス!
358 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:09:05.40 ] >>355 if len(str)>0 then msgbox str
359 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:10:42.95 ] then end if を { } で書くのに慣れると、BASICはどうも読みにくくて仕方ない。。 まあ慣れの問題なんだけどさ
360 名前:デフォルトの名無しさん [2012/02/22(水) 22:51:46.44 ] おう、お前ら 初心者で悪いけど質問な ユーザーフォームっての作ったんだけど そこに入力された値ってのはどうやって得るんだ? 初心者なんだから丁寧に教えろよ
361 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:08:36.01 ] つまんない
362 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:34:39.45 ] ユーザーフォームの値を得たり、値を入れたりは Applicationオブジェクトから辿ると何となく分かるけど、 Msgboxのボタンを押すとか謎。
363 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:44:29.66 ] >>360 オブジェクト名.Valueでよろし。。。。。
364 名前:デフォルトの名無しさん [2012/02/23(木) 00:03:42.57 ] >>363 なんだ、簡単だったな あんがとよ!
365 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:18:57.32 ] 便乗するわけじゃないけどユーザーフォームについての質問です。 ユーザーフォームの右上の×をクリックしたときって どういう動作をしているのでしょうか? ×でフォームを閉じたことを標準モジュールのプロシージャ (そのユーザーフォームをShowしたプロシージャ)から知る方法ってありますか? 現在はPublicで宣言したBoolean変数とフォーム上のコマンドボタンを用いて コマンドボタンをクリックしたら変数をTrueにしてからHideするようにしてます。 (×で閉じたらFalseだからそれで判断してます) パブリック変数を使わないで×で閉じたことを知る方法があったら教えてください。
366 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:37:52.92 ] >>365 標準で用意されているイベントハンドラでは知ることはできない プロセスの終了方法を区別するには、×ボタンのクリックイベントをフックするぐらいしかないんじゃない? ただしアプリケーションの作法としては終了方法を区別するような設計にするのはあまり良くないと思うけど
367 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:48:44.80 ] >>365 ユーザフォーム内だと UserForm_QueryClose で処理できるんだけど いっそのこと Xで終了出来なくしたら? だめかな?やっぱ Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = 1 End Sub
368 名前:365 mailto:sage [2012/02/23(木) 03:32:51.89 ] >>366 無理なのですか、残念です。 終了方法を知りたいというか、 ユーザーフォームと標準モジュール間でパブリック変数を介さないで 情報のやり取りがしたかったのです。 標準モジュール同士ならローカル変数でも引数で受け渡し可能ですけど、 ユーザーフォームには引数渡せませんよね? 標準モジュール側からLoadだけしておいて フォームのオブジェクトに値を入れてShow とか、 フォーム側からHideして標準モジュールに戻ってから オブジェクトの値を取得とかは出来ますけど、 Hideしたときにどういう風にHideしたかの情報を パブリック変数を使わずに取得できないかな? ということが知りたかったのです。 (ぶっちゃけていうと「実行」と「キャンセル」の判別に使いたいのです。) パブリック変数の使用以外に フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて それをフラグに使うっていう手もありますが、 なんかスマートじゃないな、という気がしまして。 >>367 上に述べたとおり、×をキャンセルボタン扱いで使いたかったわけです。 残念ながら私の思うような方向では出来ないっぽいですけど。 ともあれ、お二方にお答えをいただけてとてもうれしかったです。 どうもありがとうございました。
369 名前:365 mailto:sage [2012/02/23(木) 03:49:06.68 ] 一応、私の知っている範囲でフォームから標準モジュールへ 何らかの値を渡す方法っていうのは以下の3種類しかないです。 1.パブリック変数の使用 2.フォーム上のオブジェクトの値をHide後に取得する 3.フォーム内のプロシージャからワークシートのセルや 外部のテキストファイルなどに書き出しておく これ以外に何か方法をご存知の方、教えていただけたら幸いです。
370 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:20:30.93 ] >>369 普通標準モジュール側に通知用の関数用意しとかない? ボタン押したときに呼んでやるの
371 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:41:55.92 ] >フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて >それをフラグに使うっていう手もありますが >フォーム上のオブジェクトの値をHide後に取得する オブジェクト=コントロールだと思ってる? 普通は、フォームにパブリックな変数定義するんじゃないかな まあ、パブリック変数を介してるのには違いないけど
372 名前:365 mailto:sage [2012/02/23(木) 05:58:09.38 ] >>370 すごい!おっしゃるとおり出来ました。 今までフォームモジュールの中から標準モジュールのプロシージャをCallしたことがなかった (引数も渡せないから、そんなことが出来ると思ってなくて試してもいなかった)ので、 やってみて目から鱗です。 これからはこの手でいきます。 ご指導どうもありがとうございました。 こんな感じで試しました。 [Module1] Sub Test Userform1.show End Sub Sub BtnClick Stop '<=ここで止まった(つまりここにキャンセルの処理を書いておけばOK) End Sub [UserForm1] Private Sub CommandButton1_Click Call BtnClick End Sub >>371 どうもありがとうございます。 370さんにバッチリなお答えを教えていただいたので今後はそちらを使うことにします。 一応、オブジェクト=コントロールというか、 フォーム内のコントロールはオブジェクト(に含まれる)という程度の認識です。 コントロール以外で、フォーム内にオブジェクトがあるのかどうかは分かってないです。
373 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:29:19.07 ] 派遣のお姉さんが毎日6時間かけて色んなCSVファイルから必要なデータを取り出して集計してExcelに整形する処理、 私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして 時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪
374 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:44:53.20 ] 人力でも6時間足らずで終わる仕事を2時間程度にしか短縮できないオマエさんがヘボなのか、 VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、 どっちだかよくわからん話だな。
375 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:11:20.53 ] どう読んだらそうなるんだ コーディングが2時間だろ
376 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:19:41.89 ] は? 仕様のヒアリング1時間、コーディング30分、テスト30分だろ
377 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:33:33.99 ] どう読んだらも何も本来の文脈からいったら おネエさんの作業時間と対比するには VBAのほうも処理に必要な時間を書くべきだろ。 もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは ちょっとあり得ない話だから コーディングにかかった時間なのだろうと推測はできるが はっきりと明記されていない以上、 日本語としては前述のような解釈も十分可能だぞ。
378 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:42:16.29 ] > 私がVBAで2時間位で完全自動化した これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。 日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。
379 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:45:59.83 ] どうでもいい事ではスレのびるのな
380 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:56:32.22 ] 日本語っていうのは語順の入れ替えや語句の省略によるあいまい表現に寛容で 柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。 >私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。 という読み方だって、 その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。 っていうことがわからないなら それこそ日本語を勉強し直した方が良いと思う
381 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:12:50.78 ] >>380 余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を 二時間位で終わらせるような自動化をしたと読むのか? ちょっと、日本人とは思えない解釈だわ
382 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:28:14.55 ] >>377 >VBAのほうも処理に必要な時間を書くべきだろ。 はぁ? お前のべき論なんか聞きたくもないよ。
383 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:32:11.51 ] 完全自動化されるなら、別に実行に二時間かかってもいいと思うが。 (と、話を変な方向に広げてみる)
384 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:48:20.87 ] すでに述べている通り省略の仕方でどうにでもなる話だよ。 自説に都合の良い省略の仕方をされても困る。 作業時間云々のものからそういう省略の仕方ができないってことと、 元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。 で、俺は単なるべき論で言ってるわけじゃない。 前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで そうでない解釈が間違いだとは言ってない。 むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、 先に持論を押し付けたのはどちらか、冷静に判断してほしいし、 そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で だれも聞きたいと思ってないのは御同様。
385 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:02:01.04 ] よっぽど悔しいんだろうなぁ
386 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:07:15.34 ] > すでに述べている通り省略の仕方でどうにでもなる話だよ。 そもそも省略なんかしてないし。 100人読んだら、お前以外の99人は作業時間が、と取るわ。
387 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:16:34.11 ] 僕の解釈論はそろそろ終わりにしてもらえませんかね。
388 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:51:44.33 ] >>386 あくまで個人の感想です
389 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:25:51.95 ] こんな普通の文章でも、個人の解釈でどうとでもなるとか言う奴が書いた仕様書見たいわ
390 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:30:12.44 ] 自分の読解力のなさをわざわざ指摘してくれる人がいたというのに 逆ギレする馬鹿
391 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:42:03.30 ] 往生際悪すぎ
392 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:27:11.41 ] >>384 オマエさん、ちょっとズレてるよ
393 名前:デフォルトの名無しさん [2012/02/23(木) 19:02:53.08 ] 傍目で見てたら論拠に基づいて発言してる人と 言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、 無根拠の方はそれに気づいてないってのが哀しいな。
394 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:15:35.72 ] スレが伸びてると思ってみてみたら何だこいつら いつぞやのDB馬鹿がまた暴れてんのか?
395 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:52:44.07 ] どう解釈するのが普通か、なんて、多人数の意見を集約してみないとはっきりしない ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて 実行時間が2時間だととられたなら書き方がわるかったと反省する
396 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:18:52.53 ] ここは質問スレ。 >>373 も、難癖をつけようとして失敗した>>374 も、どっちもスレチ。
397 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:34:13.57 ] スイマセン、助けてください 職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、 その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです For〜Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。 imepic.jp/20120223/735690 これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい
398 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:59:33.99 ] >>397 Sub TEST() Dim i as 整数, j as 整数, k as 整数 For i = 1 to ワークシート数 For j = 6 To 12 For k = 2 To 8 With Cells(j, k) If .valueが5000以上 Then .フォント.色=青 ElseIf .valueが2000未満 Then .フォント.色=赤 End If End With Next k Next j Next i End sub
399 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:07:02.90 ] >>398 訂正 With worksheets(i).Cells(j, k)
400 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:12:10.07 ] >>398-399 ありがとうございます! そうか・・・Nextの終了順番が間違ってたのもあったのか これでナントカ追いつけそうです
401 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:57:48.70 ] 今、訓練所でvba教えでるのか。田舎だと、使う場面が少ないが
402 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:01:09.21 ] XP-2002環境です。 シートAに、2行ペア組のデータで、5万行まで埋まっています。 Dim strData(15) As String に2行のセルの値を配列に放り込んで、 シートBにパコパコ張り付けるのを全行ループしています。 だけど、必ずシートAのある行数のところで、オーバーフローとなって止まります。 別にその行のデータの型などが、特におかしいわけでは無いです。 (成功したデータをその行に貼り付けてもオーバーフロー) もしかして、VBAで処理する行数の上限等の何か制約があるのでしょうか? 上限があるなら何か他の対策はあるのでしょうか。 それとも何か他の原因が考えられるのでしょうか? よろしくお願いします。
403 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:07:53.13 ] >>402 IntegerをLongにしてみたらどうでしょうか
404 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:19:15.10 ] >>402 VBAじゃなくてExcel自体の行数の上限が65535行だけどそれは理解してるの? Excel2007で100万行に拡張されたけど
405 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:25:17.48 ] >>404 5万行ってことだから問題ないんじゃないの?
406 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 00:06:59.57 ] >>402 5万行×8列を2万5千行×16列にしてるのかな?
407 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 01:04:56.91 ] Range("A1:A3").Offset(0,2) ってやったら、 Range("C1:C3") なオブジェクトが取れると期待してたけど、 Range("C1") の単一のセルなオブジェクトになった。 そう言うもの?何かへんなのか? "A1:A3"は、結合してるセルなのだけど、何か関係ある?
408 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 03:41:06.42 ] >>407 Offsetは左上の単一セルしか見ない 範囲を広げるにはResize
409 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 07:09:13.61 ] >>403 ありがとうございました。intカウンターをLongで解決。 なんで32000行あたりの特定の数字でオーバーフローしちまうのかなぁ
410 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 07:28:41.30 ] >>409 それぞれの型には範囲ってもんがある 基本的なことぐらい知ってれやれよ www.geocities.jp/cbc_vbnet/kisuhen/hensuu.html 変数・定数(基礎編)
411 名前:デフォルトの名無しさん [2012/02/24(金) 08:28:36.17 ] >>407 実際にRange("C1:C3")になるぞ。 そっちのPCは呪われてるのか?
412 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 19:19:10.59 ] >>411 >>407 も >"A1:A3"は、結合してるセルなのだけど、何か関係ある? って書いてるけど、うちの環境で試しても A1:A3が普通のセルならC1:C3を返すけど、 A1:A3を結合してるとC1だけしか返されなかったよ。
413 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:46:56.38 ] >>412 ちょっと気になっていろいろ試してみた ヘルプには >指定された範囲からのオフセットの範囲を表す Range オブジェクトを返します。 とある ここでの指定された範囲ってのは指定したRangeじゃないし、オフセットの範囲ってのもそのRangeの範囲じゃないってことらしい 問題は、結合セルに対してOffsetをとった場合 指定された範囲=結合セルという一つの範囲 オフセット基準=指定範囲の終了地点(右下) だとみなされるようだ A1:A3が一つの結合セルだった場合、Range("A1").OffsetもRange("A2").OffsetもRange("A3").Offsetも同じ動作をする 普通にOffset実装したらそういう動作しそうもないから、 わざわざ結合セルに対するOFFset動作は特別な動作するように実装されてるんじゃないかな ということで、>>407 そう言うものだと思われます だれかこの動作の公式なドキュメントしってる?
414 名前:デフォルトの名無しさん [2012/02/27(月) 00:59:22.80 ] Excelファイルが読み取り専用の場合、入力できなくする方法 Excelファイルを読み取り専用で開いてるのを忘れて、 いざ保存しようとした時に読み取り専用だった事を思い出すって事ありませんか? だったらセルのロックみたいに入力自体できなくすればいいじゃないかと 思ってはみたもののどうすればいいかわかりません。 読み取り専用推奨で保存したファイルを開いて 読み取り専用にするか訊いてきた時に"はい"の場合はセルのロック、 "いいえ"の場合はセルのロックを解除というマクロを組んでAuto_Openで動かしてみましたが、 どうも訊いてくるより先にAuto_Openが実行されているようでうまくいきませんでした。 読み取り専用で開くかどうかもマクロで組めれば解決するのかなと思いますが、やり方がわかりません。 どうにかならないでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 01:19:29.12 ] Workbook_Openイベントプロシージャ
416 名前:デフォルトの名無しさん [2012/02/27(月) 07:37:36.89 ] マクロの記述で質問です。 B列のセルに"日本"を入力すると、 その該当するC列とD列のセルの値や文字列をクリアして斜線を入れたいのです。 例えば B2へ"日本"を入力すると、C2〜D2のセルに入っている値・文字をクリアして 自動的に斜線を入れる、 同じく B3へ"日本"を入力すると、C3〜D3のセルに入っている値・文字をクリアして 自動的に斜線を入れる、 といった感じです。 ここで B2に対してはそれらの動作が上手くいくのですが B3やB4以降の行に関しては上手くいきません。 例えばB3へ"日本"を入力するとC3〜D3のセル内容はクリアされずC2〜D2の値がクリアされてしまいます。 B4やB5以降に関しても同じくC2〜D2の値がクリアされてしまいます。
417 名前:デフォルトの名無しさん [2012/02/27(月) 07:39:07.10 ] 上の続きです。 一応マクロの文です。 おそらく相対参照の問題だと思います。 調べて試行錯誤しましたが上手いやり方がわかりません。 Excel2003です。 どなたかご教授お願いします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, trg As Range Set trg = Intersect(Target, Range("B2:B14")) If Not trg Is Nothing Then For Each r In trg If r.Value = "日本" Then r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _ .LineStyle = xlContinuous Range("C2:D2").ClearContents Else r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _ .LineStyle = xlNone End If Next r End If End Sub
418 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 07:47:41.48 ] > Range("C2:D2").ClearContents それはそうだろ、としか。
419 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:01:13.16 ] Range(Cells(i,j),Cells(i+?,j+?)) でこのi,j,?を操作すれば
420 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 12:37:05.35 ] Range("C2:D2").ClearContents を r.Offset(0, 1).Resize(1, 2).ClearContents で、いけたわ こういうのわかりにくいから、 r.offset(0.1).clearcontents r.offset(0,2).clearcontents ってやってるわ。
421 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:29:03.11 ] >>418-420 ありがとうございます。 削除する対象のセルを結合したセルにすると 「結合された一部のセルを〜」のエラーが出てダメになりましたが r.Offset(0, 1).Resize(1, 2) = "" にすると大丈夫でした。 お世話になりました
422 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 18:00:44.53 ] range(“a1“).numberformat=“@“ range(“b3“).numberformat=“hh:mm“ if range(“a1“)<>range(“b3“) then としても差異は検出されないけれど、セルの内容全てを比較したい場合は、全プロパティ分のifを書いてやらんとあきまへんのどすか。
423 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 18:02:54.64 ] .text
424 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 19:26:17.07 ] range("a1").numberformat="#,##0" range("b3").numberformat="#,##0;-#,##0" 値は両方とも100 この場合も違うと判定させたい?
425 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:40:37.48 ] させたいどす。 .value でも .width でも罫線でも、違いを検出したいんどすえ。
426 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 10:59:13.54 ] rangeのプロパティカウントさせることができないっぽい 自分で関数作るか、if文書くかしかなさげ というか、プロパティカウントできないの初めて知ったわ これ地味に不便ね
427 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 12:42:32.91 ] VISTA Excel2007 です ライブラリの参照設定をコード内で実行したいのですが、 同じ文を標準モジュールに書くとエラーが出ないのに クラスのイニシャライズに書くと「中断モードでは実行できません」と エラーメッセージが出ます(ただ参照設定の処理がなされます) クラスのイニシャライズでエラーが出る原因など分かる方がいましたらご教授ください 以下コード: Const DAOFileFPath As String = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll" ActiveWorkbook.VBProject.References.AddFromFile DAOFileFPath
428 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:31:31.36 ] >>427 べつに普通に実行できるが そのエラーメッセージの通り、中断モードのままやるからエラーになってるだけだろ
429 名前:427 mailto:sage [2012/02/29(水) 01:03:02.92 ] すみません もっと早く書き込みたかったのですが仕事で抜けられませんでした イニシャライズでなくメソッドにしても同じエラーになったので もしやと思い、クラスを新規作成して一からコードを手打ちしていったら 今度はうまく行きました モジュールが壊れていたんだと思います 必ず通るはずのStopをスルーして、その先のMsgBoxが動いている時点で気づくべきでした 前にもこんなことがあって、別のモジュールに一から書き直したらやっぱり普通に動いた そんな無茶な使い方してるわけじゃないのにな… どうも失礼しました
430 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 02:44:05.36 ] いやだから、Stopで止まったら中断モード... まあいいか
431 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 10:05:54.43 ] 忙しすぎて日本語読む余裕がないんだろうな
432 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:18:08.68 ] すみません、どうも詰まってしまったので質問させてください 商品名の入っているシートから、数学で言う所の和集合を取りたいと考えています 例えば、 A列 B列 1 CC TT 2 HH CC 3 TT E3 となっているようであれば、(CC、TT、HH、E3)を取り出して、できれば1セルに一つの名前という形で長く並べたいと考えています Sub Test() Range("F8").Value = Union(Range("A1:A3"), Range("B1:B3")).Value End Sub おそらくUnionを使うのかなと考えて、とりあえず1セルに一つの名前ということを考えずに書いてみたのが上のコードなんですが、 実行するとF8にはCCしか入力されません。これはどこが間違っているのでしょうか? どなたかよろしくお願いいたします。
433 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 02:13:02.97 ] すいません、色々試してみたら半分くらい自己解決できました。 Sub MultipleRange() Dim rng1 As Range, rng2 As Range, myMultiRanges As Range Worksheets("Sheet1").Activate Set rng1 = Range("A1:A3") Set rng2 = Range("B1:B3") Set myMultiRanges = Union(rng1, rng2) Dim i As Integer For i = 1 To 6 Cells(10, i).Value = myMultiRanges(i).Value Next i End Sub これだと重複ができるようなので、これやった後に重複チェックのコードを別にかければなんとかいけそうです。お騒がせしました
434 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:10:50.67 ] Excel2010 (win7 home) Worksheets("test")の Private Sub Worksheet_Activate() UserForm1.Show End Sub と入れて Worksheets("test")のタブをクリックして表示させた時に Userform1が立ち上がるのは確認したんですが、 ThisWorkbookのシートモジュールの Private Sub Workbook_Open() Worksheets("test").Activate End Sub としてブックの起動時にWorksheets("test")をアクティブにしても Userform1が出てこないんですが、これはなぜ? 明示的に UserForm1.ShowをWorkbook_Open()に入れればもちろんフォームが 出てくるんですけど、これではあまり意味がないような気がする んですけど。
435 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:20:46.78 ] 九分九厘、そのワークシートtestがブックを開く時点からアクティブなんだろうな。 ワークシートのActivateイベントは「他のシートから移動してきたとき」しかトラップされないから、 ブックを閉じるときにtestがアクティブな状態で保存されて、開くときに最初からアクティブだとトラップできてない。 試しにワークシートtest2を作って、それをアクティブにした状態で保存して開いてみ?
436 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:38:38.23 ] おおっ、即レスかつその通りでした! ありがとうございますm(__)m
437 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:16:46.90 ] VBAで あ 1 あ 1 を行を文字と数字に列を整えることは可能?
438 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:20:24.65 ] ちゃんとした日本語の説明か、結果のプレビューを頼むwwwwwwwwwwwwwwww
439 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:08:50.04 ] エスパーの訓練が捗るな
440 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:50:42.49 ] Excel2010(vaista)ですが 家計簿を作成してまして収入と支出の差額を表の一番右下の セルに表示させているのですがそのセルの数字が黒字(0以上)ならセルの背景を青 赤字(0未満)ならセルの背景を赤にしたいのですが上手くできません そもそもVBAでは不可能なので素直に条件式書式設定を毎回 使用したほうが良いのでしょうか?
441 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:14:39.94 ] 条件式書式設定でできることを態々VBAでやろうとする意味が分からないんだが
442 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:09:42.41 ] Excel 2010です。開発タブをリボンに表示させる方法を教えて下さい。 2007では、「ファイル」→「オプション」で「開発タブをリボンに表示する」が 出て来るのですが。
443 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:15:51.44 ] イベントプロシージャに親プロシージャの引数をわたすことは 可能でしょうか?
444 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:20:12.40 ] >>443 おや?
445 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:23:55.72 ] 今日は妙に>2すら読まない奴が多いな…
446 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:38:50.37 ] >>442 ファイル→オプション→リボンのユーザー設定→開発にチェック