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


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

Excel VBA質問スレ Part13



1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/

313 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:03:54 ]
外部にproxy用意して色んなIPから接続してやるのが定番

314 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:11:35 ]
外部にボットを用意して色んなPCから接続してやるのはどうでしょうか。

315 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:41:52 ]
ボットってか
もう
googleを攻撃しないであげて

316 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 13:47:02 ]
なるほど良く考えたらスクリプトアタックか

317 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 14:58:17 ]
OS:XP EXCEL2003、2007にて
Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。

318 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 18:03:21 ]
VBAとどのような関係が?

319 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:53:16 ]
>>318
VBAでそのキーを押した際の処理を無効化したいんでしょ。

320 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:27:48 ]
フックは簡単にできるでしょ。

と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。

321 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:20:20 ]
カーネルに入ってなかったっけか。



322 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:23:40 ]
結構前まではAPIの話題が出ただけで拒否反応する人はいたな
ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ

323 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:30:41 ]
グーグルって自分ではロボットつかいまくってるのに自分には使わないでというのは
やっぱりおかしいわ

324 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:39:10 ]
>>323

325 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:25:15 ]
XP SP3
EXCEL2002

現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?


326 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:57:05 ]
VBAでTCP/IPって話は難しいとおもうが
VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う

327 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:17:36 ]
>325
ショートカットアイコンは
何処へのどんなショートカットなの?

サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?

328 名前:デフォルトの名無しさん [2009/10/16(金) 20:48:18 ]
質問させてください。

Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?

任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。

myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"

の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?

よろしくお願いします。

329 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:38:56 ]
>>328
残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。

330 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:41:08 ]
>>328
目的によってはDictionaryオブジェクトが使える場合もある

331 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:49:56 ]
System.Collections.ArrayList



332 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:03:32 ]
配列がとても大きくて順次比較していては時間がかかるって言う事なら
配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる

333 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:08:25 ]
ハイルデータが固定で数が多くないとか、なら連想配列だろうなあ
データ入力時に連想セットできたりするかね

334 名前:328 mailto:sage [2009/10/16(金) 22:37:34 ]
回答ありがとうございます。

フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。

インデックス番号を取得してFor〜Nextの初期値と最終値にしたか
ったので質問させていただきました。

対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。

ありがとうございました。

335 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:07:18 ]
>>334
要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。



336 名前:325 mailto:sage [2009/10/17(土) 10:22:18 ]
>>326
D&D相当の作業、是非教えて頂きたいです。

>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・

337 名前:327 mailto:sage [2009/10/17(土) 11:16:11 ]
>>336
「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも

FileCopyは
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど

サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....

338 名前:337 mailto:sage [2009/10/17(土) 11:19:58 ]
あっチョット訂正

FileCopyの構文で 最後の " が抜けてた
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗

339 名前:325 mailto:sage [2009/10/17(土) 14:59:31 ]
>>337-338
パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。

あと、補足ですがサーバはSharePointのワークグループです。



340 名前:327 mailto:sage [2009/10/17(土) 15:16:03 ]
>>339
プロトコルがhttpなら
>>337の方法は使えないね

341 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:01:58 ]
createobject("shell.application").namespace("http://サーバ名/フォルダ名").copyhere "c:\temp\test.txt"



342 名前:325 mailto:sage [2009/10/17(土) 17:12:19 ]
>>340
やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。

>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ

343 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:35:43 ]
CreateObject("WScript.Network").MapNetworkDrive "Z:", "http://サーバ名/フォルダ名"
FileCopy "c:\temp\test.txt", "z:\test.txt"

344 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:43:22 ]
>>341
非同期なのかも
msgbox "ちょいと待つ"

345 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:50:48 ]
>>339
sharepointはブラウザ上でみるとhttp://〜のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://〜のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\〜だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも

346 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:54:53 ]
excel2007です

vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?

ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。


