[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

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倍位時間がかかるようになりました。
どのような対策を取ればいいのでしょうか?


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、ワークシート関数よりユーザー定義関数の方が遅くて当然との事ですが、
なんらかの方法で、処理速度を上げられないだろうかとかんがえております。
内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef