[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



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

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

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
どう見てもこの後ループを纏めることになるので、先回りしておけ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef