1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
177 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 00:10:28 ] 偉そうに答えてる人の方がネタに見える… (1) sum = x + sum (2) sum = x * 2 - 1 + sum (3) sum = x ^ 2 + sum
178 名前:デフォルトの名無しさん [2007/06/18(月) 00:55:34 ] >>177 ありがとうございました!独学なんで分からないところがたくさんですm(__)m
179 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 01:03:28 ] >>178 Excelより先に算数の勉強をし直した方が良いぞ。
180 名前:169 mailto:sage [2007/06/18(月) 01:14:50 ] >>176 あ〜ごめん xを必ずループさせろとは書いてなかったから ちなみに 俺が書いた(2)が空欄に入れるものだってわかってるよね? sum = 0 For x = 1 To 10 For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For Next x Msgbox "合計=" & sum End Sub ってことね 答えが先にかかれてたからふざけてみたんだけど ふざけすぎたかw 普通なら当然>>177 だわなw
181 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 04:00:12 ] ネタなのはわかるがiはどこから出てきたんだw
182 名前:デフォルトの名無しさん [2007/06/18(月) 16:22:16 ] EXCEL2003です。 半角アルファベット文字列の先頭だけ大文字にしたいのですが、 適切なものが見つかりません。 ググってProperを見つけましたが、これは先頭を大文字にするだけでなく 先頭以外の大文字を小文字にしてしまいますよね。 helloWorld → HelloWorldとしたいのですが、適切な方法を 教えていただけますか?
183 名前:デフォルトの名無しさん [2007/06/18(月) 16:54:13 ] 最初の一文字を取り出して大文字にすれば?
184 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 17:31:56 ] s = "helloWorld" Mid$(s, 1, 1) = UCase$(Mid$(s, 1, 1))
185 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:59:57 ] Midステートメント使う人久しぶりに見た気がする Midステートメント自体は自分で使いまくってるからよく見てるが 公開されたソース見ても、こういうところの回答見ても 使ってる人殆ど居ないからなぁ ところで、Leftステートメントは無いから代入左辺はMidでいいが 右辺の関数はMidではなくLeftの方がいいのでは? つ Mid$(s, 1, 1) = UCase$(Left$(s, 1)) まあ実はMidもLeftも無くてもOKなんだけどね Midステートメント側で置換文字数指定していれば、何文字代入しようと指定文字数以外は置換されない つ Mid$(s, 1, 1) = UCase$(s) 逆に代入する文字数を指定しておけば、置換する文字数は指定しなくても問題なかったりする つ Mid$(s, 1) = UCase$(Left$(s, 1))
186 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:32:41 ] >>185 横レスだが、勉強になった
187 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:41:49 ] つかMidって参照だけかと思ってたw
188 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 23:11:52 ] MSbasicからの伝統で、mid$は関数版とステートメント版がある。
189 名前:デフォルトの名無しさん [2007/06/19(火) 12:08:51 ] エクセルソフトを持ってないので、フリーソフトのOPENOFFICEを使用 ダウンロードしてVBAは作成できるんでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 13:18:08 ] >>189 アレ使えばね 具体的な話はスレ違いなので伏せるけど
191 名前:デフォルトの名無しさん [2007/06/19(火) 14:45:55 ] 日本語で書け
192 名前:デフォルトの名無しさん [2007/06/19(火) 14:54:14 ] 全くだ 質問内容は察せるが、日本語じゃないよな
193 名前:デフォルトの名無しさん [2007/06/19(火) 21:26:28 ] みなさん、こんばんは。 とある事情により、エクセルのワークシート内に三角波のデータを埋め込みたくなりました。 サインカーブのデータだったら、sin関数でデータを作ったことはありますが、 三角波の場合、どうしたらいいですか? 私がエクセル上でやろうとすると、くどい if文のネストになりそうです。 どなたか、あっさりしたもの、できませんでしょうか?
194 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:46:07 ] 汎用アルゴリズムの話はスレ違い VBAどころかVBも関係ないし
195 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:58:39 ] ワークシート埋め尽くす方法ぐらい教えてあげたらw
196 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:13:28 ] フーリエ展開してしまえw
197 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:48:00 ] >>189 >エクセルソフトを持ってないので ちょwww、当たり前だwww エクセルソフト www.xlsoft.com/jp/
198 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:24:31 ] インテルのコンパイラ高いな
199 名前:使えない子 mailto:sage [2007/06/20(水) 14:59:47 ] 上司からいきなり「調べといて」 キタ───ヽ(´Д`;)ノ───!!! 既存ブックのシート構成は、 (シート1)・書類のテンプレ (シート2)・いろんな調査項目 という感じで、シート2を開いてマクロを実行すると、 いろんな調査項目が大分類ごとに分けて、 書類のテンプレに記入してそれぞれシートを作る、 ということをしています。 今度は、それらの作られる大分類ごとのシートを 新しいブックに作りたい、ということです。 手作業であれば、 [シートの移動またはコピー]のダイアログで、 [移動先ブック名]に「(新しいブック)」を指定し、 [コピーを作成する]にチェックを入れて[OK]ですが、 これをマクロでやりたい、というのです。 [新しいマクロの記録]をしても記録されないので、 困ってしまいました。 マクロやVBA等でやるには、どうしたらよいでしょうか。 どなたかお力添えください。m(_ _)m
200 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 15:33:41 ] >>199 やってみたら記録されたけど? Sheets("Sheet1").Copy
201 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 18:34:08 ] 記録を停止してない なんてオチだったりしてW
202 名前:デフォルトの名無しさん [2007/06/21(木) 00:02:18 ] 前任の作ったエクセルファイル+VBAを別ファイルで再構築しているのですが、 errors(0).description の部分でエラー「コレクションが存在しません」になります。 元のファイルでは正常に動いているのですが、 新しいファイルではどのようにしたら回避できるのでしょうか。
203 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:09:31 ] 参照設定
204 名前:202 [2007/06/21(木) 00:42:58 ] レスどもです。Excelは2000で、 Microsoft DAO 3.6 Object Libraryの参照設定はチェック済なのですが それでもエラーが出てしまいます。 他にも必要な参照があるのでしょうか。
205 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:46:51 ] エラーなければerrorsコレクションはないだろ まずファイルの問題か環境の問題かはっきりさせること
206 名前:202 mailto:sage [2007/06/21(木) 01:30:40 ] 確かにそうですね。 言われてみればそもそもここはエラートラップなので 他の部分に問題がある可能性大です。切り分けに挑戦して見ます。
207 名前:193 [2007/06/21(木) 02:00:10 ] >三角波のデータ 自分で作りました。 作ったのは関数です。(セルに直接記述するのでVBAとは関係ないですね...) 割とあっさりめの形になったと思います。 言わば、sin関数になぞらえるなら、三角波関数みたいなもんです。 ↓ 1/(2π)*arcsin(sin(t/T*2π))/(1/4) 自分で自分を褒めてやりたいです。
208 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:37:41 ] うわ、重そう。つーか、頭悪そう。
209 名前:デフォルトの名無しさん [2007/06/21(木) 14:47:30 ] お聞きしたいんですけど コンボボックスのプロパティのLinkedCellに値が入らないのですが どうやって入れるのか教えてください
210 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 20:48:44 ] 普通に=で代入するか、プロパティウィンドウに入力するかだよ 間違った値入れてなければそれでOK
211 名前:デフォルトの名無しさん [2007/06/22(金) 00:02:30 ] >>208 頭わるいやつに作れるわけねーだろ。 おめぇ、つくってみ? ってか、つくれる?
212 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:04:35 ] >>211 本人乙。
213 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:38:54 ] >>211 煽ったら作って貰えると思って必死だな。 今宵は枕が涙で濡れてるんぢゃねぇの?
214 名前:デフォルトの名無しさん [2007/06/22(金) 00:48:37 ] バイナリーファイル(テキスト形式でないファイル)を開いて、 nバイト目の数字を読み込むっていうプログラムを組みたいのですが、 VBAでできますか?
215 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:56:55 ] よゆう
216 名前:214 [2007/06/22(金) 11:34:20 ] ちょっとしたヒントだけでも教えてつかわさい。
217 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 12:47:31 ] open filename for random as #filenumber len=1 get #filenumber, n, buf
218 名前:214 [2007/06/22(金) 15:54:48 ] えっ、まじですか。 N88BASICとまったく同じぢゃ・・・
219 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:56:42 ] そりゃぁ、MicrosoftBasicの派生だからねぇ。どっちも。
220 名前:214 [2007/06/22(金) 18:54:47 ] わしもスレに貢献しよう arcsin(sin(t/T*2π)) って t/T*2π と同じでしょうw つりか・・・まじか?
221 名前:デフォルトの名無しさん [2007/06/22(金) 23:32:39 ] 教えて頂きたいです。△にぶつかった後に円を描くようにしたいのですが・・・ 難しくて。ご教授下さい。 Sub seven() ' 弾けるボール ActiveCell.Offset(5, 0).Value = "手" ActiveCell.Offset(5, 1).Value = "○" ActiveCell.Offset(5, 7).Value = "▲" For i = 1 To 6 For J = 1 To 500 ActiveCell.Offset(5, i).Value = "○" ActiveCell.Offset(5, i).Value = "" ActiveCell.Offset(5, i + 1).Value = "" ActiveCell.Offset(5, i + 1).Value = "○" Next J ActiveCell.Offset(0, i + 1).Value = "" Next i ActiveCell.Offset(5, 7).Select.Value = "☆" For i = 1 To 3 A = ActiveCell ActiveCell = "" ActiveCell.Offset(-1, 1).Activate For J = 1 To 500 ActiveCell = A Next J Next i For i = 1 To 3 A = ActiveCell ActiveCell = "" ActiveCell.Offset(1, 1).Activate For J = 1 To 500 ActiveCell = A Next J Next i For i = 1 To 3 ActiveCell = "" ActiveCell.Offset(1, -1).Activate For J = 1 To 500 ActiveCell = A Next J Next i For i = 1 To 3 A = ActiveCell ActiveCell = "" ActiveCell.Offset(-1, 1).Activate For J = 1 To 1000 ActiveCell = A Next J Next i End Sub
222 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:51:21 ] >>220 前者は周期関数になる。元レスは、それを使って三角波にできると悦に入っていたらしい。
223 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:35:42 ] >>221 スレ違い。>>16
224 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 13:52:35 ] >>223 スレ違いで拒否るのもいいが、いい加減過疎ってないか?このスレ あと質問に答えても質問者もほったらかし多いし・・・ 俺はわからんから答えんだけだが
225 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 15:11:42 ] > いい加減過疎ってないか?このスレ この板はこんなものだよ 一応ここは過疎板だから 当然、この板にもここより賑わってるスレはあるが このスレでも平均以上どころか勢い上位1割に入るほど もっと静かでもいいくらいだ
226 名前:デフォルトの名無しさん [2007/06/24(日) 08:44:32 ] あるRangeの一番左上のセルの情報を得たいのですが、 どうしたらよいでしょうか? Offsetだと、Range全体が取得されてしまいます。 左上のセルのRangeだけを得たいのですが・・・ ActiveSheet.Range("資産表[資産]").Offset(0, 0).Select
227 名前:デフォルトの名無しさん [2007/06/24(日) 08:47:10 ] >>226 自己解決しました。 ActiveSheet.Range("資産表[資産]").Cells(1, 1).Select Cellsでした。Rangeにないかと思ってました。
228 名前:デフォルトの名無しさん [2007/06/24(日) 09:49:10 ] すみません、質問です。 商品NO 値段 日付 〜 100 20 5/1 101 21 5/1 といったデータが600まである表があります。 修正や訂正をするため、月一で直さなければいけないんですが 一回別シートに抽出して,そこで変更をし、元あった行に上書きをする そのように作れと上司にいわれてしまいました。 抽出し、別シートに移すことは出来たのですが、それを元の所に 上書きするのには、どうしたらいいのでしょうか? 切実に困っています。教えていただけたら嬉しいです。
229 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:20:48 ] 抽出した行と元の行を関連づければいいでしょ 方法はいくらでもあるけど 一番簡単なのは別のシートの同じ行に抽出するやり方かな
230 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:15:43 ] >>228 商品Noをkeyにして.findメソッドで検索して コピーするVBAをつくる
231 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:16:46 ] 同じ行への抽出だとわざわざ抽出する意味がないと言われます 関連付けっていうのはどのようにやるのですか?
232 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:37:17 ] すみません、書き込みしている最中に書き込んで頂いてたみたいです。 わかりました、まだKeyとかFindメソッドの使い方が上手ではないのですが 月曜日にがんばってみます。 もしまた解らなかったら書き込みしにきます。 そのときもよろしくお願いします。 ありがとうございました。
233 名前:: [2007/06/25(月) 23:05:08 ] マクロ使って初心者でも簡単に作れるプログラムって何かあります? 課題でなんでもいいから作ってこいって言われたんですけど何を作ればいいのやら。 参考書買うしかないんすかね〜お勧めのWEBサイトありますか?
234 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:07:54 ] MsgBox "Hello World!"
235 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:59:48 ] >>1 の2番目です! しつもん! vlookupのプロパティ?に変数を使いたいんですがうまくいきません どうすればいいでしょうか? ↓こんなふうにしたい for count=1 to 10 Cells(count,4).select Activecell.Value = "=Vlookup("count"1,B:C,2,False) next count A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな? BC列も本当はRange("B65536").End(xlUp).Selectで取得した値を使いたいです。 というかそれ以前にRangeで変数を使う方法すらわからない・・・
236 名前:235 mailto:sage [2007/06/26(火) 01:07:09 ] 書きまちがいを発見 × Activecell.Value = "=Vlookup("count"1,B:C,2,False) △ Activecell.Value = "=Vlookup(1"count",B:C,2,False)" ○ ? ところで="〜"で書くのとApplication.WorksheetFunction .VLookup使うのって何か違うのでしょうか?
237 名前:デフォルトの名無しさん [2007/06/26(火) 01:08:48 ] ExcelVBAで、サブルーチンのネストはできますか?
238 名前:デフォルトの名無しさん [2007/06/26(火) 01:19:37 ] >>235 悪い、したいことが分からない。 >A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな? これってVLOOKUPか? ちなみに ActiveCell.Value="=SUM(B2:B4)" ActiveCell.Value=Application.WorkSheetFunction.Sum(Range("B2"),Range("B4")) との違いは、最初の方は、マクロ実行後にB2からB4のセルの値が変われば、ActiveCell の値も変わる。でも、下の方は変わらない。 それだけじゃないけどな。
239 名前:235 mailto:sage [2007/06/26(火) 01:33:37 ] >>238 説明悪くてすまん まずA1のセルを選択 B列のどこかにA1と同じデータがあったら(B10とする)C10をD1にコピー これをA10まで繰り返し vlookupじゃないの? 当初↓みたいなことをやってたのですが、データが各1万行とかになったら速度が恐ろしいことになりまして。 どうにかこれを高速化したいのです。 for count1=1 to Range("A65536").End(xlUp).Select for count2=1 to Range("B65536").End(xlUp).Select if Cells(count1,1).value = Cells(count2,2),value then Cells(count1,4).value = Cells(count2,3).value end if next count2 next count1
240 名前:デフォルトの名無しさん [2007/06/26(火) 01:47:48 ] >>239 ああ、確かにVLOOKUPだな。 この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。 それをセルD10まで下にコピーするのじゃいけないの?
241 名前:235 mailto:sage [2007/06/26(火) 01:58:26 ] >>240 各1万行くらいで行数が不定なのです まとめて出来る(で、forより早い)方法があればvlookupでなくてもなんでもいいのですが
242 名前:デフォルトの名無しさん [2007/06/26(火) 02:17:26 ] >>241 もう頭が働かないんで… とりあえず235で質問してたRangeを変数に代入する方法 Dim targetRange As Range Set targetRange = Range("A65536").End(Xlup) これでtargetRange.Rowで最終行が何行目か分かる。 ちなみにforでも一万行くらいならあまり時間かからないような気がする。 forのネストにする意味が分からない。一致したらExit For でFor文を 抜ければいいのに。
243 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:15:16 ] >データが各1万行とかになったら速度が恐ろしいことになりまして 実行中の画面描画をOFFにしてないんじゃない? そこ変えるだけで解決することもあるよ
244 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:20:47 ] Application.ScreenUpdating = False 処理の終了段階でTrueに戻して下さい。 Application.EnableEvents = False 処理の終了段階でTrueに戻して下さい。 Application.Calculation = xlCalculationManual 処理の終了段階でxlCalculationAutomaticに戻して下さい。 マクロ動作中にEscキーで止められるのを抑制する。 マクロ動作中に一切のキーやマウス操作を制限する。 Application.Interactive = False 処理の終了段階でTrueに戻して下さい。 但し、この状態で何らかの理由でマクロが停止してしまうと、Excel自体は何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。この記述だけは確実に動作検証が終わってから設定して下さい。 マクロ動作中はマウスカーソルを「砂時計」にする。 Application.Cursor = xlWait 処理の終了段階でxlDefaultに戻して下さい。 www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_040.html
245 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:00:51 ] >>235 Range("D1").Resize(Cells(Rows.Count, "A").End(xlUp).Row).Formula = _ "=VLOOKUP(A1,B$1:C$" & Cells(Rows.Count, "C").End(xlUp).Row & ",2,FALSE)" >>244 >何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。 イミディエイトウィンドに Application.ScreenUpdating = True で、エンターキー
246 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:07:51 ] A B C D 東京 東京 東京 =LOOKUP(A1,B:B,C:C) 大阪 大阪 愛知 名古屋 福岡 福岡 北海道 札幌 とするとD1が名古屋になるんだけど気のせい?
247 名前:235 mailto:sage [2007/06/27(水) 01:06:07 ] >>242 ,243,244,245さん、ありがとうございます。 >>242 逆でして、 for i=1 to Range("A65536").End(Xlup) Range("A"i).select next i みたいなことがしたかったのです。 >>243 ,244,245 本日ぐぐりまくってとりあえずそこらへんの設定をしました。 やりたいことを綴ってたらえらい長くなってしまったので表にしました(とりあえずodsとxml) 見ていただければ幸いです ttp://bebe.run.buttobi.net/up/src/be_1262.zip
248 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:10:52 ] 2003personalだとエラーが出て開けない
249 名前:235 mailto:sage [2007/06/27(水) 01:21:05 ] うゆー ってか、今更xlsを発見した。すまねぇ ttp://bebe.run.buttobi.net/up/src/be_1263.zip
250 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:27:13 ] なんか昔、これの横バージョンを総合相談所のほうでコード書いた気がする…
251 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:52:19 ] 横バージョンじゃなくて、似たような表の作成だった。 相談所55の部品表のをいじればなんとかなるんじゃないかな。 実行速度もシートをメモリに読み込んですれば大丈夫だろう。 もう寝る。
252 名前:245 mailto:sage [2007/06/27(水) 17:46:50 ] 'Microsoft Scripting Runtime を参照設定 '結果はG,H,I列の1行目以下に出力 '結果出力用配列 出力行数を上回る行数を確保。下回るとエラー Dim ans(5000, 2) As String Dim d As New Scripting.Dictionary Dim v() As Variant Dim buf As Variant Dim vv As Variant Dim i As Long Dim n As Long v = Range("D1", Cells(Rows.Count, "E").End(xlUp)).Value For i = 1 To UBound(v) If d.Exists(v(i, 1)) Then d(v(i, 1)) = d(v(i, 1)) & vbTab & v(i, 2) Else d.Add v(i, 1), v(i, 2) End If Next i v = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value
253 名前:245 mailto:sage [2007/06/27(水) 19:00:43 ] For i = 1 To UBound(v) If d.Exists(v(i, 1)) Then buf = Split(d(v(i, 1)), vbTab) For Each vv In buf ans(n, 0) = v(i, 1) ans(n, 1) = v(i, 2) ans(n, 2) = vv n = n + 1 Next vv Else ans(n, 0) = v(i, 1) ans(n, 1) = v(i, 2) n = n + 1 End If Next i Set d = Nothing Range("G1").Resize(n, 3).Value = ans
254 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:42:09 ] をいをいw
255 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:38:13 ] >>254 どうした?
256 名前:デフォルトの名無しさん [2007/06/28(木) 09:32:06 ] >>252 >>245 関連ではないのだが、 > 'Microsoft Scripting Runtime を参照設定 > Dim d As New Scripting.Dictionary これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?
257 名前:デフォルトの名無しさん [2007/06/28(木) 17:31:08 ] すいません。質問です。 シート1のあるA1に「A」、A2に「B」、B1に「1」、B2に「2」が入っています。 シート2にはA1に「A」、A2に「3」、B1に「B」、B2に「4」が入っています。 シート1のA1の「A」を検索した上でその下のセルにある「1」をシート2の「A」の横にあるセルに入力し、且つそのセルにあった数値(ここでは3)を右にシフトしたいのです。 VBではどうすればいいですか?
258 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 19:38:54 ] Shift:=xlToRight
259 名前:235 mailto:sage [2007/06/29(金) 00:17:52 ] 相談所55が見つからなかったので自力で作ったよ! よく考えたら別に一枚のシートじゃなくていいじゃん、ということに遅まきながら気付いたので for i,j=1 to 各行数 If Cells(i,1).value = Cells(j,4).value then k=k+1 Sheet("Sheet2").Cells(k,1).value = Cells(i,1).value Next j 〜(マッチしなかったときの処理とか)〜 Next i 的な流れで完成したお! 遅いお! >>252 何これ!チョー早い! 意味が全然分からないけど今から修行する!さんくす! ところで=minute(now())とかsecond(now())とか並べてるとyear(now())だけ変になるんだけど何故?
260 名前:デフォルトの名無しさん [2007/06/29(金) 00:24:35 ] 値のコピー貼付をワークブック間で行いたいのですが、 ' @コピー元 Workbook("").Sheets("").Activate Range("").Copy ' Aコピー先 Workbooks("").Sheets("").Activate Range("").Select Selection.Pastespecial Paste:=xlValues ファイルをまたぎ、かつ値貼付の場合このような段階を踏まないとエラーになってしまいます。 同シート内での値コピーに使える Range("").Copy Range("").Pastespecial またはRange("")=Range("") のような簡潔な記入法は無いものでしょうか?
261 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:42:07 ] ですてぃねーしょん
262 名前:デフォルトの名無しさん [2007/06/29(金) 01:05:23 ] すみませんが、ひとつ教えてください。 階乗を計算する関数を作成したくて、 以下のようなプログラムを書いたのですが、 戻り値が0です。 なぜでしょうか? (ちなみに、xxをkfactにすると、正常に動くようです) ぜひ、ご回答お願いいたします。 Public Function kfact(n As Integer) As Integer Dim i As Integer Dim xx As Integer i = 1 xx = 1 Do While i < n xx = xx * i i = i + 1 Loop End Function
263 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:26:15 ] >>262 Public Function kfact(n As Integer) As Integer Dim i As Integer Dim xx As Integer i = 1 xx = 1 Do While i < n xx = xx * i i = i + 1 Loop '↓これ追加(戻り値) kfact = xx End Function ちなみに階乗なら=fact()って関数あるけど それじゃダメなん? VBAで使うならApplication.WorksheetFunction.Fact()ね
264 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 16:35:16 ] >>256 わけ。特に珍しい手法ではない。 Dictionaryやfsoは便利なので結構良く使うと思う
265 名前:デフォルトの名無しさん [2007/06/29(金) 20:11:27 ] エクセル2003、ウィンXPです。 以下の様なマクロを作成しました。 データの抽出後に、可視セルの値を順に特定セルに入れて、 印刷したいのですが、思った様に動作しません・・・。 どなたか、お知恵を! Sub 抽出と印刷() '書類作成用にデータを抽出。 'シート1のBP列がゼロで無いものを抽出。 Sheets("シート1").Columns("BP:BP").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd '抽出されたリストのBP列の値をシート2のD68に順番に入れて、2枚ずつ印刷する。 ‘抽出から除外された行は印刷からも除外したいので、可視セルだけで処理したい。 Dim i As Long For i = 2 To Worksheets("シート1").Cells(Worksheets("シート1").Rows.Count, 1).End(xlUp).SpecialCells(xlCellTypeVisible).Row Worksheets("シート2").Range("D68").Value = Worksheets("シート1").Cells(i, 1).SpecialCells(xlCellTypeVisible).Value '印刷処理をします。 Sheets("シート2").PrintOut copies:=2, Collate:=True, preview:=True Next i End Sub
266 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:28:14 ] >>256 ,264 > これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ? 正確には違う Microsoft Scripting RuntimeはWSHのインストーラーパッケージに含まれてはいるが Scripting.DictionaryはWSHのオブジェクトではなく、ActiveXの汎用コンポーネントに含まれるオブジェクト WSHのオブジェクトじゃないから、WSHから使う場合もWSHのオブジェクトであるWScriptオブジェクトみたいに いきなり使うことは出来ず、CreateObjectなどで外部参照してやる必要がある
267 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:58 ] ShowしたUserFormってどうやって閉じていますか? UserForm1.Close こんなのないよね? Unload Meってのはいまいち分からない。不便。
268 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:08:07 ] Unload UserForm1
269 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:24:03 ] >>268 サンクス
270 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:25:06 ] >>265 どこが思ったように動作しないのか説明がないけど 抽出したあとCopy使えばいいよ >>267 UserForm1.Hide
271 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:04:38 ] >>270 Hideは見えなくなるだけ
272 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:46:27 ] >>271 うん、でも>>268 の人がもう答えてたから他のを書いた あと一応はShowとHide、LoadとUnloadが対応になってるかなと思ってるし
273 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:35:58 ] Accessではclose使えるのに どうしてExcelではだめなのでしょう?
274 名前:262 [2007/06/30(土) 01:50:26 ] 263 ありがとうございます。 ワークシート関数ってオーバーフローするイメージがあるので、あんまり好きじゃないのです。
275 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:50:52 ] >>92 Application.FileSearchは削除されたよ。 以前から挙動不信だったんで、存在そのものを抹消したのだと思われ。
276 名前:デフォルトの名無しさん [2007/07/01(日) 03:23:57 ] 5人で30回じゃんけんをして、出した手をB〜Fに書き込み、勝敗をG〜Kに 書き込むマクロを短めで作りたいのですが、勝敗パターンを作る以外の方法が思いつきません。 よろしくお願いします。
277 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 04:25:41 ] >>276 >>16 さようなら
278 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 08:47:13 ] >>275 あー確かに挙動不振だな
279 名前:デフォルトの名無しさん [2007/07/01(日) 09:19:11 ] 置換について質問です。 以下の様にすると、"さんま"という文字列を"魚"に置換できるのですが、 "さんま"、"タイ"、"いわし"のいずれかの場合に"魚"に置換する場合はどうやって指定しますか? Selection.Replace What:="さんま", Replacement:="魚"
280 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 09:31:10 ] >>279 with Selection .Replace What:="さんま", Replacement:="魚" .Replace What:="タイ", Replacement:="魚" .Replace What:="いわし", Replacement:="魚" end with
281 名前:デフォルトの名無しさん [2007/07/01(日) 09:38:53 ] >280 ありがとうございます!
282 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:13:19 ] >>276 総合で訊いてる奴だよな?
283 名前:280 mailto:sage [2007/07/01(日) 10:20:13 ] >>281 ぉぃ! まさか、こんなこと訊いてるんじゃないよなぁ...と思いながら、 答えてみたんだが、解決かよ(-_-#);
284 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:57:24 ] 釣りだろ
285 名前:デフォルトの名無しさん [2007/07/01(日) 11:57:26 ] シートAに以下のマクロ実行するボタンがあります。 シートBを選択した状態だと問題なく動作するが、 シートAから実行するとエラーがでます。 最終的にシートA以外は不可視にしたいので、 Worksheets("シートB").select をしたくないです。 何か良い方法有りますか? Worksheets("シートB").Range(Cells(1, 1), Cells(100, 100)).Sort Key1:=Range("a1"), Key2:=Range("d1"), Header:=xlYes
286 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:11:49 ] Set ws = Worksheets("シートB") With ws .Range(.Cells(1, 1), .Cells(100, 100)).Sort Key1:=.Range("A1"), Key2:=.Range("D1"), Header:=xlYes End With
287 名前:デフォルトの名無しさん [2007/07/01(日) 15:26:32 ] >286 有難うございます。 試してみましたところ、シートBが選択された状態では動作しました。 シートAが表示された状態で実行すると、 「アプリケーション定義またはオブジェクト定義のエラーです」となります。
288 名前:デフォルトの名無しさん [2007/07/01(日) 19:25:16 ] Σ(゚∀゚;) ?
289 名前:デフォルトの名無しさん [2007/07/01(日) 19:45:48 ] 285です。 解決しました。 Worksheets("シートB").Range(Worksheets("シートB").Cells(1, 1), Worksheets("シートB").Cells(100, 100)) _ .Sort Key1:=Worksheets("シートB").Range("a1"), Key2:=Worksheets("シートB").Range("d1"), Header:=xlYes
290 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:52:21 ] >>289 これって>>286 と何が違うん?
291 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:42:36 ] Excel2003なのですが、 VBエディターで編集したマクロをリロードするための ファンクションキーってありますでしょうか?
292 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:01:44 ] エクセルの2つのシートを比較するマクロを作っているのですが、 行と列のサイズが大きくなると処理が重くなります。 1000*256ぐらいで処理が重くなります。 これは、仕様なんでしょうか。 For i=0 To 65536 For j=0 To 256 比較 Next Next 使われているシートの範囲を読み取るとか 範囲を設定するとかすればいいと思っています。 指摘などありましたらよろしくお願いします。
293 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:19:53 ] >>292 Dim s As Range Set s = ActiveCell.SpecialCells(xlLastCell) MsgBox s.Column & " " & s.Row
294 名前:デフォルトの名無しさん [2007/07/02(月) 20:40:46 ] arry(あ,い,う,え,お) を、 ExcelのセルA1〜E1に 一気に貼り付ける方法てないですかね。 For文で順番に セルA1に「あ」を入れて セルB1に「い」を入れて… というのは分かるんですが。 なんかもっとこう効率良いやり方ないかな。
295 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:05:35 ] >>294 おしい、そこまでいけて何故できないw Range("A1:E1") = Array("あ","い","う","え","お") 是非感想を。
296 名前:デフォルトの名無しさん [2007/07/02(月) 21:14:58 ] >>295 で、できたー!! ありがとう。これでよかったのか… Pasteにばっか気をとられてたわ。
297 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:16:07 ] VBAのコードを含んだブックを余所にあげたりするとき、デジタル署名とか どうしてますか? 律儀にベリサインから買ったりしてるんでしょうか?
298 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 06:33:52 ] SelfCert 外に出すときは、署名壊れたとき用に対応策(向こうで再署名)を書いておく # ソースは見られるが管理者だけなら問題なかろう 2000ならこれでOK それ以降なら我慢して使ってもらうしか。 一応、毎回署名を確認してもらう事に… 既に署名を持っているならともかく、予算的にExcelの為に申請なんて出せないし。
299 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:15:58 ] 売る場合はともかく、あげる場合は向こうで勝手に対応してもらう
300 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:31:57 ] Set objIE = CreateObject("InternetExplorer.application") で、IEを起動しています。 なんらかの操作で、IEのウインドウが最小化された場合に備えて、それを「元のサイズに戻す」の 処理を行いたいのです。 検索してみたところ、VBでは、SW_SHOWNA の利用で良いみたいですが、 同様の処理をVBAで行いたいのです。 ojbIEに対して処理を加える方法は無いでしょうか? 他に考えたのは、API32を参照しobjIEとは関係なく処理を行うですが、そうした方が良いのでしょうか? よろしく御願いします。
301 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:10:35 ] >>300 >>16
302 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:41:01 ] 厳しいなあw
303 名前:300 mailto:sage [2007/07/03(火) 16:21:57 ] Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long If objIE.Top < 0 Then ShowWindow objIE.hWnd, 9 'SW_RESTORE アクティブにもなる。 End If で解決しました。objIE.Top < 0 は怪しいですが、良しとします。
304 名前:デフォルトの名無しさん [2007/07/03(火) 18:42:33 ] >>295 それ、A1:E1ならできるけど A1:A5だとうまくいかない。なんでだろ?
305 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:17:56 ] >>302 × スレ違い指摘が厳しい ○ 質問者がVBAの範疇を理解してない
306 名前:デフォルトの名無しさん [2007/07/04(水) 17:34:35 ] VBAというか、プログラミングの初心者です。 変数のスコープ(有効範囲?)のことでハマッっています。 UserForm1のなかの冒頭でPublicとして宣言した変数aの値を (この値は同じくUserForm1内にPublicとして記述されたプロシージャによって代入される) UserForm2のなかのプロシージャ内でmsgbox(a)として表示しようとするのですが、 値が空白になってなにも表示されません。 UserForm1 UserForm2のすべてのプロシージャをPublicにしても同じです。 こんなボケに対する、どなたかツッコミをお願いします。
307 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:47:03 ] Msgbox(UserForm1.a) 理由:ユーザフォームはモジュールではなくクラスだから
308 名前:304 [2007/07/04(水) 19:03:53 ] 自己解決。 これでいけた。 Range("A1:A5") = Application.Transpose(Array("あ", "い", "う", "え", "お"))
309 名前:306 mailto:sage [2007/07/04(水) 22:42:37 ] >>307 助言くださったとおり、うまくいきました。理由を書いてくださったのがヒントになり、 Public変数をUserFormではなく標準モジュールのほうで宣言すればいいことに 気がつきました。どうも有難うございました。
310 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 12:37:25 ] >Public変数をUserFormではなく標準モジュールのほうで宣言すればいい 死ね
311 名前:デフォルトの名無しさん [2007/07/05(木) 21:18:05 ] あの子ったら、また私のパンティを……。 息子の康彦を学校へ送りだし、洗濯にかかろうとした美沙緒は、 洗濯機のなかに無造作に放りこまれた自分のパンティを見て、大きく溜め息をついた。 困ったわ。どうすればいいのかしら?…… パンティを手に持ったまま、美沙緒は考えこんでしまった。 康彦は十四歳の中学二年生。七つ年上のいまの夫と大恋愛に落ちた美沙緒が、 周囲の猛反対を押しきって、十八歳のときに産んだ子だ。 その康彦の不可解な行動に美沙緒が最初に気づいたのは、もう一年近くも前のことになる。
312 名前:デフォルトの名無しさん [2007/07/05(木) 21:23:27 ] 小学生の頃、同じクラスのヤシんちに行った。ソイツの姉ちゃんは高校生でキレイだった。 化粧してるのをボケーと見てた。 「何で見てるの?」 やさーしく微笑んでくれた。 「ち、ちゅーしたい!」 おいら、とっさに言った。 姉ちゃん、頭なぜなぜして、オデコにちゅーしてくれた。 「口紅ついちゃったわね」 コットンでキレイにしてくれた。 おいら、コットンを奪って逃げた。 次の日、姉ちゃんに告った。 「お姉ちゃん、彼氏いるの」 おいら「ならば、貴様を殺して永遠に我と共に」 姉ちゃん「よかろう。来るが良い」 虚空を突き破る轟音。空気を切り裂く甲高い音。 おいらの口から鮮血があふれ出す。 おいらの拳は僅かに届かず、逆に手刀が胸に突き刺さっている。崩れ落ちるおいら。 おいら「・・・これで、貴様は俺を忘れないだろう。ぐ・・」 姉ちゃん「忘れはせぬ。貴様の魂我が心と共に。悲しき男よ。誰よりも愛深く、拳でしか愛を語れぬゆえに」 死してなおその男の顔に浮かぶ表情は喜びであったか悲しみであったか。 その時、一陣の風が吹いた。 愛に死んだ修羅の魂を運び去るように。
313 名前:: [2007/07/06(金) 22:24:01 ] 00年 01年 02年 03年 売上高 キャベツ 500 400 300 200 ニンジン 600 300 400 500 トマト 400 400 500 400 レタス 300 500 600 300 年代別に最も多い売上高の野菜を調べるためのアルゴリズムってどうすればいいんですか? 上の例で言うと00年の売上高がもっとも高いのはニンジンなのでマクロをつかって00年 ニンジン、01年レタスというようにセルに順番に出していきたいんですがどうすればいいんで しょうか?
314 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:04:40 ] >>313 VBAを使うまでもない。よってスレ違い。
315 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:18:00 ] >>310 >死ね って、どういう意味ですか?
316 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:24:52 ] >>315 つ[辞書] つ[goo.ne.jp]
317 名前:: [2007/07/07(土) 01:04:04 ] >>314 課題でどうしてもVBAを使ってやらないとだめなんです。 まだはじめたばかりで普通にやったほうが早いんですけど。 せめてどのような文法を使ったらいいのかだけでも教えてもらえませんか?
318 名前:デフォルトの名無しさん [2007/07/07(土) 01:54:03 ] >>317 ここは宿題スレじゃない
319 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 11:55:37 ] 00年 01年 02年 03年 売上高 キャベツ 500 400 300 200 ニンジン 600 300 400 500 トマト 400 400 500 400 レタス 300 500 600 300 ニンジン レタス レタス ニンジン
320 名前:>314 [2007/07/07(土) 14:28:49 ] Sub CHEATFROM2CH() For c = 2 To 5 val1 = 0 val2 = "" For r = 2 To 5 If Cells(r, c) > val1 Then val1 = Cells(r, c) val2 = Cells(r, 1) ElseIf Cells(r, c) = val1 Then val1 = val1 val2 = val2 & "と" & Cells(r, 1) ElseIf Cells(r, c) < val1 Then val1 = val1 val2 = val2 End If Next r Cells(12, c) = val1 & "円の" & val2 Next c End Sub もっと削れるけど、このままの方がわかり易くていいだろ…
321 名前:デフォルトの名無しさん [2007/07/07(土) 16:26:12 ] シート2に顧客番号と名前のリストを置いて、 シート1のA1に、例えば「10」と入力した時にそれに対応するシート2の 顧客番号10番の名前を、シート1のA2に表示させたいんですが。 初心者の俺でもできるかなと思いましたが分かりませんでした。 orz よろしくお願いいたします。
322 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 16:56:22 ] >>321 それを何故VBAでやりたい? シートだけでできるっしょ。
323 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:06:56 ] B列にhh:mm:ss形式で入っている時刻をまず文字列(’シングルクォーテーションをいれるみたいなイメージなんですが)にして、 次にA列の文字列と連結してC列に表示していきたいのですが、 B列のhh:mm:ss形式をそのままの形で文字列にするにはどうすればよいのでしょうか?
324 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:28:31 ] しょうがねぇなぁ…… 手元にOpenOfficeしかないから適当に読み替えて試してくれ。 >>321 顧客番号がA列、名前がB列として、 A2 =vlookup(a1;シート2.a1:b9999;2) >>323 C5 =a5&text(b5;"hh:mm:ss")
325 名前:321 mailto:sage [2007/07/07(土) 17:59:42 ] >>324 早速のレスありがとうございました! 試してみてエラーが出たので悩みましたが、 =VLOOKUP(A1,Sheet2!A1:B9999,2,TRUE) でうまくできました! 2人でやっているお店で店長が入院してしまい、自分1人ですべてこなすために 手書きでやっていた部分の仕事をどうしても合理化しなくてはいけなかったので とても助かりました。ありがとうございました。
326 名前:321 mailto:sage [2007/07/07(土) 18:56:36 ] すみません、追加で質問させてください。 顧客が9999人だった時に、10000以上の数字を誤入力してしまうと 9999番目の人が表示されてしまいます。データの入力規則で縛ろうにも、 毎日顧客は増えていきますのでその度に手直しできません。 良い知恵がありましたらよろしくお願いいたします。
327 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 18:57:55 ] 数式を穴があくまで見つづけろボケ
328 名前:: [2007/07/07(土) 22:05:29 ] >>320 まじでありがとうございます。 自分もこんなふうにできるようになりたいです
329 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 22:09:53 ] >>328 1週間くらい勉強すれば、このくらい出来るようになるよ
330 名前:: mailto:sage [2007/07/07(土) 22:29:29 ] お世辞だよ
331 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 22:44:56 ] 初心者なのですが、質問させて下さい。 環境はWinXP+Excel2003です。 VBAでFor文を使ったネスト構造を作っています。 3階層のネスト構造の場合、 各変数x,y,zとして以下のロジックを作ってみました。 For i = 1 to 3 For j = 1 to 3 if i = j then exit for For k = 1 to 3 if j =k then exit for if k=i then exit for <処理> Next k Next j Next i 期待としては、同じ数が出たときだけスルーするロジックになって欲しかったのですが。 実際には、そうはならず、9パターン中、1-2-3と1-3-2と2-1-3と2-3-1と3-1-2と3-2-1の 6パターン処理されるつもりだったのに、2-3-1と3-2-1の2パターンしか処理されませんでした。 ロジックのどこがおかしいのでしょうか。 おそらく、exit for の設定を私が判っていないせいの様な気がするのですが…
332 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:03:30 ] そりゃぁ、exitでforから抜けちゃってるからねぇ。
333 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:06:37 ] うすうす気付いてるようだけど、ループのスキップではなく、ループの終了(Exit For)をしてるから 1=1でExit Forすると、以後の2〜3は処理されない For i = 1 To 3 If i = 1 Then Exit For Debug.Print i Next i で、2と3が出力されませんと言ってるようなもの 一致条件でExitではなく、不一致条件内に内部ループや処理を置けばいい
334 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:32:36 ] >>332 >>333 迅速なレスをありがとうございました。 やはり、Exit Forが悪いと言うことで、 当該部分を削除し、以下のように変更したところ、期待通りの結果が出来ました。 if i = j then elseif j = k then elseif i = k then else <処理> endif 適切なヒントを下さり、本当にありがとうございました。
335 名前:>326 mailto:sage [2007/07/08(日) 01:15:38 ] 引数に"TRUE"を使うからそうなる。 "TRUE"だと完全一致しなくてもデータを読んでしまうので "FALSE"(完全一致必須)にするのが一般的 蛇足すると、Sheet2がデータ専用なら行数を限定する必要は無い VLOOKUPのデータ元参照式には、参照範囲のズレを防ぐため普通$を付ける。 てことでこんなんが妥当かな。 =VLOOKUP(A1,Sheet2!$A:$B,2,FALSE) ところでここVBAスレなんだけど…
336 名前:321 mailto:sage [2007/07/08(日) 02:56:27 ] >>335 詳しく解説していただき本当に感謝です。 正直、TRUEやFALSEの意味もろくに分かっていなかった自分です。 スレタイだけ見てここで質問してしまい、大変お邪魔しました。
337 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 07:08:08 ] >>335 ExcelとVBAの質問スレらしいよ
338 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 07:55:16 ] ×ExcelとVBAの質問スレ ○ExcelのVBAの質問スレ 例えスレ立て主の意図が前者だろうと、2chの規則的には プログラム技術板でExcelのVBA以外の話は板違いになるからね
339 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 11:08:17 ] すこしスレ違いだが、皆さん大丈夫? ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070620/275328/ Excelレガシー問題
340 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 12:02:44 ] SOXで大変なのは全体最適を考えてこなかった その記事で言う情報システム部門の方なんじゃね? 未だ運用もはっきりしないのにあと半年少々でどうするんだろ。
341 名前:デフォルトの名無しさん [2007/07/08(日) 15:40:12 ] 80以下なら赤 90以下なら黄色 100以下なら緑 といったようにセルに入力された値によって 背景色が変わるという列を作りたいのですが どうすればいいのでしょうか?
342 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:35:29 ] それをVBAでしたいの? そうでなければスレ違い。条件付き書式ググれ。
343 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:57:28 ] 現在、Excelファイルが60,000ファイルほどあります。 その全ファイルから、一部分(一番上の5行ほど)だけ別のエクセルファイルにコピーするロジックを作りました。 ロジックの概要は以下の通りです。 処理の内容としては、すでに開いているブックから他のブックを開いて、必要な部分をコピー後にクローズさせています。 Set wb2 = Workbooks.Open(Filename:="aaa.xls") Set ws2 = wb2.Worksheets("Sheet1") <処理> ActiveWorkbook.Close saveChanges:=False Set newbook = Nothing 上のロジックでコピーを行っていると、最初の1,000ファイルぐらいはサクサクオープン/クローズの処理が出来るのですが、 段々オープン/クローズの時間が遅くなってきて、最期は「xxx.xlsはファイルが読み取り専用か、読み取り専用フォルダにあります(略)」 と表示され、ファイルオープンが出来なくなります。 なお、エラーが出るファイルも、一回Excelを閉じると、正常に表示できるので、ファイルが壊れているわけではなさそうです。 この場合、問題の原因がVbaなのか、ハードウェアなのか、OSなのかよく分かりません。 もし何かご存じのことがありましたら、教えていただけませんでしょうか。
344 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 19:15:00 ] 問題の原因はおまえのプログラム
345 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:04:23 ] >>343 お望みのことでなくて、恐縮ですけど、 60,000個のファイルから、それぞれ5行を別のエクセルファイルに コピーしていくと、300,000行になりますよ。 エクセルって、65,536行までないですけど... それに、何万行もあるファイルの操作は、それだけで、 処理がのろのろ...になるのは、避けようが無いと思ふ...
346 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:41:41 ] 大丈夫、今のExcelはもっと長い。 それはさておき、5行ずつ選択して選択範囲だけcsvで保存して、後でまとめてマージってのはどうだろう。
347 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 00:32:33 ] >>344 その可能性が高いとは思うのですが、どうも納得できない部分もあります。 具体的な原因をお教えいただけますか? >>345 私の説明が悪くて申し訳ないです。 実際には、5行分の内容を配列でまとめて、1行に流し込んでいます。 そのため、実際には1ファイル1行のサイズでコピーをしています。 ご指摘のあったとおり、確かに全てをコピーすると行が足りなくなる可能性が有ります。 私が欲しいデータは、全データ中の一番上と一番下の部分だけなので、 レスを頂いた後で、if文で一番上と一番下だけコピーするようにしたら、コピー行はほとんど無くなりました。 けれど、やはり1000ファイルを超えた当たりから、読み込みが遅くなり、 最期に読み込みエラーが出てきてしまいます。 >>346 おっしゃられるとおり、CSVにした方が良いのかも知れません。 とはいうものの、気になる問題が二つあります。 一つは、範囲指定をした上でCSV形式で保存する方法を私が知らないことと、 もう一つは、VBAでCSVファイルを大量に読み込んで加工できるかどうか、 また、数千ファイルを読み込んだ時点でエラーが発生するかも知れないという不安です。 難易度はどれくらいでしょうか?
348 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 01:23:02 ] >>347 ひとつのsheetにまとめるかわりにcsv形式でまとめる openとwrite使えばOK エラーの原因はリソースを食いつぶすからだろ おそらくこれでだいぶリソースの使用が減ると思うが 全部処理できるかはわからない
349 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 07:11:07 ] > 一つは、範囲指定をした上でCSV形式で保存する方法を私が知らないことと、 知らなければ勉強すればいいだけ。生まれたときからこの世の全てを知ってる人間なんて居ない。 > もう一つは、VBAでCSVファイルを大量に読み込んで加工できるかどうか、 問題ない。 以前約 6'140'000 個のcsvを扱ったことがある。(時間は掛かったけど、放置して置いたらエラーも出ずに無事完了) キミが扱う 60,000 個程度ならなんてことないはず。 当然csvはExcelにブックとして開かせるんじゃなくて、348も言ってるように直接ファイルにアクセスすること。 それについても解らなければ勉強しよう。 難易度は「入門者→初心者」の移行レベルくらい これが出来たら、VBA入門者(門を潜っただけ)ではなくVBA初心者(初歩的なことなら出来る)を名乗っても良い
350 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 10:13:29 ] >>343 newbookは開放してるけど、wb2やws2は開放しないのか?
351 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:34:56 ] Excel2003でユーザフォームをもちいて抽出フォームを作成しているのですが コマンドボタンを押すと 配列(多次元)のデータをユーザフォーム上に表示させるには どのパーツを使えばいいのでしょうか?
352 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:59:27 ] >>351 Grid系
353 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 21:42:18 ] >>352 Webで検索してもあまり情報が出てこないのですが オススメな参考書とかありますか?
354 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:01:16 ] >>351 listbox
355 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:21:22 ] >>348 >>349 レスをありがとうございました。 今日、超巨大書店でVBAの辞典を買って来て、OPENとかCSV形式での保存方法を勉強しました。 おかげさまで、今バックグラウンドでエクセルファイルをCSVファイルに変換するマクロ流してます。 23:15の時点で5,000ファイルほど変換できました。 変換スピードはあまり落ちていないので、余計なリソースを食うアプリを立ち上げないようにしておけば、 何とか最期まで行けるかも知れないと思い始めました。 で、今気がついたんだけど、エクセルのファイル数が実は600,000ファイルだったw ぶっ続けで処理を流しても4日位、電源OFFの時間を考えれば1週間位かかりそうです。 CSVファイルを読み込むのも出来ましたので、まだ問題はいくつか残ってますが、 何とか頑張れば出来そうな光明が見えてきました。 プライベートPC上でやっていると(今はホットゾヌ上から書いていますが)あちこちのアプリも重くなるので、 折を見て、変換&計算処理専用のマシンを購入した方が良いのかも知れないと思い始めました。 色々とヒントを下さって、ありがとうございました。
356 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:45:14 ] VBAはvariant使わずにきちんと宣言するのとしないのでは実行時間がかなり違ってくるよね。 膨大な処理をするときは1ファイルあたりの処理時間をきちんと計ってコードを組むとかなり早くなったよ。 10倍ぐらいは変わった。
357 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:06:57 ] Sub JoinTime() Cells(2, 3) = Cells(2, 1) & Text(Cells(2, 2), "hh:mm:ss") End Sub これを実行すると、 「コンパイルエラー::Sub またはFunctionが定義されていません。」 とエラーが出てしまいます。 どう対処すればよろしいでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:17:06 ] >>357 ↓を付け足す Function Text(a, b) Text = Format(a, b) End Function
359 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:25:40 ] >>358 できました。 すばやい、レスありがとうございました。
360 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:34:50 ] 超初心者の質問で申し訳ないです。。 VBAを使って、画面に表示された方向キー(↑↓←→)を押して、1分間にどれだけ成功できるか・・・ のような感じのゲームを作ることはできないものでしょうか? 頭の中でふと浮かんだのですが、プログラムを組もうとすると進めなくて困っています。 もしわかる方おりましたら、可能か不可能かだけでも結構ですので教えてくださいm(_ _)m
361 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:42:30 ] >>360 cgi30.plala.or.jp/chikada/vba/acd.shtml
362 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:48:41 ] >>361 誘導ありがとうございます。 スレ違いでした。失礼しました。
363 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 11:57:18 ] >>361 スレチだが、そこのCell雀の完成度の高さにびっくりした。
364 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:35:57 ] ExcelとVBAでマインスイーパー作ったりできますか
365 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:39:42 ] やる気と根気があればできるはず がんばれ
366 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:20:05 ] 暇で作った事あるけど同等のゲームならすぐ出来るよ。 UIまでコピーしようと思うとそれなりに大変だろうけど。
367 名前:デフォルトの名無しさん [2007/07/11(水) 00:10:18 ] >>339 excelをそのまま基幹で使う会社 なぞ、どうぞ逝ってくれ
368 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 18:47:02 ] medianをVBAで使ってたら特定の数列で無限ループしやがるorz しかも同じ数列単体で検証しても問題なし しょうがないからロジックくんだがこんな経験したことある人いる? XPでも2003でも再現した 数列ったってこんなんだぞ。0, 0, 0.6, 0
369 名前:デフォルトの名無しさん [2007/07/11(水) 21:55:59 ] 携帯から失礼します。 VBAはユーザーフォームを勉強し始めたレベルなのですが Win32 API の存在を知り、エラー音とかに使ってみたくなりました。 具体的にどのように記述すれば良いでしょう? ご教授いただけますか?
370 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:31:45 ] >>369 スレ違いもここまで来るか… pc11.2ch.net/test/read.cgi/tech/1181645965/ 嫌味ではなくVBAを勉強し始めたレベルでは意味不明だと思われ。 ざっと教授するだけで数百ページの本になる。
371 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:48:02 ] mciくらいならVBAでもすぐできるだろうに
372 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 23:10:39 ] ハマりました〜どなたか助けてください〜(´Д`;) 開発環境: Windows 2000, Excel 2000 要件: ダイアログ(フォーム)を使い、フォルダ名で、または新しいファイル名で、 後に使うファイル保存先パスを取得、変数に格納しておきたい。 追加事項: 保存先を指定してパスを取得するだけで、その時点ではファイルを開かない。 そこで、DialogオブジェクトやFileDialogについて調べているのですが… ・今一般的で情報の多いApplication.FileDialogは、2000にはないっぽい。 ・MSDNでは、Dialogオブジェクトについての説明が極端に少ないっぽい。 ・xlOpenFileでは、実現できないっぽい。xl〜定数は使えたり使えなかったり。 等などで、どっぷりハマッてしまいました。 タスケテー
373 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 23:28:36 ] >>372 ちょっと邪道だけどこんなのでどうかな? 動いたらBrowseForFolderのオプションは調べてくれ。 Dim Shell Dim Ret Set Shell = CreateObject("Shell.Application") Set Ret = Shell.BrowseForFolder(0, "選ばないか", 0) If Not Ret Is Nothing Then Debug.Print Ret.Items.Item.Path End If
374 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 11:54:13 ] ごめん 範囲Aと範囲Bの重なっているセルの取得って どうやるんだっけ? プロパティかなんかであった気がしたんだけど ヘルプ見てもみつからなかった(´・ω・`)
375 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 13:22:36 ] >>374 Intersect(範囲A,範囲B)
376 名前:374 mailto:sage [2007/07/12(木) 13:38:04 ] >>375 おぉありがとん(`・ω・´)
377 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:58:16 ] >>373 遅ればせながらレスありがd(・∀・) なんか、GetSaveAsFileNameっていうまんま直球どストレートな メソッド発見しますた〜お騒がせしました〜
378 名前:デフォルトの名無しさん [2007/07/12(木) 23:35:57 ] Sub Bound() ActiveSheet.UsedRange.Clear Columns("A:AO").ColumnWidth = 2 n = 1 Range("A1").Select Do While IsEmpty(ActiveCell.Offset(n, 0)) x = ActiveCell.Offset(n, 0).Row If x < 2 Or 30 < x Then n = -n For chien = 1 To 30 ActiveCell = "" ActiveCell.Offset(n, 0) = "○" Next chien ActiveCell.Offset(n, 0).Activate Loop End Sub 上下運動を2回繰り返して止めるにはどうしたらよいでしょうか? ご教授願います。
379 名前:デフォルトの名無しさん [2007/07/13(金) 00:11:06 ] exit do
380 名前:デフォルトの名無しさん [2007/07/13(金) 00:36:18 ] 378です。 どういう風に入れたら良いでしょうか? すみません、宜しくお願いいたします。
381 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:19:26 ] >>378 なにげに試したら楽しくなってきたので俺も適当に作ってみた 'API Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long) Const UpperBound As Long = 2 '1以下はエラー Const LowerBound As Long = 30 Const SleepTime As Long = 50 Const ico As String = "○" 'バウンドさせる文字 Const Col As Long = 1 '列(この辺は定数にしない方が斜めとかいけるから指定しない方が良さげ) Private Sub Down(ByVal Speed As Long) Dim r As Long For r = UpperBound To LowerBound Cells(r - 1, Col) = "" Cells(r, Col) = ico DoEvents Sleep SleepTime + Speed Next End Sub Private Sub Up(ByVal Speed As Long) Dim r As Long For r = LowerBound To UpperBound Step -1 Cells(r + 1, 1) = "" Cells(r, Col) = ico DoEvents Sleep SleepTime + Speed Next End Sub
382 名前:381の続き mailto:sage [2007/07/13(金) 02:33:11 ] Private Sub bound2() Dim BoundCount As Long For BoundCount = 1 To 10 Down -(BoundCount * 4) 'Downで表示されっばなのを削除 Cells(LowerBound, Col) = "" Up -(BoundCount * 4) 'Downで表示されっばなのを削除 Cells(UpperBound, Col) = "" Next End Sub updownの引数で加速と減速可能にっ! この調子でいけばブロック崩しとかできんのかね? で、378の質問に全く答えない俺w なんてのは可愛そうなんで、 >>380 上下した時に「1回上下したとカウント」して カウントが2になったらExit Doすればok どこで1回上下したかを判断する場所は 自分でコード組んだならわかるっしょ?
383 名前:デフォルトの名無しさん [2007/07/13(金) 09:46:41 ] >>381 さん・・・ >378です。 学校の課題で・・・ for nextを使用して動いたマス目で2回動いた事にしていたのですが、 それでは不十分と言う事で・・・(TT) 試行錯誤して早7日目・・・ どうしようもなく、皆様にお知恵を拝借しようとした次第です。 宜しければ教えて下さいませ。
384 名前:デフォルトの名無しさん [2007/07/13(金) 10:30:54 ] 不十分の意味がわからない、どうしたいんだ
385 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 11:28:40 ] >>383 >If x < 2 Or 30 < x Then n = -n 反転の判定をしている、ここで処理してもらいたかったんじゃないのか?
386 名前:384 [2007/07/13(金) 14:36:56 ] 俺は>>381 じゃないが、そういうことならこれで If x < 2 Or 30 < x Then n = -n: i = i + 1 If i > 3 Then Exit Do
387 名前:デフォルトの名無しさん [2007/07/13(金) 20:01:34 ] 会社での昼休み、 ウイルスバスターが動いててすごく重いけど、 どうしても直したいマクロがあって、開いていじってた。 PCがフリーズした。 PCの電源を切って再起動したら、マクロもろともExcelファイルが破損してた。 「アプリケーションの回復」でも回復できない、深刻な破損との事。修復不可能。 こういう時に限ってバックアップとってない。 マクロもエクスポートしてない。 仕方ないので、いちから作り直した。 バックアップは、きちんと取りましょうという教訓でした…
388 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 21:53:28 ] 教訓というか初心者以外では常識だよね というか、うちでは世代別バックアップを取るマクロをExcel起動と同時に自動で回しっぱなし \backup\yyyy_mm_dd\FileName\[yyyy_mm_dd-hh_mm__ss]FileName.xls にバックアップが自動保存され、前日以前の物があれば日付単位で個別圧縮(cab)して 退避ディレクトリにコピー、更に1週間以上前の物は退避ディレクトリの書庫は残して バックアップディレクトリのファイルは削除 ここまでは自動で、退避ディレクトリの書庫を定期的にメディアに焼くのだけは手動 まあメディアに焼いたところで、トラブル時もHDD上の1週間分だけで復旧は事足りることがほとんどだけどね
389 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 21:55:37 ] FolderShareをつかって他のパソコンと同期させておくだけでも最低限のバックアップにはなると思う。
390 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 22:24:26 ] 俺はソフトで差分バックアップしてる 重要なデータExcelだけじゃないし楽だし早い
391 名前:デフォルトの名無しさん [2007/07/13(金) 23:27:17 ] >>381 さん >>386 さん >378です。 ご教授頂き有難うございます。 >>386 さんのを使用して出させて頂きました。 有難うございました!
392 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 09:54:31 ] >>390 外部からだと作業の途中経過のバックアップは取れないからな 問題が起きたときに前回保存時まで戻されるのは勘弁してほしいってデータは 外部の汎用バックアップソフトではなく、内部のマクロで途中経過のバックアップを取った方がいい
393 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 12:56:32 ] バックアップとは言え、マクロ動かしっぱなしにしてたらメモリ食わない?
394 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 13:32:56 ] >>392 俺の使ってるソフト、圧縮機能はない www.forest.impress.co.jp/lib/sys/file/syncbackup/bunbackup.html 開いているファイルでもバックアップできるし作業途中で保存していればその分更新される Officeのように自動保存機能があるソフトならより万全 途中経過が保存される前にPC固まったら駄目だけど、そのマクロも同じだろ?
395 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 18:04:44 ] >>393 当然食うよ 搭載メモリ量の10000分の1以下だから気にならないけどね >>394 マクロの場合 > 作業途中で保存していれば なんて条件は付かない 保存もマクロでやるからね Officeの自動保存機能はバグあるし
396 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 10:15:02 ] VBA画面だとスクロールボタンが使えなくて不便だな。 ぐぐったら「Intelipoint 4.1を入れると直る」と出てきたけど、 うちのMicrosoftマウスはこのバージョンに対応してないしな。
397 名前:デフォルトの名無しさん [2007/07/16(月) 12:01:06 ] Excel2000のVBAプログラミングでウィザード形式のユーザーフォームって つくれますか? StarSuiteのBasicにはその仕様があるのですが、 VBAに関してはググってもなかなか直に解説してあるページがみつからなくて。 現在、同じサイズのユーザーフォームをいくつか用意してそれを順番に表示させる ことで「ウィザードもどき」にしているんですが・・・・
398 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 20:33:23 ] >>397 コンテナになるコントロール使えば良いだけの話 これで解らなければあとはVBAではなくVBの分野なので そっちの方向で勉強してね
399 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 00:11:19 ] >>398 どうも有難うございます。調べてみます。
400 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 10:11:14 ] 学校の課題で、セルA1〜A10 にそれぞれ10,20,30……100と表示し、その和をB1に表示するプログラムを作成せよ。 という課題が出て、試行錯誤してたのですが、詰まってしまいました。 ヒントとして、↓が出ていて、その通りにやったつもりなのですが、セルA1〜A10にはゼロしか出てこなくてorz 1.次元数10の配列を宣言し、Forループを利用して数値(10~100)を作成する。 2.Forループを利用して和を計算する 3.Forループを利用して数値(10〜100)を表示する。 4.和を表示する。 ↓がいま現在のプログラムです。 Sub 課題1() Const N = 10 Dim A(N) For T = 1 To 10 A(N) = A(T) * 10 Next T S = 0 For j = 1 To N S = S + A(j) Next j For C = 1 To 10 Cells(C, 1) = A(N) Next End Sub どなたかご教授願います。
401 名前:A(T) * 10じゃなくてT * 10 mailto:sage [2007/07/17(火) 10:40:03 ] >>400 それのどこがVBAの質問なのかと。basicの基本以下のレベルジャマイカ。
402 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 11:21:45 ] >>400 debug.printから出直せ。その方が君の為だ。
403 名前:>>401 それを指摘するならA(T) = T * 10だな mailto:sage [2007/07/17(火) 11:27:02 ] >>400 ループ制御変数と個数の定数が混在しているぞ。
404 名前:デフォルトの名無しさん [2007/07/17(火) 14:52:21 ] 最近の学校の課題はエクセルVBAをやらせるのか…。 >セルA1〜A10にはゼロしか出てこなくてorz ↑当たり前だ。403の名前欄を参照。 >Cells(C, 1) = A(N) ↑全部のセルに同じ値が出るに決まってるだろ。 まさかプログラマを目指してるとか言わないよな?
405 名前:400 mailto:sage [2007/07/17(火) 18:14:05 ] 400です。皆さんのレスを参考に17:00から試行錯誤し直してやっと完成したので報告します。 下のプログラムで表示させることができました。本当、ありがとうございました。 Sub 課題1() Const N = 10 Dim A(N) For T = 1 To 10 A(T) = T * 10 Next T S = 0 For j = 1 To N S = S + A(j) Cells(j, 1) = A(j) Next j S = 0 For c = 1 To N S = S + A(c) Cells(1, 2) = S Next c End Sub
406 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 18:19:26 ] Dim a(10) For i = 1 To 10 a(i - 1) = i * 10 Next s = a(0) For i = 2 To 10 s = a(i - 1) + s Next For i = 1 To 10 Range("A" & CStr(i)) = a(i - 1) Next Range("B1").Value = s
407 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:54:41 ] >>405 どう見てもこの後ループを纏めることになるので、先回りしておけ。
408 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 13:21:11 ] 開いていないファイルのセルデータをVBAで直接取得する方法ってありますか? 現状はセルに式を入力してから変数に代入、セルを削除 または該当ファイルを開いて取得、ファイルを閉じるみたいな感じです
409 名前:デフォルトの名無しさん [2007/07/18(水) 13:27:58 ] バイナリ解析して直接描くならひらかずにどうぞ
410 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 13:44:57 ] >>408 そのファイルがCSVならそれほど難しくないでしょう。
411 名前:408 mailto:sage [2007/07/18(水) 14:12:48 ] >>409 難しくて私には分かりません >>410 ファイルはCSVではなくEXCELブック形式です ファイルを開けば A = Workbooks(ファイル名).Sheets(シート名).Range(範囲) で取得できるのでどこかを少し弄ればどうにかなるのかなと思ったんですけど・・・
412 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 14:21:39 ] 内部的に開いていいなら(表示はしない)簡単だけど、全く開かずとなると無理っす バイナリ解析するにも先ずはファイルをOpenしないと始まらないし
413 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 16:03:15 ] >>412 どうやら無理そうですね 開かずに済むセルに入力して・・・ の方法で処理しようと思います ありがとうございました
414 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 18:48:05 ] >>408 VBAじゃないけど参照で良ければ。 ='c:\Documents and Settings\hoge\My Documents\[book1.xls]Sheet1'!a1 とか
415 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 20:21:15 ] >>413 VBA以前のExcel4マクロ(だっけ)なら簡単にできるはず。 Excelの関数と同じくVBAから使用することも可能 ヘルプは英語版ならMSから無料で落とせる。
416 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 20:29:52 ] とりあえずサンプル見つけたので>Excel4マクロ Cells(1, 1) = Application.ExecuteExcel4Macro("'C:\My Documents\[Book2.xls]Sheet1'!R1C1") ttp://oshiete1.goo.ne.jp/qa373903.html
417 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 21:21:50 ] そのExecuteExcel4Macro使う方法が>>412 も言ってる > 内部的に開いていいなら(表示はしない)簡単だけど の方法でしょ。でも、これだって開いてないわけではないので、この方法では嫌なんだとさ。 内部的に開いて良いなら他にもいくつか方法はあるんだけどね。 因みにExecuteExcel4Macroを使ってセルの値を取得する方法は かなり有名で解説サイトはいっぱいあるから英語版ヘルプなんて必要無いが 空セルを取得すると空文字やEmpty値ではなく0が返ってくるという不都合がある。 つまり、数値の0が入ってるセルと何も入ってないセルを区別出来ない。
418 名前:デフォルトの名無しさん [2007/07/18(水) 22:05:36 ] 皆さん、MSOfficeのスキル高そうですけど、関係する資格などはお持ちですか? 私の勤める会社は、持っている資格を全て棚卸して一覧にまとめよ、なんて御触れが出ました。 ひけらかしたい奴は全部書くし、変なプロジェクトに引っ張られたくない人は応分に隠し、 こんなに資格もってんならウチにいなくてもなんとかなるだろう、とリストラの対象になりたくない人は適当に描いていました。 スキルを保有するのはいいが、ヘタに見せると悪影響があるなんて、初めて知った2007年の夏でした。
419 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 22:11:08 ] >>417 > この方法では嫌なんだとさ。 たぶん内部的に開くの意味よくわかってないだけだと思うが >または該当ファイルを開いて取得、ファイルを閉じるみたいな感じです これが嫌なんだろう
420 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:00:30 ] VBAで配列の宣言時に初期化ってできないのですか? 下のようにできると聞いたのですが、実際やってみると「=」が駄目なのか コンパイルエラーになってしまいます。 Dim Moji() As String = {"ABC", "DEF", "GHI"}
421 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:37:15 ] VBならできるけどVBAは駄目です
422 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 11:03:09 ] そんなことはない
423 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 11:06:18 ] 正確にはVBの2002以降ね VBでもVB6では出来ないし、当然VB6準拠のVBAでも出来ない VB6で出来ることはコントロールと特殊なオブジェクト絡み以外ほとんどVBAでも出来るから問題ないが VB2002で大きく変わったので、VB2002以降用の解説読んでそれをVB6やVBAでやろうとして 出来なくて混乱しちゃう奴って結構居るみたいだね
424 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 11:13:42 ] Dim Moji() As Array("ABC", "DEF", "GHI")
425 名前:デフォルトの名無しさん[ mailto:sage [2007/07/19(木) 21:44:55 ] VB6でもArray使えば、配列の初期化できるのか。でも、多次元は無理なのかな
426 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:25:34 ] VBAでSub プロシージャでは値渡しも参照渡しもできるのですが Func プロシージャでは値渡ししかできません。参照渡しのやり方ってどうやるのでしょうか。
427 名前:デフォルトの名無しさん [2007/07/19(木) 23:29:02 ] ByVal?
428 名前:デフォルトの名無しさん [2007/07/19(木) 23:29:40 ] ごめんちがた
429 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:00:33 ] >>426 普通にできるだろ
430 名前:426 mailto:sage [2007/07/20(金) 00:25:26 ] ↓こんな感じの作ってやってみたけど、表示されるのは"A" ちなみにFunction→Subに変えたらちゃんと"B"が表示されます。 使い方がまずいのでしょうか? Sub test() Dim tmp As String tmp = "A" func1 (tmp) MsgBox tmp End Sub Function func1(ByRef tmp As String) tmp = "B" End Function
431 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:31:45 ] Sub test() Dim tmp As String tmp = "A" c=func1(tmp) MsgBox tmp End Sub Function func1(ByRef tmp As String) tmp = "B" End Function
432 名前:426 mailto:sage [2007/07/20(金) 00:45:38 ] >431氏の通りにしたらできました。 式にしないと駄目ということなんですかね。
433 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:46:22 ] func1 tmp
434 名前:429 mailto:sage [2007/07/20(金) 00:47:32 ] >>430 136 デフォルトの名無しさん mail:sage 2007/02/02(金) 00:10:24 > VBAは自分で作った関数を使う際、 > 引数にかっこをつけてはいかんのです。 ハズレ 自作関数の場合ではなく、基本的にSub、Functionプロシージャ(メソッド)を呼ぶ場合、 戻り値を取る場合とCallで呼ぶ場合以外は()を付けない。MsgBox関数の場合だとこんな感じで使う。 [1] MsgBox "test", vbOkOnly [2] Call MsgBox("test", vbOkOnly) [3] ret = MsgBox("test", vbOKCancel) 自作関数の場合でも戻り値を取る場合とCallで呼ぶ場合は()付けなきゃダメだし 自作関数じゃなくても、[1]のように使うときは()付けてはいかんのです。 ややこしいのは、引数一つの関数の場合。 [4] Inc hoge [5] Inc (hoge) Sub Inc(Value As Long) Value = Value + 1 End Sub [4]の方だと変数hogeが+1され、[5]の方だと変化しない。 引数一つの関数をCallを省略し引数に()を付けて呼ぶと、引数は値渡しになる。 基本的に参照渡し値渡しは呼び出される側で指定するので、[5]は殆ど使われない。 意味も知らずに間違って使ってる奴は居そうだけどな。。
435 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:12:19 ] 回答ありがとうございます。 VB独特の仕様なんで覚えるしかないみたいですね。 また間違えそう・・・
436 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:20:28 ] func(tmp) func (tmp) とは違うだろ 下はc=func((tmp)) のようなもの 上のような書き方は存在しない
437 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 02:51:18 ] >>430 引数に何もしなければ参照渡し ()でくくると値渡し Sub test() Dim tmp As String tmp = "A" func1 tmp MsgBox tmp End Sub Function func1(tmp As String) tmp = "B" End Function
438 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 06:55:09 ] つまり、外せる括弧は外せと言うことだな。
439 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:44:58 ] func1 -tmp としたら誰もtmpで値が受け取れるとは思わないだろ 同じことだよ
440 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 18:13:02 ] つまり、外せる演算子は外せと言うことだな。
441 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 01:49:28 ] エクセルの処理を一瞬だけ止める命令ってどんなのがありますか? 調べたところ、waitを使って、現在時間を調べてそこから1秒待ちをする、などは分ったのですが、 私がやりたいのは、コンマ1秒だけ処理を止めるというものをやりたいんです。 ですが、いまいちコンマ何秒だけ処理を一時停止させるという方法が分かりません。 初歩的な質問で申し訳ないのですが、教えていただけないでしょうか。
442 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 02:44:42 ] >>441 Win32APIのSleep使えばいいだけだよ _秒指定なので、コンマ1秒なら100_秒指定で
443 名前:441 mailto:sage [2007/07/22(日) 07:24:57 ] 解決しました。ありがとうございます。
444 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:21:00 ] 444
445 名前:初心者☆ [2007/07/22(日) 16:04:23 ] DataAdd関数のところで 「コンパイルエラー: SubまたはFunctionが定義されておりません」 と出るのですが、なぜエラーになるのかがわかりません。 わかる方おしえてください。 ちなみに、 DataAdd("d", data_length, Now) みたいなカンジで使ってます。
446 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 16:50:00 ] そんな関数あるのか?
447 名前:デフォルトの名無しさん [2007/07/22(日) 16:56:25 ] >>445 クリティカルで答えを言ってやる。おまいさんが参考している本が分かった DataAdd × DateAdd ○ こういうこった
448 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 17:10:15 ] 教えて下さい。 10品目 月の入荷から各個人に日々の払い出しを行い。 入荷数から払い出しを引いた在庫数がわかるようなマクロはどうすればいいでしょうか? シートを分けたいです。
449 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 19:24:12 ] エスパーじゃない普通の人間に判るように書け。
450 名前:デフォルトの名無しさん [2007/07/23(月) 14:55:39 ] VLOOKUPで検索して参照している値を変更したいのですが どうやったらいいのでしょう? ------------- 1 AAA 2 BBB 3 CCC 4 DDD ------------- 3 CCC ↑ 3って入力すると右にCCCって出てくる そのCCCをXXXって変えると元のデータのが 1 AAA 2 BBB 3 XXX 4 DDD ってなるようにしたいです。VBA使わないと出来ないですかね? なるべくExcel関数だけで作りたいのですが・・・
451 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:12:45 ] >>450 ここはVBAでやりたい人の為のスレだよ まあExcelの本スレにも書かれている通り、関数では値の書き換えは出来ないので どっちにしろVBAでやるしかないけどね
452 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 20:51:08 ] このスレ初めて見つけたときエクセルとVBAの質問スレだと思った。 スレタイいじったほうがいいんじゃないスかね
453 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 20:58:14 ] 板見りゃわかるっちゃわかるけど、スレタイだけ見るとそうだね。
454 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 21:53:41 ] まあExcelでプログラム技術系の話と言ったらVBAしか無いもんな
455 名前:デフォルトの名無しさん[ mailto:sage [2007/07/23(月) 22:05:50 ] バイナリファイルを作るマクロ作成したんですが 常に新規作成で作ることできますか? Open "ファイル名" For Binary As #1 ↑こんな感じで最初やってみたんですが、新規ファイルがある場合でも 単純に頭から上書きするみたいで困っています。
456 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 22:49:33 ] kill
457 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:12:51 ] >>454 いやいやExcelとプログラムを絡めるだけなら、 オートメーションで他言語から操作するなんてこともあるぞ。 まあその言語特有の事情を除けば、VBAでやるのと何も変わらないが。
458 名前:デフォルトの名無しさん [2007/07/23(月) 23:36:53 ] UserFormのUserForm_Initializeで変数と画面の 初期化をしていますが、ここのロジックを通ってUseeFormが 表示されたあと、画面をUnload Meしてブックを保存して閉じると、次回起動時に 「問題が発生したため、Microsoft Office Excelを終了します。 ご不便をおかけして申し訳ありません。」 と出て、強制終了してしまいます。 ただし、次の場合はエラーが出ずに起動できます。 ・保存せずに閉じた場合。 ・マクロを無効にして起動し、保存した場合(orしない場合) ・VBEを表示させて実行した場合。 デバッグしたらエラーにならず実行されるので、原因がつかめず困っています。 いろいろ手探りでやってみたところ、2回目の起動の時、 UseeFormにあるコントロールにアクセスすると落ちてしまうようです。 例えば、、 UserForm.lb_KUBUN.Caption = "" とか、 cb_Save.Enabled = True といった感じです。 UseeFormには200近いラベルがあります。 あとは22のフレームと、14のコマンドボタン、リストボックスとコンボボックスが1つずつで、 テキストボックスはありません。ブックの大きさは1Mくらいです。 Office Updateは最新状態にしてます。 最初は起動できるので、実行後の保存の時になんか悪いもんが残ったりしてるのかなぁという感じです。 みなさま、お心当たりあればどうぞご教示ください。
459 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:53:34 ] そのフォームをいい時と悪いときでエクスポートして比べてみたらいいんじゃ
460 名前:458 [2007/07/24(火) 00:24:55 ] エクスポートして比べてみたけど、同じでした。。
461 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 07:16:30 ] 最小限の再現出来るソースを出せ
462 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 23:45:28 ] 検索をするプログラムをもっと簡潔にしたいのですが。 いま2次元配列NK_ryuu(1 To 50, 1 To 15)で NK_ryuu(x.1)にID NK_ryuu(x.2)に項目A NK_ryuu(x.3)に項目B NK_ryuu(x.4)に項目C と入っていてxは1から50まであります。 ここであるシートの中から項目ABC全部を持っている行を抜き出すのですが、 今は下のようになっていてforとifを2重3重に使っていてちょっと見た目が汚いです。 しかも項目やxが増えた場合に処理がものすごい勢いで重くなりそうです。 もうちょっと賢いやり方ありませんでしょうか?お願いします。 配列honban()に取得した行番号を格納しています。
463 名前:462続き mailto:sage [2007/07/25(水) 23:46:08 ] Sub test() With ActiveSheet For x = 1 To 50 For i = 1 To 500 If .Cells(i, 2).Value = NK_ryuu(x, 2) Then If .Cells(i, 3).Value = NK_ryuu(x, 3) Then If .Cells(i, 4).Value = NK_ryuu(x, 4) Then honban(j) = i End If End If End If Next i Next x End With End Sub
464 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 08:24:32 ] すいません、質問をさせてください。 VBAではなく普通の関数なんですが、 3人の1ヶ月の勤務表があるとします。 A B C D E 1 Yさん Mさん Aさん 2 1日 0 2 休 3 2日 0 休 休 : : 31 30日 休 0 1 とした時、(勤務表の数字は出勤時間を意味しており、0が朝、1が昼、2が夕方から出勤) E列にその日の出勤が1人の場合のみ名前を出力するようにしたい場合、 現在は=IF(COUNT(B2:D2)=1,INDEX($B$1:$D$1,1,MATCH(0,B2:D2,0)),"") と入力しておりますが、 これを一つの関数で行うことはできるのでしょうか? VLookupの場合テーブルでないとエラーがでるので、 あれば教えていただけないでしょうか。 よろしくお願い致します。
465 名前:464 mailto:sage [2007/07/26(木) 08:31:02 ] 追記です。 出勤する人が1人の場合は、 必ず勤務は朝からになります。(勤務表には0が入ります。)
466 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 12:16:14 ] >>465 >464では何故いけないの? つーか、「1や2が存在しない」ことと「0の人の名前を得る」ことの 両方を同時に満足するような関数なんてあるわけないじゃん。
467 名前:デフォルトの名無しさん [2007/07/27(金) 01:13:41 ] VBAはいつまで存続するんでしょ
468 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 01:39:11 ] >>467 キミが痴呆になるまで
469 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:08:25 ] エクセルで、 テキストファイルの印刷 を実行する方法を 教えてくれませんか? pdfと同じようにシェルでやろうとしたらダメでしたorz
470 名前:デフォルトの名無しさん [2007/07/28(土) 19:38:44 ] Private Sub CommandButton1_Click() For i = 1 To 48 If Cells(1, 1) = Cells(i, 4) Then Cells(1, 2) = Cells(i, 5) If Cells(3, 1) = Cells(i, 4) Then Cells(3, 2) = Cells(i, 5) If Cells(5, 1) = Cells(i, 4) Then Cells(5, 2) = Cells(i, 5) If Cells(7, 1) = Cells(i, 4) Then Cells(7, 2) = Cells(i, 5) If Cells(9, 1) = Cells(i, 4) Then Cells(9, 2) = Cells(i, 5) If Cells(11, 1) = Cells(i, 4) Then Cells(11, 2) = Cells(i, 5) If Cells(13, 1) = Cells(i, 4) Then Cells(13, 2) = Cells(i, 5) If Cells(15, 1) = Cells(i, 4) Then Cells(15, 2) = Cells(i, 5) If Cells(17, 1) = Cells(i, 4) Then Cells(17, 2) = Cells(i, 5) If Cells(19, 1) = Cells(i, 4) Then Cells(19, 2) = Cells(i, 5) If Cells(21, 1) = Cells(i, 4) Then Cells(21, 2) = Cells(i, 5) If Cells(23, 1) = Cells(i, 4) Then Cells(23, 2) = Cells(i, 5) Next End Sub セルの値があらかじめ用意しているリストのと一致すると、 特定の文字を入力しようと こういうのを作りました で、うまくいったのですが、 これだとそれぞれ1つのセルにしか記入できません。 たとえば1列目で、Cells(1, 3)にも何か書きたい場合はどうしたらよいでしょうか? 質問の意味が分かりづらかったらスマソ
471 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 19:48:59 ] For i=1 To 48 For m=1 To 12 j=2*m-1 If Cells(j,1)=Cells(i,4) Then Cells(j,2)=Cells(i,5):Cells(j,3)="何か" Next Next
472 名前:デフォルトの名無しさん [2007/07/28(土) 19:53:23 ] >>471 速攻レスありがとうございます。 今仕事中でこっそり送信してるんで、時間ができたらやってみたいと思います。
473 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:18:42 ] 記法とかオブジェクトの基本的な質問がちょくちょく出てくるのを見るに VBAからプログラミングに入った人はある程度理解出来てきたなと思う頃 初心に返ってヘルプを一通り眺めてみるのが良さそうだね。 ランゲージリファレンスのメソッド・キーワードあたりの意味が一通りわかった時とか、 ウォッチウィンドウの使い方を理解した時涙出そうになったのを思い出した。 チラ裏スマソ。
474 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:25:55 ] >>471 For m = 1 To 12 j = 2 * m - 1 ↓ For j = 1 To 23 Step 2
475 名前:デフォルトの名無しさん [2007/07/28(土) 21:10:24 ] 470ですが >>471 >>474 氏 サンクス 今やって見たら解決しました。 :(コロン)を使うというのを初めて知りました。 特に仕事でVBAが必要というわけではないので、1年に一回くらいしか使わないのですが たまに使うと初歩的なことも忘れてしまいます。 ちなみに競馬のデータ分析に使いましたw 1万レース近くあるのでVBAというかマクロというか分からんけど役に立ちます。
476 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 00:26:53 ] >>473 割と共感した
477 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:01:37 0] 0〜11までの数字をランダムに、かつかぶらないように代入したいんですが 以下のコードだと数字が代入されない場合があるんです。何が原因なんでしょう・・ __________________ n1k = Int(Rnd * 12) Do n2 = Int(Rnd * 12) Select Case n2 Case n1k Case Else n2k = n2 End Select Loop Until n2k = n2 Do n3 = Int(Rnd * 12) Select Case n3 Case n1k Case n2k Case Else n3k = n3 End Select Loop Until n3k = n3
478 名前:デフォルトの名無しさん [2007/07/29(日) 23:09:29 0] 書ききれないので・・実際はn8kまであります。
479 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:29:12 0] Empty = 0がTrueになるから。 その冗長的なコーディングにはやむを得ない事情があるの? あと抜粋でもせめて宣言部は書こうよ。
480 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:37:30 0] n*kが数値型変数やVariant型変数の場合 Int(Rnd * 12)の結果が0ならCase Elseでの代入を行わなくても「n*k = n*」がTrueになるからでは? そういうのは配列に順に数値を代入してからランダムソートするといいよ というか、そうするのが普通だろ
481 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:51:51 0] {0,1,2,3,4,5,6,7,8,9,10,11} {0,1,2,3,4,5,7,8,9,10,11} {0,2,3,4,5,7,8,9,10,11} {0,2,3,4,5,7,8,9,11} こういうイメージで配列を操作せよ
482 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:51:52 0] >>480 >>477 に便乗で悪いんだけど、 0〜11までの数字をランダムに、かつかぶらないように代入したい て時に俺は Dim RndNum As Long Dim NumCnt As Integer '抜き出す数字の個数 NumCnt = 3 Set Dic = CreateObject("Scripting.Dictionary") RndNum = Int(Rnd * 12) Dic.Add RndNum, RndNum Do While Dic.Count < NumCnt RndNum = Int(Rnd * 12) If Not Dic.Exists(RndNum) Then Dic.Add RndNum, RndNum End If Loop みたいなやりかたするんだけどダメ?
483 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:40:48 ] ダメではないけどDictionaryなんて使う必要ない
484 名前:482 [2007/07/30(月) 01:43:37 ] >>483 そか。 ちとランダムソートについて調べてみるよ レスさんくす
485 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:31:58 ] 全然詳しくないので質問させてください。 いつも仕事中にWebばかり見てる派遣クンが 「VBAがプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」 と言っています。 彼のVBAプログラムが動かないのを調べるのは誰の仕事でしょうか?
486 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:39:18 ] プログラムが失敗作と確定してるのだったら そういうやつは辞めてもらえ
487 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 03:17:02 ] >>485 契約内容に因る 派遣ではなく業務請負なら間違いなくそれも彼の仕事のうちだけどね 一般的にはその派遣クンが悪いように見る人が多いかも知れないけど 契約内容によっては正しいことを言ってるかも知れない それとこの質問において「Webばかり見てる」なんて情報は全く持って不要 彼の印象をなるべく悪くしようとしているようで浅ましい限りだ
488 名前:デフォルトの名無しさん [2007/07/30(月) 10:34:02 ] vba おすすめ参考書は?
489 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:54:34 ] 参考書とは言えないかもしれんが 「Excel VBA 実用サンプルコレクション」 異常にオブジェクト偏重なサンプル集だけどこの考え方は持っておくべきだと思う。 完全な入門ならちょっと敷居が高すぎるだろうけどね。 >>485 って日本語の問題?動く物を作れで終了なんじゃw
490 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:59:21 ] セル範囲を画像化して保存する方法はありますでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:29:53 ] あるよ
492 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:57:49 ] 素人な聞き方でスマソ たとえば、 セルD1に「=A1&B1&C1」と入力したら「あいう」と表示されるとします。 (A1, B1, C1 にそれぞれ、あ、い、う が入っている) セルD1 をセルD2に、paste spacial → values(*英語エクセルです)で コピペしたら、セルD2には「あいう」というテキストが入ります。 このpaste spacial → values の作業を省略できるような関数があったら教えてください。 例えば、A1の値を「わ」に変えるだけで、自動的に 「わいう」というテキストの入ったセルを ゲットできるようにしたいのです。
493 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:07:07 ] 質問させてください。 UserForm上にComboBoxを配置して Initializeで初期値とRowsourseによってリストを与えるようにしています。 ComboBoxのリストを開くと最初は一番上のリストの値から順に表示され、 一度リストから値を選択してComboBoxに入れ、 再度リストを開くとその値があらかじめ選択されており、 その値の前後が表示されるようになってます。 ( 1 〜12月がリストにあり、5月を選び再度リストを開くと 5月が選択された状態で リストをスクロールせずとも 3〜 7月の値が選択可能な範囲にある ような状態です。) 最初からComboBoxの初期値の付近のリストを表示させるようにしたいのですが、 方法はありますでしょうか? 説明が不十分で分かりにくいかと思いますが、宜しくお願いします。
494 名前:492 mailto:sage [2007/07/30(月) 23:19:05 ] 自己解決しそうです。 PASTE.SPECIAL 関数っていうのがあるみたいですね。 でも手元にある 2003 のエクセルにはないみたいですが・・・ 調べてみます。
495 名前:492 mailto:sage [2007/07/30(月) 23:27:31 ] やっぱり分からなかった。 たぶんマクロでやるんですかね。素人レベルには難しいことならば諦めます。
496 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:28:20 ] Private Sub UserForm_Initialize() ComboBox1.Value = "5月" End Sub
497 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:30:30 ] >>496 ただ単にValueで値を持たせてもできないのですが・・
498 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:31:24 ] >>492 d2に=d1じゃだめなん?
499 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:34:48 ] >>497 五月になってない?
500 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:43:09 ] >>499 正確には1〜12の値のみで初期値に5を入れて ComboBoxの値は5になっている状態でリストを見ても 1(リストの一番上の値)から5くらいまでが表示された状態になってます。 要は値は入っていてもリスト上は何も選択されていない状態です
501 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:45:30 ] >>500 それは値は入っていても値は入っていない状態だからお手上げだな
502 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 23:55:44 ] >>501 お手上げですか なにか手はないものでしょうか・・
503 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:03:14 ] >>498 はい。 家計簿を作ってるんですが、 1〜12月までの費目別合計の推移を DSUM 関数で出しています。 =DSUM('1'!A:H,'1'!F1,分類!A1:A2) ←1月 =DSUM('2'!A:H,'2'!F1,分類!A1:A2) ←2月 =DSUM('3'!A:H,'3'!F1,分類!A1:A2) ←3月 (以下12月までつづく) >>492 の例に当てはめると、セルD1に =DSUM('1'!A:H,'1'!F1,分類!A1:A2) と表示されています。 この数式を使えるようにするために、paste spacial → values の作業をしています。 「A1:A2」の部分だけを何度も変更できるように、 セルD1は複数のセルを&でつないでおり、「A1:A2」の位置には特定のセルを指定し、 そのセルに好きなセル範囲を書くだけでいいようにしています。
504 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:16:55 ] >>502 Private Sub UserForm_Activate() Me.ComboBox1.DropDown Me.ComboBox1.Value = 5 End Sub こうゆうこと?
505 名前:503 mailto:sage [2007/07/31(火) 00:51:56 ] 当初考えていたやり方じゃないけど解決しました。 有難う御座いました。
506 名前:デフォルトの名無しさん [2007/08/01(水) 13:38:16 ] Excelからメールを送ろうとCDOで組んだのですが宛先があっていれば普通に送れるのですが、アドレスが間違っていて存在しないアドレスに送っていてもエラーが帰ってきません。 このエラーを得る方法はありますか?
507 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 18:43:08 ] あります でもExcelの話じゃないので、ここでは聞かないでね
508 名前:デフォルトの名無しさん [2007/08/01(水) 19:06:24 ] CSVをADOの「Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=〜」で扱うのは office2000以上だと標準で利用できますか? 参照設定の設定も不要でいいんでしょうか?
509 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 19:07:12 ] 当然参照設定は必要
510 名前:デフォルトの名無しさん [2007/08/01(水) 19:15:24 ] >>509 マジ?なんも設定しなくても使えたんだけど・・・ ちなみに何を設定すればいいんですか?
511 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 19:18:37 ] もしかしてCreateObjectで参照してる?
512 名前:デフォルトの名無しさん [2007/08/01(水) 19:28:25 ] Private Sub CommandButton1_Click() Set rs = CreateObject("ADODB.Recordset") Con = "" Con = Con & "Driver={Microsoft Text Driver (*.txt; *.csv)};" Con = Con & "DBQ=C:\Documents and Settings\Administrator\デスクトップ\新しいフォルダ;" strSQL = "select * from test.csv" rs.Open strSQL, Con, 0 '0=adOpenForwardOnly cols = rs.Fields.Count Do Until rs.EOF Line = "" For i = 0 To cols - 1 Line = Line & rs(i) & vbTab Next Debug.Print Line rs.MoveNext Loop End Sub
513 名前:デフォルトの名無しさん [2007/08/01(水) 19:29:32 ] こんなん書いて 今家でも試したけど出来た CreateObjectだね CreateObjectだと参照設定しなくても出来るということでおk?
514 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:05:43 ] >>506 www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html ググったら見つけました
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あるから同じように書ける