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)
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 ] 数式バーで編集じゃだめなの?
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