[表示 : 全て 最新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/

515 名前:デフォルトの名無しさん [2007/08/01(水) 22:14:09 ]
エクセルを開こうとするといきなりインストールしだしてエラー表示がでました。
プロパティを開いてプログラムを見ると不明なアプリケーションとなっております。
これは何故でしょう?
またこれを解決する方法はどうすればいいのでしょうか?


516 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:17:30 ]
>>513
そうだよ。それが遅延バインディング。
欠点として、参照設定してきちんと型を指定して使う早期バインディングより
速度が遅いと、確かヘルプに書かれているはず。

517 名前:デフォルトの名無しさん [2007/08/01(水) 22:18:02 ]
初心者です。
if,do,for等の分岐式や繰り返しコードを使うと必ずバグが出ます。
バグが出ないように皆さん何か心がけている事ってありますか?

518 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:21:59 ]
参照設定しないと遅いのもあるけど、コーディングしにくくない?

519 名前:デフォルトの名無しさん [2007/08/01(水) 22:55:03 ]
参照設定ってexcelファイルにするの?
excel環境にするの?

520 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:05:13 ]
ブック単位だな。
ちなみに、普通のVBだとプロジェクト単位。

521 名前:デフォルトの名無しさん [2007/08/01(水) 23:47:31 ]
>>515
VBA関係ねえ

522 名前:デフォルトの名無しさん [2007/08/01(水) 23:53:15 ]
>>520
d


523 名前:デフォルトの名無しさん [2007/08/02(木) 07:40:47 ]
ADOで
csvテーブル(Microsoft Text Driver接続)と
Excelシートテーブル(Microsoft Excel Drive?接続)の
SQLでの連結ってできる?



524 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 18:21:00 ]
VBAでListViewとかTreeViewを組み込んで OLEDragDropとか使うのは、
VBがある環境じゃないとライセンス違反とか聞いたんだけど、ほんと?
なんかMSのページ見に行ってもどこに情報があるのか良くわからん。。

使えるのに使っちゃダメとかなんだったらひどい話だよなあ。

525 名前:デフォルトの名無しさん [2007/08/02(木) 18:24:58 ]
vbaでSQLite使う方法ある?

526 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 18:28:46 ]
あるよ

527 名前:デフォルトの名無しさん [2007/08/02(木) 18:33:07 ]
どうやるのか教えて

528 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:21:54 ]
>>524
> ライセンス違反とか聞いたんだけど、ほんと?
うん、ライセンス違反だよ

ListViewとかTreeViewはVB6ランタイムを入れるとVBAからも使えるようになるが、本来VB6ランタイムというのは有料ソフトの付属品
VB6で作ったソフトを動かす為に必要なので、特定条件下で無料再配布が許可されているが、当然、使用はライセンスに縛られた範囲になる

で、使用して良い範囲が、VB6を持ってない人(VB6ランタイムを借りてる人)ではVB6で作られたソフトからの利用のみで
VB6を持ってる人(VB6ランタイムを購入した人)は自分の環境内で好きなように使って良くて
VB6Proなどを持ってる人(VB6ランタイムとその再配布権を購入した人)は自環境内で好きなように使って良いのに加えて
自作ソフトに同梱して配布することも出来る

無料で配布されているとは言え、VB6を持ってない人には有料ソフトの一部を条件付きで貸してるだけということをお忘れなく

> 使えるのに使っちゃダメとかなんだったらひどい話だよなあ。
世の中、出来るけどやっちゃいけないことで溢れかえっているけど、こんな事にも気付いてないほどお子ちゃまなの?
おそらくピッキングが出来れば君の家にある君が所有権を持つ物品類を盗むことも「出来ること」だが
この「出来ること」をやっちゃダメだと法的に定めるのはひどい話なのかな?
君の所有物に対して、所有権において他者の使用を制止・制限出来るのと同じで
MSの著作物に対しても、著作権において他者の使用を制止・制限してるだけのことなんだけど

529 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:47:51 ]
>>528
> 特定条件下で無料再配布が許可されているが、
おー、そういうからくりなのか。ぜんぜん知らなかった。
勉強になるなあ。ありがとう。

> 世の中、出来るけどやっちゃいけないことで溢れかえっているけど、
> こんな事にも気付いてないほどお子ちゃまなの?
お子ちゃまレベルなのは認めるよ。
趣味でスクリプト組んでいるんであって、
プロで開発やってるわけじゃないもん。

もうちょっと「だめであること」がわかりやすくなっていても
いいんじゃないか?と思ったよ。だめならだめでさ。

530 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:56:24 ]
それを言うなら鍵あいてた家のトイレでウンコしていいかとかそんな所だろ。
どっちもどっちだし窃盗みたいにものすごく悪いって程ではないけど、一応ダメ。
見つかって話がこじれたり目に余るような有様だと裁判沙汰にもなるわなw

531 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:37:16 ]
>>529
技術や知識レベルとかプロ意識の問題じゃなかろう
約束やルールを守れないのは子どもだってこと

ただまあ524がそこまで言われるようなことかと言うと
「そういうもんなんだから諦めな」で済むような気もする


532 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 00:20:16 ]
そんなことよりvbaからSQLite使う方法教えろ

533 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 04:43:19 ]
ググれカス!



534 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 21:25:19 ]
vba sqlite odbc でぐぐって判らんかったら諦めれ

535 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 21:26:25 ]
ブレークポイントでプログラム中断した時、変数にマウスポインタあてると
内容が表示されるのが表示されなくなりました
設定とかいじってないのに何ででしょう?

