1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
566 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 09:43:03 ] >>564 可能だけど、それを自分で調べられないレベルの奴は プロジェクト自体やモジュールをコードで弄るのはやめた方がいい あと、やるならプロジェクトへのアクセス許可出さないとだめだからね
567 名前:558 [2007/08/07(火) 19:02:10 ] VLOOKUP関数で出来ました! 検索値を日報の日付の部分にしたら解決しました。
568 名前:デフォルトの名無しさん [2007/08/07(火) 19:12:56 ] 初めて質問させていただきます。 XML文書の妥当性チェックをXMLスキーマで行うため、以下のようにXMLSchemaCacheにaddしようとしたところ、Aの段階でエラーが発生します。 @スキーマキャッシュオブジェクトの生成 Dim objScm As New MSXML2.XMLSchemaCache Aスキーマをキャッシュに追加 objScm.add "urn:bookList","C:\book.xsd" 実行時エラー スキーマのルート要素に対する定義が無効です。 どのようにすれば@ITの記事を参考にしてやっているのですが、どのようにして回避できるのかわかりません。環境はExcel2000, MSXML2.6を使用しています。よろしくお願いします。
569 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:55:54 ] MSXML2使うなら、これはExcelとは関係ないものなのでスレ違い
570 名前:デフォルトの名無しさん [2007/08/07(火) 21:22:30 ] >>569 小さい野郎だな、静かにしろ
571 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:47:36 ] 何でも斜に構えて、規律なんて糞食らえ、俺は大きな人間さ というスタンスで居るのがカッコイイと思ってる年頃ってあるよねw
572 名前:デフォルトの名無しさん [2007/08/07(火) 22:00:20 ] ゆとりはもう一度文章を読み返してから書き込もうぜ
573 名前:568 [2007/08/07(火) 22:01:44 ] >>569 XML総合と迷ったのですが、Excelマクロを用いてのXML操作ということで、ここはひとつお目こぼしを。 >>570 わたしのほうもスレ違いと言われて当たらずとも遠からずかもしれません。原因の一端は確実にわたしにありますので、あまりお責めにならないよう。 >>571 そういう時期は確かにありました。実際にカッコイイことはないと思うのですが、根拠レスに自分で自分をカッコイイと思える平和な時期だったのだと思います。
574 名前:デフォルトの名無しさん [2007/08/07(火) 22:18:13 ] >>566 そー言わずになんかヒントちょうだい
575 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:25:08 ] >>573 だまってろカスブタ
576 名前:デフォルトの名無しさん [2007/08/07(火) 23:25:53 ] Dim a, b dim r as range a = Split(Replace(r.Value, "@", " "), " ") b = Split(Replace(r.Value, "a(0)", "*"), "*") bはaで分割した最初の文字列を*に変換、*で分割といった感じにしたいのですが、 素人でよく分りません。よろしくお願いします。
577 名前:デフォルトの名無しさん [2007/08/07(火) 23:30:25 ] "a(0)" -> a(0) じゃだめか?
578 名前:デフォルトの名無しさん [2007/08/07(火) 23:44:11 ] >>577 おお、できましたぁ!!!ありがとうございます〜ペコリ
579 名前:デフォルトの名無しさん [2007/08/07(火) 23:56:01 ] ただ、それだったら a = "*" & mid$(r.Value,instr(r.Value,"@"))とかのが何ぼか軽いんじゃない? (注:offsetの誤差は考慮してない)
580 名前:デフォルトの名無しさん [2007/08/07(火) 23:57:13 ] あ、*でsplitしてるのか、ごめん勘違い
581 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 09:40:48 ] >>573 > Excelマクロを用いてのXML操作ということで それはVBAの範疇じゃない VB言語で[A]pplication(Excel)を操作するからVBA これからAを取ったらVBなので、Excel付属のVBE使ったとしてもVBの分野
582 名前:573 [2007/08/08(水) 12:00:35 ] >>581 わかりました。他スレで質問させていただくことにします。お騒がせしました。
583 名前:デフォルトの名無しさん [2007/08/09(木) 21:09:41 ] excelのvbaを使ってます。 ユーザーフォームで作成した複数のtextboxについて、コードを入力するとき 例えば if textbox1 = 〜 then end if if textbox2 = 〜 then end if if textbox3 = 〜 then end if などとせず textboxの連番をうまいこと使ってまとめることってできないでしょうか?
584 名前:デフォルトの名無しさん [2007/08/09(木) 21:21:27 ] あらかじめオブジェクト配列にでもセットしておけば?
585 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 21:21:57 ] >>583 〜の内容とThenからEnd Ifの間次第なのに肝心な所を略してどうするの。 for i = 1 to 3 if Controls("textbox" & i) = 〜 Then Stop next こういう事?
586 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 02:31:18 BE:703008239-2BP(218)] SolverAdd CellRef:=constraintCell.Address, Relation:=2, FormulaText:="1.00" これで 拘束条件が 追加されないびょん しかも、あるブックだけ・・・ どいうこと?
587 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 02:35:35 BE:390559853-2BP(218)] しかも、同じブックの その他のSolverAddは 動作するし・・・ なんなの? いやがらせ? > Excel 2003 For Each r In changeRange SolverAdd CellRef:=r, Relation:=3, FormulaText:=0.0002 SolverAdd CellRef:=r, Relation:=1, FormulaText:=0.9998 Next r は 動作するw
588 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 04:29:33 BE:1458089478-2BP(218)] "1.00" の代わりに "R1C10" にすると追加されたw なんで0.0002や0.9998は問題ないのやら?w
589 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 04:44:49 BE:104149722-2BP(218)] "1.00"の代わりに 1 や 1# でも追加されないびょんw 0.999は追加されたw 変な ブックw
590 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 04:48:30 BE:416596782-2BP(218)] "1.00"の代わりに"0.999"にしたら追加されたw そんなに 1が嫌いなのか!
591 名前:デフォルトの名無しさん [2007/08/11(土) 01:19:24 ] あまりにも単純な質問で申し訳ありませんが質問させてください。 VBAでユーザーフォームのテキストBOXにセルの内容を表記 させる事は普通には出来るのですが、セル内容が時刻の場合 上手くいきません。 セル(A1)がActiveとして10:00と入力されています。 それをtexttbox1に表記させるため Userform1.textbox1.value = Activecell とすると、表示されるのは「0.416666666666667」という不可解な 表記なんです。 「10:00」と表記させる方法をご教示下さい。
592 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 01:46:00 ] >>591 Userform1.textbox1.value = Activecell.Text
593 名前:デフォルトの名無しさん [2007/08/11(土) 02:59:16 ] >>592 > >>591 > Userform1.textbox1.value = Activecell.Text ありがとう御座います。セル側にtext指定するとは気がつきません でした。本当に助かりました。
594 名前:デフォルトの名無しさん [2007/08/11(土) 17:42:24 ] すみません、質問です。 マクロの閲覧などをロックしても、ある種のツールで解除出来たりしますが これを回避する方法は、他のツールソフトなどを利用するしか、 手段は無いのでしょうか? その場合、出来ればフリーで良いツールは有りませんか?
595 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 18:00:28 ] 変数名をランダム&グローバルにして クラス使わずすべて標準モジュールに記述 標準モジュールもランダムな名前で100個ぐらい作る 関数も全く関連性のないものを各々10個ぐらい用意 さらに関数もgoto文多用で1000ステップ このくらいやれば自分も解析する気にならない マジおすすめ
596 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 18:54:45 ] >>594 VBAプロジェクトの保護は、初心者の不用意な改変を防ぐ「ロック」であって 閲覧や漏洩を阻止する「セキュリティー」ではありません そもそも、Excelは開発環境ではないのでソースの漏洩を防止しようとすること自体が間違い Microsoftは強固なセキュリティーを付けることよりも、万が一パスワードを紛失しても、 膨大な時間を掛けて製作したマクロコードを失う結果に繋がらないように配慮しました 開発環境ではないExcelでは、ソースを書いたモジュール自体が、パスを付ける対象に組み込まれているので モジュールのエクスポートなどをしていない状態でパスを紛失してパス外しが出来なかったら コードを全て失うことになってしまうからね その結果、普通にパスを掛けただけはもちろん、パス解除防止ツールでロックしても、 ちょっと面倒になるだけでパス外し自体は出来るようになっています 君が言う「ある種のツール」はコレ( ttp://passmaster.fujigoma.com/passmas/index.htm ) じゃないかもしれないけど、コレで「VBAパスワード保護」した程度ならちゃんと外せます 因みにコレくらいならVBAでも作れますよ そして、コードが漏洩しない形でアドインなどを作りたい人には専用ソフトを用意しています (Visual Studio Tools for Office) あとは、専用ソフトを使ってでもセキュリティーを付けたいか、専用ソフトを使うくらいなら、 解除できる状態でも良しとするかはあなた次第なので、どうぞお好きなように
597 名前:デフォルトの名無しさん [2007/08/11(土) 20:41:21 ] 質問させてください。 会社で、エクセルを使って報告用紙の作成を命ぜられたのですが、 エクセルの知識は一般常識的なものしか持ち合わせていないので、 どなたかご教授願います。 C1の値が、A1〜A5のいずれかの値と一致したならば、 E1に、その一致したA1〜A5のいずれかのセルの右隣のセルに入力されている値(B1〜B5のいずれか) を表示する。 というような内容の関数を作りたいのですが、ネットで検索して1日悩みましたが、結局分かりませんでした。 私の予想では、IF関数とOR関数を使うような気がするのですが。。。 ちなみに関数は今まで使ったことがありません。プログラムの知識もありません。 どうぞ宜しくお願い致します。
598 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:54:08 ] >>597 E1に式を突っ込むだけでできると思うのだが。よって、スレ違い。
599 名前:597 [2007/08/11(土) 20:58:50 ] >>598 この板ははじめて来るので、よく分かりませんでした。 どこで質問すれば良いでしょうか?
600 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 21:12:30 ] >>599 さぁ? Excelの使い方の質問ができるのならどこでもどうぞ。 #あ、鼬害か。
601 名前:597 mailto:sage [2007/08/11(土) 21:21:27 ] 他の板で聞いて解決しましたのでwww お前らダッセwww
602 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:49:41 ] セルに関数入れるのを プログラムと呼べなくもないような
603 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:51:42 ] >>602 それでもスレ違いであることには変わりない。
604 名前:デフォルトの名無しさん [2007/08/11(土) 23:55:49 ] >>596 質問した香具師じゃないが VSに何故VBAの開発環境があるんだ?と不思議に思ってたが そーゆー事なのかぁ、ためになった
605 名前:デフォルトの名無しさん [2007/08/11(土) 23:57:38 ] >>604 VBAと書いたが、確か違う名前だったね
606 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 19:08:40 ] 質問です。 エクセルで、印刷ダイアログを表示させて、そのときの印刷のページ範囲を任意で決めたいのですが、VBAで制御できますか? 一応、PrintOutメゾットは知っているのですが、このメゾットを実行させると印刷が自動的に行われてしまうようで、今回の利用の用途には合いませんでした。 あらかじめページ設定に印刷の範囲を指定できればいいのですが・・・ ご教授願います。
607 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 19:16:56 ] printpreview
608 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:02:15 ] >>607 いや、それだとダイアログが出ないから合わないんです。 詳しく書くと 1.何かしらの計算をして、ページ範囲(ページの枚数:1〜3ページまでとか)が既に決まっている。 2.印刷する前にダイアログを出す。 3.ページ範囲は、1.より範囲を代入する。 4.ダイアログから印刷プレビューを出す。 5.印刷をする。 この場合、PrintOutメゾットだとFromとToで範囲を決めれたけど、このメゾットだと自動的に印刷までいくので、今回の目的に合わなかったわけです。 一応printpreviewもやってみたけど、このメゾットだと範囲をあらかじめ決めれないらしいので、どうしたものかと困ってしまってます。
609 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:25:21 ] >>606-608 Application.Dialogs(xlDialogPrint).Show 〜
610 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:56:53 ] >>609 おおなるほど、これなら思い通りに行けそうです。 ありがとうございます!
611 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 17:34:19 ] 教えて下さい。 マクロで、「エクセルのメニューを操作(開いてる)」 という状態を 判断する方法って有りますか?
612 名前:デフォルトの名無しさん [2007/08/15(水) 01:03:01 ] InputBoxとかでとりあえず何かを入力させて、 その中にある文字列が入っているかで 分岐させるのはどうすればいいんですか? ある文字列が入っているか調べる関数とかあれば教えてください。
613 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 01:08:29 ] >>612 InStr関数 ある文字列の位置を返す関数だが 含まれてなければ0を返すので、0が返ったか1以上が返ったかで 含まれてるか否かを判断できる
614 名前:612 [2007/08/15(水) 01:27:20 ] >>613 ありがとうございます。参考にします。
615 名前:デフォルトの名無しさん [2007/08/15(水) 03:12:18 ] 散布図のグラフで、Y軸の範囲を1つ右の列にずらすVBAを作りたいのですが 方法がわかりません。例で示すとY軸の値 =Sheet1!$B$2:$B$11 を =Sheet1!$C$2:$C$11 =Sheet1!$D$2:$D$11 =Sheet1!$E$2:$E$11 : と実行するたびにずらしていくマクロです。 固定値でよければ、Y軸を指定するには ActiveChart.SeriesCollection(1).Values = "=sheet1!R2C2:R11C2" などとすればよいことがわかりましたが、相対移動のためにたとえば、 ActiveChart.SeriesCollection(1).Values = ActiveChart.SeriesCollection(1).Values.Offset(0,1) とはできません。 調べたところ、.Values を参照するとバリアント型で配列が返るところまではわかったのですが、 そこで力尽きました。。
616 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:28:39 ] 自己レスです。 その後、検索したところ指定範囲が .SeriesCollection(1).Item(1).Formula で 文字列で得られることがわかりました。ですので、文字列処理をひたすらやって、 .SeriesCollection(1).Values に突っ込むことでなんとかできるようになった感じです。 お騒がせしました。 # 結局、これで徹夜になったなぁ。
617 名前:nanashi mailto:sage [2007/08/15(水) 14:09:52 ] 以下のことがしたいのですが、VBAで対応可能でしょうか? シート1で文字列を検索して、検索した文字を違うシート2のB1セルに貼り付けます。 続いて検索した文字の一つ上のセルを違うシート2のA1に貼り付けます さらに検索した文字の一つ下のセルを違うシート2のC1に貼り付けます。 検索された文字をA2,A3...と貼り付けていくようなものをつくりたいです。 できればシート1でのセル情報(セルの色や取り消し線)もあわせてもってこれると うれしいです。 よろしくお願いします
618 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:57:08 ] >>617 マクロの記録結果見て考えろ
619 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:58:51 ] 充分可能ですね。
620 名前:デフォルトの名無しさん [2007/08/15(水) 15:46:47 ] phpでいうところの変数展開「var_dump()」みたいなものって、vb(vba)にはないのでしょうか? PHPは2年ほど触っているのですが、仕事でvbaをしなければならなくなりました。 質問自体はそれほど難解なことではないのですが、なにしろ、基本的な知識をぶっ飛ばして作成に入っているため、つまらないことで躓いています。 よろしくお願いいたします。
621 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 16:05:41 ] ウォッチ式のことかね
622 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 17:27:02 ] >>620 PHPと違ってデバッガがあるので、それを使えばvar_dumpなんぞ不要。 ブレークポイント、ウォッチ式、イミディエイトウインドあたり調べてみ。
623 名前:デフォルトの名無しさん [2007/08/15(水) 17:34:42 ] >621さん 簡潔なお答え、ありがとうございます。笑 (上段はさておき、そんな言葉すら知りませんでした。) 頂いたヒントをもとに調査した結果、「現在変数に入っている値を見る方法」がわかりました。 「ローカルウインドウ」なるものの存在を知ったので、たぶん、問題は解決。 ありがとうございました。
624 名前:デフォルトの名無しさん [2007/08/15(水) 17:38:01 ] >622さん 立て続けに申し訳ありません。 解決しましたので、そのご報告です。 ずっとphpを触ってきたので、すっかりvar_dumpのトリコになっていました。 開発をしていると値の内容を知ることが重要で、それをもたらしてくれるvar_dump、なんて素敵な関数なんだろう、と感動していたところです。 よくよく考えると、結果を表示する画面というのもエクセルにはなく(たぶん、ないですよね)、結果、ローカルウインドウを使うことに決めました。 ご回答、ありがとうございました。
625 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 22:11:00 ] Debug.Printをフラグ管理して、イミディエイトウインドに値を表示させるのもひとつの手かと コードは多少汚くなるけど、必要な値だけ取り出せる。
626 名前:デフォルトの名無しさん [2007/08/15(水) 22:28:10 ] すいません、VBA初心者なんですが、2点程質問があります。 どなたか教えて頂けたら幸いです。 1、Application.GetOpenFilenameにてファイル名を取得するんですが、 この時、「ファイルを開く」ダイアログボックスに自分が指定した フォルダが最初から開かれているようにしたいんですが、可能なのでしょうか? 例えば C:\test のフォルダを指定したら、ダイアログボックス を開いた時に、testフォルダ内のファイルが見れている状態です。 2、1つの列にロックをかけた場合、他のセルの右クリックの「挿入」、 「削除」、「セルの書式設定」と言ったメニューが使えず、 制限されてしまうんですが、その列をロックをしたまま、上記メニュー を使えるようにする事は可能なのでしょうか? 自分で解決できなかったので、 どなたかご存知の方いましたら、宜しくお願いします。
627 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 22:57:19 ] >>626 ChDrive()やChDir()でカレントフォルダを変更。 ただし、例外の処理をちゃんとしないとうまく動かない。 別に、Application.GetOpenFilenameをやめてWindowsAPIを使う方法もあるが、 ややスキルが必要。 >>1つの列にロックをかけた場合、 これ意味不明。kwsk。
628 名前:デフォルトの名無しさん [2007/08/15(水) 23:17:33 ] >>627 さん ありがとうございます。 今までカレントフォルダを変更しただけで、例外の処理をしてませんでした。 ちょっと例外処理とAPIについて自分で調べてやってみます! >>1つの列にロックをかけた場合、 というのは、例えばB列のセルの内容を編集をできないようにロックした場合、 という意味です。(B列のセルをダブルクリックしたら編集不可のメッセージが出ます。) このB列をロックしてしまうと、他の編集可能なセルにも影響が及んでしまうんです。 編集可能なセルだけ、通常の右クリックのメニューを使えるようにする 事はできるのでしょうか?
629 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 00:15:03 ] >>628 「ロック」というのはデフォルトで全部のセルにチェックがついてる。 おまえさんが言ってるのは「シートの保護」のことか?
630 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 01:10:49 ] 無理してShellコントロールでやってみたがSetdirectoryしてからダイアログ呼ぶ方が綺麗で簡単だわな 'Shellを使うには Microsoft Shell Controls And Automation をインクルードしておくこと Dim objShApp As Shell Dim strPath As String Dim objFld As Folder2 Set objShApp = New Shell Set objFld = objShApp.BrowseForFolder(0, "フォルダを選択してください", _ BIF_SHAREABLE + BIF_NONEWFOLDERBUTTON + BIF_NEWDIALOGSTYLE + _ BIF_RETURNFSANCESTORS, ThisWorkbook.Path) If objFld Is Nothing Then Exit Sub End If strPath = objFld.Items.Item.Path MsgBox strPath Set objFld = Nothing Set objShApp = Nothing
631 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 02:58:56 ] かなりの初心者です セルに格子の表を作りたいのですが、メッセージボックスなどで表示・入力させて、毎回、表の大きさを自由に変えられるような、マクロは作れますか? "A1:J10"と指定して表作れとかなら、何とかわかるのですが・・・ ご指導、よろしくお願いします
632 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 03:33:11 ] マルチページやタブストリップで、ページの背景をかえても、 タブがグレーのままなのです。 タブにも背景色を設定することは出来ないでしょうか
633 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:01:24 ] >>631 REFEDITコントロールを使うとか
634 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:05:41 ] >>631 言ってる事判んないけど、例えば次のような感じなら簡単だと思う 1 マウスで左上のセルを指定 *** ここからマクロ *** 2 inputbox関数で大きさを指定。例えば、5-10 3 マクロで5行10列の格子を引く *** マクロ終り ***
635 名前:631 mailto:sage [2007/08/16(木) 11:51:07 ] >>633-634 これから、やってみます 本当に有難うございました
636 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:32:47 ] >>631 以前、同じことやろうとして、判らなかった。 自分しか使わないマクロだったんで、 マクロ起動前に、処理したいセル範囲を選択しておく、という方法にしてしまった。 お望みの解ではないですが、参考まで。
637 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 13:39:16 ] inputbox関数じゃ無くinputboxメソッド使えばいいじゃん?
638 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 13:50:51 ] inputboxメソッドで始点(左上)と終点(右下)をマウスで指定すれば、 キーボードで入力しないでも出来そうな気がするのだが...。
639 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 18:46:59 ] できた(力作) Sub セルに格子の表を作りたいと思った時のマクロ() Const colwidth = 3 '枠の幅0- Const colcount = 9 '枠の列数1- Const RowHeight = 4 '枠の高さ0- Const rowcount = 3 '枠の行数1- Const セル = "C7" topline = "" bottomline = "" centerline = "" charline = "" topline = "┌" '*** For i = 1 To colcount For m = 1 To colwidth topline = topline & "─" Next If i < colcount Then topline = topline & "┬" Next topline = topline & "┐" '*** centerline = "├" For i = 1 To colcount For m = 1 To colwidth centerline = centerline & "─" Next If i < colcount Then centerline = centerline & "┼" Next centerline = centerline & "┤"
640 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 18:47:43 ] For i = 1 To colcount '*** charline = charline & "│" For m = 1 To colwidth charline = charline & " " Next Next charline = charline & "│" bottomline = "└" '*** For i = 1 To colcount For m = 1 To colwidth bottomline = bottomline & "─" Next If i < colcount Then bottomline = bottomline & "┴" Next bottomline = bottomline & "┘" myspread = topline For i = 1 To rowcount For m = 1 To RowHeight myspread = myspread & vbLf & charline Next If i < rowcount Then myspread = myspread & vbLf & centerline Next myspread = myspread & vbLf & bottomline Set rf = Range(セル).Font rf.Name = "MS ゴシック": rf.FontStyle = "標準": rf.Size = 11 rf.Parent = myspread: rf.Parent.ColumnWidth = (2 + colwidth * colcount) * 3 rf.Parent.RowHeight = (2 + RowHeight * rowcount) * 15 End Sub
641 名前:デフォルトの名無しさん [2007/08/16(木) 23:51:00 ] vlookupの関数でできると思います。 詳細はHELPを参照してください。
642 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:54:06 ] とりあえず、客の名前と住所が入力されたシートがあるんですが、 膨大な数が入力されてます。 例えば、 「東京都新宿区西新宿」 などと住所を入力したら、その文字が含まれる列、行だけが 表示される、みたいな事って出来ますか?
643 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:55:20 ] できます。
644 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:56:45 ] >などと住所を入力したら、 どこに入力するの? 複数該当する時はどうするの? もっと詳しく具体的に! ってゆうか目的は何ですか? いずれにしても、VBAじゃないと出来ないと思う
645 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:05:36 ] 目的はわかるだろw
646 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:50:13 ] 顧客リストから自分の土地勘のある場所に住んでいる客を抽出して、ストークするんですね?
647 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:03:37 ] 何故Accessを使わない
648 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:18:47 ] 何故オートフィルタを使わない
649 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 13:39:36 ] 一つの列に順に大量のデータ(人名)を入力していくのですが その際、遊びで一人分入力するのにかかる時間を計るタイマーを ユーザーフォームで表示するというマクロを作っています タイマー部分はOnTime関数を使って基本はできたのですが セルに入力中はタイマーの時計表示が止まってしまいます 入力中はマクロの実行自体が止まってるようなんですが これを動かし続けることはできませんか? (入力して確定「後」にかかった時間を表示するのはできました)
650 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:14:45 ] Excelから切り離して動かせばいい 操作はウィンドウメッセージを使うことになるがそう面倒でもあるまい VBAの範疇を出る話なので、あとはご自分で
651 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:16:25 ] ユーザーフォームから入力すれば良いかも?
652 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:50:37 ] Dim time As Variant Function settime() As Variant time = Timer End Function Function gettime() As Double gettime = Timer - time End Function Private Sub Worksheet_Change(ByVal Target As Excel.Range) mytime = Format(gettime, "####.00") ThisWorkbook.Application.Caption = mytime End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) settime End Sub
653 名前:649 mailto:sage [2007/08/19(日) 21:34:16 ] >>650 ありがとうございます。Excelから切り離すってことはVBかなんか使って別アプリにしてしまう ということですよね?VBA以外やったことないんですが・・・これを機に勉強しようかな >>651 ありがとうございます。 あくまで入力作業中のおまけというかアクセサリ的なものとして表示させておくつもりだったので その発想はなかったです。試しにやってみたらフォーム上のtextboxへの入力中ならちゃんと タイマーを表示するマクロも動き続けますね。とりあえずこの方法でやってみます。 >>651 わざわざコードまで書いてもらって恐縮です。 言葉足らずで申し訳ありませんでしたが、入力確定後にかかった時間を表示するだけじゃなく 入力中もかかってる時間を表示させ続けたいのです。
654 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 21:45:48 ] >>639 エラーでます
655 名前:デフォルトの名無しさん [2007/08/20(月) 02:39:20 ] こんな有用なスレがあったんですね。 早速ですが、1つ教えてください。 Excelで、次のようなことがしたいのですが、どのようにしたら良いでしょうか。 ・事前に、ユーザーが新規ブックを開いておく ・そのままの状態で(ボタンなどを押すことなく) ・PCのCOMポートから送られてくる文字を、順番にセルに書き出す。 ボタンを押して....のようなイベントの発生による関数の起動ではなく、 COMポートの受信割込発生をイベントとした関数の起動がしたいのです。 現在は、 シート上に作ったボタンを押すことで、セルに書かれた数字/文字を、PCのCOMポートからRS232Cで送り出したり、 同じくシート上に作ったボタンを押すことで、COMポートを開いて受信状態となり、 数字/文字を受信したら罫表に書き込んだり などは、結構何度も作っているのですが、 今回は、「ボタンを押さなくても」自動的に受信できないかと思うのです。 何か特別な方法が必要でしょうか、あるいは、VBAの関数にすでに用意されているのでしょうか? 宜しくお願いします。
656 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 06:35:04 ] Private Sub Workbook_Open() 処理 End Sub
657 名前:デフォルトの名無しさん [2007/08/20(月) 21:11:30 ] 1,エクセルの左側にあらかじめ設定している列を折りたためる、ボタンがあるシートがあるんですけど、 どのように設定すればいいのでしょうか? 2、functionを使用して、同じ計算式をマクロに計算させようとすると、5倍位時間がかかるようになりました。 どのような対策を取ればいいのでしょうか?
658 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:21:42 ] 1 そのまんま。そのボタンに列の表示非表示を切り替えるマクロを登録すればいいだけ。 2 ワークシート関数よりユーザー定義関数の方が遅いのは当然だが、そういうことじゃないのか? 違うなら日本語で質問してくれ。あとそのFunctionの内容も書くこと。
659 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:26 ] >>657 1.グループ化の事か?
660 名前:631 mailto:sage [2007/08/21(火) 01:22:25 ] 本やみなさんの意見を参考にしながら一応、出来たのですが Sub セル範囲を指定して格子罫線を引く() Dim Rng As Range Set Rng = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) Rng.Borders.LineStyle = xlContinuous End Sub 少し、改造すれば、セル範囲を指定してセルの色を塗り替えるにもできます(せっかく、作ったので、良かったら参考にして下さい) これに、キャンセルしたときに「入力されませんでした」と表示するようにしたいのですが、どうもわかりません Sub セル範囲を指定して格子罫線を引く2() Dim jis As Range Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) If jis <> "" Then Rng.Borders.LineStyle = xlContinuous else msgbox"シート名が入力されませんでした" End If End Sub 上のソースだとエラーになってしまいます お手数ですが、ご指導お願いします。
661 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:33:33 ] サンプル Dim returnData As Variant returnData = Application.InputBox("データを入力してください", Type:=1) If VarType(returnData) = vbBoolean Then MsgBox "キャンセルされました" Exit Sub End If MsgBox "処理を続行します"
662 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:58:45 ] >>660 インプットボックスメソッドはエラー処理が必要 On Error Resume Next Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8) On Error GoTo 0 こんな感じ。ヘルプ見てね! あと入力されなかった時はキャンセルにしてしまう場合 If jis Is Nothing Then Exit Sub
663 名前:662 mailto:sage [2007/08/21(火) 11:16:43 ] こんな感じかな? Sub セル範囲を指定して格子罫線を引く662() Dim Rng As Range Application.DisplayAlerts = False On Error Resume Next Set Rng = Application.InputBox( _ prompt:="セル範囲を指定後 [ OK ] を押して下さい。" _ & Chr(13) _ & "【セルを選択しないと [ OK ] は無効です。】", _ Title:="罫線を引くセル範囲を指定してください", _ Default:="", _ Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If Rng Is Nothing Then MsgBox "中止します" Exit Sub Else Rng.Borders.LineStyle = xlContinuous End If End Sub
664 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 17:59:15 ] >>660 あなたにとって自慢したい自信作かもしれないけど?敢えて苦言を >本やみなさんの意見を参考にしながら一応、出来たのですが 何もしないで、OKまたはキャンセル押したらエラーになるよね? これは「出来た」には程遠い!糸口がみつかった程度。 エラーが出るうちは未完成ですね >(せっかく、作ったので、良かったら参考にして下さい) 恐らく参考にならないでしょう Sub セル範囲を指定して格子罫線を引く2() ←コンパイルした? 宣言してない変数があるんだけど。 >If jis <> "" Then これはマズイよね、"" は文字列だから、変数 jis が String じゃないとエラー起こす。
665 名前:657 mailto:sage [2007/08/21(火) 22:49:15 ] >>658 回答ありがとうございます。 1、については、>>657 さんの回答で要領を得ました。 2、ワークシート関数よりユーザー定義関数の方が遅くて当然との事ですが、 なんらかの方法で、処理速度を上げられないだろうかとかんがえております。 内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)
666 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:28:34 ] >なんらかの方法で、処理速度を上げられないだろうかとかんがえております。 ワークシート関数を使え。 マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。
667 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:39:03 ] >マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。 遅いんじゃない? ワークシート関数をVBA上で使うと速いけど。 必要なデータは配列に格納し一気に処理(セル参照を頻繁にしないこと)が最速!
668 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:13:58 ] >>667 そうだね 速度重視ならワークシート上で計算しない設定に。もちろん数式は使わない セル参照も最小限に。理想は、 シート上の必要なデータを配列に一気に格納、 結果は全て配列に格納し一気にシート上に書き込む
669 名前:631 mailto:sage [2007/08/22(水) 00:30:23 ] >>661-663 わざわざ、ソースを全部書いて頂いて、本当に申し訳ありませんでした お騒がせしました
670 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 06:36:51 ] >>665 >内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。) 実際のコード晒してみれば? 具体的には、Cells( i ,j ) がコードに頻繁に出ると遅くなります。特にLoopの中は避けるべき。 私が始めて作った物は、データ取る為に2万回、書くために30万回、頻繁にCells( i ,j ) が... おまけに Selectしまくってましたので 処理が終るまで30分以上かかってましたが、つくり直したら20秒ほどで出来た!
671 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 11:45:58 ] エクセルでバイナリエディタって作れますか?
672 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:30:58 ] もちろん作れるよ
673 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 18:03:10 ] >>672 ありがとう!
674 名前:657 mailto:sage [2007/08/22(水) 21:00:20 ] >>666 出来れば、マクロ内で処理したいと考えております。 シミュレーションファイルを作成中でして、他セルにも複雑な式が入っているので、 単純な関数なら、マクロに放り込んでしまいたいのです。 >>667 >>668 配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。 >>670 function A(b,c,d,e) b=(c+d)/2 A=b*e end こんな単純な計算を、10〜20個織り込み、かつシート上で近似値を算出する計算式を使っているので、 時間がかかります。
675 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:20:16 ] >配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。 理由になってないんじゃない? 配列を拒否するなら私は手を引くよ!
676 名前:デフォルトの名無しさん [2007/08/22(水) 21:31:34 ] すみません。どなたかご存知でしたらお教えください。 VBAでsleepに該当する命令ってなんでしょうか? WSHで、WScript.sleep(250)みたいな感じでやっているんですが、 これをVBAでやりたいです。
677 名前:デフォルトの名無しさん [2007/08/22(水) 21:44:35 ] 319 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 16:08:34 ID:aEA9W/2t ttp://kissho2.xii.jp/20/src/2yoshi2512.7z.html 目欄 344 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 18:55:20 ID:YevU/rPG >>319 はウイルス。拡張子が怪しすぐる らき☆すた 27 sakura03.bbspink.com/test/read.cgi/ascii2d/1187586266/
678 名前:デフォルトの名無しさん [2007/08/22(水) 21:56:37 ] >>676 標準モジュールに Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
679 名前:デフォルトの名無しさん [2007/08/22(水) 22:07:05 ] >>678 ありがとうございます。できました。 こんなテクあるんですね。勉強になりました。
680 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:08:37 ] >>657 オレも >>656 Timer関数
681 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:10:12 ] ↑誤爆
682 名前:デフォルトの名無しさん [2007/08/22(水) 22:39:11 ] 恐れ入ります、質問を失礼します。 Dim st4 As String Dim r1 As Range, st4 = Mid(r(1).Offset(2).Value, 5, 10) & "-" & Mid(r(1).Offset(3).Value, 2, 10) こんな感じで13-1とか2-9といったst4にしたいのですが、 -の後が空欄の時があります。 そういったときは13-のようになってしまいますが、 -の後が空欄の時は13といったように-も表示させたくないです。 こういったことは可能でしょうか?
683 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:03:57 ] 可能です - は変数ハイフンに入れる Dim ハイフン As String 3個の文字列を無条件で&で結合せず IFで条件分岐してから結合すればよい ハイフン = "-" If Mid(r(1).Offset(3).Value, 2, 10) = "" then ハイフン = "" st4 = Mid(r(1).Offset(2).Value, 5, 10) & ハイフン & Mid(r(1).Offset(3).Value, 2, 10)
684 名前:デフォルトの名無しさん [2007/08/22(水) 23:12:03 ] >>683 おお、できましたぁ!!ありがとうございます!!! これでボクの仕事がかなり減りました、感謝です♪
685 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:16:40 ] while ブロックで breakって出来ないの?
686 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:47:11 ] Exit使えよカス
687 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:53:55 ] か、かすう? この俺様に向かって!
688 名前:デフォルトの名無しさん [2007/08/23(木) 00:06:25 ] いつもお世話になります、1点質問を失礼します。無理やり上司から頼まれましたが、自分には無理難題です。 @もし○○○○の後7文字全てが半角英数字だったら、このセルの5文字目〜半角スペースに当たるまでをコピー、「α」とする 例 ○○○○0120123456 ○ ↓ α=0120123456 ○○○○の後7文字に1文字でも全角文字が入っていたら、○○○○の一つ下の行の先頭から半角スペースに当たるまでを全てコピー「α」、さらに2つ下の行の先頭から「か」という文字に当たるまでをコピー、さらに○○○○から先の文字全てを繋げ「β」とする ○○○○あい12うえおあい 0120789123 ○○ Aか ↓ α=0123789123 β=Aあい12うえおあい できればifでやりたいんですが、 Dim α As String, β As String Dim r(1) as range '○○○○の行がr(1)とします If Mid(r(1).Value, 5, 7) = 全部半角英数字 Then α=Mid(r(1).Value, 5)から" "まで Else α=r(1).Offset(1).の先頭から半角スペースに当たるまで全て β=r(1).Offset(2).の先頭から「か」に当たるまでをコピー&Mid(r(1).Value, 5, 99) End if すいません、自分ifの文に弱いものでかなり違うかもしれませんが、こんなマクロにしたいのです。宣言とかの理論は理解してます。お手数ですが、よろしくお願いします。
689 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:21:56 ] >>688 >>7 文字全てが半角英数字 これって、記号類や半角カナはどうする? とりあえず、半角・全角の判定だけでいいか? それとも、英数字に限定?
690 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:30:25 ] とりあえず、半角・全角の判定のやり方だけど、 VBAには文字列の長さを調べる関数が3つある。 Len()、LenB()、LenMbcs() の3つ。 Len()とLenMbcs()の結果が同じ→全部半角 Len()とLenMbcs()の結果が違う→全角を含む と判定できる。 ただし、LenMbcs()はVBAには実装されてなくて、自分で書かないといけない。 書き方はMSDNに紹介されてる。 office.microsoft.com/en-us/access/HA012288741033.aspx Function LenMbcs (ByVal str as String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function LenMbcs()は、半角で1、全角で2を返す関数。
691 名前:デフォルトの名無しさん [2007/08/23(木) 00:35:39 ] >>689 失礼しました。 半角数字のみの時です、全角や記号や半角カナは×です。
692 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:50:08 ] 'とりあえず、文字列strが数字かどうか判定する関数。 もっと少ない行数の書き方もあるんだが、あえてわかりやすく書いてみた。 Function IsNumberString(str As String) As Boolean Dim i As Integer Dim c As String Const Number = "0123456789" For i = 1 To Len(str) c = Mid(str, i, 1) If InStr(1, Number, c, vbBinaryCompare) > 0 Then 'c が数字だったので何もしない Else 'c が数字ではなかった IsNumberString = False Exit Function End If Next i IsNumberString = True End Function
693 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:57:23 ] 'strの中にある半角スペースを探して、 'その手前までをコピーする関数。 Function LeftEx(str As String) As String Dim i As Integer i = InStr(1, str, " ", vbBinaryCompare) LeftEx = Left(str, i - 1) End Function
694 名前:デフォルトの名無しさん [2007/08/23(木) 21:25:50 ] 今週からエクセルを使う仕事に就いて昨日マクロにはじめて触れた 初心者で申し訳ないのですが ワークシートが2〜32まであり 各ワークシートのたとえばB5に以下のように入力したいのですが ワークシート2のB5に2007/8/1 ワークシート3のB5に2007/8/2 : ワークシート32のB5に2007/8/31 For sht = 2 To 32 Worksheets(sht).Select Range("B5").Select ActiveCell.FormulaR1C1 = "8/1/2007" + (sht-2) Next sht End Sub これでは当然駄目でした。 今週末になれば自分で勉強しますが できれば明日使いたいので よろしければ教えてくださいませ何卒
695 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:03:21 ] 俺の都合に合わせて、即答しやがれ糞共!! ってわけですか まぁそういうこと言う奴でも、こういう簡単な質問は 答えたくてウズウズしてる教えたがり厨が答えてくれるだろうけどw
696 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:08:02 ] Microsoft Access VBAの質問もここでおk? Accessのスレないんだものorz
697 名前:657 mailto:sage [2007/08/23(木) 22:45:14 ] >>675 失礼しました。
698 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:45:18 ] >>696 moug に逝った方がいいんじゃね?
699 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:46:18 ] 質問させてください。 VBA使って簡単な画像処理をしたいのですが、 画像の輝度値を求める関数って無いのでしょうか? よろしくお願いします。
700 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 00:31:35 ] >>695 わざわざ質問スレに出張ってきて こんな簡単な質問答えるやつは、 教えたがり厨だ!! ってわけですか?
701 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:08:05 ] >>694 未テストだがこんな感じ Public Sub SheetLoop() Dim wksSheet As Worksheet Dim dtDate As Date Dim intOffset As Integer Dim strbuf As String dtDate = "2007/08/01" For Each wksSheet In ThisWorkbook.Worksheets strbuf = wksSheet.Name If 2 <= CInt(strbuf) And CInt(strbuf) <= 32 Then wksSheet.Cells(5.2).Value = Format$(dtDate + intOffset, "yyyy/mm/dd") intOffset = intOffset + 1 End If Next Set wksSheet = Nothing End Sub
702 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:24:03 ] >>701 の注意点 シートの名称がイマイチ意味不明なのでとりあえずcintしたが、 これがSheet1とかのパターンが出てくると間違いなくエラーになるので、 isnumericで事前に回避するか、Sheet1系統でOKの場合は "Sheet"&カウントで文字列連結してstrcompで見てやる必要がある。 今後の注意点 ・1文字変数は使わない ・Activate,Select系は使わずオブジェクト経由でアクセスすること ・A1形式は極力使わない ・上記に伴いRangeを使う場面ではCellsで展開してから使用する ・セルに入れる値が日付や文字列や数値など、フォーマットが決まっている場合は 表示形式をNumberformatなどで事前に指定してやる
703 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:32:20 ] >>702 これって2月とかエラーにならね? 普通にDateAdd使えば?
704 名前:703 mailto:sage [2007/08/24(金) 01:33:57 ] うっは流し読みしすぎた >dtDate = "2007/08/01" で8月限定にしてんのか。すまん
705 名前:デフォルトの名無しさん [2007/08/24(金) 02:46:23 ] X軸の数値 Y軸の数値 0 -1.5e-9 10 2.5e-8 20 4e-8 30 5e-7 40 6e-5 50 9e-3 のようなデータををX軸は普通、Y軸を対数にしてグラフ化しようとすると、 負の数を入力しようとしています。対数には負の数が入りませんとかエラーが 出ます。(それは当然分かります) 強行すると、この場合、X軸が0の場合を除いてグラフにしてくれます。 動作としてはそれで問題ないのですが、大量にグラフを作成しようとすると、 毎回エラーが出てうざったいのです。なんとかエラーメッセージを消去 して出なくしたいのですが、いい方法はないでしょうか。
706 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 02:53:19 ] >>705 事前に負の値を取り除く。
707 名前:705 [2007/08/24(金) 03:00:08 ] >>706 やはり、そういう感じでやるしかないのですか・・・ 今はABSで絶対値にして逃げてるのですが。
708 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 05:38:20 ] そもそも負の値をとりうるデータを対数変換するってデータ処理としてどうよ?
709 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 07:38:02 ] >>707 それはおかしいだろう。対数を取りたいってことは負値はIllegalなんでないの? 或いは全体にオフセットを足すべきだったりはしない?
710 名前:デフォルトの名無しさん [2007/08/24(金) 11:13:05 ] EXCEL VBAでフォームを使用して、ユーザーに ファイルを選択してもらう仕組みを作りたいんですが可能でしょうか? 「参照」ボタンを用意して、ユーザーがクリックすると フォルダ内のファイルが一覧表示されて、指定できるようなイメージです。
711 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:05:25 ] 出来ますよ 必要なコントロールを配置して > 「参照」ボタンを用意して、ユーザーがクリックすると > フォルダ内のファイルが一覧表示されて、指定できる をコードにすれば良いだけです
712 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:06:32 ] >>710 Dialogsオブジェクト
713 名前:710 mailto:sage [2007/08/24(金) 13:12:05 ] >>711 ,712 ありがとうございました! ちょっと調べてみます!!
714 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:40:24 ] "俺の関数"というファイルにあるテーブルをVlookupした値を加工するユーザー定義関数を、"俺の関数.xla"の標準モジュールに作成しました。 他のファイルから"俺の関数"アドインを有効にしてみましたが、利用できません。どうすればいいですか? Public Function 俺の関数(key) fjFilename = "D:\Settings\俺\Application Data\Microsoft\AddIns\俺の関数.xla" 俺の関数 = WorksheetFunction.VLookup(key, Workbooks(fjFilename).Range("テーブル"), 2, 0)+1+2+3 End Function
715 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:10:50 ] >>710 Application.GetOpenFilename
716 名前:デフォルトの名無しさん [2007/08/26(日) 09:28:40 ] sv2.st-kamomo.com/loader/dat/file17227.42952.jpg ↑ 競馬の出走馬が並んだデータなのですが これをレースごとに他のシートにコピペすることはVBAで可能でしょうか? ちなみにレース場所は毎回異なります。
717 名前:デフォルトの名無しさん [2007/08/26(日) 09:33:42 ] 可能
718 名前:デフォルトの名無しさん [2007/08/26(日) 09:34:33 ] >>717 可能だとするとどう命令すべきでしょうか?
719 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:41:35 ] >>718 「やれ!」
720 名前:デフォルトの名無しさん [2007/08/26(日) 09:47:09 ] (・c_・` )ソッカー
721 名前:716 [2007/08/26(日) 11:23:09 ] マクロではできましたが今週の競馬開催の場所が毎回変わりますから そこができないですね・・・
722 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:50:17 ] 出来るけど、何か? 君が出来ないなら努力不足
723 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:54:41 ] >これをレースごとに他のシートにコピペすることはVBAで可能でしょうか? ↓ これをレースごとに他のシートにコピペすることはVBAで可能ですが、 どうやったらいいでしょうか?
724 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:09:18 ] マクロまでできたらそのマクロをいじれ どういじればいいかは学べ
725 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:20:18 ] 手でコピペは出来るんでしょ。 レースごとに分割する基準は何? それをマクロに書けばいいだけ。
726 名前:デフォルトの名無しさん [2007/08/26(日) 12:23:37 ] >レースごとに分割する基準 場所+レース番号 例) 札幌 9 または 馬番1〜大外枠 ・・・
727 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:45:05 ] まずシートを作って Sheets.Add ActiveSheet.Name = 場所+レース番号 例) 札幌 9 あとは判るだろ
728 名前:デフォルトの名無しさん [2007/08/26(日) 12:53:39 ] >>727 いやそれは分かるんだけどさ 競馬って毎週「札幌」があるわけじゃないのよ 10箇所以上の場所から2つ3つあるわけで・・・
729 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:04:45 ] 変数 ヘルプ これ以上書くことないな!
730 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:25:56 ] VBAマスターするコツってありますか? 反復演習・努力ですかね?
731 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:29:24 ] そもそも何を持ってマスターしたと言えるのか 誰もわからない(あるいは人によってマスターの基準が大きく異なる)ので、 誰もマスターしたなんて言わない。
732 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:53:26 ] 初心者用の1冊をマスターしても実用性はないよな
733 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 16:24:13 ] 最初は初心者用の入門書のとおりに実際に動かしてみる。 (一週間程度) 次は、簡単なオリジナルのコードを沢山作る。その際 他人に質問しないで自力で検索したりヘルプを見たりする。←最も重要 同時にVBA掲示板を閲覧し自分のレベルにあった質問で勉強する。 未だ、自分で質問はしない方が良いと思う。 (一ヶ月程度〜数年以上) そのうち、ヘルプを見れば理解できるようになる。このレベルになれば 他人に質問しても相手に失礼じゃないと思う。 スクール行ったって資格は取れるかもしれないが実力がつくとは限らない。 やる気があれば独学で十分だとおもう。
734 名前:デフォルトの名無しさん [2007/08/26(日) 16:46:44 ] 俺の頭脳じゃ100年経ってもできないっぽい 実現させるには達人に出会ってお金を出して作ってもらう他ないな・・・
735 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:08:50 ] >>733 それ以前に、一般機能をひと通り理解してないと無理じゃない?
736 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:14:25 ] 何を馬鹿なことを… 初心者用の本は斜め読み。 必要そうなとこだけを重点的に。 使いたいときだけさっと調べ(本屋、GOOOOOOOGLE) 出来そうじゃなかったらあきらめる。(どうしてもVBAでMSNメッセンジャー作りたいんです >< )
737 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:26:56 ] VBA本は初心者本ばかりか上級者向けとされている本ですら、 変数の命名規則が不明(どころか明示すらしない)だとか、見やすいコーディングを 考えないとか、速度に触れていないとか、後始末を省略してるとか、コレクションとか クラスの使用法が全く記載されてないとか、そんなのばっかだから、その手の本の まんまのコーディングはあんまり業務としての実用性はない Excelレガシー問題ってこういう本の氾濫が大きいと思う 結局、リファレンスだけあればいいってことになる
738 名前:デフォルトの名無しさん [2007/08/26(日) 18:35:13 ] 初心者はプログラム自体にとっつきにくさと わかりづらさから飽きがきやすいので かなり偏った内容でも、とにかく楽しく、とにかく簡単で 実際にプログラミングしてみて動かせるような本が好ましい。 サンプルのついた本は腐るほどあるけど 一生使いもしないような題材だと萎えるから そこのとこも吟味してほしい。
739 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:40:28 ] だからこそ>>736 なんだが。 それにね、途中で興味がなくなったらそれはそれでいいんだよ。 VBAは何かの手段であって目的じゃないはず。 C++やc#でもやればいいんだよ。
740 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:57:33 ] >>735 そうですね。 一般機能のIF関数やVLOOKUPを使いこなせない人は苦労しそうだね?
741 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:36:12 ] 自分に降りかかる/手が出せる範囲の仕事で滞りなく使えること。 VB「A」なら、↑でマスターしたって言っていいでしょ。 ということは「自分の仕事でVBA使って自動化/効率化したいこと」が 最高の教材になるんじゃないか? 職業プログラマの人は知らんけど。 もしそうなら別の言語マスターした方がよさそうだし。
742 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:30 ] VBAは簡単なのがいいね C言語に何度も挫折した俺でも使える VBにステップアップしようとしたけど.NET何たらになってて よくわからなくて結局VBAに戻ってきた
743 名前:デフォルトの名無しさん [2007/08/26(日) 22:12:14 ] With Worksheets(1).Range("a1:a500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues) Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With Loopんところでオブジェクトが無いとかって エラーになるんですけどなんでですか? 途中で違うFindするとcの方のFindが無効になっちゃうのでしょうか?
744 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:13:40 ] ちゃんと例外処理しろよ
745 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:22:45 ] Loop While Not c Is Nothing And c.Address <> firstAddress 両方評価してからアンドの評価するからアウト
746 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 06:58:40 ] きたねーコードだな
747 名前:743 [2007/08/27(月) 09:52:45 ] >743ですが、Findのヘルプに載っている 使用例に下記一行を加えただけです。 Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues) この一行が無ければ、動きます。 この一行を追記しただけでエラーになる理由が知りたいです。
748 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 12:55:18 ] なんで解らないのかが知りたいです。
749 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:11:31 ] >>747 むしろヘルプをコピっただけで エラーになる俺に動く方法を教えてけれ >c.Value = 5 をコメントアウトしないと >Loop While Not c Is Nothing And c.Address <> firstAddress のところで cがNothingだから c.Addrssがエラーになる Loopのなかに If c Is Nothing Then Exit Do とか入れれば問題ないけど これってヘルプが間違ってんの? それとも条件しだいでは問題ないの?
750 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:34:19 ] >>743 > Loopんところでオブジェクトが無いとかって > エラーになるんですけどなんでですか? エラーメッセージを正確に書き写せばいいのに。 簡単な英語もわからないと不便だね。
751 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:21:56 ] エラーって日本語だろ?
752 名前:デフォルトの名無しさん [2007/08/27(月) 20:16:40 ] 屁理屈ばっかごねてるヴァカ
753 名前:デフォルトの名無しさん [2007/08/28(火) 20:15:47 ] Excelのオートフィルタ機能を関数で表したいと思うのですが可能でしょうか 教えて下さい
754 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:05:01 ] ググレカス
755 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:05:53 ] >>753 > 可能でしょうか お答えします、可能です やり方は自分で調べてください
756 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 09:31:53 ] これを日本語訳に直してもらえないでしょうか? Sub TTT() Dim iR As Integer, iT As Integer, iK As Integer, iM As Integer For iR = 1 To Cells(1, "A").SpecialCells(xlLastCell).Row Select Case Cells(iR, "A") Case "高橋" iT = iT + 1 Sheets("高橋").Cells(iT, "A") = Cells(iR, "A") Sheets("高橋").Cells(iT, "B") = Cells(iR, "B") Case "亀井" iK = iK + 1 Sheets("亀井").Cells(iK, "A") = Cells(iR, "A") Sheets("亀井").Cells(iK, "B") = Cells(iR, "B") Case "道重" iM = iM + 1 Sheets("道重").Cells(iM, "A") = Cells(iR, "A") Sheets("道重").Cells(iM, "B") = Cells(iR, "B") End Select Next End Sub
757 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 09:38:03 ] 潜水艦TTT() 薄暗さ、不-、整数、それ、整数、整数としてのiK、不-、整数 セル(1、「A」).SpecialCells(xlLastCell)の.Rowの選んだケースセルへの不- =1、(不-、「A」) ケース"高橋" それ=それ、+1 シート("高橋").Cells、(それ、「A」) =セル(不-、「A」) シート("高橋").Cells、(それ、「B」) =セル、(不-、「B」) ケース"亀井" iK iK=+1 シート("亀井").Cells(iK、「A」)=セル(不-、「A」) シート("亀井").Cells(iK、「B」)=セル、(不-、「B」) ケース"道重" 不-=不-+1 シート("道重").Cells、(不-、「A」) =セル(不-、「A」) シート("道重").Cells、(不-、「B」) =セル、(不-、「B」)終わりは次の終わ りの潜水艦を選択します。
758 名前:デフォルトの名無しさん [2007/08/29(水) 10:27:52 ] 日本語になってねー
759 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 10:43:53 ] 逆に言えば元の756だって英語か何かになっていたかというと、そうではないということ。 それはVisual Basicという言語なのだから。
760 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 10:53:21 ] それ以前に756動作しないし? 俺も釣られた?
761 名前:デフォルトの名無しさん [2007/08/29(水) 12:42:40 ] >>760 元々別のシートにあるデータをコピペする動作だからね マジで>>756 どう構造か教えて欲しい TTT というのは任意のタイトルだよね Dim iR As Integer は整数型の変数の宣言だよね その後のTo Cells とか SpecialCells(xlLastCell).Row とかが分からん
762 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 12:47:13 ] 元のワークシートから名前別のワークシートにA列とB列の値を転記してるだけやん
763 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 13:54:32 ] >>756 Cells プロパティの記述が変体的?
764 名前:デフォルトの名無しさん [2007/08/29(水) 14:09:33 ] ダメだ全然ワカンネ VBAの初心者向きの本も理解できねぇ('A`)
765 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 14:33:56 ] VBAでプログラムを勉強しようとするのは無謀だな VBの知識があってマクロ記録のソースから覚えれば早い
766 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 14:34:40 ] 初心者向きなのに解かりづらい本が多いからね。 ↓ こっちのサイトが私にはわかりやすい。 ttp://www6.plala.or.jp/MilkHouse/index.html
767 名前:デフォルトの名無しさん [2007/08/29(水) 14:50:44 ] VBAって今後どうするの? フォーマットが公開されていないファイルは、 政府も使わないと言っている。2007でXMLも標準になったが、マクロが 仕込んであるのでは、公的には使えなくなるんじゃないのかな?
768 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 16:13:18 ] > 政府も使わないと言っている。 騙されてる奴が多いが「使わない」とは言ってない 国のやるポーズには、必ず逃げ道仕込んでおくものさw
769 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:31:56 ] 通常VBA含んだExcelを他に配ったりしないんじゃないの? 自分の仕事を効率化するために使ってる人が大部分じゃない? 私は他人の作ったロックしたマクロを使ったことないし使うつもりも無い。
770 名前:デフォルトの名無しさん [2007/08/29(水) 21:34:34 ] 恐れ入ります、質問をお願いします。 会社でエクセルのマクロを使用していますが、困っています。 現状、共用ドライブにエクセルファイルを格納し、5人で使用しています。 使用する際は、それぞれ一人一人にパソコンが支給されており、支給された個人のパソコンから共用ドライブにアクセスし、入力 しています。 こういった状況で、マクロで入力する際、人の名前(入力者の名前)を自動的に取得、エクセル表の任意の場所に貼り付けすることはできないものでしょうか? winXP エクセル2000です。
771 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:57:06 ] 出来るんじゃないかな?ユーザー名を取得し履歴のように日時と一緒に書き込んだり 入力したセルのコメントに日時とユーザー名を記録する事も。
772 名前:デフォルトの名無しさん [2007/08/29(水) 23:05:23 ] EXCELでVBAでDLLを使う場合、 そのDLLをxlsファイル内に埋め込む方法はありませんか?
773 名前:デフォルトの名無しさん [2007/08/29(水) 23:16:04 ] ActiveSheet.OLEObjects.Add( Filename:= "C:\Documents and Settings\Administrator\デスクトップ\xxx.dll", Link:=False, DisplayAsIcon:=False).Select これはxlsファイル内にdllを保存するということでいい? このファイルを外部に保存するにはどうしたら・・・
774 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:34:31 ] >>770 Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
775 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:37:36 ] >>772 ない。DLLはDLL。 素直にDeclare宣言して関数使いましょう。
776 名前:デフォルトの名無しさん [2007/08/29(水) 23:44:06 ] >>775 宣言など使い方は通常通りでいいんだけど 配布ファイルが複数になるのが駄目なんだ xls内にdllを保存し、 起動時にdllをカレントフォルダに保存。 dllを使った処理を行い、 終了時にdllを削除。 っていう流れがやりたい。
777 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:50:02 ] >>776 > xls内にdllを保存し、 これの意味が分からん。保存ってなんだ? LoadLibraryしてFreeLibraryすりゃいいんじゃね? そういう話じゃない?
778 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:51:09 ] ついでだ。 #If Win32 Then Private Declare Function LoadLibraryEx Lib "Kernel32" Alias "LoadLibraryExA" _ (ByVal lpLibFileName As String, _ ByVal hFile As Long, _ ByVal dwFlags As Long) As Integer Private Declare Sub FreeLibrary Lib "Kernel32" (ByVal hLibModule As Integer) #Else Private Declare Function LoadLibrary Lib "kernel" (ByVal f$) As Integer Private Declare Sub FreeLibrary Lib "Kernel" (ByVal h As Integer) #End If
779 名前:デフォルトの名無しさん [2007/08/29(水) 23:57:50 ] >>777 A.xlsはマクロでB.dllを使用しています。 A.xlsを利用するためには同(又はパスの通った)フォルダにB.dllを置く必要があります。 ですが、 A.xlsの配布時にB.dllを同時に配布すればいいんですが、それは運用的に無理です。 また、ファイルの移動(複写)をする場合には、A.xlsのみの移動(複写)でシステムが動くようにする必要があります。 なので、 A.xls内にB.dllを埋め込み、実行時それをファイルとして抽出保存し、利用する必要があります。
780 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:03:16 ] いや、DLLはDLLなんだからファイル自体別。 埋め込むってのがよく分からんが、 DLLの配布がNGなら DLLの関数をVBAで組めばいいって話じゃ済まないの? 要するに、DLLは無くして全部VBAで書けって話。 ダメなん?
781 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:07:13 ] >A.xls内にB.dllを埋め込み テキストとしてシートに書くって事か?
782 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:08:55 ] とりあえず目的をはっきりさせてくれんと分からん。 DLLの配布が目的なのか、マクロの動作が目的なのか、それともその他、どれだ?
783 名前:デフォルトの名無しさん [2007/08/30(木) 00:15:45 ] VBAで処理書くのは最後の手段。出来れば避けたい DLLの関数を使いたい。 メールの添付ファイルみたいにxls中にdllを入れて、 マクロでそれを、dllファイルに書き出して利用したい。 メールはbase64だっけ マクロの動作が目的
784 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:18:47 ] オブジェクトの挿入でファイルを添付できるんじゃね?
785 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:20:24 ] そういうことか。 でもExcelで出来るのかは怪しいな。
786 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:22:00 ] ぶ オブジェクトの挿入で出来たぞ ちょっと目鱗
787 名前:デフォルトの名無しさん [2007/08/30(木) 00:23:02 ] >>784 添付はできてるんだけど、マクロでそれをファイルに保存ができない
788 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:45:33 ] 実を言うと、俺も772と同じことを以前やろうとしたんだが、無理だった。 DLLを.xlsファイルに埋め込むことは出来るし、動的にDLL作成することもできるんだけど、 その中から関数を呼び出す方法が無くて。 Declare Function〜は、マクロ実行時にDLLが無いとエラーになるので使えない。 Cなら動的にLoadLibrary()→AddressOf()って方法もあるんだが、VBAの場合、 AdressOf()はコールバックのアドレスにしか使えなくて。 .xlsに埋め込んだ方法だけど、標準モジュールの中に何かの変数(配列)として入れておいた。 それで、実行時にファイルとして書き出す。dllが小さかったから出来た方法だけどね。
789 名前:デフォルトの名無しさん [2007/08/30(木) 00:52:07 ] 標準モジュールの中に何かの変数(配列)として入れておいた。 それで、実行時にファイルとして書き出す。 ここ詳しく教えて @バイナリデータとして入れておいて Aバイナリ書き出しでdll作成?? @がよく分からん
790 名前:デフォルトの名無しさん [2007/08/30(木) 00:52:55 ] 今日はもう落ちるんで、朝確認します よろしくおねがいします
791 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 02:39:36 ] hisazin-up.dyndns.org/up/src/42670.xls このエクセルファイルの中にtest()ってマクロがあるから、実行してくれ。 デスクトップにasakusa.jpgっていう画像ファイルができる。 仕組みはソース読め。
792 名前:デフォルトの名無しさん [2007/08/30(木) 07:50:46 ] >>791 落ちてるorz 長持ちするとこに再うpおねがいします
793 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 09:01:23 ] >>788 そういうときにはCallWindowProcとかEnumWindowsとかを使えばいいんだよ。
794 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 09:21:12 ] >>791 はウィルス? ファイルは存在してるがブロックされる
795 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 12:01:12 ] >>792 普通に保存できたよ
796 名前:デフォルトの名無しさん [2007/08/30(木) 17:32:03 ] VBAの変数って多次元の連想配列って無理? PHP的に書くと $hensu['mojiretsu1'][0] $hensu['mojiretsu2'][1] みたいな
797 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 17:44:55 ] collectionにcollectionを格納すれば可能 ちょっと辛いけど
798 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 17:45:13 ] PHPは知らんからVBA的に書いてくれ
799 名前:デフォルトの名無しさん [2007/08/30(木) 17:57:27 ] >>797 うええめんどくせえ DBのSELECT用の関数とかみんなどうやってんだ $serectData[フィールド名][0] みたいに使えないんでしょ? >>798 hensu("mojiretsu", 1) みたいな感じかなあ
800 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 18:41:36 ] const mojiretsu=0 as integer でいいじゃん
801 名前:デフォルトの名無しさん [2007/08/30(木) 19:31:39 ] >>791 これはとりあえず出来ました。 ただ、 340kbのDLLが.basにすると700kbくらいになって それを300kb弱のxlsに入れて保存すると1300kbになって それを他のシートの値を変更して、上書き保存すると2700kbになったorz DLLをxlsにOLEオブジェクトで追加して ActiveSheet.Shapes("Object 1").Copy ってやるとクリップボードにDLL保存出来て、 手作業でどこかのフォルダに貼り付けは出来たんだけど、 それをマクロでやる方法が見つからなかった。 どなかた教えてください。
802 名前:デフォルトの名無しさん [2007/08/30(木) 20:07:43 ] マクロで、オートフィルターの選択を、「すべて」にするようにしたいです。 Selection.AutoFilter Field:=5 でいいのでしょうか?最後の数字の意味がわかりません。
803 名前:デフォルトの名無しさん [2007/08/30(木) 20:50:50 ] >>799 WSHのDictionaryObject使うと似たようなことはできると思ったよ ただ凄く遅かったのと、Vbaからは使ったこと無いので自分で調べてみてくれ
804 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:05:39 ] >>802 F1でヘルプな
805 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:20:58 ] Dictionaryは使いにくいので書き換えを伴うときはVariant配列にしてしまう 参照用だけならCollectionで決まりなんだけどねぇ
806 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:50:33 ] もしご存知でしたら教えてください。 Findメソッドに関してなのですが、検索対象に"/"が文字列間に 含まれていると検出してくれません。 例:2007/8/30 など "/"単体だと検出してくれるのですが、、 これはこのメソッドの使用なのでしょうか? ぐぐってみたのですが参考になるようなものをみつけれなかったので。。
807 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:59:11 ] >2007/8/30 文字列じゃないだろ?検出しなくて当然!
808 名前:デフォルトの名無しさん [2007/08/30(木) 23:09:34 ] VBAでクリップボードにコピーされてるDLLをファイルに落とす方法はありませんか?
809 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:17:42 ] >>807 ありがとうございます。 テキストボックスに入力された日付をString型の変数に格納したのですが 文字列にはならないのでしょうか? 2007:OK /:OK 2007/:文字列型じゃない、、 一度SplitしてからFindすることにします。。
810 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:25:27 ] ___ ./ \ .| ^ ^ | あまり私をやらせない方がいい | .>ノ(、_, )ヽ、.| __! ! -=ニ=- ノ!___ /´ ̄ ̄ .|\`ニニ´/ `ヽ ,.、-  ̄/ | l  ̄ / | |` ┬-、 / ヽ. / ト-` 、ノ- | l l ヽ. / ∨ l |! | `> | i / |`二^> l. | | <__,| | _| |.|-< \ i / ,イ____!/ \ .| {.| ` - 、 ,.---ァ^! | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l __{ ___|└―ー/  ̄´ |ヽ |___ノ____________| }/ -= ヽ__ - 'ヽ -‐ ,r'゙ l | __f゙// ̄ ̄ _ -' |_____ ,. -  ̄ \____| | | -  ̄ / | _ | ̄ ̄ ̄ ̄ / \  ̄| ___`\ __ / _l - ̄ l___ / , / ヽi___.|  ̄ ̄ ̄ | _ 二 =〒  ̄ } ̄ / l | ! ̄ ̄| _______l -ヾ ̄ l/ l| |___|
811 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:44:08 ] >>808 またおまえか
812 名前:デフォルトの名無しさん [2007/08/31(金) 08:08:37 ] >>811 方法おしえて
813 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 08:24:16 ] >>805 Collectionでも書き換え出来るけどね
814 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:23:41 ] >>809 エクセルでは日付は思うように出来ないことも有る。有る意味仕様 一例を挙げると Sub Cstrのテスト() Cells(1, 1) = Date Cells(2, 1) = CStr(Cells(1, 1)) End Sub トンでもない結果が出ると思う。
815 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:18:52 ] >>814 (809じゃないけど面白そうなんで試してみた) Cells(1,1) → 2007/8/31 Cells(2,1) → 1931/7/8 ビックリ仕様ですね
816 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 21:55:56 ] > エクセルでは日付は思うように出来ないことも有る。有る意味仕様 ちゃんと理解してないから思うようにいかないだけ
817 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 06:59:50 ] >>814 CStrのヘルプみると引数に日付型は有効だけど Cells(2, 1)の表示形式も日付に変わってる? これは仕様というよりバグじゃ?
818 名前:デフォルトの名無しさん [2007/09/01(土) 08:32:29 ] >>814 手元にExcel無いから自信が無いが、確か "'"+CStr(Cells(1,1)) って書けば正常表示された記憶がある 頭が数値の文字列入れるとExcelって数字で判断しちゃうんだよね、バグというより仕様でもいいんじゃね >>809 も頭にアポストロフィを足してやると正常になるかもよ
819 名前:デフォルトの名無しさん [2007/09/01(土) 08:46:18 ] >>818 訂正 2007/8/31→1931/7/8 って単にアメリカ仕様の mm/dd/yy の形で変換されてるだけじゃん こりゃバグだね
820 名前:デフォルトの名無しさん [2007/09/01(土) 09:25:30 ] VBAで別ファイルにあるワークシートへの参照を そのファイルを開かずに取得するにはどうしたらよいでしょうか? ワークシート上ではたとえば「='C:\ABC\[DEF.xls]Sheet1'!$A$1」などと指定すれば 開いていないファイルのセルを参照できますが、 これと同じような方法で、たとえば Dim hoge As Worksheet Set hoge = ******** のような記述で、開いていないファイルのワークシートを参照するには どうすればいいのでしょうか? よろしくお願いします。
821 名前:デフォルトの名無しさん [2007/09/01(土) 12:32:56 ] 試せばいいじゃん
822 名前:820 [2007/09/01(土) 13:09:10 ] >>821 試す、って何をどう試すのですか?? まさか set hoge = worksheets("C:\ABC\[DEF.xls]Sheet1") とかをやれってことですか? エラーに決まってますが。
823 名前:デフォルトの名無しさん [2007/09/01(土) 13:16:54 ] 横着すんな 発想としてはbookのオブジェクトつくって、そっからシートオブジェクトさらってくるだろ 出来るかはしらないけど
824 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:14:30 ] Executeexcel4macroでってのが定番 ただし参照する量が多いと遅くて使い物にならないので、 結局一回開いてメモリに読みこまないとダメという
825 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:30:46 ] ブックのあるディレクトリに、そのブックのアクティブなシート上のデータを 例えばファイル名sage.txtとしてANSIのtxt形式で保存するVBAのコード教えてください
826 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:35:04 ] ここはクレクレスレじゃないです(><
827 名前:デフォルトの名無しさん [2007/09/01(土) 19:50:19 ] >>825 FSOでググッてみ
828 名前:デフォルトの名無しさん [2007/09/01(土) 20:03:02 ] >>711 こういうレスって無価値だな
829 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 20:36:55 ] >>823 当然できる、けど扱いが難しい 良くないコードだけどこんな感じ Public Sub MyTest() Dim wbkTarget As Workbook Set wbkTarget = OpenBook MsgBox "シート1の名前は" & wbkTarget.Worksheets(1).Name & "です", vbOKOnly, "Result" wbkTarget.Close False '※ここでブックの実体を閉じないとゴーストプロセスが残ってしまう Set wbkTarget = Nothing End Sub Private Function OpenBook(Optional ByVal iSheetIndex As Integer = 1) As Workbook Dim xlApp As Excel.Application Dim wbkTarget As Workbook Dim wksSheet As Worksheet Dim strPath As String Set xlApp = New Excel.Application strPath = xlApp.GetOpenFilename("Microsoft Excelブック,*.xls") Set wbkTarget = xlApp.Workbooks.Open(strPath) Set wksSheet = wbkTarget.Worksheets(1) Set OpenBook = wbkTarget Set wbkTarget = Nothing '※インスタンスは解放されるが実体のブックは開きっぱなし Set xlApp = Nothing End Function
830 名前:829 mailto:sage [2007/09/01(土) 21:10:43 ] 俺は一体何を示したかったんだ・・・ どうも疲れてるようだ Private Function OpenBook(Optional ByVal iSheetIndex As Integer = 1) As Workbook Dim xlApp As Excel.Application Dim wbkTarget As Workbook Dim wksSheet As Worksheet Dim strPath As String Set xlApp = New Excel.Application strPath = xlApp.GetOpenFilename("Microsoft Excelブック,*.xls") Set wbkTarget = xlApp.Workbooks.Open(strPath) Set wksSheet = wbkTarget.Worksheets(iSheetIndex) wksSheet.Name="ほげ" Set OpenBook = wbkTarget set wksSheet = Nothing Set wbkTarget = Nothing '※インスタンスは解放されるが実体のブックは開きっぱなし Set xlApp = Nothing End Function
831 名前:デフォルトの名無しさん [2007/09/01(土) 21:33:05 ] 丁寧にコードまで書いてお前優しい奴だな 俺はすぐ噛み付く>>820 みたいなの為にそこまでは出来ない
832 名前:デフォルトの名無しさん [2007/09/02(日) 07:28:22 ] ActiveSheet.ChartObjects(3).Chart.Export "hoge.gif" のようなグラフのExportで 「400」とだけ書かれたエラーダイアログが出るんだが・・・何なんだこれはorz ExportをActivateにしても変わらないし・・・
833 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 09:45:41 ] チラシは日記の裏にでも
834 名前:デフォルトの名無しさん [2007/09/02(日) 09:50:02 ] EXCEL2007です。 列を挿入すると、挿入列の書式が、挿入位置の左の列と同じになりますが、 これを挿入位置の右の列の書式になるように挿入するには、 どのように指定すれば良いのでしょうか。 よろしくお願いします。
835 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 09:53:46 ] それはスレ違いだな 手動でできるならそれをマクロ記録
836 名前:デフォルトの名無しさん [2007/09/02(日) 17:36:31 ] 7×7のマスに0〜48の数字をランダムに表示 させることはできますか? D4は0という条件なのですが。 お願いします。
837 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:54:59 ] >7×7のマスに0〜48の数字をランダムに表示 と >D4は0という条件なのですが。 が矛盾している罠。 A1-G7からD4を除いたセルに、1-48を割り振ればいいのかな? だとしたら、できる。
838 名前:デフォルトの名無しさん [2007/09/02(日) 18:00:09 ] >>837 お願いします。
839 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:10:56 ] 主語と目的語が無いのはゆとりのデフォだよな
840 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:15:15 ] ほら Dim s(1 To 48) As Integer Dim a As Integer For i = 1 To 7 For m = 1 To 7 If Not (m = 4 And i = 4) Then Do a = Int(Rnd * 48 + 1) Loop Until (s(a) = 0) Cells(i, m) = a s(a) = 1 End If Next Next
841 名前:デフォルトの名無しさん [2007/09/02(日) 18:19:34 ] >>840 さん。ありがとうございます。 これで、注意配分の練習したいと思います。
842 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:23:49 ] ふむ、>837はありがたくないらしい。
843 名前:デフォルトの名無しさん [2007/09/02(日) 18:32:04 ] >>837 と>>840 には感謝してます。 こんな俺のために・・。 >For i = 1 To 7 プロシージャの外では無効です。 とエラーが出ました。 どのように書き換えればよいのでしょうか?
844 名前:デフォルトの名無しさん [2007/09/02(日) 18:33:47 ] あ、自己解決しました。 End Subが抜けてた・・。 失礼しました。
845 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:47:03 ] >>844 スレ違いだけど 車掌になるの?
846 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:57:47 ] 利用するだけのやつが多い中、ちゃんと報告するだけ偉い
847 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:42:13 ] まるで脳トレ……つーか、頭スキャンみたいだな。
848 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:32:48 ] >>845 車掌ってそういう特訓するんだ。知らなかった。
849 名前:デフォルトの名無しさん [2007/09/02(日) 23:38:38 ] VBAの入門書は一通り読んだ者です。 Sub Macro1() Dim name(10) As Variant name(0) = Range("A2").Value End Sub のコードが、3行目でエラーになってしまう理由がわかりません。 「修正候補: As」と表示されます。 3行目を Set name(0) = Range("A2").Value にすると、エラーでなくなるようです。 Setって、オブジェクト型のデータの格納に使うと読んだので、 この理由もよくわかりません。 よろしくお願いします。
850 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:45:15 ] 名前が悪い
851 名前:デフォルトの名無しさん [2007/09/02(日) 23:57:45 ] nameって変数名はよくない。 試しにA(10)とかB(10)でやってみなよ。うまくいくから。 nameとかtimeみたいに関数の名前とかプロパティであるような 奴は変数名にしないほうがいい。
852 名前:849 mailto:sage [2007/09/03(月) 00:02:46 ] >>850 >>851 変数名を変えたら解決しました。 どうもありがとうございます。
853 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 13:36:09 ] nameが判りやすいから使ったんでしょ? ヤバイ名前にはMyをつけてMyNaneのようにすれば問題ない。
854 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:01:09 ] my付けるのって「できる大辞典」ユーザーの特徴なんだっけ? MSの推奨は型名(とスコープ)のプレフィックス付けで、Variant型なら Dim vntName(10) As Variant となるわけで、こういった型名(とスコープ)のプレフィックス付けが VBA(VB言語)以外も含めてコーディング規則では一番一般的なんだが
855 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:13:25 ] キモチワルイ
856 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:45:06 ] 少なくとも一番ではないと思う。 ハンガリアン記法 [part1] pc11.2ch.net/test/read.cgi/tech/1187669648/l50 コーディング規約 第3条 pc11.2ch.net/test/read.cgi/tech/1170599322/l50
857 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 15:05:13 ] そうでもないか
858 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:54:43 ] まあ命名法は数あれど日本語変数と一文字変数だけは認めたくない
859 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:22:26 ] Forループ用にiとかjとか使うんだけど。
860 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:33:41 ] 整数主にカウント用にijk... 座標等にxyあたりは別に普通だろう。 何かしら1文字が予約されてる言語ならもっともだが。
861 名前:デフォルトの名無しさん [2007/09/03(月) 22:42:23 ] ここに書き込んでいいのか分からないのですが、VBAを使っているのでここに質問させてもらいます。 Levenberg-Marquardt algorithm を使って関数をFittingしたいのですが、英語で書いてあるためか、よく分かりません。 ソースはttp://www.alglib.net/optimization/levenbergmarquardt.phpにあるんですが…。 以下の説明があるんですが、よく分かりません。誰か使い方を教えてください。お願いします。m(_ _)m
862 名前:デフォルトの名無しさん [2007/09/03(月) 22:43:49 ] 'This routines must be defined by the programmer ' Sub FuncVecJac(ByRef X() As Double, _ ' ByRef FVec() As Double, _ ' ByRef FJac() As Double, _ ' ByRef IFlag As Long) 'Routines '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'The subroutine minimizes the sum of squares of M nonlinear finctions of 'N arguments with Levenberg-Marquardt algorithm using Jacobian and 'information about function values. ' 'Programmer should redefine FuncVecJac subroutine which takes array X '(argument) whose index ranges from 1 to N as an input and if variable 'IFlag is equal to: ' * 1, returns vector of function values in array FVec (in elements from ' 1 to M), not changing FJac. ' * 2, returns Jacobian in array FJac (in elements [1..M,1..N]), not ' changing FVec. 'The subroutine can change the IFlag parameter by setting it into a negative 'number. It will terminate program. ' 'Programmer can also redefine LevenbergMarquardtNewIteration subroutine 'which is called on each new step. Current point X is passed into the 'subroutine. It is reasonable to redefine the subroutine for better 'debugging, for example, to visualize the solution process. ' 'The AdditionalLevenbergMarquardtStoppingCriterion could be redefined to 'modify stopping conditions.
863 名前:デフォルトの名無しさん [2007/09/03(月) 22:44:43 ] 'Input parameters: ' N ・ number of unknowns, N>0. ' M ・ number of summable functions, M>=N. ' X ・ initial solution approximation. ' Array whose index ranges from 1 to N. ' EpsG ・ stopping criterion. Iterations are stopped, if cosine of ' the angle between vector of function values and each of ' the Jacobian columns if less or equal EpsG by absolute ' value. In fact this value defines stopping condition which ' is based on the function gradient smallness. ' EpsF ・ stopping criterion. Iterations are stopped, if relative ' decreasing of sum of function values squares (real and ' predicted on the base of extrapolation) is less or equal ' EpsF. ' EpsX ・ stopping criterion. Iterations are stopped, if relative ' change of solution is less or equal EpsX. ' MaxIts ・ stopping criterion. Iterations are stopped, if their ' number exceeds MaxIts.
864 名前:デフォルトの名無しさん [2007/09/03(月) 22:46:24 ] Output parameters: ' X ・ solution ' Array whose index ranges from 1 to N. ' Info ・ a reason of a program completion: ' * -1 wrong parameters were specified, ' * 0 interrupted by user, ' * 1 relative decrease of sum of function values ' squares (real and predicted on the base of ' extrapolation) is less or equal EpsF. ' * 2 relative change of solution is less or equal ' EpsX. ' * 3 conditions (1) and (2) are fulfilled. ' * 4 cosine of the angle between vector of function ' values and each of the Jacobian columns is less ' or equal EpsG by absolute value. ' * 5 number of iterations exceeds MaxIts. ' * 6 EpsF is too small. ' It is impossible to get a better result. ' * 7 EpsX is too small. ' It is impossible to get a better result. ' * 8 EpsG is too small. Vector of functions is ' orthogonal to Jacobian columns with near-machine ' precision. 'argonne national laboratory. minpack project. march 1980. 'burton s. garbow, kenneth e. hillstrom, jorge j. more ' 'Contributors: ' * Sergey Bochkanov (ALGLIB project). Translation from FORTRAN to ' pseudocode.
865 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 02:27:11 ] 1文字変数主義者は変数の型とかに気を使わないのが定説 Cなんかやらせたらキャスト地獄で気が狂うだろな
866 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:59:14 ] マクロ初心者なので教えて下さい。 変数Aを10とするマクロXと変数Aを20とするマクロYがあるとして、 それぞれの変数を生かした上でマクロZを共通して使用するように したいのです。 それぞれでマクロを全文書けば良いだけの話かもしれませんが、 共用できる部分を共用することで容量を減らしたいので… なお、Application.RunでマクロZを呼び出したら、変数が引き継がれず エラーになってしまいました。 うまいやり方を教えて下さい。
867 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:00:33 ] ここは初心者育成スレじゃない 最低限のことは覚えてから来てください
868 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:33:57 ] 1に >スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと とも書いてありますが。
869 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:43:32 ] >>866 何のためにSubやFunctionには引数を追加できると思っている?
870 名前:デフォルトの名無しさん [2007/09/05(水) 00:07:56 ] それはVBAのスキルであって プログラミングのスキルではないだろ
871 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 07:52:48 ] globalにpublic宣言すれば参照できたっけ? X.A Y.Aで
872 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 08:28:05 ] >>868 で?
873 名前:デフォルトの名無しさん [2007/09/06(木) 05:03:58 ] VBAって馬鹿にしてたけど 遅ささえ気にならなきゃ、何でもできるんだな COM使いこなせればの話だけど
874 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 08:30:32 ] COM無しでもなんでも出来るよ VBSだとCOM有っての物種だけど VBAはWin32APIが使えるから、それを使いこなせればCOMなんて不要 ぶっちゃけCOMを使うのではなく、作れる側の言語と同等の仕様なんだから
875 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:25:00 ] いや、Win32APIがあっても、COMはCOMで便利だと思うぞ。 両方で機能が重複しているわけでもないし、 時と場合によって使い分けるものだろ。
876 名前:デフォルトの名無しさん [2007/09/06(木) 14:34:50 ] このプログラムを日本語訳してくれ!! ex23.2ch.net/test/read.cgi/morningcoffee/1189055210/
877 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:42:03 ] >>876 >>756
878 名前:デフォルトの名無しさん [2007/09/06(木) 18:39:09 ] 初心者な質問ですが、フォームからシートのサブルーチンを呼び出すのはどうしたらよいですか?
879 名前:デフォルトの名無しさん [2007/09/06(木) 19:30:56 ] sheet.subproc("パラメータ")
880 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:20:19 ] >>875 COMが不要だとか便利じゃないなんて話はしてないよ COM使わなくても、何でも出来るって話なだけで それに、両方の機能は重複してるというか、COMで出来ることは殆どWin32API(の組み合わせ)で出来る まあ使い分けた方が手軽ではあるけど、スキルさえあればCOM無しでも事足りるのは事実
881 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:52:19 ] しつもん htmlファイルを(テキストでも何でもいいけど)普通にテキスト形式で読み込めませんか 今はループさせて1行毎にLine Inputしてるのですが、 (A1に1行目、A2に2行目、・・・をEOFまで) なんかもっとこうてっとりばやいというか File("index.html").copy Sheet1 みたいなの
882 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:53:49 ] つ[open]
883 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:24:15 ] >>880 例えばExcelブックの中身いじるなんてことを Win32APIで現実的にやれるって言うつもり?
884 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:27:13 ] いやさ、COMを使った時点でVBAの範疇から外れるだろw WIN32APIでゴリゴリ書くと整った開発環境で作るより むしろローレベルなプログラムになるよなw
885 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:02 ] Excel VBAでExcelとVBAだけは参照設定から外せないぞ。 確かに、COMコンポーネント一般の話はVBAから外れるが、 Excelブックを操作するのにCOMを使う以上、 VBAにCOMは欠かせない存在だろ。
886 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:45:29 ] そりゃそうだ。 COMを使えば○○が出来る → VBAすげー ではないだろってだけだよ。すごいのはCOMだ。 別にCOMもAPIも有用なもんだ。
887 名前:878 [2007/09/07(金) 03:11:01 ] >>879 サンクス、やってみる
888 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 03:52:09 ] COMってのを学習するために良いサイトを教えてください
889 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:06:12 ] 指定したフォルダ配下のサブフォルダ一覧の取得方法を教えてください
890 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:33:03 ] Excel2003で作ったVBAのツールをVista + Excel2007の環境にインストールしたら、 読み取り専用として開いてしまい保存ができません。 VBAツールの場合、ユーザー権限の昇格確認を出して管理者権限で実行するには どうすれば良いでしょうか?
891 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:13:09 ] >>882 やりたかったこと Name index.html As index.txt Workbooks.Open Filename:="index.txt" を、ファイル名を変えずに Workbooks.Open Filename:="index.html" だとタグを勝手に解釈しやがって死ぬ ↓結局今はこう Open "index.html" For Input As #1 行 = 1 Do Until EOF(1) Line Input #1 , buf Cells(行,1) = buf Loop Close #1
892 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:23:09 ] >>889 Dir(指定するフォルダ, vbDirectory)
893 名前:デフォルトの名無しさん [2007/09/08(土) 07:14:41 ] >>889 Dim FSO As Object Dim Fds As Object Dim Fd As Object Set FSO = CreateObject("Scripting.FileSystemObject") Set Fds = FSO.GetFolder(FdPath) 'Fdpathにフォルダのパスを指定 For Each Fd In Fds.SubFolders Fd.Name '←サブフォルダフォルダの名前。やりたい処理を書く。AddiItemとか Next Fd Set FSO = Nothing Set Fds = Nothing まぁ、間違ってるかもしれないけど。 誰か>>861 スレ違い?
894 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 09:28:57 ] >>888 VB系だとあまりCOMそのものを勉強する必要はないと思う。 COMのことは裏に隠蔽して普段は意識せずに済むようになっているから。
895 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 11:48:35 ] >>892 >>893 ありがとうございます ためしてみます
896 名前:デフォルトの名無しさん [2007/09/08(土) 14:26:15 ] VBAでワークシート関数を使いたいのですが 範囲のところにVBAの変数を指定することは可能でしょうか? よろしくお願いいたします。 WorksheetFunction.Average(範囲)
897 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 15:47:19 ] やってみればいいのに
898 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 15:48:08 ] ホントなんでやってみないんだろ? Dim Rng As Range Set Rng = Range("A1:A3") Debug.Print WorksheetFunction.Sum(Rng)
899 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:33:31 ] 名前付き引き数に変数(文字列)を使用したいのですが、どう組んだらよいですか? ちなみに、:="名前" って感じのものです
900 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:59:50 ] >>899 hlpym!ks!
901 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:14:06 ] Sub sample() Dim bbb As Integer Selection.AutoFilter Field:=8, Criteria1:="#VALUE!" bbb = Rows.SpecialCells(xlCellTypeVisible).Select Selection.Delete End Sub フィルターをかけて「#VALUE!」行を削除したいのですが 上のだと項目名も選んでしまうのですが、何を付け加えたらいいでしょうか ご指導お願いします
902 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:49:29 ] iserror
903 名前:デフォルトの名無しさん [2007/09/09(日) 15:43:52 ] Excel VBA とFortran どっちが早いでしょうか? コンパイラはフリーのものなんですが。 だいぶ違うのでしょうか?
904 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:58:44 ] そりゃぁ、馴れている方が早く書けるだろ。
905 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 16:12:43 ] >>901 項目名を選ばなかったらいいんじゃないか それと6行目は何をしたいのかわからない たぶん不要
906 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 17:31:51 ] >>903 開発されたのは、Fortranの方がずっと"早い"。
907 名前:デフォルトの名無しさん [2007/09/09(日) 18:41:36 ] VBAより遅いコンパイラなんてあんのかいな
908 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 18:47:15 ] 腐るほどある
909 名前:903 [2007/09/09(日) 19:00:03 ] >>904->>908 実行速度です。 使い勝手はExcel VBAがいいんですけど、速さを考えると Fortranのほうがいいのかなと。セルの参照とかしなければ いい線いくのかなと。
910 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 20:47:59 ] なんでもかんでもRange作戦なら実効速度が稼げる しかしソースが汚くなる諸刃の剣 切羽詰まったやつ以外にはオススメできない
911 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:51:08 ] >>909 計算精度を求めるのならFORTRAN(もしくはCOBOL) Excelの小数点以下の計算精度は酷い。 VBAで計算するのなら、Currencyとか使うと精度が良いが小数点以下桁数の制限が大きい。
912 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 23:45:16 ] doubleをlongに入れると親切に四捨五入してくれるからなあ ずいぶんはまったよ
913 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 01:20:08 ] >>911 それは、精度がいいんじゃなくて、 Centuryの誤差の出方がDoubleのそれより人間の感覚に近いというだけ。
914 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 01:45:23 ] 世紀の誤差か
915 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 11:08:25 ] >>913 はCurrencyをCenturyと書き間違えて説得力が低いけど、 >>911 が言う「Excelの小数点以下の計算精度は酷い」は嘘っぽい。 根拠があって言ってる?
916 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 11:44:34 ] single、doubleとも本来の精度以上に悪いとは思ったことはないが ただ計算の時にどの型になってるかよくわからないんで 全部cdblにしたりしたな
917 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:33:29 ] >>915 Excelに限定すると ttp://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.shtml とか。普通にExcelの参考書類にも載っている話だけれど
918 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:56:17 ] ヒント:丸め誤差
919 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:03:02 ] >>917 それはexcel限定の話じゃない
920 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:18:52 ] >>917 FORTRANでもまったく同じことが起きます。 COBOLは、十進数で計算するのでVBAのCurrencyと同様ですが、 あらかじめ桁数を決めておくのが普通なので、 考えようによってはCurrencyよりも使いにくい場合があります。
921 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:24:40 ] >>917 そのページ、怪しくない? 「0.1 は、実は 0.1000…000555115123…625です」みたいな書き方しているけど、 右側(小数点以下20桁以降)は、ただのゴミ。 それだけの桁数をもっているわけじゃない。
922 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:23:56 ] >>921 >「0.1 は、実は 0.1000…000555115123…625です」みたいな書き方しているけど、 初心者にも画面上で分かりやすいように画面表示上での最高桁を使っているわけで 説明しやすくするための方便かと。 日経ソフトウェアではなくビジネスマン向けの「日経PC21」だし無駄に厳密にやっても混乱させるだけだし。 一応フォローとして同じ連載中で「IEEE 754浮動小数点数」の仕組みとかもやってるが。 # Excelのワークシート関数利用に関しては結構マニアックな雑誌なので一般ユーザに渡すと結構重宝されたりするけど>日経PC21 あと >>917 の通り、これ以外でもぐぐればいくらでもある。 そういや8bit機であるMSXのBASICの浮動小数点がBCD利用で PC98のN88-BASIC(86)より精度が高かったことを思い出した その分、元々遅いのが更に遅くなっているが。
923 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:50:32 ] BCDなら固定小数点じゃないの?
924 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:17:50 ] >>922 どんだけぐぐったって、Excelの小数点以下の計算精度がFortranよりも酷い なんてことが書いてあるページは見つからないと思うけど。
925 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:21:21 ] 何故10進型を使おうとしない
926 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:22:01 ] 922ってそんなこと主張してるか?
927 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:22:20 ] >>923 MSXのMATHPACKはBCD浮動小数点が使えたはず。
928 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:27:30 ] まあ考えたらBCDでも浮動小数点は可能だな >>925 足し算引き算ぐらいなら使ってもいいが
929 名前:デフォルトの名無しさん [2007/09/10(月) 23:32:37 ] もうちょっとCPUが賢く安くなれば 10進数浮動小数点演算器載せるだろうな、あと何年待てばいんだろ
930 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:35:51 ] >>924 明らかに >>921-922 の流れはFORTRANとは無関係です。 Excelに対するFORTRANの計算精度の優位性について言及しているのは >>911 だけだし。 FORTRANはよく知らないが同じBASICでもMSXと98で精度が異なるように、処理系依存の部分も多い希ガス
931 名前:デフォルトの名無しさん [2007/09/10(月) 23:39:59 ] つうか計算精度なんて言語じゃなくてCPUの性能によるんじゃないの? まぁソフトだけで計算すりゃ精度は出るだろうが、馬鹿みたいに遅い気がする
932 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:43:21 ] 言及ったってどう酷いかいってくれないとなあ
933 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:44:44 ] だから10進型使えっつーの 何が優位性だ半可通が
934 名前:デフォルトの名無しさん [2007/09/10(月) 23:51:30 ] まぁ世の中の殆どは近似値で事足りる 精度のいるモノは高いアプリやらマシーン使ってるだろうし 浮動小数点使って馬鹿みたいなプログラムを組むと引っ掛かる
935 名前:デフォルトの名無しさん [2007/09/11(火) 00:17:13 ] メールについて質問! VBAからダイレクトにメールを打つサンプルはよくあるんですが、 メーラーを開き、新規メール画面にセルの文字列を入れて、送信はしない、 って状態を作りたいのですが、どうすれば良いでしょうか? メーラーはOutlook Expressじゃなく、「通常使うメーラー」を使いたいです。 よろしくお願いします。
936 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:30:08 ] >>935 メーラーにコマンドラインで渡せばいいんじゃないか
937 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:39:14 ] Select Caseの分岐に変数のリストを渡して使えないでしょうか Dim IntA = "1,3,5" As Integer Dim IntB = "2,4,6" As Integer Select Case Int Case IntA 〜 Case IntB 〜 みたいな。 上のだと当然型エラーが出るし、stringにすると「1,3,5」という文字列にマッチしてしまう たくさんのわりとランダムっぽい数値で分岐させたく、 なおかつよく数値が変更されるので見通しの良いところにおいておきたいのです。
938 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:53:59 ] ヒント:偶数、奇数
939 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:56:43 ] ってランダムか 規則性がないものは都度判定するか連想配列に登録するしかないと思われ
940 名前:935 [2007/09/11(火) 07:41:35 ] >>936 ありがとうございます。 今、メーラーはBeckyなのですが、Becky側では、コマンドラインから セット出来るのは、宛先To:のみなので、本文を処理出来ません。。 通常使うメーラー、無理なもんですかね?
941 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:30:21 ] mailto:で呼び出したらいいんじゃないかな? 本文とかも指定できる。 ttp://www.shurey.com/Soft/JavaScript/mailto.html
942 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:04:00 ] >>937 実際の分岐条件イメージが涌かないが、まずはHELPの使用例見ろ その上での話なら、変則ではあるがこのようなやり方もある Select Case True Case 条件式1 〜 Case 条件式2 〜 Case Else
943 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:28:45 ] > 変則ではあるが その手法は基本だろ?
944 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:51:56 ] 基本は if 条件式 then elseif 条件式 end if
945 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 21:50:07 ] >>944 if 条件式 then elseif 条件式 then end if ね これも基本だし>>942 も基本のうち
946 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:17:18 ] elseifなんかソース汚くなるしLIKE演算子に用があるときぐらいしか使わんわ
947 名前:デフォルトの名無しさん [2007/09/11(火) 23:54:01 ] で?
948 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:33:43 ] >>937 の例だと select case hoge case 1,3,5 case 2,4,6 end select とかでいいんでないの magic numberだが
949 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:27:54 ] >>946 ハゲは黙ってろw
950 名前:デフォルトの名無しさん [2007/09/12(水) 15:29:00 ] >>937 配列渡しの関数作って戻り値をIF文で判定するしかないじゃね select文に拘ってもしょうがない
951 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 20:45:54 ] 質問です。 本日、面接に行ったところ、1週間でVBAで計算機を作って来いと言われました。 ちなみに、VBAどころかプログラム自体、一切触ったことありません。 で、まだソース部分は全く手付かずなのですが、 ユーザフォームに0〜9ボタンや、+、-などのボタンとテキストボックスを貼り付け、 ボタンを押して、値なり結果をテキストボックスに返す感じで行きたいなと。 ただ、ユーザフォーム上で計算機としての動作が可能なのか、 アプローチが最初から間違っていないか、その点を教えていただきたいです。 探し方が悪いとは思うのですが、そういったものを紹介しているサイトも 見つけられなかったものですから…
952 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 20:51:35 ] >>951 ちなみに面接官もここチェックしてるから
953 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 21:10:17 ] vbaじゃなくてvisual basicで探せ
954 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 21:41:02 ] >>951 それを自力で出来るかどうかを見てるわけだから不正をせず自力でやりましょう 不正をして採用されても、能力以上のことばかり要求されて辛い思いをするのは君ですよ 自分の能力に見合ったものを選ぶか、上を目指したければズルすることではなく己を高めることを考えましょう
955 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:08:06 ] >>951 ひとつだけ言っておく >ユーザフォーム上で計算機としての動作が可能なのか 可能
956 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:09:28 ] >>951 考え方は合ってる 数字ボタン:値の取得 加減乗除などのボタン:フラグ って考えれば良い
957 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:15:12 ] "を文字列として扱いたいのですが、例えば "My name is nanashi"という具合に"(半角)まで表示させるにはどうすればいいでしょうか? 環境はExcel2003です。 Dim tk as string tk=""My name is nanashi"" だとエラーが出ます。 たぶん tk=???&"My name is nanashi" &??? が正解であると思うのですが???に何を入れればいいのか思い出せません。 PC-98時代のベーシックならCHR(??)だったような記憶があるのですが、VBAの場合どうすればいいのでしょうか? お願いします。
958 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:18:56 ] ググレカス
959 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:31:11 ] >>957 Msgbox """ぐぐれ"""
960 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:42:44 ] 奇数個をはさんでも偶数個に修正するんだな
961 名前:デフォルトの名無しさん [2007/09/13(木) 01:58:19 ] >>957 実はVBAにもCHRあるから同じように書ける