347 名前:346 mailto:sage [2009/10/18(日) 12:04:34 ]
自己解決

Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 〜 65535 の範囲の値です。0 〜 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 〜 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。

とありました。スレ汚しすんません

348 名前:デフォルトの名無しさん [2009/10/18(日) 21:13:43 ]
VBA初めて作る初心者です。 土日をほぼ丸で使っても解決できませんでした。誰か助けてください。もしくは土日を返してくれ・・・。

目的 あるURLをIEで開き、全てを選択してエクセルに貼り付ける。



Sub ie_test_ExecWB()

Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "google.com"

Do While objIE.Busy = True
DoEvents
Loop

objIE.SendKeys "^a"
objIE.SendKeys "^c"


Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"

End Sub

実行すると、
実行時エラー’-2147417848(80010108)':オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
と表示されます。 objIE.SendKeys "^a"objIE.SendKeys "^c"
ではなく、objIE.ExecWB 17, 0 objIE.ExecWB 12, 0でもダメでした。

349 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:33:33 ]
ほれ土日だよ

350 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:25 ]
>>348
IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら

objIE.document.body.innerText

とすることで現在表示中のページのテキストを文字列として取得できる

351 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:44:59 ]
メッセージからすると
Do While objIE.Busy = True
でエラーになってて開けないんだろ



352 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:22 ]
>>348
ほい

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long

Sub ie_test_ExecWB()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.application")
  objIE.Visible = True
  objIE.Navigate "google.com"
  Do While objIE.Busy = True
    DoEvents
  Loop

  If SetForegroundWindow(objIE.hWnd) Then
    SendKeys "+{TAB}^a^c", True
  End If
  Set objIE = Nothing

  Range("A1").Select
  ActiveSheet.PasteSpecial Format:="HTML"
End Sub

353 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:35 ]
>>348
ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう


354 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:17:16 ]
月火だよー
火憐だぜ

355 名前:348 [2009/10/18(日) 22:21:19 ]
>>350~352

神々・・・!
ありがとうございます。

現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。

IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?

ちなみにVISTA,IE7,officeXPという環境です。


>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。

356 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:21:22 ]
>>352
>ほい
だってw

357 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:22:58 ]
保護モード Navigateでぐぐれ

358 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:33:05 ]
>>355
わざと後出ししたな

359 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:41:16 ]
Webクエリをマクロで記録は気に食わないのか?
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;www.google.co.jp", _
Destination:=Range("$A$1"))
.Name = "www.google.co.jp"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

360 名前:348 [2009/10/18(日) 22:41:33 ]
>>356
だめか?

>>357
保護モードを解除したがだめです。

>>358
すまん




361 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:45:47 ]
webbrowserコンポーネント使えば?



362 名前:348 [2009/10/18(日) 22:48:17 ]
金曜日の夜からVBAを触り始めまして、WEBクエリという単語は何度か目にしましたが
スルーしてました。

これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。

残り73分で!

363 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:03:06 ]
OSとIEのバージョンを後出しされてしまったでござるの巻

364 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:06:24 ]
> ちなみにVISTA,IE7,officeXPという環境です。

正直言おう
その環境を再現して動作確認するのが面倒

365 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:11:07 ]
VistaにIE7にOfficeXPって、わざといらない子ばかり集めて何してんの?何かの罰ゲーム?

366 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:17:04 ]
Webクエリで画像まで取り込む方法ってあったっけ?

367 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:31 ]
>>348
VBA初めて作る初心者です


初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い


むだ

368 名前:348 [2009/10/19(月) 00:29:41 ]
できた。

みんなありがとう

369 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:32:13 ]
シートにwebbrowser貼れば?

370 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:59:37 ]
>>368
できたら何がダメだったか原因書こうな
たとえショボミスでも、だ
同じ質問がきたときウザいだろ

371 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:03:39 ]
VBA使いの皆様へ

VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。



372 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:51:58 ]
hagedo

