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