1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
82 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:15:59 ] >>81 その式だと10になる確率が低いんじゃねーのか? 9になるのはround(rand(),1)が8.5以上9.5未満の1の幅があるが 10になるのは9.5以上で半分の幅しかねーな。 ROUNDなんか使っちゃいかんよ。 Range("D1)..Value = Int(Rnd*10)+1 とすれば1〜10の確率はそれぞれ10パーセントだ。
83 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:20:56 ] ちょっと書き直し 9になるのはrand()が0.85以上0.95未満の0.1の幅があるが 10になるのは0.95以上で半分の幅
84 名前:79,81 [2007/12/19(水) 14:14:48 ] >>83 うーむ、なるほど。
85 名前:デフォルトの名無しさん [2007/12/19(水) 17:53:38 ] 絶対パス付きを取得し、変数filepathに、ファイル名をfilenameに入れて、ファイルを開こうとしています。 しかしフォルダ名に空白があると存在しませんとエラーがでます。 openfile filepath & filename どのように書けばよいのでしょうか?
86 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 18:00:58 ] openfileが悪さしてる
87 名前:デフォルトの名無しさん [2007/12/19(水) 18:06:15 ] trimしてみては?
88 名前:デフォルトの名無しさん [2007/12/20(木) 05:13:01 ] htmlの指定したタグの中身を取り出す関数(メソッド?)ってどういうものでしたっけ? GetOuterHtmlみたいな感じの名前でしたが、手元にVBがなく、ググってもでてこない
89 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 07:41:31 ] 分かってないのに分かったような物言いをしたところで間抜けであることは変わらない
90 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 09:53:17 ] >>88 スレ違い
91 名前:デフォルトの名無しさん [2007/12/20(木) 11:06:38 ] 以前質問させてもらった者ですが 1+2+3+4+……+100 この和を繰り返し文を使用して出せというのがいまだにわかりません。 この場合For文を使えばいいんでしょうか? 無知で申し訳ないです。
92 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 11:39:16 ] >>91 スレ違い For文でできる。 どうしても分からなければVBスレで。
93 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 12:07:29 ] dim a(100) as integer for i=1 to 100 a(i) = i next msgbox (a(1) + a(100))/2*100
94 名前:デフォルトの名無しさん [2007/12/20(木) 15:01:54 ] >>90 以前エクセル付属のVBAで使った記憶があるのですが
95 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 15:13:37 ] >>94 Microsoft HTML Object Libraryを参照設定して、F2でMSHTMLを眺めて、ググるなりしろ。 これ以上の質問はVBスレでやれ。
96 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:04:23 ] >>93 ワロタw
97 名前:デフォルトの名無しさん [2007/12/20(木) 16:19:13 ] Sub nnn() Dim a As Variant Dim i As Byte Dim sentence As String Dim sentence2 As String '''''''''''''''''''''' Range("A1").Formula = "I am Japanese." a = Array("I", "am", "Japanese", "living", "in", "USA", ".") For i = 0 To 6 sentence = Range("A1").Value sentence2 = Replace(sentence, a(i), "", 1) Next i MsgBox sentence2 End Sub このプログラムで、sentenceをa配列全て使って、 置換したいのですが、 array中の最後の文字しか変換されません。 どうすればよいでしょうか...
98 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:32:06 ] >>97 かろうじてExcel要素が混じってるが、基本はExcel関係ないぞ。 Forの行にブレークポイントを設定して、ステップ実行させながら、変数の中を見てみろ。
99 名前:デフォルトの名無しさん [2007/12/20(木) 17:03:25 ] >>98 置換したはずの文字が、ふ、ふ、復活しているよっ!
100 名前:デフォルトの名無しさん [2007/12/20(木) 17:14:26 ] あ、sentence2はsentenceでいいのか。 むずかしい
101 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 18:53:05 ] とりあえずUSAには定冠詞のTheを付けるように
102 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 19:18:31 ] >>91 学校の宿題だったっけ? >>93 のFor Nextで合格点もらえるよ。
103 名前:97 [2007/12/21(金) 09:11:06 ] この文の位置か・・・ sentence = Range("A1").Value
104 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 19:29:12 ] もしかしてVBAってMax(i1,i2,i3)みたいなのって無し? セルの比較ならApplication.Maxとかでいいけど変数の最大値を取得したいときはどーすれば?
105 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 20:31:42 ] セルに代入してapplication.max使えばいいんじゃね?
106 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 20:53:11 ] ヘルプ見ろよ
107 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 21:47:26 ] 10分もありゃ汎用性の高い自作関数作れるだろ
108 名前:デフォルトの名無しさん [2007/12/22(土) 00:34:48 ] 汎用性の高い自作関数 例えば?
109 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:17:54 ] 型の範囲を意識しなくていい関数はかなり便利 integerの範囲以上の値入れていちいちエラートラップするのはうざいからな
110 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 08:44:23 ] integerの範囲以上の値入れていちいちエラートラップする ・・ Variant・・・
111 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 13:51:20 ] 丸め誤差を極力減らしたいのですが、式を記載する上で注意しておきたいことを教えてください。
112 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 16:26:16 ] >>111 整数で演算する
113 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:24:32 ] 除算を使わない
114 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:26:38 ] 計算をしない
115 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:43:29 ] 電卓で計算して、Excelに手作業で貼り付け w
116 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 22:39:18 ] 極力ってことは・・・一気に計算したら?
117 名前:デフォルトの名無しさん [2007/12/23(日) 00:08:32 ] >>116 よく本に掲載されているのは、ルートを有利化せずに分母においてるのがあるが、理由がよくわからなくて。
118 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:29:44 ] EXCELで 人人人人人 2 3 1 4 1 4 2 3 のように4人でゲームして順位を出す時に、 ちゃんと横の合計が10になるか計算したいのですが こういう空欄はスルーして計算できませんでしょうか?
119 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:41:46 ] 何も考えずにセル関数Sum使えば終わりでね?
120 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:58:34 ] >>119 その通りでした。どうもありがとうございます 実は例と少し違って合計0になるかだったので勘違いしてました
121 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:57:25 ] 麻雀かw
122 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:18:28 ] >>117 コンピュータは分母が整数じゃなくても それほど困らないからいいんじゃないの?
123 名前:デフォルトの名無しさん [2007/12/23(日) 10:51:16 ] 情報工学勉強すればわかる。
124 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 10:57:09 ] VBA使うのにいちいち情報工学など勉強しれられっか
125 名前:デフォルトの名無しさん [2007/12/23(日) 11:07:39 ] VBAに必要な知識は、 1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。 言語に関わらず必要な知識は、 1.誤差伝幡をいかに少なくするか。 2.いかに高速なアルゴリズム(探索など)を知っているか。 3.その他多数〜
126 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 16:14:05 ] > 1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。 開発効率という観点が欠如しているっぽいあなたには、アセンブラをオススメいたします。
127 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 00:21:03 ] >>111 桁に限界があるので技術計算には向かないが 固定小数点のCurrency型を使うとか。
128 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 02:05:32 ] >>111 除算をしないか、ロジックで極力計算回数を減らす。関数の戻りの型に注意。あと、スレ違い。
129 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:14:14 ] フォルダに0001〜9999jpg セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか? よろしくお願いします
130 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:18:51 ] >>129 セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。 4桁に制限したければそういうifを書けばいい。
131 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:02:45 ] >>93 の人ありがとうございました。 1^2+2^2+3^2+……+20^2 1^3+2^3+3^3+・・・・+20^3 ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。
132 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:12:39 ] 宿題か?宿題なのか?
133 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:24:08 ] そんなことより聞いてくれよ。 というか教えてください。 マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で? やっぱりファイルが大きすぎるのか? 1ファイルで60MBとか無理なのか? ご存知の方いたら助けてください。
134 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:29:42 ] >>133 うん、でかいw限界点とかはわからんが・・・ Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・
135 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:55:12 ] >>132 そうなんですよ。なんとかお助け願えないでしょうか?
136 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:06:14 ] for i=1 to 100 a = i next
137 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:07:09 ] 途中送信orz動作未確認 dim a as integer for i=1 to 100 a = a + i * 2 next 3は2を変更で
138 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:21:16 ] >>131 ちょっとまて >>93 を採用する気か?それはなー(略
139 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:22:34 ] >>137 どいつもこいつも・・・ここはネタすれなのか?
140 名前:デフォルトの名無しさん [2007/12/26(水) 02:24:13 ] >>138 え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。
141 名前:137 mailto:sage [2007/12/26(水) 02:37:44 ] すまん、俺は素だったんだw 汎用性もたせるなら累乗関数使うなり作るなりしてくれ。 dim a as integer for i=1 to 100 a = a + i * i '2乗 'a = a + i * i * i '3乗 next
142 名前:137 mailto:sage [2007/12/26(水) 02:39:07 ] >>140 ちゃんとみりゃわかる。 >>97 はforが入ってるが結局は(1+100)/2*100だ。 dim sum as integer for i=1 to 100 sum = sum + i next
143 名前:137 mailto:sage [2007/12/26(水) 02:40:02 ] はぁい、>>93 の間違いねorz スレ汚し失礼しました。
144 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 03:36:07 ] 志村ー 100じゃなくて20・・・・
145 名前:デフォルトの名無しさん [2007/12/26(水) 13:27:24 ] >>141 >>142 たびたびすいません。これらをメッセージボックスに表示するには どうしたらいいんでしょうか?
146 名前:デフォルトの名無しさん [2007/12/26(水) 14:22:26 ] Option Explicit Sub sum() Dim sum As Integer Dim sumMsg As Integer Dim i As Byte For i = 1 To 100 sum = sum + i Next i sumMsg = MsgBox(sum, vbOKOnly + vbInformation) If sumMsg = vbOK Then MsgBox "やったね" End Sub
147 名前:デフォルトの名無しさん [2007/12/26(水) 14:23:38 ] 共有ファイルでVBAを編集するには?
148 名前:デフォルトの名無しさん [2007/12/26(水) 17:17:49 ] inputboxをキャンセルしたときの挙動なのですが、 これじゃだめですよね・・・ Sub nicochuu() niwango = InputBox("入力してね", "inputbox") If niwango = "" Then MsgBox "入力無し": Exit Sub Range("A1").Value = niwango If niwango = vbCancel Then Range("A2").Value = "キャンセル" End Sub
149 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:33:01 ] 横で開いてるIEを3行スクロールさせる方法教えてください。 excelは2000でIEは7です。
150 名前:デフォルトの名無しさん [2007/12/26(水) 19:14:15 ] 三流文系大に通う腐女子です。 以下のマクロ作成方法を教えてください。 プロシージャ「斜め移動」の作成 IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。 プロシージャ「四角移動」の作成 図形が四角形を描くように移動する(移動の軌跡が四角形になる)、 「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。 ☆――→ ↑ | | | | ↓ ←―― プロシージャ「三角移動」の作成 「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。 ただし正三角形でなくてよい。
151 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:22:06 ] >>133 どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。 ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。 エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。 >>150 どう動かしたいかが良く伝わらない。 マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの? あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?
152 名前:デフォルトの名無しさん [2007/12/27(木) 02:33:46 ] セルを複数選択できないようにする(単一セルのみ選択可能)にはどう記載すれば実現できますか?
153 名前:デフォルトの名無しさん [2007/12/27(木) 11:43:39 ] CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで 読み込みさせたいのですが、 Do Until EOF(intFF) をどうすればいいのかわかりません。 お願いします・・。
154 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 12:41:59 ] >>152 これで目的の動作をするかどうかはわからないが・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then ActiveCell.Select End If End Sub >>153 一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。
155 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:21:44 ] >>153 ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。 ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては? pc11.2ch.net/test/read.cgi/tech/1187667616/l50
156 名前:デフォルトの名無しさん [2007/12/27(木) 15:59:23 ] サンクスコ スレ違いの基準が分からんぽ
157 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:50:30 ] スレ違いとかいう奴うぜー いっそVB6スレと統合しろ
158 名前:155 mailto:sage [2007/12/27(木) 18:25:58 ] >>156 >>2 >★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。
159 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:15:14 ] アルゴリズムとかはVB6だろうけど 初心者はわからんだろうしなあ まあそのときの気分であしらってるけどね
160 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:16:58 ] >>154 サンクスです。
161 名前:デフォルトの名無しさん [2007/12/27(木) 19:19:39 ] >>158 >★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。 すべてこちらに包含するという考え方もある。
162 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:51:01 ] 自治厨が湧いてきました
163 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:09:25 ] 自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと 2chのルールやスレのルールを指摘するのは自治厨行為ではなく 逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について
164 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 02:04:11 ] どっちでもいい。はやく次の質問へ
165 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:36:53 ] >>2 は別にこのスレの合意事項というわけではない。 過去スレのどこかで、誰かが勝手にテンプレに入れただけ。 なので、あまり気にするな。
166 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:43:01 ] そうでもないか
167 名前:デフォルトの名無しさん [2007/12/28(金) 12:03:27 ] 以下のケースでVBAの処理を止める方法は?(強制終了以外で on error gotoでmsgboxに行く仕様になっているため、 あと50000回くらいmsgboxをokし続けなければならない。 escを押しても、msgboxのok扱いにしかならない。orz
168 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:14:00 ] 電源断。
169 名前:デフォルトの名無しさん [2007/12/28(金) 12:17:23 ] enterをテープで止めて、トイレ行ってる間に 終わってた。
170 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:27:46 ] msgboxのあとプロシージャをぬければいいんじゃね
171 名前:デフォルトの名無しさん [2007/12/28(金) 12:31:09 ] もう実行しちゃった後の話よ
172 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:34:42 ] 50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな 50000回押せばいいよな
173 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:48:51 ] >> 167 混じれ酢するとCtrl + Break
174 名前:デフォルトの名無しさん [2007/12/28(金) 13:15:17 ] ありがとうござます こんなキー初めて使うわ
175 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 13:25:13 ] >>174 押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。
176 名前:デフォルトの名無しさん [2007/12/28(金) 15:12:43 ] 良からぬsiteを見ている途中に、excelが勝手にsaveを始めて あたふたすることってありますよね。
177 名前:\_____________/ mailto:sage [2007/12/28(金) 16:11:29 ] ∨ |/-O-O-ヽ| ブツブツ・・・ | . : )'e'( : . | ` ‐-=-‐ / \ ||\ ̄ ̄ ̄ ̄ ̄ ̄ \ ||\\. \ ∧_∧ ||. .\\ \ ( ;´Д`) (オイ、なんか変なのがいるぞ) . \\ \ / ヽ. . \\ / .| | | . \∧_∧ (⌒\|__./ ./ ( ´,_・・`)目合わせるなって ∧_∧ . _/ ヽ \ ( ) うわー、こっち見てるよ
178 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:52:13 ] セル範囲から検索できるactivecell.findみたいな関数ありませんか? (D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが
179 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:53:12 ] ってここVBAのスレじゃん 失礼。出直してきます
180 名前:デフォルトの名無しさん [2007/12/28(金) 22:22:11 ] いきなり長文にて失礼します。 生年月日の昭和・平成をまるで囲むため、中を透明にした楕円を描き、マクロの 自動記録でできた次のものを使用してきました。 ActiveSheet.Shapes.AddShape _ (msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) Excel2000〜2003では、普通に使用できていましたが、2007では楕円の内部が 黒く塗りつぶされてしまいます。 ネットや本で調べてみたのですが、図形描画については記述があまり見つからず 私のスキルでは、難しそうです。 ご教授願えると助かります。
181 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:31:22 ] 2007でマクロの自動記録すれば?
182 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:41:11 ] >>181 さっそくの書き込みありがとうございます。 やってみたのですが、2007では図形描画は自動記録できないらしいです。 私の調べた範囲では、どうやらExcel2007の仕様らしいです。 したがって、自分でマクロを組むしかないらしいのですが・・・