1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
411 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:25:45 ] VBA実行してからまたきてね♪
412 名前:デフォルトの名無しさん [2008/01/18(金) 12:31:44 ] ありがとうございます! いえ、multiuserediting の存在を知りませんでした・・
413 名前:397 mailto:sage [2008/01/18(金) 14:55:18 ] >>398 ,>>399 さん、判りました。自分でもまた試してみます。 ありがとうございました。
414 名前:デフォルトの名無しさん [2008/01/18(金) 18:11:23 ] 使えねーな
415 名前:デフォルトの名無しさん [2008/01/18(金) 19:41:23 ] Worksheet_Changeで対応できない書式の変更にリアルタイム反応するためユーザーが入力した書式などをリアルタイム監視するプログラムを作成したところ、終了条件の問題に突き当たり処理に悩んでます。 '----------------------------- Private EndFlg As Boolean Sub Worksheets_Activate EndFlg = False Call 監視処理 End Sub Sub Worksheets_Deactivate EndFlg = True End Sub Sub 監視処理 Do (処理) DoEvents Loop Until EndFlg = True End Sub '------------------------------ このようなものが、ほとんどのワークシートに書いてある状態です。 Loop Until EndFlg = True の直後にメッセージボックスを設け確認したところ、Worksheet_Activateのあるシートに移動するとその場では終了せず、Activateのないシートに移動した瞬間に終了します。 たとえばActivateのあるシートA、BとActivateのないシートCがある場合 A→C、B→Cは正常な終了が確認できるのですが A→B、B→Aは終了メッセージが出ません。 A→B→A…を延々繰り返したあとにCを選択すると、終了メッセージがA⇔Bした回数に比例して複数出るため多重起動であると断定できました。 Activateのないシートをはさまずに開放する方法ありませんでしょうか。
416 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 20:16:17 ] TextBox1の入力に応じてlistboxの内容を決め、 クリックされた項目とTextBox1の入力を考慮して TextBox2の内容を決めるということをやろうとしています。 後述のように書こうとしました。 Private Sub TextBox1_Change() '入力に応じてワークシートからhaniにアドレスを取り出す 以下略 With UserForm1.ListBox1 .ColumnCount = 1 .RowSource = hani.Address End With End Sub Private Sub ListBox1_Click() '先ほどの入力とリストの結果からテキスト2の内容を決める。 UserForm1.TextBox2.Value = 以下略 End Sub このようにするとPrivate Sub TextBox1から Private Sub ListBox1_Click()に受け渡されるのは haniの内容だけで、それ以外の変数を渡そうとしても 上手くいかず困っています。callの構文を使えば良いのでしょうか? 色々調べてみても判らずどなたかアドヴァイス頂けると嬉しいです。
417 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:25:58 ] 初歩的ですみません。 VBAで、あるセル範囲にある数式の答えを出力するにはどうすればいいんでしょうか? Range("A1:A5")="b2/2+b5"みたいにすると数式がそのまま出力されるし・・・
418 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:31:50 ] >>417 それが初歩的だとわかるぐらいならじゅうぶん中級車さ
419 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:32:42 ] >>415 ループが入れ子になってると思う。 監視処理を各シートにを書くんじゃなくて、どこか一枚に Sub 監視処理 Do if !SheetA.EndFlg(0) = False Then (処理) if !SheetA.EndFlg(1) = False Then (処理) ・・・ DoEvents Loop Until 監視終了=True End Sub とか何とか書いて、実行しておけばいいんじゃないかな? >>416 言ってる意味がよく判らないけど、 TextBox1_Change()内で使ってる変数を、ListBox1_Click()内でも使いたい、 と言う事なら、グローバル変数でも使えばいいんじゃないの? >>417 Range("A1:A5") = "=b2/2+b5"
420 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:11:24 ] >>415 DoEvents ステートメントは、ウィンドウズメッセージとイベントプロシージャの処理が終わるまで 戻ってこないから、多分、AのDeactivate⇒即座にBのActivateが走ってる状態。 ちょっと構造を見直した方がいいかもね。
421 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:14:35 ] OS XP、Excel2003 普段は、VBエディタから 挿入 → 標準モジュール で Module** といったファイルを作成してコードを書いています。 このModule** というファイルを自分の好きな名前にするのにはどうしたら良いのでしょうか?
422 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:25:27 ] 右クリックの名前を変更かF2でできたと思う。
423 名前:421 [2008/01/19(土) 19:16:55 ] >>422 ご解答ありがとう御座います。 しかし、右クリックしても「名前を変更」が見つかりません。 また、F2ではオブジェクトブラウザという表示になるのですが 名前を変更する方法がわかりません。 分かる方みえましたらお願いします。
424 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:37 ] >>423 プロパティウィンドウ→オブジェクト名を変える
425 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:23:18 ] >>423 プロパティウィンドウの、(オブジェクト名)を変更すると変わる。
426 名前:416 mailto:sage [2008/01/19(土) 21:26:44 ] >>419 ありがとうございます。グローバル変数にしたら解決しました。 また基本的な質問ですみませんが マクロを起動した瞬間にリストboxに 候補を表示させようとしました Private Sub UserForm1_initialize() Set com1_r = Range("A1:A5") With UserForm1.ListBox2 .ColumnCount = 1 .RowSource = com1_r.Address End With End Sub のように書いても表示されません。 他のPrivate Sub TextBox1_Change()等に 書いた時は表示されるのですが 一体何が誤っているか御指摘頂けませんでしょうか?
427 名前:421 [2008/01/19(土) 21:29:38 ] >>424 >>425 教えて頂いた方法で出来ました。 大変ありがとう御座いました。お二人に幸あれ。
428 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:56:53 ] >>426 そのコードをそのままこちらで実行してみたけど、問題なく動いたよ。 何か別の場所でミスしてるんでは? 例えば、 値を表示させたいリストボックスのオブジェクト名が ListBox2 ではなく ListBox1 だった、とか 代入元のセル A1:A5 の値がマクロ起動時には空白だった、とか。 今一度、確認すべし。
429 名前:質問 mailto:sage [2008/01/19(土) 22:40:54 ] Visual Basic Editerの画面で何かの拍子に下記のように 操作パネルが統合されなくなってしまいました。 どうすれば元通りにできるでしょうか?よろしくお願いします! members.at.infoseek.co.jp/skypp/AAAAA.jpg
430 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:08:09 ] >>428 Private Sub UserForm1_initialize() だとgeneralになっていたので Private Sub UserForm_initialize() に直すとUserFormになって動きました。 作ってるのはUserForm1なのに不思議ですね。 ともかく有難うございました。
431 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:51:21 ] >>430 画面のコントロール以外(フォーム、クラス等)のイベントプロシージャ名は、 オブジェクト名に影響されないハズなんだけどね。何でだろ? でも、言われてみれば違和感あるよな。今気づいたw
432 名前:429 mailto:sage [2008/01/19(土) 23:52:15 ] 自己解決しました。 プロジェクトエクスプローラで「ドッキング可能」にしたら直りました。 下記にも載ってました(^^) www2.moug.net/bbs/exvba/20071226000034.htm
433 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:52:47 ] >>429 メニューの、ツール ⇒ オプション ⇒ [ドッキング] タブ を確認してみて。
434 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:16:46 ] >>400 47個あるシートから1つのdataと言う名前のシートに集計したい場合は多分これです。 Sub test() Dim ws As Worksheet Dim r As Range Dim rr As Range With Worksheets("data") Set rr = .Range("A1") For Each ws In Worksheets If ws.Name <> .Name Then Set r = ws.Range("A1").CurrentRegion rr.Resize(r.Rows.Count, r.Columns.Count).Value = r.Value Set rr = rr.Offset(r.Rows.Count) End If Next End With End Sub
435 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:28:12 ] >>427 祈われるまでもなく幸ねぇよw >>400 もうちょい詳しく書かないと失礼だぞぅ
436 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:30:46 ] range変数で格納できる範囲はRange(Cells(1, 1), Cells(5, 4)) のような一枚のワークシート上の範囲だけでなのでしょうか? 1枚目のRange(Cells(1, 1), Cells(5, 4))と2枚目のなんたらのように 別のsheetにわたった範囲の格納などしたい場合はどうすればいいのでしょう
437 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:57:59 ] >>436 それは無理。 クラスの概念を知らないと分からないかもしれないけど。 別々の変数に持たせるしかないと思う。もちろん、配列やコレクションは使えるはず。
438 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:46:37 ] Excelの分析ツールを使ってランダムにサンプルを取り出して計算するシート作ったのですが Application.ScreenUpdating = False て書いてもサンプル取り出すたびに再計算画面が出てしまいます 画面更新しないようにするにはどうしたらいいですか? Sub MonteSample() Dim myMonte As Integer Dim i As Integer Dim myMsg As String, myTitle As String Dim myFun As Range Dim myAv As Long, myStd As Long, myMax As Long, myMin As Long Dim n As Long Dim mysouce As Range Dim mydat As Range Dim mydats As Range myMsg = "計算回数を入力してください" myTitle = "モンテカルロ・シュミレーション" myMonte = Application.InputBox(prompt:=myMsg, Title:=myTitle, Default:=30, Type:=1) If Range("A12") = "" Then MsgBox "A12のセルから損益のデータを入力してください", vbOKOnly + vbExclamation End End If Range("D12:D1011").Select Selection.ClearContents Range("K32:K100").Select Selection.ClearContents Range("i32:i33000").Select Selection.ClearContents Application.ScreenUpdating = False
439 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:48:04 ] For i = 1 To myMonte Range("A12").Activate Set mydat = ActiveCell.CurrentRegion Set mydats = mydat.Offset(1, 0).Resize(mydat.Rows.Count - 1, _ mydat.Columns.Count) Application.Run "ATPVBAEN.XLA!Sample", mydats, _ ActiveSheet.Range("D12:D1011"), "R", 1000, False Range("I65536").End(xlUp).Offset(1).Select ActiveCell.Value = Range("E1011") Range("D12:D1011").Select Selection.ClearContents Next i Range("N4").Value = myMonte Range("I31").Activate Set myFun = ActiveCell.CurrentRegion myFun.Offset(1, 0).Resize(myFun.Rows.Count - 1, _ myFun.Columns.Count).Select myAv = Application.WorksheetFunction.Average(myFun) Range("N5").Value = myAv myStd = Application.WorksheetFunction.StDev(myFun) Range("N6").Value = myStd myMin = Application.WorksheetFunction.Min(myFun) Range("N7").Value = myMin myMax = Application.WorksheetFunction.Max(myFun) Range("N8").Value = myMax Range("K32").Value = myMin Range("K33").Select
440 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:49:08 ] For i = 1 To 49 n = ActiveCell.Offset(-1).Value ActiveCell.Formula = Int((Abs(myMin) + myMax) / 49) + n ActiveCell.Offset(1).Select Next i Range("L32:L81").Select Selection.FormulaArray = Application.WorksheetFunction.Frequency(myFun, Range("K32:K81")) Set mysouce = Range("L32:L81") ActiveSheet.ChartObjects(1).Activate ActiveChart.SetSourceData Source:=mysouce, PlotBy:=xlColumns Application.ScreenUpdating = True End Sub
441 名前:デフォルトの名無しさん [2008/01/20(日) 21:03:23 ] Application.ScreenUpdating = False Application.ScreenUpdating = True ↓ Application.EnableCalculation = False Application.EnableCalculation = True
442 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:22:32 ] >>441 再計算しない場合はそんなのあるのか、ありがとう。 でも、変えてみたけど実行時エラーでてだめだった、 ワークシートで再計算してるから使えないのか ワークシートの再計算はそのままで画面の更新だけ止めるのはできないのかな
443 名前:441 [2008/01/20(日) 22:05:30 ] 折れには、試す気もないのでわからない。 続けての回答を待っているといけないから、折れには以後書くことはないと伝えておくよ。 あと、折れが使うのは Application.EnableEvents = False (と True) Application.Visible = False (と True)
444 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:17:22 ] >>443 いろいろありがと 新しいこと少し覚えられてよかったw まあ、うまくいかなかったけど趣味で使ってるだけだから そのうちできるようになると思うのでゆっくりやります
445 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:58:30 ] >>442 全くためしてないんだが Application.ScreenUpdating = 画面の更新をするか Application.EnableCalculation = 再計算してるか を考えれば幸せになるんじゃね? 俺的には全部コードでやっちゃうがw
446 名前:441 [2008/01/21(月) 01:01:55 ] >>442 での「実行時エラー」ってのが、気になった・・・ application.run関係ぐらいしか実行時エラーが出うる箇所はないように見えた。 もしかしたらだけど、ここが参考になるかも ttp://www.geocities.jp/happy_ngi/YNxv9cz56.html おやすみ
447 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:59:57 ] >>445 >>446 ありがとうございます。 441さんの指摘のようにapplication.runが原因みたいです Excelの分析ツール使うと画面更新されてしまうみたいです ワークシート上だけで乱数関数使って同じようなコードで実行したら、 画面は更新されないでうまくいきました。 鋭い指摘ありがとう!
448 名前:デフォルトの名無しさん [2008/01/21(月) 15:40:17 ] 例えば、C3からK11まで範囲指定するのに、 rangeを使わず、offsetを使って指定することは可能でしょうか。 やりたいことをイメージ化すると以下のようなのですが・・・ Sub hoge() Range("A1").Select Range(ActiveCell.Offset(2, 2).Select, ActiveCell.Offset(10, 10).Select).Select End Sub
449 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:58:59 ] あのさ、 いちいちこのスレで聞くよりもさ、 自分でググるなり本を買うなりして調べた方が圧倒的に早いと思うんだけど。
450 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:09:36 ] range("A1").select range(selection.offset(2, 2), selection.offset(10, 10)).select -- dim r as range set r = range("A1") debug.print range(r.offset(2, 2), r.offset(10, 10)).address range(r.offset(2, 2), r.offset(10, 10)).value = 12345
451 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:10:15 ] >>448 つか、目的がよくわかんねーよ。 あと、その例文、.Offset に .Select付いてたらエラーになるぞ。 そもそも、Offset って、基本的にRangeのプロパティなんだが。Rangeを使わずにどうしろと?
452 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:57:48 ] If 気に入らない or わからない Then スルーしろ End If
453 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:01:03 ] 意味が分かれば協力する気持ちがあるから訊いてるんだよ。全否定すんな。 それとも、どこが分からないか、こちらが分かりやすく優しく丁寧に質問しないとダメなのかよ?
454 名前:448 mailto:sage [2008/01/21(月) 17:19:29 ] すまん! Sub hoge() Range("A1").Select Range(ActiveCell.Offset(2, 2), ActiveCell.Offset(10, 10)).Select End Sub selectとったらいけました。 逝ってくる
455 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:56:47 ] >>453 やりたいことの「イメージ」って書いてるだろ。 これで意図がわからんというのがわからん。
456 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:42:56 ] >>453 はかわいそうな子
457 名前:451 mailto:sage [2008/01/21(月) 21:10:50 ] >>455 レスの流れぐらい見ろよ。レスから読み取れる範囲で回答はしてる。 それとも、IDがないと同一人物かどうかも判断できんか?
458 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:47:53 ] 構造体の2次元配列の参照って Kouzoutai(1,2).Member = 1 という形であってます? オブジェクトが必要ですとかいうエラーが返ってくるんですが…
459 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:59:26 ] すごいな。 もう思いついたことをとりあえず質問するスレになってるな。 >>458 なんてはなっから自分で調べる気ないもんな。
460 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:46 ] >>458 オブジェクトがないんだよ。 Dim Kouzoutai( 5, 5 ) as HOGE って形になってるか? どうせ Type Kouzoutai Member as integer End Type とかになってんだろ。 「VBA 構造体」でググればびっくりするくらいヒットするじゃないか。
461 名前:デフォルトの名無しさん [2008/01/22(火) 07:24:11 ] OSはWindows XP Home Edition、 Excelは2003の11.8169.8172です。 VBA初心者でここも初めてです。質問させてください。 2種類のグラフをそれぞれ別のシート上のオブジェクトとして作成しました。 (2つ同時ではなく、まず1つ目のグラフを作り、その後別のグラフを作るというやり方です。) 2つ目のグラフを作る際、1つ目のグラフの数値軸で自動的に表示された軸の最大値と最小値を 2つ目のグラフにも反映させたい(同一の値にしたい)のですが、 どのように記述すれば1つ目のグラフの最大値や最小値を呼び出すことができますか? With ActiveChart.Axes(xlValue) .MinimumScale = ココと .MaximumScale = ココです。 End With ぜひヒントがほしいです、よろしくお願いします。
462 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 12:59:28 ] >>461 確認する時間がないのでヒントのみ。 あとはヘルプ見ながら直して。 Dim s As Worksheet Dim c As ChartObject Set s = Worksheets.Item("test") ←"test" って名前のシートが取得できる Set c = s.ChartObjects(1) ←取得したシートの、1つめの図を取得 あとは c.Chart.Axes.Item(xlValue).MinimumScale な感じで対応する値が取得できると思われ。 まとめて書くこともできるが、とりあえず入力補助に反応する書き方にしといた。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:25:13 ] E6からE26とN6からN26に数字を入力したのですが、このコードよりも簡単な方法はないでしょうか? Dim c As Long Dim f As String Dim v1() As Variant Dim v2() As Variant With Excel.Range("E6:E26,N6:N26") c = .Areas.Item(1).Count f = "ROW(" & .Worksheet.Range("A1") _ .Resize(c).Address & ")" v1 = .Application.Evaluate(f) v1 = .Application.Small(.Cells, v1) f = "ROW(" & .Worksheet.Range("A" & 1 + c) _ .Resize(.Areas.Item(2).Count).Address & ")" v2 = .Application.Evaluate(f) v2 = .Application.Small(.Cells, v2) .ClearContents .Areas.Item(1).Value = v1 .Areas.Item(2).Value = v2 End With
464 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:31:48 ] >>463 日本語でやりたいことを書け
465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:38:05 ] >>463 観光客の人数をExcelで作成したのですが、E6からE26とN6からN26 に観光客の人数を入力したのですが、これを小さい順に書き換えるにはどうし たらいいのですか?
466 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:46:13 ] つ【並べ替え(S)】
467 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:25:19 ] 「セルが特定の値以外のとき、自分の行を削除」したい。 IFでセル内容を指定してから Range.deleteでどうやって削除条件にすべきでしょうか。
468 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:22:56 ] な、何なんだこのスレは・・・
469 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:05:12 ] このスレは池沼のフリして教えたがりのうざいヲタを釣るスレですが、なにか?
470 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:13:25 ] ってことはこれは釣れたってことでFA?
471 名前:デフォルトの名無しさん [2008/01/22(火) 22:49:21 ] >>470 お前がなw
472 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:03:33 ] やたー☆
473 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 11:53:11 ] やったー +1
474 名前:デフォルトの名無しさん [2008/01/23(水) 18:41:55 ] ここで良いかどうか分かりませんが・・・ ビデオカードの現在の解像度(できればモニタのインチ数も)によって、 ActiveWindow.Zoomの値を変更するプログラムを考えているのですが、 vbaでビデオカードの現在の解像度を調べるのは不可能でしょうか?
475 名前:デフォルトの名無しさん [2008/01/23(水) 21:16:04 ] >>474 vba api 解像度 でぐぐれば、2番目にあなたの望む回答が
476 名前:デフォルトの名無しさん [2008/01/24(木) 08:57:54 ] 良回答認定
477 名前:デフォルトの名無しさん [2008/01/24(木) 09:11:24 ] >>475 ありがとうございます! 下調べはしてたつもりだったのですが、 甘かったです・・・orz
478 名前:デフォルトの名無しさん [2008/01/24(木) 10:01:12 ] 恥ずかしながら全く分かりません。 何卒お願い申し上げます。 次の選択肢より正しい記述をすべて選びなさい。 1:java.io.FileReaderはテキストファイルから文字を行単位で読み込むクラスである。 2:new File("bbs.txt")と記述すると、新しいファイルが作成される。 3:ファイルの操作を行う前には、Fileクラスのopenメソッドを必ず使用する。 4:BufferedReaderクラスのreadLineメソッドは、ファイルの終端までを読み込む。 5:FileクラスのisFileメソッドの戻り値がfalseだった場合は、そのファイルが無いか、またはその名がディレクトリである事を示している。
479 名前:デフォルトの名無しさん [2008/01/24(木) 10:06:39 ] >>478 です。 申し訳ありません、スレ違いでした。 失礼致しました。
480 名前:デフォルトの名無しさん [2008/01/24(木) 10:33:36 ] アクセスのVBAのスレが見付からないのでここで質問します。 アクセスのVBAで、フォーム1 ユーザ登録画面 ユーザ名[ ] パスワード[ ] 登録 があり、2つを入力し、登録を押したら登録できるのを教えてください
481 名前:デフォルトの名無しさん [2008/01/24(木) 10:37:07 ] >>478 です。 何度もすみません。もうこのスレに書いてしまったので、 ほかのスレに書いたら、マルチポストとか云うのに なってしまいますので、もしよろしければこのスレで 教えて頂けないでしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:04:47 ] >>481 誤爆はマルチにはならないと思うよ。 マルチポストだって言うヤツは居るかもしれんが、普通に教えて貰えると思う。 俺も多少は分かるけど、このスレで回答したくない。回答が違ってても突っ込みがなさそうだから。
483 名前:デフォルトの名無しさん [2008/01/24(木) 11:06:44 ] >>482 さん。 ありがとうございます。 助かりました。
484 名前:デフォルトの名無しさん [2008/01/24(木) 12:07:30 ] AutoFilterが設定されたシートで選択されたセルの行数を知るには、下記の方法で 出来る事が分かったのですが、もっと簡単な方法がありますでしょうか? Dim r As Range, rcnt As Long rcnt = 0 For Each r in ActiveWindow.Selection.Rows If Not r.Hidden Then rcnt = rcnt + 1 End If Next
485 名前:デフォルトの名無しさん [2008/01/24(木) 17:23:24 ] すいません、VBA超初心者です。 "地域A"というシートから魚名前を検索して個数(魚の名前の2つ下のセル)と総量(個数のセルの1つ右)の数値を 台帳(以下の記述ではシート名”漁獲量”)シートの各魚の行に転記させたいのですが、 一生懸命ヘルプやネット検索しながら自己流で記述しましたが 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 と出ます。 どなたか正しい記述をアドバイスしていただけませんでしょうか?
486 名前:485 [2008/01/24(木) 17:24:49 ] Private Sub CommandButton1_Click() Dim fish As String Dim i As Integer Dim wrkA As Integer Dim wrkC As Range Dim wrkB As Range With Sheets("地域A") wrkA = .Cells(1, Columns.Count).End(xlToLeft).Column wrkC = .Range("A1").Resize(1, wrkA) wrkB = .Range("A3").Resize(1, wrkA) End With Dim wrkD As Integer With Sheets("漁獲量") wrkD = .Cells(Rows.Count, 1).End(xltoUP).Row wrkE = .UsedRange fish = .Range(wrkD, 1).Value End With
487 名前:485 [2008/01/24(木) 17:25:54 ] つづきです For i = 1 To wrkA If fish = wrkC("wrkA,i") Then fish = wrkB(1, i) Cells(wrkD, 1).Offset(0, 1) = wrkB(1, i + 1) Else fish = " " Cells(wrkD, 1).Offset(0, 1) = " " Exit For End If Next i End Sub
488 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 17:55:01 ] >>485 ちょっと突っ込みどころが多すぎるので、全部回答はできないんだけど、 まだ基本を分かりきってないみたい。 とりあえず、 With Sheets("地域A") With Sheets("漁獲量") のトコを Dim ws As Worksheet ←もちろん最初(1箇所)だけ Set ws = ThisWorkbook.Worksheets("地域A") With ws のような形に修正すれば、"."キーを押したときに入力補助が反応するから、 それを参考に修正するといいと思う。この入力補助が反応するようなコードってのは結構重要。 ("."を押してもメソッドが出なければ、記述したところでほとんど実行時エラーになる) あとは、.End(xltoUP) の定数は xlUp がいいのと、 fish = .Range(wrkD, 1).Value の行みたいに、Cells と Rangeの使い分けが混乱してるかな。
489 名前:485 [2008/01/24(木) 18:00:49 ] >>488 どうもありがとうございます!! 突っ込みどころ満載ですか…笑 ご指摘を元に再度勉強してがんばってみます!!
490 名前:488 mailto:sage [2008/01/24(木) 18:30:38 ] >>489 ゴメン、もっと重要なポイントがあった。 wrkC = .Range("A1").Resize(1, wrkA) は、オブジェクト型変数への代入になるので、 Set wrkC = .Range("A1").Resize(1, wrkA) という書式を必ずとること、です。
491 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:36:51 ] 漁獲量・・・
492 名前:デフォルトの名無しさん mailto:age [2008/01/25(金) 23:56:11 ] すみません。vlookupのワークシート関数がうまく動きません。 普通のvlookupのようにvlookup(値、範囲、2、False)としましたが エラーが出てしまいます。範囲がおかしそうですが どう書き方が誤っているのかがよく判りません。 どなたか、御指摘願えませんでしょうか? With Worksheets(2) 'Xは適当な自然数です。 For i = 1 To 100 Cells(i + 1, 2) = Application.VLookup(Cells(1, 1).Offset(i, 0).Value, .Range(Cells(2, 3), Cells(X, 4)).Address, 2, False) Next i
493 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:11:11 ] すみません。色々試行錯誤していたら解決しました。有難うございました
494 名前:デフォルトの名無しさん [2008/01/26(土) 17:35:21 ] かなり高度な質問です。 Me.Controls.Add("Forms.textbox.1","品名",True) のFormsって一体何なのですか?
495 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:48:24 ] 余りに低レベルなので泣けてきました。
496 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:52:19 ] OLEコントロールの名称でないの。 Microsoft Forms 2.0 TextboxのPROGID
497 名前:デフォルトの名無しさん [2008/01/27(日) 13:51:07 ] VBAの中でソルバ関数を実行しようとしてます。 その目的セルの評価値を計算する際に、さらにソルバを実行したいです。 (つまりソルバの2重ループになる感じ) が、これを実現できなくて困っています。 考えてたのは、内側のループのソルバ部分を関数にして ワークシートから呼び出せるようにして、 それを外側ループのソルバの目的セルの数式に放り込んでやればいい、 という方法なんですけど、 VBAのFunctionの中でソルバをまわそうとすると シート上の値を書き換えなければならないのでエラーになってしまいます。 かといってそれをサブプロシージャにしても ワークシート上の数式として表せないので、 結局外側のループで使えません。 何とかこれを達成する妙案はないですかね… 達成したとしても重くて不安定にはなると思うんですが、 それは承知の上です。 環境はWinXP SP2+Excel2000です
498 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:57:52 ] ↑根本的に何かを勘違いしてないか?
499 名前:デフォルトの名無しさん [2008/01/27(日) 14:03:45 ] 勘違い・・・っすか どのへんがおかしいんでしょう? それすらわからんです
500 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:11:32 ] ソルバ? ttp://www.joy.hi-ho.ne.jp/ngchsny/xevious_sol.jpg
501 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:00:39 ] Excel2003です。 OnErrorでエラーメッセージの出力を指定しても、 エラーだとそのエラーで無事処理は終わるのですが、 本来エラーにならない場合でも、エラーメッセージ出力→正常処理 となるんですけど。 何か原因は考えられますか? (プログラム持ち出せないのでここに書けないのです)
502 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:16:08 ] デバッグトレースシテクダサーイ
503 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:09:18 ] >>501 On Error で飛ぶタグの前に Exit Function を書いてなかった、とか言ったら頃すぞ?
504 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:49:26 ] Exit Function を書いてなかった位で殺されるんじゃタマッタもんじゃない。
505 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:15:06 ] マジレスのハズもないのに、 ネタや回答の一つも返さず、つまらんマジツッコミを入れるとは一体どういう了見か?
506 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:16:04 ] >>504 金払って許してもらおうぜ
507 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:02:19 ] うんこ出た 超きもちいい
508 名前:501 mailto:sage [2008/01/28(月) 12:59:32 ] マクロの最初に On Error Msgbox On Error exit Sub で、以下正常時の処理を記述しているのだが。 Exit Function書くとエラーが出る。
509 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:09:09 ] >>508 そもそもそれコンパイル通るの? ↓なら問題ないと思うけど。 Privete Sub 処理() On Error GoTo ラベル (通常処理) Exit Sub ラベル: (エラー処理) End Sub
510 名前:デフォルトの名無しさん [2008/01/28(月) 16:54:46 ] Sub abc Dim rng As Range Set rng = Selection test rng End Sub Function test(r As Range) Dim c As Range For Each c Iin r 'cの処理 Next End Sub と選択範囲を引数にしてtestを呼び出しますが、testの引数rはByValにした方がいいんでしょうか? きちんと動くには動くのですが、ちょっと不安になったもので教えてください。
511 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:48:36 ] >>510 その程度のものを分ける必要があるか知らんが、ByValは無意味。 そこはそのまんま参照渡しが正解。 それよりFunctionは気持ち悪くないかい? Private Sub test(r As Range) とするのが普通だろ? Functionって戻り値を得るものに限定した方がいいと思うが。