373 名前:325 mailto:sage [2009/10/19(月) 12:55:44 ]
>>343
ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。

>>341
やってみましたが、結果は変わらずでした。ありがとうございます。

>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://〜のままでした。

374 名前:デフォルトの名無しさん [2009/10/19(月) 13:33:05 ]
>>371
WorksheetFunction使えばいいやん

375 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:47:51 ]
userformを見えなくするのに

unload meと
userform1.hide

が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?

376 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 14:33:00 ]
>>375
hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去

377 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 16:21:50 ]
>>375
簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。

378 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:22:44 ]
>>376-377
ありがとです。

後で再利用するなら hide もう要らないなら unload ですね。

379 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:47:45 ]
unload 378

380 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:28:22 ]
>>379

379.visible = false

381 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:12:37 ]
ユーザーフォームを印刷しようと思ってるのですが、ユーザーフォーム自体のサイズが大きいのでA4のサイズに納まらずはみ出てしまいます…

A4サイズに縮小して印刷する方法はないでしょうか?

コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…



382 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:37:40 ]
>>373
いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。

383 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:43:01 ]
>>381
縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要

384 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:33:33 ]
excel2007

リストボックスに3列データを入れる事が出来るようになったとこなんですけど

(1) これタイトルみたいなのを付ける事は出来ないんですか?

コード  商品名  支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ

みたいな感じで。

(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?




385 名前:デフォルトの名無しさん [2009/10/19(月) 21:22:18 ]
【1 OSの種類      】 Windows XP SP2
【2 Excelのバージョン】 Excel2000
【3 VBAが使えるか  】 4日目 勉強中
【4 VBAでの回答の可否】 可
まだひよっこちゃんですが皆さんよろしくお願います。

マクロの勉強兼ね、エクセルでTOEICの単語帳を作ろうと思っています。
形としましては、
英単語および日本語訳をシートのA、B列に羅列し、
ユーザーフォームで、
英単語用のテキストBOX1、コマンドボタン1、
日本語用のテキストBOX2、コマンドボタン2
暗記済みのチェックボックスが3つ
という構成で、
コマンドボタン1を押すとランダムで英単語が選択され、テキストボックス1に表示
その状態でコマンドボタン2を押すとその訳がテキストボックス2に表示され、
暗記済みの時はチェックボックスにチェックをつけ、3つたまるとその単語は二度と出てこないようにしようと思います。
また、再度ファイルを開いても単語ごとに同じ状態が保存されているようにしたいと思います。

単語数が600あるという設定で、以下のように作ってみましたが、日本語訳表示の時点で詰まってしまいました。


386 名前:385 [2009/10/19(月) 21:24:01 ]
Private Sub UserForm_Click()
End Sub

Private Sub UserForm_Initialize()
End Sub

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 600
intmin = 1
TextBox1.Value = Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = TextBox1.Value.Offset(0, 1)
End Sub

CommandButton2 の TextBox2.Value = TextBox1.Value.Offset(0, 1)なんかは
明らかにおかしいかと思いますが、テキストボックス1に表示した、英単語をどのように返せばいいのでしょうか。
Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)を再度使うと、新たなランダム値を取得してしまうのですしょうか?
かなり初歩的かもしれませんが、紙にプリントしてさっさと単語覚えた方が早いんじゃないかと、焦ってきましたもんで
でも何とか完成させたいので、どなたか以下のいずれでもいいのでご教授ください。

・ランダム値が同じ順序ではなく、常に変化する方法
・チェックが各英単語ごとに反映させる方法
・そのチェックがファイルを閉じても保存される方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)

よろしくお願いします


387 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:56:18 ]
>>385
・ Cellsを使う時は、シートを指定したほうが良い

・テキストボックス2に日本語訳を返す為に
 英単語を表示する時に使用したセルの行位置を保存しておく
 →モジュールレベル変数を利用する

つー事で下記はいかが?

