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)
601 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 06:43:22 ] すみません 文字列の入ったセルをselectした際に、単にselectにするだけではなく、 編集中の状態にまでもっていきたいのですが、 そのような方法を御存じないでしょうか。 select後、sendkeys"{F2}"で実現できるのですが、 Sendkeysを使用しない方法を探しています。どうか宜しくお願いします。
602 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 08:24:46 ] 数式バーで編集じゃだめなの?
603 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:42:57 ] Excel2003でSheet1のセルA1に日付を入れる(08/10/01)とSheet2以降のセルA1に次の日付になるように反映させるにはどうしたらいいですか?
604 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:52:14 ] >>603 Sheet2以降のセルA1に、「=Sheet1!A1」と入力。
605 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:54:49 ] +1忘れた
606 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:05:48 ] >>604 d
607 名前:デフォルトの名無しさん [2008/10/20(月) 16:56:04 ] どこがVBAやねん
608 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:13:53 ] 春から悩んでたかも知れないじゃないか
609 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:11:15 ] >>599 まず、複数スレッドを作ることが実質的に無理だ。 Excel自体も、2007から再計算を複数スレッドで行えるようになったくらい。
610 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:17:31 ] 依存関係ありまくりの計算だからなあ。
611 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:00:07 ] オートフィルターがオンになっているシートの選択行について、ソートと処理を 行った後、再度元の並びに戻す方法を模索中です。 1)選択行範囲の最後(列n)に式["=ROW()"]を設定 2)列nの式を値に変更(コピぺ) *ソートと処理を行う 4)列nで昇順にソートした後、列nを削除 この方法だと選択範囲内に不可視のデータが存在すると、[2)]でコピーと貼付け の領域が違うため貼付けエラーになります。 1行ずつ行番号をセットする方法は件数が多いと時間が掛かる為オートフィルター 情報を取得しておき、一旦オートフィルターオフにしてからコピペしています。 他にもっと良い方法をご存知でしたら御教授願います。 選択データを他ワークシートにコピーして処理する方法が一番良い気もしますが データ量が三万件とかだとコピーにも多少時間が掛かるので...
612 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:29:28 ] >>611 仮に、"=row()" を入れた範囲を range("G5:G10") として、 G列を非表示にして、 range("G5:G10").value = range("G5:G10").value ってのはダメ?
613 名前:611 mailto:sage [2008/10/21(火) 18:27:03 ] >>612 助かりました、有難うございます。orz だけど、非表示だと何故上手くいくのでしょう?
614 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:33:32 ] どこがVBAの問題なのか春先まで悩みそうだ
615 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:41:59 ] >>613 わからん。なんかやってみたらできた 仕様なのかバグなのかも知らんw
616 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:01:59 ] 非表示だと pastespecial もうまくいくな どうやら仕様くさい
617 名前:VBAの初心者 mailto:sage [2008/10/21(火) 21:24:20 ] 初めまして。自分は知り合いにVBAを教えて貰っているんですが、相手に人はPCが 無くよく分らなくてもし良かったら教えて下さい。 だだ走らせるだけの凄い簡単なプログラムらしいんですが私には走らせ方が分らな くて困ってます。 10 for m=1 to12 20 print m 30 next m 40 stop なんですが凄い初心者なのでエクセル開いた所から分らなくて教えて下さい。
618 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:27:30 ] それはVBAじゃない。VBでもない太古のBASICのプログラム。
619 名前:VBAの初心者 mailto:sage [2008/10/21(火) 21:30:01 ] らしいです。VBAを覚えたいなぁ〜って言ったら色々言われて私が全然分からなく なってしまったので、まず見れる簡単なの教えてと頼んだんですが、今のじゃ無理 なんでしょうか;
620 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:50:26 ] もしかしたら、その相手の人は(Excel) VBAを知らないという可能性も考えられる。 VBAも含めてナントカBasicってのは山ほどあるけど、どれも全く別物。 敢えて共通点をあげるとしたら名前にBasicが付いていることだけ、というのはさすがに言い過ぎだけど。 そして、お前は何をやりたいのか。Excel VBAで間違いないんだよな?
621 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:39:24 ] 釣られすぎ
622 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:24:21 ] 縦読みじゃないのね。
623 名前:デフォルトの名無しさん [2008/10/22(水) 07:27:31 ] Interiorってクラス名としてはどうなんですか?
624 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 10:00:18 ] 激しく紛らわしいからやめた方が良いかと
625 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:27:13 ] 自作クラスのインスタンス380個ぐらい作ったらメモリ不足になった
626 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:16:21 ] そりゃクラスの内容に因るだろうな 個数や上限決めておらず、必要に応じて作る場合とか 1万や2万は当たり前に使ってることあるが ちゃんと配慮してれば全然問題ない
627 名前:デフォルトの名無しさん [2008/10/24(金) 11:20:18 ] 選択アドレスから重複を削除する方法はありますでしょうか? 例えば、選択したアドレスが[$A$2:$A$5,$A$5:$A$10]の場合、そのアドレス 範囲で集計(Subtotal)するとA5が重複して集計されてしまいます。 Excelのステータスバー(右側)には重複を除いた合計値が表示されます。 これと同様の値(特定の1列のみ)をVBAで取得したいのです。
628 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:06:03 ] >>627 unionしちゃばOK
629 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:09:11 ] >>627 Sub test1() Dim rg1 As Range, rg2 As Range For Each rg1 In Selection.Areas If rg2 Is Nothing Then Set rg2 = rg1 Else Set rg2 = Range(rg2, rg1) End If Next rg1 Debug.Print WorksheetFunction.Sum(rg2) End Sub >>628 Unionは無理じゃない?
630 名前:629 mailto:sage [2008/10/24(金) 12:20:32 ] 今テストしてたんだが離れたセルを選択した時に期待どおりの動きしないな・・・
631 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:22:27 ] >>629 ? range("$A$2:$A$5,$A$5:$A$10").cells.count 10 ? union(range("$A$2:$A$5"),range("$A$5:$A$10")).cells.count 9 ? union(range("$A$2:$A$5"),range("$A$5:$A$10")).address $A$2:$A$10 「特定の1列のみ」だそうだからOKかなと
632 名前:629 mailto:sage [2008/10/24(金) 12:29:12 ] RangeをUnionに書き換えたらいけたような気がするw
633 名前:デフォルトの名無しさん [2008/10/24(金) 14:52:48 ] 有難うございます。 Set rg2 = Union(rg2, rg1) に変更したら上手くいきました。 もう1つ教えて下さい。 選択された範囲の行を対象に特定の列(例では8列目)を以下の様に集計して いますが、選択範囲から集計範囲(特定列)への変換にもっと簡単なやり方が ありますでしょうか? Dim vals As Variant, i As Integer, c As Integer, addr As String c = 8 vals = Split(Selection.Address, ",") For i = 0 To UBound(vals) With Range(vals(i)) vals(i) = Range(Cells(.Row, c), Cells(.Row + .Rows.Count - 1, c)).Address End With Next addr = Join(vals, ",") Debug.Print WorksheetFunction.Subtotal(9, Range(addr))
634 名前:633 mailto:sage [2008/10/24(金) 16:24:56 ] 列の特定と同時に重複を削除しないと駄目のようです。 >>629 さんの方法に組み込むと良い様に思います。 Set r1 = Cells(rg1.Row, 8) Set r2 = Cells(rg1.Row + rg1.Rows.Count - 1, 8) If rg2 Is Nothing Then Set rg2 = Range(r1, r2) Else Set rg2 = Union(rg2, Range(r1, r2)) End If
635 名前:デフォルトの名無しさん [2008/10/24(金) 16:33:53 ] 質問です。 エクセルで資料を作ったがMacroで両面コピーの方法が分からないので両面コピーの方法を教えて下さい。
636 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 19:46:01 ] 質問です 訳あって欧文(ウムラウトを含むラテン文字の文章)の書き込まれたExcelシートから 内容を読み出してテキストファイルに起こしたいのですが、 Cells(?,?).valueやCells(?,?).TextからStringsの変数に読み出した時点でウムラウトが飛んで 近しい形状の通常のアルファベットに置き換えられてしまうようです。 結構ぐぐって見たのですが、読み出せなくて困った的な話はいくつか見つけたのですが 対処法について言及しているページが無かったので、皆さんのお知恵をお借りできないかと 思って書き込みさせていただきました。 なにかお知恵などありましたらよろしくお願いいたします<(__)>
637 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:14:02 ] >>635 何を何処へコピーするのか
638 名前:デフォルトの名無しさん [2008/10/24(金) 20:26:20 ] 両面コピーって両面印刷の事?プリンタの話になるんじゃないの?
639 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:33:08 ] >636 元となるExcelファイルは、Excelのどのバージョンで作られたものですか? あるいは、どこの国用のExcelで作られたものでしょうか? VBAを利用せず、直接シートの必要な範囲をコピーしてエディタへ(ウムラウトは消えずに) ペーストすることはできたのでしょうか? ↓このサイトは見ましたか? www.microsoft.com/japan/office/ork/three/intd02.mspx Office XP リソース キット / 国際環境での導入計画 / 国際環境でのメンテナンス Unicode サポートの活用 「多国語テキストのコピー」の項と、「VBA で Unicode 値を使用する」の項が参考になるかも。
640 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:48:44 ] あるサブルーチンをForループで回すと100回くらいなら一瞬で終わるんですが、 500回とかそれ以上になるとなぜか無限ループにでも入ったみたいに計算が終わってくれません。 オーバーフローのエラーメッセージが出ることもないし、実際オーバーフローするほど大きな数を扱っているわけでもない。 原因としてはどんなことが考えられるでしょうか?
641 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:53:05 ] サブルーチンのforカウント変数をステータスバーにでも表示してデバッグのヒントにするのだ。 その情報だけだと、メモリかCPU?としか言えない。
642 名前:デフォルトの名無しさん [2008/10/24(金) 21:55:54 ] >>635 sub 裏表印刷() 印刷実行 Msgbox ゛用紙裏面をセットしてください゛ 印刷実行 end sub
643 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:56:08 ] >>641 メモリっぽいですね。ちょっと調べてみます。 ありがとうございました。
644 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:09:55 ] >>640 DoEvents homepage2.nifty.com/kasayan/vba/doevents.htm
645 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:45:40 ] 636です >>639 動作環境を書くのをすっかり失念してました この手の質問には必須なのに…申し訳ありません OSはXP日本語版でExcelは日本語版Office2000に含まれるものです。 現在VBA開発に使用しているxlsファイルは Exciteの機械翻訳で出したものをコピペしてBOOKに張り付けてテストデータとして作成したものです 紹介していただいたリンク先を読むと、VBAではunicodeを標準ではサポートしていないようですね (VBでは文字列関係の内部処理はUnicodeで処理されてるのに…変な気分…) まあ、テストデータで使用している文章がUnicodeではなく単純に欧文ASCIIコードの文字列の可能性もあるので Unicodeをサポートしていればうまく行くとは限らない気もしますが でもちょっと手がかりをもらえたのでもう少し試行錯誤してみようかと思います。
646 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 07:04:27 ] オーバーフローの意味もしらないのかVBA厨房は
647 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:29:01 ] アクセスならともかく、エクセルでプリンタ設定いじるって難しいくね
648 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:59:26 ] >>633 unionでいいんなら Sub test() Dim rg1 As Range, c As Integer c = 8 Set rg1 = Intersect(Union(Selection, Selection).EntireRow, Columns(c)) Debug.Print WorksheetFunction.Subtotal(9, rg1) End Sub
649 名前:デフォルトの名無しさん [2008/10/25(土) 15:46:42 ] どなたかお教えください マクロでたとえばですが ActiveCell.Replace What:="*", Replacement:="x" のように セル文字列の * の部分だけをxに変換したいのですが アスタリスクはすべて変換してしまいますよね。 A1*A1 という文字列を上記マクロ実行するとA1xA1 という結果になって ほしいのですが。実際は x 担ってしまいます どのようにすればよいのでしょうか。
650 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:07:52 ] >>649 ActiveCell.Replace What:="~*", Replacement:="x"
651 名前:デフォルトの名無しさん [2008/10/25(土) 16:09:39 ] >>650 すごいですね。どうもです
652 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 17:06:03 ] 春先から悩んでた人多いな
653 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:11:57 ] >>645 参考になるかも ttp://codezine.jp/article/detail/1718
654 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 19:10:31 ] しかし、エスケープシーケンスはもっとわかりやすくしてほしいよな。
655 名前:デフォルトの名無しさん [2008/10/26(日) 03:08:58 ] 教えてください VBAで、明日が三週目の日曜日だった場合A1に○○と表示するってやりたいんでがどうやればいいですか?
656 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:24:14 ] >>655 明日の日付はDate関数に+1すれば解る 特定の日付が日曜日か否かはWeekday関数で解る 3週目か否かは日を算術演算すれば解る あとはそれらを条件に条件分岐してA1に値を代入すれば良い この説明で解らなければ>>1 ★5なので、さようなら
657 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:44:51 ] >>656 ありがとうございます。 算出演算ってのがよく解らないですががんばってみます。
658 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 06:05:51 ] だからエクセルでやれよ
659 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:35:27 ] だよな。数式でできるレベル
660 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:40:58 ] 質問です。 Excel2003を使っています。 コマンドボックスをクリックするたびに、セルA1の数に1ずつ足していくマクロを作りたいのですが どなたか教えていただけませんでしょうか。 よろしくお願いします。
661 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:10:39 ] ちょっとは自分で調べる努力した?
662 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:32:19 ] >>660 コマンドボックスって何ぞや?
663 名前:660 mailto:sage [2008/10/26(日) 15:45:47 ] 聞いておいて遅レスごめんなさい。 コマンドボタンの間違いです。 色々調べてみたのですが、変数の定義の仕方そのものがよく理解できていなくて わからないなりに考えたのが↓です Sub test_Click() Dim h As Long h = Range("A1").Value If h = 0 Then h = 1 Else h = h + 1 End If End Sub もうちょっと頑張ってみます
664 名前:649 [2008/10/26(日) 15:48:36 ] お教え願いますか '=A1 という文字列を =A1 という数式に変換するマクロありますか。 同かよろしくお願いします。
665 名前:649 [2008/10/26(日) 15:50:36 ] 舌足らずでした あるセルに '=A1 という文字が書かれています。 マクロコマンド使って =A1 という数式に置換したいのですが。 どうかよろしくお願いします。
666 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:32:40 ] >>663 cells(1,1).value = cells(1,1).value + 1 >>665 Cells(1, 1).Formula = Cells(1, 1).Value
667 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:33:34 ] >>663 Range("A1").Value = Range("A1").Value + 1
668 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:43:51 ] こんなばかみたいな質問にいちいち答えるなよ
669 名前:660 mailto:sage [2008/10/26(日) 16:47:26 ] >>666 >>667 ありがとうございました。 一から勉強してきます。
670 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 17:06:11 ] 変数の定義ができないとか、 単純な代入式も書けないレベルの奴は入門書買え いちいち他人の手を煩わすな
671 名前:デフォルトの名無しさん [2008/10/26(日) 22:22:34 ] 初めて質問させていただきます。 初心者ではないですが、レベルは低いですσ^^; セルを指定するときに、Range("A1")ではなく[A1]というふうにやってるんですが、 これだとなにか悪影響がありますか? 今のところ困るのは、説明書やhelpの類がすべてRange形式のものばかりなので、 書き方が分からない時がある、ってことくらいです。 単に字数が少なくて済むからという理由で[**]形式にしているんですが、 ちょっと気になってます。 というか、そもそも気にしたほうがいいのか気にしなくてもいいのか・・・
672 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:45:34 ] 他の人が見たときに分かりにくいとか 少なくとも俺はわからん
673 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:19:11 ] 動作自体には問題ない あとは使う場面やメンテナンス性などを考えて使えば良い 複数人で扱う物には使わない方がいいし、汎用モジュールも然り 個人専用の使い捨てマクロの類なら[A1]形式でも医員で内科医 連続しない複数セルもしくは範囲を扱う場合なんかは便利なので 俺も他人が弄る可能性のないものでは使うこともある 『 [A:A,C:C,E:F].ClearContents 』とか『 [A3,C3:F10,H3:H10] = 0 』とかね 因みにうちでは『r""』のキー打ちで『Range("")』が入力され、カーソルが""の間に移動するので Range("A1")は、『 R " " A 1 』で済む為、[A1]でもRange("A1")でも入力字数は大差ない 俺の場合RangeよりCellsの方がよく使うが、Cellsも同じく入力省略出来るようにしてある
674 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:27:30 ] 簡単なマクロ程度をゴールにしてるならどんな形式でも良いけど、 本気で業務に使うプログラムやら、もっと高いゴールを目指すなら、 初心者のうちからcellsで指定する方が良いと思うよ。 rangeと言えば、あくまでrangeオブジェクトである訳で・・・。 何より変数絡めてセルの指定するようになると可読性が著しく下がる・・・。 タッチ数も増えるしで、良い事ない。
675 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:28:39 ] 最後の3行が言いたかっただけちゃうかー
676 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:36:52 ] ?
677 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:10:33 ] [A1]なんて書き方知らなかった……。もっと精進するわ。
678 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:51:46 ] >>671 結局は evaluate の省略記法だから、excel に渡して評価させる分、 多少処理の無駄があるんじゃないかと思う(たぶん) [A1].value = 0 range("A1").value = 0 それぞれ10万回ループさせると数秒だが差が出る evaluate("A1").value = 0 は、[A1]記法とほぼ同じになる 誤差レベルだけど、回数の多いループ内とか、速度が気になる場合は 避けた方がいいかもね
679 名前:デフォルトの名無しさん [2008/10/27(月) 09:49:00 ] [A1]だと後ろにピリオド打っても入力候補が出てこねぇ。 Cells(1,1)も出てこねー。 Range("A1")だと出てくる。 どれもいったんRange型変数に入れりゃ同じだが。
680 名前:デフォルトの名無しさん [2008/10/27(月) 10:57:11 ] pc11.2ch.net/test/read.cgi/gamedev/1217601153/ Syntax Error.しか知らないキチガイがあらわれました
681 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 11:57:01 ] detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220150877 大手ECサイトのヨドバシドットコムが、サイトリニューアルから大規模な障害を3日間続けているようです。 このようなケースではリニューアルを担当した業者はヨドバシカメラにどれほどの損害賠償を行うのでしょうか? 【ヨドバシカメラ】 ネットサイトをリニューアルしたら表示遅すぎでおわび [10/23] gimpo.2ch.net/test/read.cgi/owabiplus/1224789237/ ヤマダ.com/ビックカメラ.com/ヨドバシ.comを語ろう gimpo.2ch.net/test/read.cgi/kaden/1222787235/ 【店員の質】ヨドバシカメラ総合17【落ちまくり】 gimpo.2ch.net/test/read.cgi/kaden/1215013408/ 補足 どうやら今回のヨドバシドットコムリニューアルはCMS導入が目的で、 キノトロープスリーイントという会社( www.k-3int.co.jp/ )が請けたようです。 また、リニューアルの10/21から10/25現在までこの状況ですので、ヨドバシカメラの損失額は 億単位で発生していると言われています。 キノトロープってどうよ?PART4 namidame.2ch.net/test/read.cgi/venture/1224762171/
682 名前:633 [2008/10/27(月) 14:06:59 ] >>648 おぉー、素晴らしい限りです! アクティブシート以外に対してIntersectは無理なのでしょうか?
683 名前:682 [2008/10/27(月) 14:21:18 ] 失礼しました。orz columns(c)を修飾したら出来ました。
684 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:04:05 ] >>682 書いた後で気づいたんだが、それ union いらないっぽいw ? selection.address $A$1:$A$5,$A$5:$A$10 ? selection.entirerow.address $1:$5,$5:$10 ? intersect(selection.entirerow, columns(8)).address $H$1:$H$10 intersect かけた時点で重複してる行はまとめられるから、 Set rg1 = Intersect(Selection.EntireRow, Columns(c)) だけでいいようだ
685 名前:682 mailto:sage [2008/10/27(月) 16:34:34 ] >>684 究極のリファクタリング有難うございます。orz こういうの教えられると、VBコードでゴリゴリ作るのが馬鹿らしくなってしまう...
686 名前:671 [2008/10/27(月) 22:41:20 ] みなさんいろいろご意見ありがとうございました。 RangeやCells形式も使いこなせるように、もっと勉強していきます^^
687 名前:デフォルトの名無しさん [2008/10/28(火) 10:08:01 ] もう1つ教えて下さい。 選択エリアの全行数は For each r in Selection.Areas rcnt = rcnt + r.Rows.Count Next で求めていますが、一気に知る方法がありますでしょうか?
688 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 18:29:27 ] >>687 一気に知る方法は知らないがそのままだと重複している行もカウントされる 少し前で話題に出たIntersectを組み込んで For Each r In Intersect(Selection.EntireRow, Selection.EntireRow).Areas とかにしたほうがいいんじゃないか?
689 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:48:43 ] 初心者って「一気に」とか「1行で」とか好きだよな
690 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 22:14:07 ] コードが長くなると理解できなくなるんだよw
691 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:47:58 ] 関数型プログラミングなら、一気にやるという書き方でも割と珍しくない感じがする。 もちろん面倒なことをやるなら1文あたりが相応に長くなるんだけど。
692 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 01:54:25 ] 学習が下手な奴ほど早く学習する事が1つだけある それは「人に訊いた方がラクだ」という事だ なんちてw >>687 一般的なやり方じゃないかも知らんが一応これで行けそう 重複行込み rcnt = selection.entirerow.cells.count / activesheet.columns.count 重複行抜き rcnt = intersect(selection.entirerow,columns(1)).count
693 名前:デフォルトの名無しさん [2008/10/29(水) 02:45:55 ] ループの中で =average() の引数を可変的に指定する方法を教えてください 具体例: (1)乱数で10個のデータを生成し,列方向に保存 (2)保存したデータから平均を計算し, 2つ下のセルに出力 (3)上記(1)から(2) を n回繰り返す(とりあえずn=3). 上記(2)がうまく計算できません(下から3行目のコード). --------------- Sub dice_siml01() Cells.Clear Dim i As Integer Dim j As Integer Dim n As Integer Dim nobs As Integer Cells(1, 1) = "試行回数" n = 3 nobs = 10 For j = 1 To n For i = 1 To nobs Cells(i + 1, j + 1).Formula = "=randbetween(1,6)" Next Cells(nobs + 3, j + 1).Formula = "=Average(Range(Cells(2, j+1), Cells(2+nobs-1, j+1)))" Next End Sub --------------- 【注】 randbetween(1,6) エラーの場合 rand()で置き換えてお願いします.
694 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:31:17 ] >>693 .formula に入れるのはセルにそのまま打ち込める式 範囲指定のところが "B2:B11" とかの形式になるように、 文字列を生成すればOK
695 名前:デフォルトの名無しさん [2008/10/29(水) 09:46:54 ] >>694 どうもありがと。 できれば、具体的な変換方法もお願いします。
696 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:03:37 ] >>695 宿題か何か? デカい誤り指摘してヒントも出したんだから、 そこからもっぺん自分で考えてみような じゃなきゃこんな練習問題やってる意味ないだろ
697 名前:687 mailto:sage [2008/10/29(水) 10:09:55 ] >>688 >>692 有難うございます。 「聞くは一時の恥じ...」 なんちてw セル情報はExcelの基本関数知ってればコード記述で殆ど解決しちゃう けど速度やメンテを考えるとコードは単純な程良い。
698 名前:デフォルトの名無しさん [2008/10/29(水) 10:36:40 ] >>696 これ以上は分からん。
699 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:37:47 ] >>697 あ、速度考えるなら intersect とか濫用しない方がいいよ 10万回ループさせると>>692 より>>687 の方が早いんで
700 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:16:46 ] >>697 >けど速度やメンテを考えるとコードは単純な程良い。 これは少し間違ってる気がする 速度を考えるなら処理するデータを単純にした上でコードも単純なものにする 例えばセルのプロパティを変数に入れるとか さらにメモリの使い方にも気を配れればいい 書くと短くても動かすと重たい処理なんてたくさんあるし