1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/ ★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)
369 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:14:41 ] >>368 Select Caseが105ってのは、実際にカウンタ変数のMod 10に対する 条件分岐のみのループの処理時間を計った結果 それぞれ500万回*3回の平均から算出した値 そもそもが単一条件の場合でも、Select CaseはIfより遅いからね
370 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:13:14 ] セル、グラフ、フォーム等の情報を利用してフォーム形成することはできますか? 例えば 名前 値 ラジオボタン という行が連なるフォームを作る場合、 グラフの凡例数、セルの列数、フォームで入力した数分等、行が作成される感じにしたいのですが。 (フォームの大きさに入りきらない場合はスクロールバーを出す)
371 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:19:16 ] ユーザーフォーム上のコントロールを動的に生成したいってことなら出来るよ
372 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:22:53 ] >>371 調べ方が足りませんでした。すみません。 VBA 可変 フォームとかぐぐってました。 コントロール 動的 VBAでぐぐったらできそうな感じです。 ありがとうございました。
373 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 18:24:45 ] >>369 IfやELseIfのネストより遅いのは確かだが、Orより遅いわけねーって。 実測してみろよ。 Private Declare Function timeGetTime Lib "winmm.dll" () As Long Sub foo1() Dim i&, t1&, t2& t1 = timeGetTime For i = 1 To 5000000 Select Case i Mod 10 Case 5, 6, 9 Case Else End Select Next t2 = timeGetTime MsgBox t2 - t1 End Sub Sub foo2() Dim i&, j&, t1&, t2& t1 = timeGetTime For i = 1 To 5000000 j = i Mod 10 If j = 5 Or j = 6 Or j = 9 Then Else End If Next t2 = timeGetTime MsgBox t2 - t1 End Sub foo1がショートサーキットだって知らなかったんじゃないの? なんなら実証してみせるが、やり方くらい知ってるよな。
374 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 19:51:47 ] >>373 ・timeGetTimeではなく組込のTimerを使ったこと ・Select Caseでも平等にするためにi Mod 10の結果を変数に取っていること ・結果をMsgBoxではなくDebug.Printで出力したこと 以外は同じコードだよ ちなみに実証方法は知ってる Select Caseがカンマ区切りがショートサーキットなのは知ってるからわざわざ Select Caseでやったことは無いが、デバッグの一手法でもあるからな
375 名前:373 mailto:sage [2009/01/05(月) 21:26:44 ] >>374 i Mod 10の値を処理で使わないんなら>>373 が平等なコード。 仮にfoo1でi Mod 10を変数にとってもfoo1が速いぞ? おめーんとこじゃ遅いのか?
376 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:35:16 ] > i Mod 10の値を処理で使わないんなら>>373 が平等なコード。 そうでもない > おめーんとこじゃ遅いのか? うん
377 名前:373 mailto:sage [2009/01/05(月) 21:40:10 ] OrもSelect Caseもお互いに速さでベストをつくせばそうなるじゃん。 おまえは最速のコード書けないんだろ?
378 名前:373 mailto:sage [2009/01/05(月) 21:41:57 ] 後ろは読んでなかったが、おれのとこと逆になるらしいな。 俺のとこはSelect Caseが速い。
379 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:00:24 ] 実際の処理に置いて必ずModで算出した値を使うというわけではない以上 条件分岐のステートメントに入る前の時点で、条件となる値が変数に代入されているという 同じ状況を作ることが平等になる Modを使う場合に限定して、IfとSelect Caseのどちらを使った方が速いかを検証するなら、 君の言うとおりベストを尽くして最速コードを書くべきだけどね
380 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:28 ] なんか分かってないなぁ。 Modで算出した値を使わないなら>>373 になるんだよ。 まぁどこまで行っても平行線だからもういいが、他のやつらはどっちが速いんだろ? まぁ速さなんて俺はどっちでもいいけどな。 このような使い方なら普通の美意識を持ってたらSelect Caseだし。
381 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:19:50 ] >>380 foo1が速かった
382 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:24:07 ] >>381 トンクス j = i Mod 10 Select Case j としても? おれのとこはそれでもfoo1が速いが。
383 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:26:51 ] >>382 逆転した
384 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:31:23 ] >>383 ふーん、俺のとこと違うな。 まさかjを変数宣言してないとかじゃないよな?
385 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:33:56 ] >>384 してなかった したら差は縮まったけどまだ foo2が速い
386 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:35:45 ] >>385 おいおい、しっかりしてくれよ。 jをLong型で宣言したらそうなるか教えてくれ。
387 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:36:45 ] すまん、また後ろ読んでなかった。
388 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:41:46 ] >>386 &で宣言したよ 30位foo2が速い
389 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:42:49 ] まぁModで算出した値を使わないなら>>373 が平等な比較だが、とりあえず変数に代入したら 人によっては違うということは分かった。 ちなみに俺はWindows xp とExcel2007だ。
390 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:44:22 ] ちなみに Excel2002です
391 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:47:06 ] >>390 トンクス。
392 名前:361 [2009/01/05(月) 23:18:31 ] >論理で「Aでないか、Bでないか、Cでない」ならの類なのですが、 >列5 列6 列9なら、イベント処理し、「そうでないなら」、exitする の >「そうでないなら」はどう書いたものでしょうか? 訊き方が悪かったみたいですね。結局、次のこれで、希望する動きをしています。 If Not (Target.Column = 5) And Not (Target.Column = 6) And Not (Target.Column = 9) Then Exit Sub
393 名前:デフォルトの名無しさん [2009/01/06(火) 00:21:36 ] 文章だけだと伝わりづらいと思いますが、質問です。 ハイパーリンク │ 転記情報1 ハイパーリンク │ 転記情報2 EXCELシートの一覧表に上のようにハイパーリンクが張られた一列を作り、 それをWEBブラウザでプレビューできるようにしています。 WEBブラウザ上のリンクをクリックすると、 新しくEXCELシートを呼び出し、 クリックした行の情報(一番上のハイパーリンクをクリックしたなら転記情報1)を 呼び出したシートに転記する処理を作りたいと思っています。 EXCELシートならリンクをクリックすると同時にそのセルがアクティブになるので同行の情報も簡単に転記できそうですが、 WEBブラウザ上でもこれと同じような情報転記は可能でしょうか?
394 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 03:38:21 ] >>392 背中がムズムズする……
395 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 05:39:55 ] >>394 気持ちは解る 条件式にnotと=を併用するヤツってもうね…
396 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 07:33:05 ] <>
397 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:47:49 ] >>392 「Aでないか、Bでないか、Cでない」ではなく「Aでもなく、Bでもなく、Cでもない」だろ? 前者だと必ずTrueだからな。 それは置いといて、普通イベント処理ならIntersect使うから列番号では判定しないが、どうしても列番号で判定したいとか基本のお勉強なら Select Case Trget.Column Case 5, 6, 9 '処理1 Case Else Exit Sub End Select ’処理2 処理2がなければ、何もわざわざCase Elseで抜ける必要なし。 というか抜ける記述は普通はしない。
398 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:49:54 ] 何、今更?
399 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:59:59 ] >>392 書き忘れたがTarget.Columnを三度も取得しちゃいかん。 どうしてもAndとかOrを使うんなら、いったん変数に取得してから判定するんだな。
400 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:02:35 ] >>398 昨晩のアフォの>>365 か? 無視してすまんね。
401 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:29:05 ] 悔しかったの?
402 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:30:29 ] シートに商品名が20,000件程度入力されている状態で テキストボックスに商品名の一部を入力⇒キーワードが含まれるセルのデータを リストボックスに追加 という処理を考えていたのですが 下記の方法で試してみるとかなり時間がかかってしまいます 高速に処理をさせるには根本的な方法の見直しが必要でしょうか? dSelectForm.ListBox1.Clear LastRow = Sheet1.Range("C65536").End(xlUp).Row For i = 2 to LastRow Ans = 0 Ans = WorksheetFunction.Find(inputKey, Sheet1.Cells(i, 3)) If Ans <> 0 Then dSelectForm.ListBox1.AddItem Sheet1.Cells(i, 3) End If Next
403 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:59:47 ] 相変わらずの人がいるなw
404 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:20:39 ] >>402 ループのお勉強なら基本的には配列の勉強かな? データ範囲を2次元配列に取得して回すとか、AddItemは遅いから1次元配列にため込んでListプロパティで設定するとか。 WorksheetFunction.FindじゃなくInStr使うとか。 たしかExcel2000以降ならFilter関数が簡単。 WorksheetFunction.Transpose(範囲)で1次元配列を取得して、Filter関数にかけてからListプロパティで設定。
405 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:29:31 ] イベント処理だし元の質問からも判断してわざわざExitで抜けるようなコードは必要ないと思う。 条件に「合う」場合だけ判定して処理するように書くのが普通だね。 定番はIfだけど質問者のレベルから考えてコンマ何秒の速度差を考える必要はないと思うし 見た目のわかりやすさと保守のしやすさからCaseをすすめとく。 条件が増えたときに簡単に数字が追加できるから。
406 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:50:36 ] 2008年1月2日を08.01.02と表記してるセルを計算に使う方法ってありますか? 08.01.02と表記されたセルから08.01.01と表記されたセルを引くと1という答えが算出される処理を作りたいです。
407 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 03:34:54 ] >>406 セルの表示形式で「yy.mm.dd」
408 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 05:57:34 ] >>405 俺は誰かみたいに「何、今更?」なんて言わんが、そのような条件が三つ以上でIfステートメントでOr判定するくらいなら Select Caseステートメントの方が速いし分かりやすいし定番だと思うよ。 あと知らなくていいことだが、Select CaseステートメントでCase Elseとか、If ThenステートメントでElseとかは 何もそこで処理しなくても書いた方が速くなるね。 まぁ俺は書かないけど。
409 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 06:18:38 ] >>406 数式でよけれべ普通に=A1-B1なんてやりゃできる。 もし表示形式が日付形式になるようなら、G/標準とか0にすりゃいい。 2007では計算元の表示形式が日付でも普通に1になるが、たしか2003では数式セルは日付にならなかったっけ? 計算元の表示形式が文字列で、VBAでやりたいのなら MsgBox CDate(Cells(1,1).Value)-CDate(Cells(1,2).Value) MsgBox DateValue(Cells(1,1).Value)-DateValue(Cells(1,2).Value) などとやりゃできないか?
410 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:26:12 ] if not hoge is nothing then って構文が気持ち悪いんですけど、何か代替えはありませんか?
411 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:53:25 ] そんなこといったらVBAなんて気持ち悪い構文だらけですが何か?
412 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:23:23 ] 「代替え」なんて変な言葉を使う人に言われたくありません。 もしかして、「代替」を「だいがえ」って読んじゃう頭の弱い人やそれらに無意識に迎合しちゃう人ですか?
413 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:34:53 ] >>410 If ObjPtr(hoge) <> 0 thenでよくね? 俺はこんなことしないけどね。
414 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:38:45 ] それならもっとシンプルにできる If ObjPtr(hoge) Then こういう書き方を知らないと意味がわからなくなるけど
415 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:12:25 ] >>412 ttp://dictionary.goo.ne.jp/search.php?kind=jn&MT=%C2%E5%C2%D8%A4%A8
416 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:25:38 ] not 〜 nothingは俺も気持ち悪いと思う 直訳すると「ないアルよ」みたいな回りくどい二重否定の表現って 英語だと普通に出てくるから設計者は何の疑問も持たなかったんだろうなあ 俺もまだVBAを勉強中だから知らないだけかもしれないけど、 インスタンス化されてることを、いちいち論理を反転しなくても直接判定できるような 構文か関数ってないの?自分で作るしかない?
417 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 16:19:22 ] 別にこの仕様でおかしくもないと思うけどねぇ そもそもがNothingのときに何かをするってことの方が多いんだからさ 有ることと無いこと、両方とも否定文を使わずに判定出来るのが一番かもしれないが どちらかのみと言うなら、無いことを判定する方法を用意すべきだろ
418 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:08:30 ] if hoge is not nothingと書けるのが一番良い
419 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:21:50 ] 余計変だw
420 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:39:23 ] >>415 変な言葉が定着しつつあることはその引用で判るが、それで何が言いたいの? # 頭使うことを知らない人は、自分で考えることを放棄するから困る。
421 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:42:58 ] いっそのこと If hoge = Nothing If hoge <> Nothing でいいじゃん。 なんだよ突然Isって。わざわざ演算子を使い分ける妙なこだわりが理解できん。桂正和マニアかよ。
422 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:10:25 ] 代替〜(ダイタイ〜) の同音異義語が有る場合などに 代替え〜(ダイガエ〜) と重箱読み使うのは昔からあること 変な言葉でもなければ、最近になって定着しつつあるのではなく以前からあったもの 件の場合は重箱読み使うのが適切と言える状況ではないが、誤用や間違いではない "代替"の意味で"代変え"を使っているなら完全な誤用だけどね そもそも、言葉というのは変化していくもの 最近になって定着しつつあるのだとしても、それを頭ごなしに否定するのは愚かしい 頭使うことを知らない人は、誤用と変化の違いを見極めることなく 自分の中の古い知識だけで物事を断定しがちだが、もっと柔軟な頭と広い視野を持たないと困るよ
423 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:32:33 ] AndAlsoやOrElseってVBAには無いんだったっけ?
424 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:50:59 ] >>412 いや、”だいがえ”が正しいんじゃないかな。 もしかして”だいがい”って呼んでるの?
425 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:54:09 ] CやJavaが長年培ってきた洗練された構文をかなぐり捨ててVBはいったいなにがしたかったのだろう。 なぜ}のかわりにEndと入力しないといけないのか理解に苦しむ。 見やすくない上に3文字も打たないといけない。ばっかじゃないか?
426 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:55:49 ] 馬鹿発見。「だいたい」と読むのだよ。つーか、>422に書いてあるだろ。
427 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:12 ] いやいや、オリジナルのBASICはCより古いぞ。 その古臭い構文をVBも引きずっているというだけ。 だからこそBasicを名乗っているわけだが。
428 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:28 ] >>425 CやJavaとbasicはどっちが古いと思っているのかね。
429 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:04 ] オリジナルのベーシックと今のVBはかなり違うじゃん。 古いベーシックから新しいVBになるにあたって CやJavaで解決されている構文を見習えばよかったのだ。
430 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:56 ] C#でも使ってろ。
431 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:05:32 ] >>430 エクセルのマクロでC#って使えるの?
432 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:06:30 ] それよりなんでキーワードの先頭は大文字なんだろう 目がチカチカする 小文字ならまだメリハリが出て読みやすいと思う
433 名前:デフォルトの名無しさん [2009/01/07(水) 20:12:55 ] エクセルのセルに入っている文字列の特定の文字の上にオートシェイプを置きたいって質問した人です。 質問させてください。 エクセルの現在のフォントでの文字列の幅を取得するには、 1.HWNDをNULLでデバイスコンテキストを取得する。 2.コンパチブルなDCをつくり、フォントをエクセルのフォントと同じものをセレクト。 3.GetTextExtentPoint32を呼び出して論理単位で文字列幅を得る。 4.(モードがMM_TEXTだと仮定して)ピクセルなので、ポイントに変換する。 (DPIはGetDeviceCapで取得) 5.エクセルのシートのズームが80%なら0.8をかける であっていますか?
434 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:22:18 ] >>429 VBが登場した頃は、まだパソコン用の高級言語の人気が CとPascal(これはBegin〜Endって書く言語)で2分していて、 C系の構文が良いという評価が固まっていなかったのだと思う。 >>432 VB登場の少し時代は全部大文字だったから、そこからは進歩したと言えると思う。
435 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:27:07 ] 変わったと言うより大幅に拡張されてるね。 根っこの部分はN-BASICの時代から変わってないから 昔覚えた変なテクニックが意外とそのまま使えたりするんだよな。 このあたりN-BASICやN88-BASICの記憶がないとなかなか同意してもらえないと思う。 例えばこんなNextの書き方、VBから始めた人は知らないんじゃないかな。 For i = 1 To 10 For j = 1 To 10 (処理) Next j, i
436 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:31:28 ] >>435 あったなぁ・・ そうだ、For文みて思い出したけど、VBは1からカウントするのが好きくね? 配列とか。あれキモイ。 まともな人間なら数字は0からカウントするものだ。 という言葉を思い出した。
437 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:36:44 ] fortranなんかは1からだろ 数学も1から C系で0ベースなのはメモリの配置とか低レベルな理由
438 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:38:03 ] >>436 配列はN-BASICもVBも0からだろ。
439 名前:433 mailto:sage [2009/01/07(水) 20:39:17 ] あのー。少しは私のことも思い出してあげてください。。(^^;)
440 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:40:30 ] >>439 修飾(ボールドとかイタリックとか)も考慮しないとずれるよ
441 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:43:21 ] >>440 嗚呼〜。ほんとだ。そうですよね。。 あ、433のやり方で大筋はOKで、かつ、ボールドも考慮みたいな感じでしょうか?
442 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:25:06 ] >>407 >>409 表示形式色々変えたんですけど、 Msgboxで表示しても0だし、EXCELのセル上に表記しても#VALUEになります。 なんでなのでしょう。 EXCELのバージョンは2000です。
443 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:27:33 ] >>441 細かいことを言えば、Excelは同じセル内でも1文字ごとにフォントを変更できる。 すべてに対応するのはけっこうめんどくさそう。
444 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:28:40 ] >>442 元の日付けデータがシリアル値になってないんでねーの?
445 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:31:48 ] >>443 そういやそうですね。ちょっとそこらへんも含めて作ってみます。
446 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:50:11 ] VBAっていつ無くなるんだっけ?次のバージョンから?
447 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:55:32 ] >>444 そもそも08.02.01のような表記をシリアル値にする方法がわからないのですが。 =DATEVALUE("08.02.01") みたいに表記してもVALUEになるだけですし。
448 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:01:53 ] >>447 VBA関係ないよな =DATEVALUE(SUBSTITUTE("08.02.01",".","/")) 次に何かわからないことがあったら総合相談所行ったら?
449 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:03:37 ] >>446 Mac版の2008ではなくなったけど、その次でまた復活する予定。 Win版はなくならない。
450 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:18:53 ] >>449 サンクス 本職はC++だけどVBA使えると経理の女の子から結構重宝されるので助かる
451 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:29:12 ] てか、事務職でVBAって何に使うんだよw
452 名前:デフォルトの名無しさん [2009/01/07(水) 23:49:34 ] 1行目が項目名で、2行目から201行目までデータが入っています。 オートフィルター後のA列のデータを取得したい。 どんなマクロになりますか?
453 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:20:50 ] うぇー Workbook.Save False すると Wrokbook_Before_Close動かん
454 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:29:40 ] >>452 オートフィルタの実行はAutoFilterメソッド 結果を配列として取り出すのはCurrentRegion.SpecialCellsメソッド >>451 単純作業をVBAで自動化してやるとけっこう喜ばれるよ 毎日在庫を確認して発注伝票を印刷してFaxで送信するとか 中小だとアバウトな部分が多くて完全な自動化は難しいから できるところだけやる
455 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:35:23 ] >>451 どんだけ想像力ねぇの?
456 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:35:29 ] 下記のような感じで、セルに他のセルを参照した値を入力したいのですが、 下記の入力方法だと、絶対参照になってしまいます。 相対参照にする指定方法をご存じないでしょうか? Cells(i + 1, 9).Value = "=" & Cells(i, 9).Address & "+" & Cells(i + 1, 6).Address
457 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:43:52 ] >>451 Officeって言うくらいだから・・・
458 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:53:51 ] >>456 Cells(i, 9).Address(False, False)
459 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:14:30 ] OS:WinXP Ver:Office2000 以下のマクロが意図したとおりに動きません。 aの値によってaddstに入力した値に異なる係数をかけた値を作りたいのですが、 係数をかけたはずのaddをセルに入力してみるとゼロになっています。 参考文献にはCaseの後はコンマで区切って複数条件を入れれるとありますが、 それはできないのでしょうか。。 なおプログラム自体は上記係数を無視する他は問題なく動いています。 Dim a As Integer (中略:aはFor構文で1から18まで増える) Dim addstd As Double Dim add As Double addstd = 0.3 Select Case a Case 3, 4, 8, 11, 13, 18 add = addstd Range("A5").Value = add Case 2, 6, 7, 10, 15, 17 add = addstd / 2 Range("A5").Value = add Case 1, 5, 9, 12, 14, 16 add = addstd / 3 Range("A5").Value = add End Select
460 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:22:28 ] >>458 ありがとう
461 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 01:49:40 ] >>459 表示形式
462 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 02:57:09 ] ウォッチやDebug.Printで値を見るくらいは自分でやれよ ほんと、VBA使いって問題起こるとそこで思考停止してしまい 試行錯誤することが出来ない奴が多いよな エラー出たらそこで終わりってなら機械と同じだぜ 処理速度では機械に敵わないんだから機械以下とも言える
463 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 06:24:19 ] 多いって何人だよ
464 名前:459 mailto:sage [2009/01/08(木) 08:48:02 ] ありがとうございます。ググってみました。 もしかすると、これに近い問題でしょうか。 questionbox.jp.msn.com/qa2390763.html また、デバッグ方法もありがとうございました。 VBAというか、プログラミング的なものを初めて2日目なもので、まだよく使い方がわかっていませんでした。 今から会社に行っていろいろ試してみようと思います!
465 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 09:05:06 ] >>459 計算自体はできてるようなので 書式設定の少数点以下の桁数が0になってるんじゃ?
466 名前:デフォルトの名無しさん [2009/01/08(木) 09:52:07 ] 非アクティブシートの選択セルを操作する事は可能ですか?
467 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 10:48:21 ] 無理
468 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 15:28:00 ] VBAを作成してもらいたいのですが もし作成していただけるようでしたらメールをお願いします。 1つの縦列から文字や数字を抽出し、横行書き出す作業を繰り返すマクロの作成をお願いしたいです。
469 名前:468 mailto:s.rika1990@gmail.com [2009/01/08(木) 15:30:04 ] メール入力し忘れてました(´A`)