Private mRow As Integer

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 9
intmin = 1
mRow = Int((intmax - intmin + 1) * Rnd + intmin)
TextBox1.Value = Worksheets("sheet1").Cells(mRow, 1).Value
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = Worksheets("sheet1").Cells(mRow, 2).Value
End Sub

388 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:07:56 ]
今まで快適に使えていたエクセルファイルが、
突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。

・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
 (書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず



389 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:45 ]
特定ファイルだけ?
ハードディスクが死にかけてるとか

390 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:18:01 ]
ウィルスチェックoffにして開いてみれ

391 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:19:53 ]
他のファイルのシートと連動させてるようなのだと
ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい



392 名前:388 mailto:sage [2009/10/19(月) 22:54:19 ]
>389
特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。

>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。




393 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:22:01 ]
>>388
ここは Excel VBAスレなんでスレ的に考えると

VBAの処理が 異常に時間がかかってるのでは?
原因として
 ・VBAのコードを変更した為に 異常なループが発生した
 ・元々のVBAのコードにバグがあって あるデータの組み合わせで
  異常なループとなった
とか?

だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる

394 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:31:32 ]
>>392
ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ


395 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:46:05 ]
>>392
xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。

396 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:58:33 ]
>>391
そんな使い方しないよ。

397 名前:385 [2009/10/20(火) 00:54:42 ]
387さんありがとうございます。
値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。

残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。

ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません

チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?




398 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 01:21:27 ]
とりあえず出来る方法を思いついたなら、それでやればいい
その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ

399 名前:384 mailto:sage [2009/10/20(火) 08:16:29 ]
自己解決


(1) これタイトルみたいなのを付ける事は出来ないんですか?
フォームのリストボックスの上方にラベルを配置し、それをタイトルとするように
しました。

(2)code=Userform1..ListBox1.Text で選択したコードを拾う事は出来たんですが、
この例で商品名を拾うにはどのようにすれば良いのですか?

Dim n As Integer

n=UserForm1.Listbox1.ListIndex

xxx = ListBox1.List(n,0)
yyy = ListBox1.List(n,1)
zzz = ListBox1.List(n,2)


以上、スレ汚しでした


400 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 10:28:27 ]
あらあらこんなに汚しちゃうなんて……イヤラシイ子ね……フフフ

401 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:38:07 ]
ここに速度厨なんている?
俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw



402 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 19:25:43 ]
>>385
完成したらサンプル見せてください。お願いします。

403 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:14:22 ]
VBA勉強中の初心者です。
セルA1〜A10まで100
A11に1
この状態で1がある行番号を手に入れたいんですが
結果は2です。
どうやったら11を入手出来るんでしょうか?
Dim rng As Range
Set rng = ActiveSheet.Range("A1:A11").Find(1)
A = rng.Address
B = Rows(A)


404 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:21:06 ]
>>401
誰を煽ってるんだよw
唐突過ぎてわろたわ

405 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:49:07 ]
>>403
100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)

406 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:56:20 ]
Find関数はいろいろとバグがある。

407 名前:405 mailto:sage [2009/10/20(火) 22:08:06 ]
>>406
たしかに今回の場合だと
セルの表示形式を数値にすると ヒットしなくなるね

408 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:09:02 ]
たしかにオートフィルタとかのVBAの使い勝手がいい

409 名前:392 mailto:sage [2009/10/20(火) 22:43:00 ]
解決しました。
tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。

結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。

410 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:57:36 ]
>405
有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。

411 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:29:44 ]
特定の文字列にヒットする条件ならワークシート関数が強力だが
勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら



412 名前:405 mailto:sage [2009/10/20(火) 23:37:10 ]
>>410 & 411

>>411 の意見には賛成です
今回の場合は特に

>>410 の質問の回答ですが

Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です

それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど

413 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 07:11:50 ]
Findメソッドは基本的に文字列を検索するもんだ。
まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。






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

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

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