536 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:14:43 ]
VBAを記述中にカーソルが勝手に戻ったり、コメントを記入中に勝手に変換確定されるのですが
どうすれば回避する事が出来るのでしょうか?

例えば

Sub | ←このような時に Sub| ←このようにカーソルが戻ってしまうんです。
わーくしー ←このように入力中に勝手に確定されるのです。

よろしくお願いします。

537 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:29:04 ]
スペースが全角だから自動で半角になってるんじゃないか

538 名前:106 mailto:sage [2007/08/04(土) 07:49:36 ]
'Sub |

539 名前:デフォルトの名無しさん mailto:age [2007/08/04(土) 10:42:33 ]

助けてください。2列目以降をソートしたいのですが、

Range("A1").Sort _
Key1:=Columns("B") _
, Order1:=xlAscending _
, Header:=xlGuess _
, Orientation:=xlTopToBottom

だと、
実行時エラー'1004'
RangeクラスのAutoFilterメゾットが失敗しました。


Range("A1:L100").Sort _
Key1:=Columns("B") _
, Order1:=xlAscending _
, Header:=xlGuess _
, Orientation:=xlTopToBottom

だと、
エラーはでませんが、まったくソートがされません。
F8を叩くと、セルはA1を指しています。
同じファイルをマクロで実行したソースを貼っても駄目でした…。
よろしくお願いします。

540 名前:539 mailto:age [2007/08/04(土) 10:45:32 ]
↑すいません。

○RangeクラスのSortメゾットが失敗しました。
×RangeクラスのAutoFilterメゾットが失敗しました。

です。

541 名前:デフォルトの名無しさん [2007/08/04(土) 15:47:25 ]
決められた範囲内(セル内)のデータをcsvファイル形式でセーブしたいのですが…
どんなプログラムになるでしょうか?

542 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 16:10:48 ]
>>542
マクロ記録でSaveAs...してみれば判ると思う。

543 名前:542 mailto:sage [2007/08/04(土) 16:11:49 ]
>542は>>541ね。



544 名前:536 mailto:sage [2007/08/04(土) 19:19:49 ]
最初にOption Explicitを入れたので、原因はそれっぽいのかな。
まだ、検証してませんが

545 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:51:05 ]
>Option Explicitを入れたので、原因はそれっぽいのかな。

Option Explicitは常に入れているが、そんな話聞いた事が無い。

546 名前:デフォルトの名無しさん [2007/08/04(土) 23:56:25 ]
Sheet1
□ りんご
□ みかん
□ いちご
□ ぶどう

Sheet2
┌─────┐
│りんご    │
│みかん   │
└─────┘

図のようにシート1にあらかじめ入力されているデータを選択し
シート2にあらかじめ作成しておいた表の特定のセルに自動転記され
表が完成する。 という動作を行いいたいのですが
まずシート1でチェックボックスで選ばれた項目だけを
表に反映させるというのがわからないです。。


547 名前:デフォルトの名無しさん [2007/08/05(日) 00:43:42 ]

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

548 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:09:41 ]
>>546
Sheet1.CheckBox1でプロパティ値にアクセスできるし
changeイベントもあるからお好きなように

549 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 16:42:45 ]
タスクみたいなタイマーで2時間に1回プログラムを実行させるにはどーすればいいの?

550 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:56:56 ]
タスクを使えばいいんじゃね?

551 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:44:01 ]
OSはVistaです。

エクセルで完成させた表を印刷しようとするとエラーになります。
通常のインターネットなどのページを印刷するのは可能なのですがエクセル・ワードだけはエラーがでてしまいます。
パソコンでプリンターの状態を見たら「アイドル」になったままで何をしても変わりません。

だれか助けてください。

552 名前:551 mailto:sage [2007/08/06(月) 03:45:26 ]
スマソ。
板違いだった。
総合相談所スレにいってきます。

553 名前:デフォルトの名無しさん [2007/08/06(月) 15:13:05 ]
お世話になります。

accessからodbcを利用してプロシージャを実行させようとしているのですがエラーになって実行できません。

--ソースの一部----------------------------------
 Dim tmp_qd As QueryDef

 SQL = "exec プロシージャ_hoge"

 tmp_qd.SQL = SQL

 Set tmp_rs = tmp_qd.OpenRecordset()
------------------------------------
vbは良く分からない(初めて3日くらいです)のでこれでソースが足りるか分かりませんが、
上記の「tmp_qd.OpenRecordset()」でエラーが発生しています。
内容は
 「 ODBC--呼び出しは失敗しました。 」
とダイアログに表示されます。

エラーの原因がなんだかわかりません。
お手数ですが、お願いいたします。




554 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 15:28:04 ]
動いたら奇跡

555 名前:デフォルトの名無しさん [2007/08/06(月) 15:53:57 ]
>>554
他のコードです。
Dim db As Database
Dim qd As QueryDef
Dim rs As Recordset

Set db = CurrentDb()
qd.Connect = glcnst_ODBCConnect
qd.ReturnsRecords = True
qd.ODBCTimeout = 0

SQL = "exec pro_hoge"

qd.SQL = SQL

Set rs = qd.OpenRecordset()

何か文法等間違っている箇所があるのでしょうか?
お願いします。



556 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 17:39:57 ]
currentdbはaccessでしか使えないし
sqlが何かわかってないし
どこが間違ってるかとかいうよりも
ちょっとずつしっかり勉強したほうがいいよ

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


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あるから同じように書ける






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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