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