1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
557 名前:デフォルトの名無しさん [2007/08/06(月) 18:58:04 ] >>556 了解しました
558 名前:デフォルトの名無しさん [2007/08/06(月) 19:44:23 ] 初めてカキコします。 スキルもないのに仕事を押し付けられた入社1年目の者です。 日報なのですが、日付を入力したら、その日の売上、仕入を表示できるようなプログラムはあるのでしょうか? ご教授お願い致します
559 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 19:47:29 ] 作ろうと思えば作れる。 ここは、そういうものを作る側のスレッド、板。
560 名前:558 [2007/08/06(月) 20:37:56 ] >>559 期限はないので勉強して作ってみます。 ありがとうございます
561 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 20:49:01 ] そんなん関数でやればいいじゃない
562 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:56:57 ] >>561 >日付を入力したら、その日の売上、仕入を表示できるようなプログラム を関数で出来んのか?
563 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 22:20:15 ] >>562 横からだけど 関数で引っかかるのはどこだろう? セルに日付を入れると別のシートにある売り上げと仕入れ VLOOKUPでは駄目なのだろうか?
564 名前:デフォルトの名無しさん [2007/08/06(月) 22:54:58 ] VBAを使って自分自身にジェクトのロック・アンロックをかけたいのですが 可能ならば教えてください
565 名前:デフォルトの名無しさん [2007/08/06(月) 22:55:40 ] >>564 プロジェクトのロック・アンロックでした
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倍位時間がかかるようになりました。 どのような対策を取ればいいのでしょうか?